2013-01-03 2 views
15

나는 텍스트의 분류를 구축해야하고, 지금은 다음과 같이 선택에 기능을 TfidfVectorizer 및 SelectKBest을 사용하고 있습니다 :쇼 기능 이름은

vectorizer = TfidfVectorizer(sublinear_tf = True, max_df = 0.5, stop_words = 'english',charset_error='strict') 

X_train_features = vectorizer.fit_transform(data_train.data) 
y_train_labels = data_train.target; 

ch2 = SelectKBest(chi2, k = 1000) 
X_train_features = ch2.fit_transform(X_train_features, y_train_labels) 

내가 선택한 기능의 이름을 인쇄 할 (텍스트)를 선택한 후 K 최고의 기능을 수행 할 수있는 방법이 있습니까? 그냥 선택한 기능 이름을 인쇄 할 필요가 있습니다, 아마도 CountVectorizer를 사용해야합니까?

답변

15

다음은 작동한다 : 그들은 벡터화 된 한 경우

np.asarray(vectorizer.get_feature_names())[ch2.get_support()] 
9

는 @ ogrisel의 대답에 확장하려면, 기능의 반환 목록은 같은 순서입니다. 아래 코드는 Chi-2 점수에 따라 내림차순으로 정렬 된 최상위 순위 지형지 물 목록을 보여줍니다 (대응하는 P 값과 함께).

top_ranked_features = sorted(enumerate(ch2.scores_),key=lambda x:x[1], reverse=True)[:1000] 
top_ranked_features_indices = map(list,zip(*top_ranked_features))[0] 
for feature_pvalue in zip(np.asarray(train_vectorizer.get_feature_names())[top_ranked_features_indices],ch2.pvalues_[top_ranked_features_indices]): 
     print feature_pvalue 
관련 문제