- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 機械学習/Pythonで説明変数を減らす へ行く。
- 1 (2017-09-05 (火) 15:08:40)
- 2 (2017-09-05 (火) 15:53:49)
- 3 (2017-09-05 (火) 19:44:28)
- 4 (2017-09-06 (水) 10:46:49)
- 5 (2017-09-13 (水) 14:59:26)
目次 †
はじめに †
前回、Pythonの機械学習ライブラリーscikit-learnを用いて、決定木による分類を行いました。
- Pythonで決定木を使う - とうごろうぃき
前回はすべての説明変数を用いて予測モデルを学習しましたが、実際のデータに対する分析では、予測に不要な説明変数が含まれていることや、説明変数が多すぎて予測モデルがうまく作れないことがあります。
ここでは、特徴を選択する方法について説明します。
環境やデータは前回と同じです。
特徴選択 †
分散が小さい特徴を削除する †
分散が小さい特徴は出力に影響を与えにくいので、分散が閾値よりも小さい特徴を削除し、残った特徴を選択します。
import pandas as pd df_iris_train = pd.read_csv('train.tsv', delimiter='\t', index_col=0) df_iris_test = pd.read_csv('test_X.tsv', delimiter='\t', index_col=0)
ここで、fsは特徴選択器を格納するための変数であり、feature selectorの略です。
単変量解析のスコアが低い特徴を削除する †
単変量解析を行って、スコアが低い特徴を削除し、残った特徴を選択します。
X = df_iris_train.drop('class', axis=1).values y = df_iris_train.class.values
ここで、k は選択する特徴の数です。 回帰問題の場合は、score_func オプションに 'f_regression' を指定します。
最も重要でない特徴を繰り返し削除する †
再帰的特徴削減 (Recursive Feature Elimination, RFE) という方法で、適切なサイズになるまで、最も重要でない特徴を一つずつ繰り返し削除し、残った特徴を選択します。 最も重要でない特徴を決めるために、学習器 estimator が必要です。
from sklearn.feature_selection import SelectKBest fs = SelectKBest(k=3) fs.fit(X, y) X_ = fs.transform(X)
ここでは、SVCを estimator として使っています。 n_features_to_select は選択する特徴の数です。
L1正則化を用いて特徴を削除する †
特徴に対する係数の絶対値が大きくなりすぎないようにペナルティを課す方法を正則化といい、L1正則化はかなり厳しいペナルティを課すことで係数をなるべくゼロにしてしまうというものです。 係数がゼロの特徴量はなくても構わないものなので、係数がゼロ以外の特徴を選択します。 L1正則化を行う学習器 estimator が必要です。
from sklearn.tree import DecisionTreeClassifier clf = DecisionTreeClassifier() clf.fit(X_, y)
ここでは、線形SVCを estimator として使っています。