2013-01-03 9 views
15

Ho bisogno di costruire un classificatore per il testo, e ora sto usando TfidfVectorizer e SelectKBest alla selezione delle caratteristiche, come segue:funzione Mostra nomi dopo la selezione delle funzioni

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) 

voglio stampare selezionato nome caratteristiche (testo) dopo aver selezionato k le migliori caratteristiche, c'è un modo per farlo? Devo solo stampare i nomi delle funzioni selezionate, forse dovrei usare CountVectorizer invece?

risposta

15

Il seguente dovrebbe funzionare:

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

di espandere @ di ogrisel risposta, l'elenco restituito di caratteristiche è nello stesso ordine quando sono stati vettorizzate. Il seguente codice ti fornirà un elenco delle caratteristiche classificate in ordine in base ai punteggi Chi-2 in ordine decrescente (insieme ai corrispondenti valori 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 
Problemi correlati