我已经下载了流行的20个新闻组数据集,它有20个类,但我想将整个文档重新分类为六个类,因为有些类非常相关。
例如,所有与计算机相关的文档都应该有一个新类,比如 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"的错误。
我不确定我是否理解你的问题,但你似乎想将类别加入到超级类别中。这应该不难做到,但在实验的后期这样做并不是最佳的。如果要减少类别的数量,请在流程的第一步加入某些类别来执行此操作。这样,来自不同(原始(类别的类似样本就不会在训练阶段引起混淆(当然,前提是它们现在属于同一个新类别(,从而产生更好的整体结果。
你可以做这样的事情。该代码基于使用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