2

sklearnを使用して複数ラベルのデータセットを使用して機能を選択したいと思っています。最後に、のラベルにあるというラベルの最後のセットを取得したいのですが、別のマシンラーニングパッケージで使用します。私はhereの方法を使うつもりでした。これはラベルごとに関連する機能を別々に選択しています。sklearnを使用したマルチラベル機能の選択

from sklearn.svm import LinearSVC 
from sklearn.feature_selection import chi2, SelectKBest 
from sklearn.multiclass import OneVsRestClassifier 
clf = Pipeline([('chi2', SelectKBest(chi2, k=1000)), 
       ('svm', LinearSVC())]) 
multi_clf = OneVsRestClassifier(clf) 

私は、これを使用して、ラベルごとに、含まれる機能の指標を抽出することを計画:

selected_features = [] 
for i in multi_clf.estimators_: 
    selected_features += list(i.named_steps["chi2"].get_support(indices=True)) 

さて、私の質問は、私の最終的に含める機能を選択したどのように私は選びますか、ありますモデル?私はすべてのユニークな機能(1つのラベルにのみ関連する機能を含む)を使用することができました。または、より多くのラベルに関連する機能を選択するために何かを行うことができます。

最初のアイデアは、特定の機能が選択されたラベルの数のヒストグラムを作成し、目視検査に基づいてしきい値を特定することです。私の懸念は、この方法は主観的であるということです。 sklearnを使用してマルチラベルデータセットのフィーチャ選択を行うより原理的な方法がありますか?

答えて

1

での結論によると、このpaper

[...]平均またはすべてのラベル間で最大 カイ二乗スコアによると、最高の 分類しばらくのほとんどにつながったランクが特徴より少ない機能を使用します。

その後、機能の良いサブセットを選択するために、あなただけ(のようなもの)を行う必要があり、この:

from sklearn.feature_selection import chi2, SelectKBest 

selected_features = [] 
for label in labels: 
    selector = SelectKBest(chi2, k='all') 
    selector.fit(X, Y[label]) 
    selected_features.append(list(selector.scores_)) 

// MeanCS 
selected_features = np.mean(selected_features, axis=0) > threshold 
// MaxCS 
selected_features = np.max(selected_features, axis=0) > threshold 

注:I上記のコードではXが出力されていると仮定していますいくつかのテキストベクタライザー(テキストのベクトル化されたバージョン)とYはラベルごとに1つの列を持つパンダのデータフレームです(したがって、列Y[label]を選択できます)。また、あらかじめ固定する必要があるしきい値変数があります。

0

http://scikit-learn.org/stable/modules/feature_selection.html

は、多数のオプションがありますが、SelectKBestと再帰的機能の除去は2つの合理的に人気のあるものです。

RFEは、均一な特徴をモデルから除外し、再学習し、結果を比較することにより、最後に残った特徴が最良の予測精度を可能にするように機能する。

あなたのデータとユースケースに大きく依存しているのは、

フィーチャ選択のクロスバリデーションアプローチとして説明することはできませんが、より理論的なアプローチであり、複雑なものより単純なモデルを好む傾向があるベイジアンモデルの選択を見ることができます。

+0

私が理解するところでは、sklearnの機能選択方法はバイナリ分類子用です。個々のラベルごとに選択した機能を個別に取得することはできますが、私の質問は、原則的にすべてのラベルにわたって機能する最終的な機能を決定する方法です。 – user2589328

+0

私はあなたが何を意味しているか分かりません。たとえば、SelectKBestはモデルに依存しません。また、ドキュメントで最終的なフィーチャセットを取得する方法を示すRFEの例を見ることができます。 http:// scikit-learn。 さらに、入力から訓練されたベストフィーチャを選択するトランスフォーム機能を多く実装しています。 – Chris

+0

しかし、その最終的なフィーチャセットは1つのクラシファイア用です。バイナリ関連性メソッドはマルチラベル分類問題を一連のバイナリ分類に分解するので、最終的なフィーチャセットは自分の多くのラベルのうちの1つにしか対応しません。個々のラベルごとに機能選択方法によって返される機能セットがありますが、選択した機能を組み合わせてすべてのラベルで機能する機能セットを作成したいと思います。 – user2589328

関連する問題