Полагаю, вам нужно что-то вроде самых важных слов (или лучше токенов ), связанных с одним классом. Потому что обычно все токены так или иначе «связаны» со всеми классами. Поэтому я отвечу на ваш вопрос следующим подходом:
Предположим, ваши токены (или слова), сгенерированные TfidfVectorizer
, хранятся в X_train
с метками в y_train
, и вы обучили такую модель, как :
from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer()
X_train = vectorizer.fit_transform(corpus)
clf = LogisticRegression()
clf.fit(X_train, y_train)
Атрибут coef_
для LogisticRegression
имеет форму (n_classes, n_features) для мультиклассовых задач и содержит коэффициенты, рассчитанные для каждого токена и каждого класса. Это означает, что, индексируя его в соответствии с классами, можно получить доступ к коэффициентам, используемым для этого конкретного класса, например, coef_[0]
для класса 0
, coef_[1]
для класса 1
и т. Д.
Просто свяжите имена токенов с коэффициентами и отсортируйте их по их значению. Тогда вы получите самые важные жетоны для каждого класса. Пример получения наиболее важных токенов для класса 0
:
import pandas as pd
important_tokens = pd.DataFrame(
data=clf.coef_[0],
index=vectorizer.get_feature_names(),
columns=['coefficient']
).sort_values(ascending=False)
Токены в important_tokens
теперь отсортированы в соответствии с их важностью для класса 0
и могут быть легко извлечены с помощью значений индекса. . Например, чтобы получить n наиболее важных функций в виде списка: important_tokens.head(n).index.values
.
Если вам нужны наиболее важные токены для других классов, просто замените индекс coef_
атрибут по мере необходимости.