2013-01-03 8 views
15

muszę zbudować klasyfikator tekstu, a teraz używam TfidfVectorizer i SelectKBest do wyboru funkcji, jak następuje:Pokaż nazwy funkcję po selekcji cech

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) 

chcę wydrukować wybraną nazwę funkcje (tekst) po wybraniu najlepszych cech K, czy jest jakikolwiek sposób to zrobić? Po prostu muszę wydrukować wybrane nazwy funkcji, może powinienem użyć CountVectorizera?

Odpowiedz

15

Poniższa powinno działać:

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

Aby rozwinąć na odpowiedź użytkownika @ ogrisel, zwracana lista funkcji znajduje się w tej samej kolejności, kiedy już wektorowy. Poniższy kod wyświetli listę najlepiej ocenionych funkcji posortowanych według ich wyników Chi-2 w porządku malejącym (wraz z odpowiednimi wartościami 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