Scikit多标签分类:值错误:输入形状不正确。

4
我相信带有loss='log'SGDClassifier()支持多标签分类,我不需要使用OneVsRestClassifier。详情请查看此处
现在,我的数据集非常大,我正在使用HashingVectorizer并将结果作为输入传递给SGDClassifier。我的目标有42048个特征。
当我按以下方式运行时:
clf.partial_fit(X_train_batch, y)

我得到了一个错误信息:ValueError: 输入形状不正确(300000,42048)
我还尝试将类用作参数,但仍然出现相同的问题。
clf.partial_fit(X_train_batch, y, classes=np.arange(42048))

在SGD分类器的文档中,它指出:y:形状为[n_samples]的numpy数组

X_train_batchy的形状是什么? - bogatron
(300000,1048576)和(300000,42048)分别是scipy稀疏矩阵。 - user644745
1个回答

5
不,SGDClassifier 不支持多标签分类--它支持多类别分类,这是一个不同的问题,尽管两者都可以使用一对所有问题缩减来解决。
然后,无论是 SGD 还是 OneVsRestClassifier.fit 都不会接受稀疏矩阵作为 y。前者需要一个标签数组,正如你已经发现的那样。后者需要一个用于多标签目的的标签列表,例如:
y = [[1], [2, 3], [1, 3]]

为了表示 X[0] 的标签是 1,X[1] 的标签是 {2,3}X[2] 的标签是 {1,3}

谢谢Larsmans。我进一步研究了它,并得到了所有问题的澄清。但现在我很担心,因为有大约42000多个标签,我可能需要为每个标签单独提供42K个估算器,而我不认为我可以在一台机器上完成所有这些工作。考虑使用ipython并行和starcluster。 - user644745
ValueError: 您似乎正在使用传统的多标签数据表示方式。不再支持序列中嵌套序列的形式,请改用二进制数组或稀疏矩阵 - MultiLabelBinarizer转换器可以将其转换为此格式。 - keramat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接