特徴選択の基本
メニューを表示するにはスワイプしてください
特徴選択は、最も関連性の高い特徴量のみを保持することでモデルのパフォーマンスを向上させ、複雑さを軽減し、無関係または冗長なデータによる過学習の防止に寄与。
特徴選択は、予測モデリングの課題に最も関連する入力変数(features)のサブセットをデータから選択するプロセス。
特徴選択手法には、手動によるレビューと自動化された技術が含まれる。分類タスクでは、統計的検定を用いて特徴量をスコア付けし、ターゲット変数と最も強く関連するものを選択。
最も一般的な特徴選択手法は、以下の3つのカテゴリに分類:
- フィルタ法:相関係数や単変量検定などの統計的指標に基づき、機械学習モデルとは独立して特徴量を選択;
- ラッパー法:予測モデルを用いて特徴量の組み合わせを評価し、最も良いモデル性能をもたらすサブセットを選択(例:再帰的特徴消去(RFE));
- 組み込み法:モデル学習プロセスの一部として特徴選択を実施。Lasso正則化のように、重要度の低い特徴量の係数をゼロに縮小することで自動的に除外。
各手法は、計算コスト、解釈性、予測力のトレードオフを考慮。
1234567891011121314151617181920212223242526import pandas as pd import seaborn as sns from sklearn.feature_selection import SelectKBest, f_classif from sklearn.preprocessing import LabelEncoder # Load Titanic dataset train = sns.load_dataset('titanic') # Select numeric and categorical columns (excluding target) features = ['pclass', 'sex', 'age', 'sibsp', 'parch', 'fare', 'embarked'] X = train[features].copy() y = train['survived'] # Encode categorical features X['sex'] = LabelEncoder().fit_transform(X['sex'].astype(str)) X['embarked'] = LabelEncoder().fit_transform(X['embarked'].astype(str)) # Handle missing values by filling with median (for simplicity) X = X.fillna(X.median(numeric_only=True)) # Select top 5 features based on ANOVA F-value selector = SelectKBest(score_func=f_classif, k=5) X_new = selector.fit_transform(X, y) selected_features = X.columns[selector.get_support()] print("Selected features:", list(selected_features))
この例では、Titanicデータセットから SelectKBest(scikit-learn)と f_classif スコア関数を使用して、最も関連性の高い5つの特徴量(pclass、sex、parch、fare、embarked)を選択します。この手法は、各特徴量をANOVA F値で個別に評価し、スコアが最も高いものを選びます。分類タスクにおいて、ターゲットクラスを最もよく分離する特徴量に注目するため、効果的です。
特に無関係な特徴量を多く選択しすぎると、過学習が発生しやすくなり、モデルは訓練データには高い精度を示しますが、新しい未知のデータにはうまく適応できなくなります。慎重な特徴量選択はこのリスクを低減し、より堅牢なモデルにつながります。
特徴選択は精度の向上だけでなく、モデルを高速化し、解釈しやすくする役割も持つ。最も重要な特徴のみに注目することで、モデルが簡素化され、データからノイズを学習するリスクが低減される。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください