2016-07-26 5 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_을 사용하여 모든 기능의 점수를 얻을 수 있습니다. 이렇게하면 모든 기능에 대한 점수가 주어지며 어떤 기능을 사용했는지 볼 수 있습니다. 마찬가지로 pvalues를 cv.best_estimator_.named_steps['feature_selection'].pvalues_까지 가져올 수도 있습니다.

편집

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'를 보면 다음과 같이 가정 할 수 있습니다. 가장 높은 값을 가진 피쳐가 선택 되었습니까? 이 올바른지? – beta

+0

나는 그것이 옳다고 생각한다. 답변에 대한 최신 편집 내용을 확인하십시오. 이것이 선택한 기능을 보는 가장 좋은 방법입니다. –

+0

대단히 감사합니다. 그 작품. – beta