You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用sklearn手写数字数据集时遇Bad input shape错误求助

解决SVM训练时的ValueError: bad input shape问题

嘿,我来帮你排查这个错误!你遇到的ValueError: bad input shape (1787, 64)是因为训练模型时特征数据和标签数据的形状完全不匹配,咱们一步一步来修正:

错误根源分析

看你的代码,这里有个关键的赋值错误:

y = digits.data[:-10]

digits.data是用来训练的特征矩阵(每个手写数字样本被转换成64维的向量,形状为(样本数, 64)),而模型训练需要的y应该是对应每个样本的分类标签(也就是这个数字是0-9中的哪一个,形状为(样本数,)的一维数组),正确的标签数据存在digits.target里。

另外还有两个小问题:

  1. 导入语句import sklearn import matplotlib.pyplot as plt存在语法错误,应该拆分成两行书写
  2. 最后一行plt.show缺少括号,必须写成plt.show()才会弹出图像窗口

修正后的完整代码

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)

# 特征数据用digits.data,标签用digits.target
x = digits.data[:-10]
y = digits.target[:-10]

clf.fit(x, y)
# 注意:predict需要传入二维数组,把单个样本reshape成(1,64)的形状
print("prediction:", clf.predict(digits.data[-1].reshape(1, -1)))

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

额外说明

我还补充了一个细节:clf.predict(digits.data[-1].reshape(1, -1))。因为predict方法要求输入的是二维特征矩阵(哪怕只有一个样本),直接传digits.data[-1]是一维数组会报错,所以用reshape(1, -1)把它转换成(1,64)的符合要求的形状。

这样修改后,代码就能正常训练模型、预测最后一个样本,并且显示对应的手写数字图像啦!

内容的提问来源于stack exchange,提问作者Jairulez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:28:23