Как получить наиболее информативные функции для scikit-learn classifier для разных классов?

Пакет NLTK предоставляет метод show_most_informative_features() чтобы найти наиболее важные функции для обоих классов, с выходом, например:

  contains(outstanding) = True pos : neg = 11.1 : 1.0 contains(seagal) = True neg : pos = 7.7 : 1.0 contains(wonderfully) = True pos : neg = 6.8 : 1.0 contains(damon) = True pos : neg = 5.9 : 1.0 contains(wasted) = True neg : pos = 5.8 : 1.0 

Как ответил в этом вопросе Как получить наиболее информативные функции для scikit-learn классификаторов? , это также может работать в scikit-learn. Однако для бинарного классификатора ответ в этом вопросе выводит только самую лучшую функцию.

Поэтому мой вопрос заключается в том, как я могу определить связанный с этим класс, как пример выше (выдающийся является наиболее информативным в pos-классе, а seagal наиболее информативен в отрицательном классе)?

EDIT: на самом деле то, что я хочу, это список наиболее информативных слов для каждого класса. Как я могу это сделать? Благодаря!

2 Solutions collect form web for “Как получить наиболее информативные функции для scikit-learn classifier для разных классов?”

В случае двоичной классификации кажется, что массив коэффициентов был сглажен.

Давайте попробуем переделать наши данные только с двумя метками:

 import codecs, re, time from itertools import chain import numpy as np from sklearn.feature_extraction.text import CountVectorizer from sklearn.naive_bayes import MultinomialNB trainfile = 'train.txt' # Vectorizing data. train = [] word_vectorizer = CountVectorizer(analyzer='word') trainset = word_vectorizer.fit_transform(codecs.open(trainfile,'r','utf8')) tags = ['bs','pt','bs','pt'] # Training NB mnb = MultinomialNB() mnb.fit(trainset, tags) print mnb.classes_ print mnb.coef_[0] print mnb.coef_[1] 

[вне]:

 ['bs' 'pt'] [-5.55682806 -4.86368088 -4.86368088 -5.55682806 -5.55682806 -5.55682806 -4.86368088 -4.86368088 -5.55682806 -5.55682806 -4.86368088 -4.86368088 -4.1705337 -5.55682806 -4.86368088 -5.55682806 -4.86368088 -5.55682806 -5.55682806 -5.55682806 -4.86368088 -4.45821577 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -5.55682806 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -5.55682806 -5.55682806 -5.55682806 -5.55682806 -4.45821577 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -5.55682806 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -5.55682806 -5.55682806 -5.55682806 -5.55682806 -5.55682806 -5.55682806 -5.55682806 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -5.55682806 -4.86368088 -5.55682806 -4.86368088 -5.55682806 -5.55682806 -4.86368088 -4.86368088 -4.45821577 -4.86368088 -4.86368088 -4.45821577 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -5.55682806 -5.55682806 -4.86368088 -5.55682806 -5.55682806 -4.86368088 -5.55682806 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -5.55682806 -5.55682806 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -5.55682806 -4.86368088 -5.55682806 -4.86368088 -5.55682806 -5.55682806 -5.55682806 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -4.86368088 -4.86368088 -4.1705337 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -4.86368088 -5.55682806 -5.55682806 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -4.45821577 -4.86368088 -4.86368088] Traceback (most recent call last): File "test.py", line 24, in <module> print mnb.coef_[1] IndexError: index 1 is out of bounds for axis 0 with size 1 

Итак, давайте сделаем некоторые диагностические операции:

 print mnb.feature_count_ print mnb.coef_[0] 

[вне]:

 [[ 1. 0. 0. 1. 1. 1. 0. 0. 1. 1. 0. 0. 0. 1. 0. 1. 0. 1. 1. 1. 2. 2. 0. 0. 0. 1. 1. 0. 1. 0. 0. 0. 0. 0. 2. 1. 1. 1. 1. 0. 0. 0. 0. 0. 0. 1. 1. 0. 0. 0. 0. 1. 0. 0. 0. 1. 1. 1. 1. 1. 1. 1. 1. 0. 0. 0. 0. 1. 1. 0. 1. 0. 1. 2. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 1. 1. 0. 1. 1. 0. 1. 0. 0. 0. 1. 1. 1. 0. 0. 1. 0. 1. 0. 1. 0. 1. 1. 1. 0. 0. 1. 0. 0. 0. 4. 0. 0. 1. 0. 0. 0. 0. 0. 1. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 1. 0. 0. 1. 1. 0. 0. 0. 0. 0. 0. 1. 0. 0. 1. 0. 0. 0. 0.] [ 0. 1. 1. 0. 0. 0. 1. 1. 0. 0. 1. 1. 3. 0. 1. 0. 1. 0. 0. 0. 1. 2. 1. 1. 1. 1. 0. 1. 0. 1. 1. 1. 1. 1. 0. 0. 0. 0. 0. 2. 1. 1. 1. 1. 1. 0. 0. 1. 1. 1. 1. 0. 1. 1. 1. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 1. 1. 0. 0. 1. 0. 1. 0. 0. 1. 1. 2. 1. 1. 2. 1. 1. 1. 0. 1. 0. 0. 1. 0. 0. 1. 0. 1. 1. 1. 0. 0. 0. 1. 1. 0. 1. 0. 1. 0. 1. 0. 0. 0. 1. 1. 0. 1. 1. 1. 3. 1. 1. 0. 1. 1. 1. 1. 1. 0. 1. 1. 1. 0. 1. 1. 1. 1. 1. 1. 0. 1. 1. 0. 0. 1. 1. 1. 1. 1. 1. 0. 1. 1. 0. 1. 2. 1. 1.]] [-5.55682806 -4.86368088 -4.86368088 -5.55682806 -5.55682806 -5.55682806 -4.86368088 -4.86368088 -5.55682806 -5.55682806 -4.86368088 -4.86368088 -4.1705337 -5.55682806 -4.86368088 -5.55682806 -4.86368088 -5.55682806 -5.55682806 -5.55682806 -4.86368088 -4.45821577 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -5.55682806 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -5.55682806 -5.55682806 -5.55682806 -5.55682806 -4.45821577 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -5.55682806 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -5.55682806 -5.55682806 -5.55682806 -5.55682806 -5.55682806 -5.55682806 -5.55682806 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -5.55682806 -4.86368088 -5.55682806 -4.86368088 -5.55682806 -5.55682806 -4.86368088 -4.86368088 -4.45821577 -4.86368088 -4.86368088 -4.45821577 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -5.55682806 -5.55682806 -4.86368088 -5.55682806 -5.55682806 -4.86368088 -5.55682806 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -5.55682806 -5.55682806 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -5.55682806 -4.86368088 -5.55682806 -4.86368088 -5.55682806 -5.55682806 -5.55682806 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -4.86368088 -4.86368088 -4.1705337 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -4.86368088 -5.55682806 -5.55682806 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -4.86368088 -5.55682806 -4.86368088 -4.45821577 -4.86368088 -4.86368088] 

Похоже, что функции подсчитываются, а затем при векторизации он сглаживается для сохранения памяти, поэтому давайте попробуем:

 index = 0 coef_features_c1_c2 = [] for feat, c1, c2 in zip(word_vectorizer.get_feature_names(), mnb.feature_count_[0], mnb.feature_count_[1]): coef_features_c1_c2.append(tuple([mnb.coef_[0][index], feat, c1, c2])) index+=1 for i in sorted(coef_features_c1_c2): print i 

[вне]:

 (-5.5568280616995374, u'acuerdo', 1.0, 0.0) (-5.5568280616995374, u'al', 1.0, 0.0) (-5.5568280616995374, u'alex', 1.0, 0.0) (-5.5568280616995374, u'algo', 1.0, 0.0) (-5.5568280616995374, u'andaba', 1.0, 0.0) (-5.5568280616995374, u'andrea', 1.0, 0.0) (-5.5568280616995374, u'bien', 1.0, 0.0) (-5.5568280616995374, u'buscando', 1.0, 0.0) (-5.5568280616995374, u'como', 1.0, 0.0) (-5.5568280616995374, u'con', 1.0, 0.0) (-5.5568280616995374, u'conseguido', 1.0, 0.0) (-5.5568280616995374, u'distancia', 1.0, 0.0) (-5.5568280616995374, u'doprinese', 1.0, 0.0) (-5.5568280616995374, u'es', 2.0, 0.0) (-5.5568280616995374, u'est\xe1', 1.0, 0.0) (-5.5568280616995374, u'eulex', 1.0, 0.0) (-5.5568280616995374, u'excusa', 1.0, 0.0) (-5.5568280616995374, u'fama', 1.0, 0.0) (-5.5568280616995374, u'guasch', 1.0, 0.0) (-5.5568280616995374, u'ha', 1.0, 0.0) (-5.5568280616995374, u'incident', 1.0, 0.0) (-5.5568280616995374, u'ispit', 1.0, 0.0) (-5.5568280616995374, u'istragu', 1.0, 0.0) (-5.5568280616995374, u'izbijanju', 1.0, 0.0) (-5.5568280616995374, u'ja\u010danju', 1.0, 0.0) (-5.5568280616995374, u'je', 1.0, 0.0) (-5.5568280616995374, u'jedan', 1.0, 0.0) (-5.5568280616995374, u'jo\u0161', 1.0, 0.0) (-5.5568280616995374, u'kapaciteta', 1.0, 0.0) (-5.5568280616995374, u'kosova', 1.0, 0.0) (-5.5568280616995374, u'la', 1.0, 0.0) (-5.5568280616995374, u'lequio', 1.0, 0.0) (-5.5568280616995374, u'llevar', 1.0, 0.0) (-5.5568280616995374, u'lo', 2.0, 0.0) (-5.5568280616995374, u'misije', 1.0, 0.0) (-5.5568280616995374, u'muy', 1.0, 0.0) (-5.5568280616995374, u'm\xe1s', 1.0, 0.0) (-5.5568280616995374, u'na', 1.0, 0.0) (-5.5568280616995374, u'nada', 1.0, 0.0) (-5.5568280616995374, u'nasilja', 1.0, 0.0) (-5.5568280616995374, u'no', 1.0, 0.0) (-5.5568280616995374, u'obaviti', 1.0, 0.0) (-5.5568280616995374, u'obe\u0107ao', 1.0, 0.0) (-5.5568280616995374, u'parecer', 1.0, 0.0) (-5.5568280616995374, u'pone', 1.0, 0.0) (-5.5568280616995374, u'por', 1.0, 0.0) (-5.5568280616995374, u'po\u0161to', 1.0, 0.0) (-5.5568280616995374, u'prava', 1.0, 0.0) (-5.5568280616995374, u'predstavlja', 1.0, 0.0) (-5.5568280616995374, u'pro\u0161losedmi\u010dnom', 1.0, 0.0) (-5.5568280616995374, u'relaci\xf3n', 1.0, 0.0) (-5.5568280616995374, u'sjeveru', 1.0, 0.0) (-5.5568280616995374, u'taj', 1.0, 0.0) (-5.5568280616995374, u'una', 1.0, 0.0) (-5.5568280616995374, u'visto', 1.0, 0.0) (-5.5568280616995374, u'vladavine', 1.0, 0.0) (-5.5568280616995374, u'ya', 1.0, 0.0) (-5.5568280616995374, u'\u0107e', 1.0, 0.0) (-4.863680881139592, u'aj', 0.0, 1.0) (-4.863680881139592, u'ajudou', 0.0, 1.0) (-4.863680881139592, u'alpsk\xfdmi', 0.0, 1.0) (-4.863680881139592, u'alpy', 0.0, 1.0) (-4.863680881139592, u'ao', 0.0, 1.0) (-4.863680881139592, u'apresenta', 0.0, 1.0) (-4.863680881139592, u'bl\xedzko', 0.0, 1.0) (-4.863680881139592, u'come\xe7o', 0.0, 1.0) (-4.863680881139592, u'da', 2.0, 1.0) (-4.863680881139592, u'decepcionantes', 0.0, 1.0) (-4.863680881139592, u'deti', 0.0, 1.0) (-4.863680881139592, u'dificuldades', 0.0, 1.0) (-4.863680881139592, u'dif\xedcil', 1.0, 1.0) (-4.863680881139592, u'do', 0.0, 1.0) (-4.863680881139592, u'druh', 0.0, 1.0) (-4.863680881139592, u'd\xe1', 0.0, 1.0) (-4.863680881139592, u'ela', 0.0, 1.0) (-4.863680881139592, u'encontrar', 0.0, 1.0) (-4.863680881139592, u'enfrentar', 0.0, 1.0) (-4.863680881139592, u'for\xe7as', 0.0, 1.0) (-4.863680881139592, u'furiosa', 0.0, 1.0) (-4.863680881139592, u'golf', 0.0, 1.0) (-4.863680881139592, u'golfistami', 0.0, 1.0) (-4.863680881139592, u'golfov\xfdch', 0.0, 1.0) (-4.863680881139592, u'hotelmi', 0.0, 1.0) (-4.863680881139592, u'hra\u0165', 0.0, 1.0) (-4.863680881139592, u'ide', 0.0, 1.0) (-4.863680881139592, u'ihr\xedsk', 0.0, 1.0) (-4.863680881139592, u'intranspon\xedveis', 0.0, 1.0) (-4.863680881139592, u'in\xedcio', 0.0, 1.0) (-4.863680881139592, u'in\xfd', 0.0, 1.0) (-4.863680881139592, u'kde', 0.0, 1.0) (-4.863680881139592, u'kombin\xe1cie', 0.0, 1.0) (-4.863680881139592, u'komplex', 0.0, 1.0) (-4.863680881139592, u'kon\u010diarmi', 0.0, 1.0) (-4.863680881139592, u'lado', 0.0, 1.0) (-4.863680881139592, u'lete', 0.0, 1.0) (-4.863680881139592, u'longo', 0.0, 1.0) (-4.863680881139592, u'ly\u017eova\u0165', 0.0, 1.0) (-4.863680881139592, u'man\u017eelky', 0.0, 1.0) (-4.863680881139592, u'mas', 0.0, 1.0) (-4.863680881139592, u'mesmo', 0.0, 1.0) (-4.863680881139592, u'meu', 0.0, 1.0) (-4.863680881139592, u'minha', 0.0, 1.0) (-4.863680881139592, u'mo\u017enos\u0165ami', 0.0, 1.0) (-4.863680881139592, u'm\xe3e', 0.0, 1.0) (-4.863680881139592, u'nad\u0161en\xfdmi', 0.0, 1.0) (-4.863680881139592, u'negativas', 0.0, 1.0) (-4.863680881139592, u'nie', 0.0, 1.0) (-4.863680881139592, u'nieko\u013ek\xfdch', 0.0, 1.0) (-4.863680881139592, u'para', 0.0, 1.0) (-4.863680881139592, u'parecem', 0.0, 1.0) (-4.863680881139592, u'pod', 0.0, 1.0) (-4.863680881139592, u'pon\xfakaj\xfa', 0.0, 1.0) (-4.863680881139592, u'potrebuj\xfa', 0.0, 1.0) (-4.863680881139592, u'pri', 0.0, 1.0) (-4.863680881139592, u'prova\xe7\xf5es', 0.0, 1.0) (-4.863680881139592, u'punham', 0.0, 1.0) (-4.863680881139592, u'qual', 0.0, 1.0) (-4.863680881139592, u'qualquer', 0.0, 1.0) (-4.863680881139592, u'quem', 0.0, 1.0) (-4.863680881139592, u'rak\xfaske', 0.0, 1.0) (-4.863680881139592, u'rezortov', 0.0, 1.0) (-4.863680881139592, u'sa', 0.0, 1.0) (-4.863680881139592, u'sebe', 0.0, 1.0) (-4.863680881139592, u'sempre', 0.0, 1.0) (-4.863680881139592, u'situa\xe7\xf5es', 0.0, 1.0) (-4.863680881139592, u'spojen\xfdch', 0.0, 1.0) (-4.863680881139592, u'suplantar', 0.0, 1.0) (-4.863680881139592, u's\xfa', 0.0, 1.0) (-4.863680881139592, u'tak', 0.0, 1.0) (-4.863680881139592, u'talianske', 0.0, 1.0) (-4.863680881139592, u'teve', 0.0, 1.0) (-4.863680881139592, u'tive', 0.0, 1.0) (-4.863680881139592, u'todas', 0.0, 1.0) (-4.863680881139592, u'tr\xe1venia', 0.0, 1.0) (-4.863680881139592, u've\u013ek\xfd', 0.0, 1.0) (-4.863680881139592, u'vida', 0.0, 1.0) (-4.863680881139592, u'vo', 0.0, 1.0) (-4.863680881139592, u'vo\u013en\xe9ho', 0.0, 1.0) (-4.863680881139592, u'vysok\xfdmi', 0.0, 1.0) (-4.863680881139592, u'vy\u017eitia', 0.0, 1.0) (-4.863680881139592, u'v\xe4\u010d\u0161ine', 0.0, 1.0) (-4.863680881139592, u'v\u017edy', 0.0, 1.0) (-4.863680881139592, u'zauj\xedmav\xe9', 0.0, 1.0) (-4.863680881139592, u'zime', 0.0, 1.0) (-4.863680881139592, u'\u010dasu', 0.0, 1.0) (-4.863680881139592, u'\u010fal\u0161\xedmi', 0.0, 1.0) (-4.863680881139592, u'\u0161vaj\u010diarske', 0.0, 1.0) (-4.4582157730314274, u'de', 2.0, 2.0) (-4.4582157730314274, u'foi', 0.0, 2.0) (-4.4582157730314274, u'mais', 0.0, 2.0) (-4.4582157730314274, u'me', 0.0, 2.0) (-4.4582157730314274, u'\u010di', 0.0, 2.0) (-4.1705337005796466, u'as', 0.0, 3.0) (-4.1705337005796466, u'que', 4.0, 3.0) 

Теперь мы видим некоторые шаблоны … Похоже, что более высокий коэффициент благоприятствует классу, а другой хвост – другому, поэтому вы можете просто сделать это:

 import codecs, re, time from itertools import chain import numpy as np from sklearn.feature_extraction.text import CountVectorizer from sklearn.naive_bayes import MultinomialNB trainfile = 'train.txt' # Vectorizing data. train = [] word_vectorizer = CountVectorizer(analyzer='word') trainset = word_vectorizer.fit_transform(codecs.open(trainfile,'r','utf8')) tags = ['bs','pt','bs','pt'] # Training NB mnb = MultinomialNB() mnb.fit(trainset, tags) def most_informative_feature_for_binary_classification(vectorizer, classifier, n=10): class_labels = classifier.classes_ feature_names = vectorizer.get_feature_names() topn_class1 = sorted(zip(classifier.coef_[0], feature_names))[:n] topn_class2 = sorted(zip(classifier.coef_[0], feature_names))[-n:] for coef, feat in topn_class1: print class_labels[0], coef, feat print for coef, feat in reversed(topn_class2): print class_labels[1], coef, feat most_informative_feature_for_binary_classification(word_vectorizer, mnb) 

[вне]:

 bs -5.5568280617 acuerdo bs -5.5568280617 al bs -5.5568280617 alex bs -5.5568280617 algo bs -5.5568280617 andaba bs -5.5568280617 andrea bs -5.5568280617 bien bs -5.5568280617 buscando bs -5.5568280617 como bs -5.5568280617 con pt -4.17053370058 que pt -4.17053370058 as pt -4.45821577303 či pt -4.45821577303 me pt -4.45821577303 mais pt -4.45821577303 foi pt -4.45821577303 de pt -4.86368088114 švajčiarske pt -4.86368088114 ďalšími pt -4.86368088114 času 

На самом деле, если вы внимательно прочитали комментарий @larsmans, он дал подсказку о коэффициенте двоичных классов в разделе « Как получить наиболее информативные функции для классификаторов scikit-learn»?

В основном вам нужно:

 def most_informative_feature_for_class(vectorizer, classifier, classlabel, n=10): labelid = list(classifier.classes_).index(classlabel) feature_names = vectorizer.get_feature_names() topn = sorted(zip(classifier.coef_[labelid], feature_names))[-n:] for coef, feat in topn: print classlabel, feat, coef 
  • classifier.classes_ обращается к индексу классов, которые у вас есть в классификаторе

  • vectorizer.get_feature_names() не требует пояснений

  • sorted(zip(classifier.coef_[labelid], feature_names))[-n:] извлекает коэффициент классификатора для данного метка класса и сортирует его по возрастанию.


Я собираюсь использовать простой пример из https://github.com/alvations/bayesline

Входной файл train.txt :

 $ echo """Pošto je EULEX obećao da će obaviti istragu o prošlosedmičnom izbijanju nasilja na sjeveru Kosova, taj incident predstavlja još jedan ispit kapaciteta misije da doprinese jačanju vladavine prava. > De todas as provações que teve de suplantar ao longo da vida, qual foi a mais difícil? O início. Qualquer começo apresenta dificuldades que parecem intransponíveis. Mas tive sempre a minha mãe do meu lado. Foi ela quem me ajudou a encontrar forças para enfrentar as situações mais decepcionantes, negativas, as que me punham mesmo furiosa. > Al parecer, Andrea Guasch pone que una relación a distancia es muy difícil de llevar como excusa. Algo con lo que, por lo visto, Alex Lequio no está nada de acuerdo. ¿O es que más bien ya ha conseguido la fama que andaba buscando? > Vo väčšine golfových rezortov ide o veľký komplex niekoľkých ihrísk blízko pri sebe spojených s hotelmi a ďalšími možnosťami trávenia voľného času – nie vždy sú manželky či deti nadšenými golfistami, a tak potrebujú iný druh vyžitia. Zaujímavé kombinácie ponúkajú aj rakúske, švajčiarske či talianske Alpy, kde sa dá v zime lyžovať av lete hrať golf pod vysokými alpskými končiarmi.""" > test.in 

Код:

 import codecs, re, time from itertools import chain import numpy as np from sklearn.feature_extraction.text import CountVectorizer from sklearn.naive_bayes import MultinomialNB trainfile = 'train.txt' # Vectorizing data. train = [] word_vectorizer = CountVectorizer(analyzer='word') trainset = word_vectorizer.fit_transform(codecs.open(trainfile,'r','utf8')) tags = ['bs','pt','es','sr'] # Training NB mnb = MultinomialNB() mnb.fit(trainset, tags) def most_informative_feature_for_class(vectorizer, classifier, classlabel, n=10): labelid = list(classifier.classes_).index(classlabel) feature_names = vectorizer.get_feature_names() topn = sorted(zip(classifier.coef_[labelid], feature_names))[-n:] for coef, feat in topn: print classlabel, feat, coef most_informative_feature_for_class(word_vectorizer, mnb, 'bs') print most_informative_feature_for_class(word_vectorizer, mnb, 'pt') 

[вне]:

 bs obećao -4.50534985071 bs pošto -4.50534985071 bs prava -4.50534985071 bs predstavlja -4.50534985071 bs prošlosedmičnom -4.50534985071 bs sjeveru -4.50534985071 bs taj -4.50534985071 bs vladavine -4.50534985071 bs će -4.50534985071 bs da -4.0998847426 pt teve -4.63472898823 pt tive -4.63472898823 pt todas -4.63472898823 pt vida -4.63472898823 pt de -4.22926388012 pt foi -4.22926388012 pt mais -4.22926388012 pt me -4.22926388012 pt as -3.94158180767 pt que -3.94158180767 
  • Как свернуть собственный оценщик в PySpark mllib
  • Использование файлов memmap для пакетной обработки
  • Как вычислить точность, отзыв, точность и f1-score для многоклассового футляра с помощью scikit?
  • Каковы подводные камни использования Dill для сериализации моделей scikit-learn / statsmodels?
  • Дисбаланс в scikit-learn
  • Что делать сначала: выбор параметра или настройка параметров модели?
  • Python: работа с cygwin работает, при запуске из PyCharm
  • ValueError: отрицательные размеры не допускаются
  •  
    Interesting Posts for Van-Lav

    Плагины обычно не работают, как мне отлаживать?

    Что такое __signature__ и __text_signature__, используемые в Python 3.4

    верните верхние n наиболее часто встречающихся символов и их соответствующие значения в python

    Как убить подпроцессы Django под управлением сценария bash?

    Есть ли способ проверить, содержат ли два объекта одинаковые значения в каждой из своих переменных в python?

    ТипNotFound: Тип не найден: (схема, http://www.w3.org/2001/XMLSchema,)

    Как рекурсивно пройти через все подкаталоги и прочитать файлы?

    Есть ли эквивалент Python для C ++ «multiset <int>»?

    python struct pack, отображающий ascii

    Как установить python-levenshtein в Windows?

    iPython (python 2) – ImportError: нет модуля с именем model_selection

    Случайное применение ошибки сегментации в функциях расширения python в c ++

    Можно ли использовать сжатие gzip с Server-Sent Events (SSE)?

    Переписывание потоков потокового трафика TCP / IP (уровень 4) (то есть сокета)

    Python – чтение csv и группировка данных по столбцу

    Python - лучший язык программирования в мире.