- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 sklearn 多项朴素贝叶斯分类器对 20NewsGroup 数据进行分类。代码如下:
import numpy as np
import operator
from sklearn import datasets, naive_bayes, metrics, feature_extraction
data_train = datasets.fetch_20newsgroups(subset = 'train', shuffle = True, random_state = 2016, remove = ('headers', 'footers', 'quotes'))
data_test = datasets.fetch_20newsgroups(subset = 'test', shuffle = True, random_state = 2016, remove = ('headers', 'footers', 'quotes'))
categories = data_train.target_names
target_map = {}
for i in range(len(categories)):
if 'comp.' in categories[i]:
target_map[i] = 0
elif 'rec.' in categories[i]:
target_map[i] = 1
elif 'sci.' in categories[i]:
target_map[i] = 2
elif 'misc.forsale' in categories[i]:
target_map[i] = 3
elif 'talk.politics' in categories[i]:
target_map[i] = 4
else:
target_map[i] = 5
y_temp = data_train.target
y_train = []
for y in y_temp:
y_train.append(target_map[y])
y_temp = data_test.target
y_test = []
for y in y_temp:
y_test.append(target_map[y])
count_vectorizer = feature_extraction.text.CountVectorizer(min_df = 0.01, max_df = 0.5, stop_words = 'english')
x_train = count_vectorizer.fit_transform(data_train.data)
x_test = count_vectorizer.transform(data_test.data)
feature_names= count_vectorizer.get_feature_names()
mnb_alpha_001 = naive_bayes.MultinomialNB(alpha = 0.01)
mnb_alpha_001.fit(x_train, y_train)
y_pred_001 = mnb_alpha_001.predict(x_test)
print('Accuracy Of MNB With Alpha = 0.01 : ', metrics.accuracy_score(y_test,y_pred_001))
以上代码可以很好地执行分类。此外,我想列出每个类别(类别 0 - 类别 5)中区分该类别与其他类别的 10 个最明显的词。
如果我只有 2 个类别(类别 0 - 类别 1),我可以使用 feature_log_prob_ 来比较对数概率,如下所示:
diff = mnb_alpha_001.feature_log_prob_[1,:] - mnb_alpha_001.feature_log_prob_[0,:]
name_diff = {}
for i in range(len(feature_names)):
name_diff[feature_names[i]] = diff[i]
names_diff_sorted = sorted(name_diff.items(), key = operator.itemgetter(1), reverse = True)
for i in range(10):
print(names_diff_sorted[i])
上面的代码将列出类别 1 中 10 个最可区分的词,以将其与类别 0 区分开来。问题是,如果我有 2 个以上的类别,我不能只简单地减去对数概率。
是否需要您的专家建议我如何执行此任务,以便在每个类别中获得 10 个最有区别的词?
非常感谢。
最佳答案
acc=[]
i=0
rr=[0.001,0.01,0.1,1,10]
for alp in [0,1,2,3,4]:
mnb = naive_bayes.MultinomialNB(alpha = alp)
mnb.fit(x_train, y_train)
y_pred = mnb.predict(x_test)
print('accuracy of Multinomial Naive Bayes for alpha ',rr[alp],'=', metrics.accuracy_score(y_test, y_pred))
acc.append(metrics.accuracy_score(y_test, y_pred))
import operator
pos,m = max(enumerate(acc), key=operator.itemgetter(1))
print("Max accuracy=",m," for alpha=",rr[pos])
for ss in [0,1,2,3,4,5]:
mnb = naive_bayes.MultinomialNB(alpha = rr[pos])
mnb.fit(x_train, y_train)
y_pred = mnb.predict(x_test)
acc[alp]=metrics.accuracy_score(y_test, y_pred)
feature_names = count_vectorizer.get_feature_names()
diff = mnb.feature_log_prob_[ss,:] - np.max(mnb.feature_log_prob_[-ss:])
name_diff = {}
for i in range(len(feature_names)):
name_diff[feature_names[i]] = diff[i]
names_diff_sorted = sorted(name_diff.items(), key = op.itemgetter(1), reverse = True)
for i in range(10):
print(ss,names_diff_sorted[i])
关于python - sklearn MultinomialNB 如何在类里面找到最有区别的词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35353150/
我觉得 for(int i = 0; i < 2; i++) 和 for(int i = 0; i < 2; ++i) 不应该做同样的事情。对于第二个例子,从循环开始 i 应该等于 1 对我来说更符合
我试图牢牢掌握异常情况,以便改进我的conditional loop implementation .为此,我进行了各种实验,扔东西,看看会被抓到什么。 这个让我惊喜不已: % cat X.hs mo
我只是想回答一个问题,但我遇到了一些我不明白的事情!为什么如果我在文件中使用内联 CSS 或 CSS,如本例中的颜色,结果就不一样! 代码相同,但第一段是绿色,第二段是红色! 我真的不明白为什么? 谢
我目前正在学习 CSS 并进行试验,我偶然发现了输出中的这种差异。所以这是代码: .red-text { color: red;
"""module a.py""" test = "I am test" _test = "I am _test" __test = "I am __test" ============= ~ $ p
在向 Firestore 写入文档时,我经常看到 serverTimestamp() 标记和 new Date() 对象之间的差异不为零。 差异范围从几 秒到几十 分钟。 他们不是在做同样的事情吗?
据我了解,2.675 和 numpy.float64(2.675) 都是相同的数字。然而,round(2.675, 2) 给出 2.67,而 round(np.float64(2.675), 2) 给
问题本身的描述很简单。我正在测试 C++11 中 std::thread 库和 boost::thread 库的区别。 这些的输出: #include #include #include int
我只是想将文本文件读入 pyspark RDD,我注意到 sqlContext.read.load 之间的巨大差异和 sqlContext.read.text . s3_single_file_inp
SC.exe 和 InstallUtil 都可以安装/卸载 Windows 服务。但它们的工作方式似乎并不相同。 有什么区别? 例如,InstallUtil 失败(找不到某些文件或依赖项错误),而 S
我认为Thread对象就像是带有名称和静态Thread.CurrentThread()的抽象对象,就像访问Thread对象的方式一样。显然,这是错误的假设。。是这样的吗?
我认为Thread对象就像是带有名称和静态Thread.CurrentThread()的抽象对象,就像访问Thread对象的方式一样。显然,这是错误的假设。。是这样的吗?
我是一名优秀的程序员,十分优秀!