首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sklearn.feature_selection chi2为不同的标签识别相同的单数和比例尺。

sklearn.feature_selection chi2为不同的标签识别相同的单数和比例尺。
EN

Stack Overflow用户
提问于 2020-06-18 08:21:23
回答 1查看 505关注 0票数 0

我一直在使用一个代码,这是我在网上发现的一个代码,它是使用https://towardsdatascience.com/multi-class-text-classification-with-scikit-learn-12f1e60e0a9f进行多分类的。我一直在使用自己的数据集,其中包含与仇恨言论相关的推文,无论如何,我一直在试图找出与我所拥有的每一个标签最相关的术语。标签被识别为非恨。我所得到的关于两个标签的最相关的单数和比格的结果是完全相同的。我只是想知道是怎么回事?我试过使用该网站提供的数据集,它在这方面工作得很好。

我的结果如下:

代码语言:javascript
复制
# 'Non-Hate':
  . Most correlated unigrams:
. idiot
. stupid
  . Most correlated bigrams:
. fucking idiot
. fucking bitch
# 'Non-Hate':
    . Most correlated unigrams:
. idiot
. stupid
  . Most correlated bigrams:
. fucking idiot
. fucking bitch

所用的代码是:

代码语言:javascript
复制
df['category_id'] = df['Code'].factorize()[0]
category_id_df = df[['Code', 'category_id']].drop_duplicates().sort_values('category_id')
category_to_id = dict(category_id_df.values)
id_to_category = dict(category_id_df[['category_id', 'Code']].values)
df.head()


from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer(sublinear_tf=True, min_df=3, norm='l2', encoding='latin-1', ngram_range=(1, 2), stop_words='english')
features = tfidf.fit_transform(df.Tweet).toarray()
labels = df.category_id
features.shape
from sklearn.feature_selection import chi2
import numpy as np
N = 2
for Code, category_id in sorted(category_to_id.items()):
  features_chi2 = chi2(features, labels == category_id)
  indices = np.argsort(features_chi2[0])
  feature_names = np.array(tfidf.get_feature_names())[indices]
  unigrams = [v for v in feature_names if len(v.split(' ')) == 1]
  bigrams = [v for v in feature_names if len(v.split(' ')) == 2]
  print("# '{}':".format(Code))
  print("  . Most correlated unigrams:\n. {}".format('\n. '.join(unigrams[-N:])))
  print("  . Most correlated bigrams:\n. {}".format('\n. '.join(bigrams[-N:])))
EN

回答 1

Stack Overflow用户

发布于 2020-06-18 14:48:20

只有两个类,它们应该是相同的。X-平方测试是寻找两个类之间最有区别(在某种意义上)的特征。您的引用是不同的,因为所使用的目标(labels == category_id)是一个1-VS-rest判别。对于这个类来说,一个非常表示不在类中的unigram/bigram仍然具有很高的chi2测试值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62445511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档