Как узнать, какие слова использует обученный наивный классификатор Байеса для принятия решений? - PullRequest
1 голос
/ 30 мая 2020

Я создал наивный байесовский классификатор, который использует текст твитов от разных политиков для прогнозирования их партии. Я использовал реализацию sklearn MultinomialNB. Вот моя реализация:

Senators_Vectorizer = CountVectorizer(decode_error= 'replace')
senator_counts = Senators_Vectorizer.fit_transform(senator_tweets['text'].values)
senator_targets = senator_tweets['party'].values


senator_counts_train, senator_counts_test, senator_targets_train, senator_targets_test = train_test_split(senator_counts, senator_targets, test_size = .1)

senator_party_clf = MultinomialNB()
senator_party_clf.fit(senator_counts_train, senator_targets_train)

Как мне найти слова, которые наивный байесовский классификатор использует для прогнозирования? Есть ли способ определить, какие слова с наибольшей вероятностью присутствуют в твитах демократов / республиканцев?

Я хочу, чтобы вероятность каждого слова в Senators_Vectorizer не была от указанной стороны c.

1 Ответ

0 голосов
/ 30 мая 2020

Используйте атрибут feature_log_prob_ / coef_, чтобы получить вероятности для каждой функции.

Из документации :

feature_log_prob_ : ndarray формы (n_classes, n_features).
Эмпирическая логарифмическая вероятность признаков для данного класса, P (x_i | y).

coef_ : ndarray of shape (n_classes, n_features)
Зеркала feature_log_prob_ для интерпретации MultinomialNB как линейной модели.

Этот учебник может помочь .

Быстрый пример получения основных функций для каждого класса:

categories = ['alt.atheism', 'talk.religion.misc',
              'comp.graphics', 'sci.space']

newsgroups_train = fetch_20newsgroups(subset='train',
                                     remove=('headers', 'footers', 'quotes'),
                                     categories=categories)
vectorizer = TfidfVectorizer(stop_words='english')
vectors = vectorizer.fit_transform(newsgroups_train.data)
clf = MultinomialNB(alpha=.01).fit(vectors, newsgroups_train.target)


import numpy as np
def show_top10(classifier, vectorizer, categories):
    feature_names = np.asarray(vectorizer.get_feature_names())
    for i, category in enumerate(categories):
        top10 = np.argsort(classifier.coef_[i])[-10:]
        print("%s: %s" % (category, " ".join(feature_names[top10])))

show_top10(clf, vectorizer, newsgroups_train.target_names)

вывод:

alt.atheism: islam does religion atheism say just think don people god
comp.graphics: windows does looking program know file image files thanks graphics
sci.space: earth think shuttle orbit moon just launch like nasa space
talk.religion.misc: objective think just bible don christians christian people Jesus god
...