2016-07-26 56 views
0

我在SciKit-Learn中使用特徵選擇與管道組合。作爲特徵選擇策略,我使用SelectKBest訪問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) 

我知道,我可以通過cv.best_params_獲得最佳參數之後。然而,這隻告訴我k=4是最佳的。但我想知道這些功能是什麼?如何才能做到這一點?

回答

2

對於您的示例,您可以使用cv.best_estimator_.named_steps['feature_selection'].scores_獲得所有功能的分數。這將爲您提供所有功能的分數,並使用它們您應該能夠看到哪些是所選功能。同樣,你也可以通過cv.best_estimator_.named_steps['feature_selection'].pvalues_得到pvalues。

編輯

一個更好的辦法讓這將是使用SelectKBest類的get_support方法。這將給出一個形狀爲[# input features]的布爾數組,其中一個元素是True如果選中其對應的特徵用於保留。這將如下:

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

+0

不錯。所以如果'.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