如何将20个新闻组数据集从20个重新分类到6个

时间:2016-02-07 07:48:13

标签: python scikit-learn nlp

我已经下载了流行的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"。

2 个答案:

答案 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