特徴選択とは、識別の前処理において与えられた特徴ベクトルから重要な要素のみを選択する処理のこと[1]。
特徴選択と特徴量抽出は異なることに注意。
特徴選択は与えられた特徴量ベクトルの中から重要な部分空間を取り出す。
これに対して、特徴量抽出は与えられた特徴量から新しい特徴量を作り出す。
特徴選択には以下のような効果がある。
- 学習時間の短縮化
- 過学習の軽減による汎化能力の向上
- モデルの説明力の向上
scikit learnに特徴選択を行う機能が提供されていたので、試してみた。様々な特徴選択アルゴリズムが用意されているが、今回はツリーベースの識別器を使った特徴選択を行った。
from sklearn import datasets from sklearn.ensemble import ExtraTreesClassifier from sklearn.cross_validation import train_test_split data = datasets.load_digits() X, y = data.data, data.target X = ExtraTreesClassifier().fit(X, y).transform(X); trainX, testX, trainY, testY = train_test_split(X, y, test_size=0.4) clf = ExtraTreesClassifier() clf.fit(trainX, trainY) print 'feature size =', trainX.shape[1] print 'test accuracy =', clf.score(testX, testY)上記のように、transformメソッドを使うことで特徴選択を行うことが出来る。
次に、特徴選択を行わない場合と行う場合の比較をしてみた。
Dataset「digits」を1000回ずつExtraTreesClassifierで識別した結果を以下に示す。
特徴選択無 | 特徴選択有 | |
特徴量次元数の平均 | 64.000 | 30.419 |
特徴量次元数の標準偏差 | 0.000 | 1.471 |
特徴量次元数の最小値 | 64.000 | 25.000 |
特徴量次元数の最大値 | 64.000 | 35.000 |
テスト識別率の平均 | 0.951 | 0.950 |
テスト識別率の標準偏差 | 0.00834 | 0.00821 |
テスト識別率の最小値 | 0.925 | 0.920 |
テスト識別率の最大値 | 0.978 | 0.972 |
参考
[1] Feature selection - Wikipedia, the free encyclopedia[2] 1.13. Feature selection — scikit-learn 0.16.1 documentation
0 件のコメント:
コメントを投稿