[英]Scikit Learn digits datasets
我不明白发生了什么
这是我的代码
from sklearn import datasets
from sklearn import svm
import matplotlib.pyplot as plt
# Load digits dataset
digits = datasets.load_digits()
# Create support vector machine classifier
clf = svm.SVC(gamma=0.001, C=100.)
# fit the classifier
X, y = digits.data[:-1], digits.target[:-1]
clf.fit(X, y)
pred = clf.predict(digits.data[-1]) # error goes at this line
plt.imshow(digits.images[-1], cmap=plt.cm.gray_r, interpolation='nearest')
plt.show()
此代码显示sklearn数字图像并显示其预测
当我执行此代码时,它向我显示此错误
Traceback (most recent call last):
File "detect.py", line 15, in <module>
pred = clf.predict(digits.data[-1])
File "/usr/local/lib/python2.7/dist-packages/sklearn/svm/base.py", line 548, in predict
y = super(BaseSVC, self).predict(X)
File "/usr/local/lib/python2.7/dist-packages/sklearn/svm/base.py", line 308, in predict
X = self._validate_for_predict(X)
File "/usr/local/lib/python2.7/dist-packages/sklearn/svm/base.py", line 439, in _validate_for_predict
X = check_array(X, accept_sparse='csr', dtype=np.float64, order="C")
File "/usr/local/lib/python2.7/dist-packages/sklearn/utils/validation.py", line 410, in check_array
"if it contains a single sample.".format(array))
ValueError: Expected 2D array, got 1D array instead:
array=[ 0. 0. 10. 14. 8. 1. 0. 0. 0. 2. 16. 14. 6. 1. 0.
0. 0. 0. 15. 15. 8. 15. 0. 0. 0. 0. 5. 16. 16. 10.
0. 0. 0. 0. 12. 15. 15. 12. 0. 0. 0. 4. 16. 6. 4.
16. 6. 0. 0. 8. 16. 10. 8. 16. 8. 0. 0. 1. 8. 12.
14. 12. 1. 0.].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
错误消息说明了问题所在:您正在将分类器的预测方法输入一列,并且期望与拟合时使用的列一样多。 如果更改,则代码为
pred = clf.predict(digits.data[:-1])
有用。 当然,这没有任何意义,因为现在您正在预测与之匹配的相同数据(并且您从功能中省略了一列)。 一个更合理的做法是将数据集拆分为训练和测试数据集,并与训练进行拟合并预测测试。 像这样:
from sklearn import datasets
from sklearn import svm
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
# Load digits dataset
digits = datasets.load_digits()
# Create support vector machine classifier
clf = svm.SVC(gamma=0.001, C=100.)
# split the data to train and test sets
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.2, random_state=2017)
# fit the classifier with train data
clf.fit(X_train, y_train)
pred = clf.predict(X_test)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.