【问题标题】:How to re classify 20 newsgroups data set from 20 to 6如何将 20 个新闻组数据集从 20 重新分类到 6
【发布时间】:2016-05-17 00:26:28
【问题描述】:

我下载了流行的 20 个新闻组数据集,它有 20 个类,但我想将整个文档重新分类为 6 个类,因为有些类非常相关。

例如,所有与计算机相关的文档都应该有一个新的类,比如 1。就像现在一样,文档从 1 到 20 分配,反映了这些类。计算机相关的类有2、3、4、5、6。

我想说,1 是所有与计算机相关的类(2,3,4,5,6)。我使用20_newsgroups.target[0] 对其进行了测试,它给了我 7。这意味着 0 处的文档的类是 7。

我使用 20_newsgroups.target[0]='1' 将它重新分配给一个新类,当我尝试 20_newsgroups.target[0] 时,它显示 1 可以。

但是我怎样才能对当前以 (2,3,4,5,6) 为类的所有文档执行此操作?如果我理解它,我可以很容易地将它扩展到其他类。我也尝试在 20_newsgroups 中使用 d:

if 20_newsgroups.target in [2,3,4,5,6], 20_newsgroups.target='1'.

但这显示了一个错误,即“具有多个元素的数组的真值是明确的,请使用 a.any() 或 a.all”。

【问题讨论】:

    标签: python scikit-learn nlp


    【解决方案1】:

    我不确定我是否理解您的问题,但您似乎想将类别加入超类别。这应该不难做到,但在实验的后期这样做并不是最佳选择。如果您想减少类别的数量,请通过加入一些类别作为流程的第一步来做到这一点。这样,来自不同(原始)类别的相似样本不会在训练阶段造成混淆(当然,前提是它们现在属于同一个新类别),从而产生更好的整体结果。

    【讨论】:

    • 是的,这正是我想做的。有没有更好的方法呢?谢谢
    • 比我刚才提出的要好?为什么我要发布低于标准的答案?为什么这是不可接受的?
    【解决方案2】:

    你可以做这样的事情。代码基于用scikit learn检索20newsgroup数据集:https://scikit-learn.org/0.19/datasets/twenty_newsgroups.html

    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
    

    【讨论】:

      猜你喜欢
      • 2019-05-22
      • 2017-10-23
      • 2015-01-31
      • 2018-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多