Показать имена функций после выбора функции

Мне нужно создать классификатор для текста, и теперь я использую 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?

Ответы

Ответ 1

Следующее должно работать:

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

Ответ 2

Чтобы расширить ответ на @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