使用sklearn digits数据集构建数字预测模型时出现ValueError问题排查
解决DecisionTreeClassifier预测时的ValueError问题
嘿,我一眼就看出问题所在啦!你在调用clf.predict(digits.data[-1])的时候犯了一个scikit-learn新手常遇到的小错误:
错误原因
digits.data[-1]提取的是单个样本的一维数组(打印它的形状会得到(64,)),但scikit-learn分类器的predict方法要求输入必须是二维数组,格式为(n_samples, n_features)——哪怕你只预测一个样本,也得保持这个二维结构。毕竟模型训练时接收的digits.data就是这种每行对应一个样本的二维格式,维度不匹配自然会触发ValueError。
修正方案
有两种简单的方法可以把单个样本转换成符合要求的格式:
- 使用
reshape(1, -1)自动调整维度:# 把一维样本转成(1, 64)的二维结构 clf.predict(digits.data[-1].reshape(1, -1)) - 用列表包裹单个样本,自动转为二维数组:
# 列表包裹后,形状变为(1, 64) clf.predict([digits.data[-1]])
完整修正后的代码
import matplotlib.pyplot as plt from sklearn import datasets from sklearn import tree digits = datasets.load_digits() clf = tree.DecisionTreeClassifier() clf = clf.fit(digits.data, digits.target) # 用reshape的方式预测并输出结果 pred_result = clf.predict(digits.data[-1].reshape(1, -1)) print(f"预测结果:{pred_result[0]}")
运行这段代码应该就不会报错啦~
内容的提问来源于stack exchange,提问作者Rakibul Hassan
相关产品推荐
相关产品推荐

