Page List

Search on the blog

2015年5月5日火曜日

scikit-learn(4) Feature selection

 Feature selection(特徴選択)について学習した。

特徴選択とは、識別の前処理において与えられた特徴ベクトルから重要な要素のみを選択する処理のこと[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 件のコメント:

コメントを投稿