2016-07-26 14 views
0

SciKit-Learnのパイプラインと組み合わせて機能選択を使用します。機能選択戦略として、私はSelectKBestを使用します。私はcv.best_params_を経由して、その後最高のパラメータを得ることができることを知っているSciKit-Learnの機能選択パイプライン後の実際の機能へのアクセス

select = SelectKBest(k=5) 
clf = SVC(decision_function_shape='ovo') 
    parameters = dict(feature_selection__k=[1,2,3,4,5,6,7,8], 
       svc__C=[0.01, 0.1, 1], 
       svc__decision_function_shape=['ovo']) 
steps = [('feature_selection', select), 
       ('svc', clf)] 
pipeline = sklearn.pipeline.Pipeline(steps) 
cv = sklearn.grid_search.GridSearchCV(pipeline, param_grid=parameters) 
cv.fit(features_training, labels_training) 

パイプラインは、次のように作成され、実行されます。しかし、これはk=4が最適であることだけを伝えます。しかし、私はこれらの機能を知りたいですか?これはどうすればできますか?

答えて

2

たとえば、cv.best_estimator_.named_steps['feature_selection'].scores_を使用すると、すべての機能のスコアを取得できます。これにより、すべての機能のスコアが表示され、どの機能が選択されているかを確認することができます。同様に、pvaluesをcv.best_estimator_.named_steps['feature_selection'].pvalues_で取得することもできます。

EDIT

SelectKBestクラスのget_supportメソッドを使用することですこれを取得するためのより良い方法。これは形状のブール値の配列[# input features]を与え、その対応する機能が保持のために選択されている場合、要素はTrueです。これは次のようになります。

cv.best_estimator_.named_steps['feature_selection'].get_support()

+0

niceです。たとえば、 '.scores_'の結果が '[891.65675063 952.43574853 739.36567492 913.33581205 753.59383098 910.65470991 867.7711945 469.26835899]'であり、' best_params_'から 'k = 4'を見ると、4最も価値の高い機能が選択されましたか?これは正しいです? – beta

+0

私はそれが正しいと思います。私の最新の編集内容を確認してください。それが、選択した機能を見る最善の方法です。 –

+0

すばらしい、ありがとう。それは動作します。 – beta

関連する問題