2013-01-03 138 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