【问题标题】:scikit multilabel classification: ValueError: bad input shapescikit多标签分类:ValueError:输入形状错误
【发布时间】:2013-12-18 14:34:18
【问题描述】:

我相信 SGDClassifier()loss='log' 支持多标签分类,我不必使用 OneVsRestClassifier。 Check this

现在,我的数据集非常大,我正在使用 HashingVectorizer 并将结果作为输入传递给 SGDClassifier。我的目标有 42048 个特征。

当我运行这个时,如下:

clf.partial_fit(X_train_batch, y)

我得到:ValueError: bad input shape (300000, 42048)

我也使用类作为参数如下,但还是同样的问题。

clf.partial_fit(X_train_batch, y, classes=np.arange(42048))

在 SGDClassifier 的文档中,它说y : numpy array of shape [n_samples]

【问题讨论】:

  • X_train_batchy的形状是什么?
  • (300000, 1048576) 和 (300000, 42048) 分别是 scipy 稀疏矩阵

标签: machine-learning classification scikit-learn stochastic-process


【解决方案1】:

不,SGDClassifier 进行多标签分类 - 它进行 multiclass 分类,这是一个不同的问题,尽管两者都使用一对一来解决减少所有问题。

那么,SGD 和 OneVsRestClassifier.fit 都不会接受 y 的稀疏矩阵。正如您已经发现的那样,前者需要一系列标签。后者出于多标签目的需要标签列表列表,例如

y = [[1], [2, 3], [1, 3]]

表示X[0] 有标签1,X[1] 有标签{2,3}X[2] 有标签{1,3}

【讨论】:

  • 感谢拉斯曼斯。我进一步研究并澄清了我所有的答案。但我现在很担心,因为大约有 42000 多个标签,我可能不得不为每个标签分别提出 42K 估计器,我认为我不能在一台机器上完成所有这些工作。考虑使用ipython parallel和starcluster。
  • ValueError:您似乎在使用旧的多标签数据表示。不再支持序列序列;改用二进制数组或稀疏矩阵 - MultiLabelBinarizer 转换器可以转换为这种格式。
猜你喜欢
  • 2018-02-12
  • 2019-05-27
  • 2018-04-30
  • 2015-06-26
  • 2018-01-27
  • 2020-04-14
  • 1970-01-01
  • 2020-06-12
  • 2018-09-22
相关资源
最近更新 更多