web-dev-qa-db-fra.com

Comment obtenir l'importance des fonctionnalités dans les bayes naïves?

J'ai un ensemble de données d'avis qui a une étiquette de classe positive/négative. J'applique Naive Bayes à cet ensemble de données d'avis. Premièrement, je me transforme en Sac de mots. Ici sorted_data ['Text'] est des critiques et final_counts est une matrice clairsemée

count_vect = CountVectorizer() 
final_counts = count_vect.fit_transform(sorted_data['Text'].values)

Je divise les données en train et en jeu de données de test.

X_1, X_test, y_1, y_test = cross_validation.train_test_split(final_counts, labels, test_size=0.3, random_state=0)

J'applique l'algorithme naïf bayes comme suit

optimal_alpha = 1
NB_optimal = BernoulliNB(alpha=optimal_aplha)

# fitting the model
NB_optimal.fit(X_tr, y_tr)

# predict the response
pred = NB_optimal.predict(X_test)

# evaluate accuracy
acc = accuracy_score(y_test, pred) * 100
print('\nThe accuracy of the NB classifier for k = %d is %f%%' % (optimal_aplha, acc))

Ici, X_test est un ensemble de données de test dans lequel la variable pred nous indique si le vecteur dans X_test est de classe positive ou négative.

La forme X_test est (54626 lignes, 82343 dimensions)

la longueur de pred est 54626

Ma question est que je veux obtenir les mots avec la plus grande probabilité dans chaque vecteur afin que je puisse savoir par les mots pourquoi il a prédit comme classe positive ou négative. Par conséquent, comment obtenir les mots qui ont la plus forte probabilité dans chaque vecteur?

7
merkle

Vous pouvez obtenir l'important de chaque mot du modèle d'ajustement en utilisant le coefs_ ou feature_log_prob_ les attributs. Par exemple

neg_class_prob_sorted = NB_optimal.feature_log_prob_[0, :].argsort()
pos_class_prob_sorted = NB_optimal.feature_log_prob_[1, :].argsort()

print(np.take(count_vect.get_feature_names(), neg_class_prob_sorted[:10]))
print(np.take(count_vect.get_feature_names(), pos_class_prob_sorted[:10]))

Imprime les dix premiers mots les plus prédictifs pour chacune de vos classes.

7
piman314

Essaye ça:

pred_proba = NB_optimal.predict_proba(X_test)
words = np.take(count_vect.get_feature_names(), pred_proba.argmax(axis=1))
0
MaxU