16

テキストの分類子を作成する必要があり、次のように 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 を使用する必要がありますか?

4

2 に答える 2

17

以下が機能するはずです。

np.asarray(vectorizer.get_feature_names())[ch2.get_support()]
于 2013-01-03T08:18:57.240 に答える
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
于 2013-01-25T05:07:29.967 に答える