目次

はじめに

前回、Pythonの機械学習ライブラリーscikit-learnを用いて、決定木による分類を行いました。

前回はすべての説明変数を用いて予測モデルを学習しましたが、実際のデータに対する分析では、予測に不要な説明変数が含まれていることや、説明変数が多すぎて予測モデルがうまく作れないことがあります。

ここでは、特徴を選択する方法について説明します。

環境やデータは前回と同じです。

特徴選択

分散が小さい特徴を削除する

分散が小さい特徴は出力に影響を与えにくいので、分散が閾値よりも小さい特徴を削除し、残った特徴を選択します。

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 として使っています。

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS