【问题标题】:Bad input shape error on sklearn digit datasetssklearn 数字数据集上的错误输入形状错误
【发布时间】:2018-10-23 16:04:43
【问题描述】:
import sklearn
import matplotlib.pyplot as plt

from sklearn import datasets
from sklearn import svm

digits = datasets.load_digits()

clf = svm.SVC(gamma=0.01,C= 100)

x = digits.data[:-10]
y = digits.data[:-10]

clf.fit(x,y)

print ("prediction:",clf.predict(digits.data[-1]))

plt.imshow(digits.image[-1],cmap = plt.cm.gray_r, interpolation ="nearest")
plt.show

我得到错误

Traceback (most recent call last):
  File "python", line 14, in <module>
ValueError: bad input shape (1787, 64)

我不确定数组的形状应该是什么以及应该如何?!!

有人可以帮忙吗!谢谢

【问题讨论】:

  • 应该是y = digits.data[-10:]
  • @COLDSPEED 感谢您的评论,我将其更改为您所说的方式,但仍然在 ValueError: bad input shape (10, 64 )
  • 无论您遇到什么错误,都应该编辑到您的帖子中。注释不是调试损坏代码的最佳位置。顺便说一句,我建议您尝试弄清楚您的数据和标签是什么,并相应地进行切片。我当然不知道,因为这不是我的数据,我不会通过 ssh 进入你的系统来找出答案。
  • 将特征加载到x,将标签加载到y。第二行应该是y = digits.target[:-10]
  • 当我对 OP 给出正确答案时,为什么我的答案被否决了?

标签: python machine-learning scikit-learn


【解决方案1】:

Arya McCarthy 关于将digits.target 用作y 的建议是正确的。因此,将digits.data 声明为特征变量xdigits.target 作为目标变量y 是正确的。请尝试我修改如下的代码:

import sklearn
import matplotlib.pyplot as plt

from sklearn import datasets
from sklearn import svm

digits = datasets.load_digits()

clf = svm.SVC(gamma=0.01,C= 100)

x = digits.data
y = digits.target

clf.fit(x,y)
print ("prediction:",clf.predict(digits.data[-1].reshape(1, -1)))
plt.imshow(digits.images[-1],cmap = plt.cm.gray_r, interpolation ="nearest")
plt.show()

以下是我运行代码的结果

【讨论】:

  • 当我对 OP 给出正确答案时,为什么我的答案被否决了?
【解决方案2】:

您应该将digits.target 用作y,而不是digits.data。 SVM 只接受一维预测变量,这暗示您向其传递了错误的值。 targetx 中的 8x8 图像所描绘的值 (0..9)。

【讨论】:

    猜你喜欢
    • 2018-04-06
    • 2017-12-21
    • 2020-01-04
    • 2018-01-27
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2019-04-08
    相关资源
    最近更新 更多