【问题标题】:Support vector machine with multioutput ValueError: The number of classes has to be greater than one; got 1 class具有多输出 ValueError 的支持向量机:类的数量必须大于 1;上了一堂课
【发布时间】:2022-01-14 11:57:11
【问题描述】:

我在尝试运行使用支持向量机的多输出分类器时遇到错误。

测试集y_train_svm 如下所示:

array([[1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 1],
       ...,
       [1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 0, 1]], dtype=int8)

我已经通过np.unique(y_train_svm)检查了类的数量,它返回了array([0, 1])。这应该意味着实际上有两个类可用?

这是返回错误信息的分类器代码:

svm_clf = SVC(kernel="linear", random_state=42)
multioutput_classifier = MultiOutputClassifier(estimator=svm_clf)
multioutput_classifier.fit(X_train_svm, y_train_svm)

【问题讨论】:

  • "这应该意味着实际上有两个类可用?"不,只是你的真实标签是一个热编码
  • 我有点困惑——这是多标签预测还是..?
  • 我想根据我的训练数据预测不同物种在不同位置的出现。在数据中,几乎所有物种都存在于大多数位置,因此 y_train_svm 中有许多 1。所以我希望正确预测每个标签(1 或 0)。

标签: python machine-learning svm


【解决方案1】:

尝试将您的训练/测试数组的值转换为整数,例如y_train_svm.astype(np.int8),然后再次在您使用fit() 的地方运行您的训练代码。

【讨论】:

  • 感谢您的意见!据我所知,y_train_svm 已经是 int8 类型(由数组末尾的注释指示),不是吗?
  • 嗯,是的,最后没看到……也许你在 X-train 里面有一个非数值?
猜你喜欢
  • 2020-08-08
  • 2021-07-22
  • 1970-01-01
  • 2017-08-17
  • 2017-04-08
  • 2021-12-10
  • 2019-02-18
  • 2019-09-19
  • 2017-10-29
相关资源
最近更新 更多