我已经下载了流行的20个新闻组数据集,其中有20个类,但我想将整个文档重新分类为六个类,因为有些类非常相关。
因此,例如,所有与计算机相关的文档都应该有一个新的类说1.现在,文档从1-20分配,反映了类。计算机相关的类是2,3,4,5和6。
我想说,1是所有计算机相关的类(2,3,4,5,6)。我使用=TEXT(MAX(INDIRECT("C"&ROW(INDEX($A$2:$A$18,MATCH($F2,$A$2:$A$18,0)))&":C"&ROW(INDEX($A$2:$A$18,MATCH($F2,$A$2:$A$18,0)))+SUM(G2))),"MMMM YYYY")
测试了它,它给了我7.意思是0的文档类是7.
我使用20_newsgroups.target[0]
将其重新分配到新班级,当我尝试20_newsgroups.target[0]='1'
时,它显示1即可。
但是我如何才能为目前拥有(2,3,4,5,6)班级的所有文件做到这一点?如果我理解那个,我可以轻松地将它扩展到其他类。我也在20_newsgroups中尝试d:
20_newsgroups.target[0]
但这显示的错误是"具有多个元素的数组的真值是明确的,使用a.any()或a.all"。
答案 0 :(得分:3)
我不确定我是否理解您的问题,但您似乎想将类别加入超类别。这应该不难做到,但在实验的后期阶段做到这一点并不是最佳的。如果您想减少类别数量,请通过加入某些类别作为流程的第一步来实现。这样,来自不同(原始)类别的类似样本不会在训练阶段引起混淆(当然,前提是它们属于同一个新类别),从而产生更好的整体结果。
答案 1 :(得分:1)
您可以执行以下操作。该代码基于使用scikit Learn:https://scikit-learn.org/0.19/datasets/twenty_newsgroups.html
对20newsgroup数据集的检索。topic_1 = [0,15,19]
topic_2 = [1,2,3,4,5]
topic_3 = [6]
topic_4 = [7,8,9,10]
topic_5 = [11,12,13,14]
topic_6 = [16,17,18]
topics = [topic_1, topic_2, topic_3, topic_4, topic_5, topic_6]
主题分布基于http://qwone.com/~jason/20Newsgroups/提供的表格(但可以调整)。以下代码减少了数据集类别的数量。
twenty_train_reduced = twenty_train.target.copy
for index, target in enumerate(twenty_train.target):
for topic_i, topic in enumerate(topics):
if(target in topic):
twenty_train_reduced[index] = topic_i