import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn import svm
digits = datasets.load_digits()
print(digits.data)
classifier = svm.SVC(gamma=0.4, C=100)
x, y = digits.data[:-1], digits.target[:-1]
x = x.reshape(1,-1)
y = y.reshape(-1,1)
print((x))
classifier.fit(x, y)
###
print('Prediction:', classifier.predict(digits.data[-3]))
###
plt.imshow(digits.images[-1], cmap=plt.cm.gray_r, interpolation='nearest')
plt.show()
我也重塑了x和y。我仍然收到一个错误说:
找到样本数不一致的输入变量:[1,1796]
Y具有1-d阵列,具有1796个元素,而x具有许多。如何为x显示1?
答案 0 :(得分:1)
实际上废弃了我建议的内容:
This link describes the general dataset API。属性data
是每个图像的二维数组,已经展平:
import sklearn.datasets
digits = sklearn.datasets.load_digits()
digits.data.shape
#: (1797, 64)
这是您需要提供的所有内容,无需重新塑造。同样,属性data
是每个标签的1d数组:
digits.data.shape
#: (1797,)
不需要重塑。只需分成训练和测试,然后运行它。
尝试打印x.shape
和y.shape
。我觉得你会分别找到类似(1, 1796, ...)
和(1796, ...)
的内容。在scikit中为分类器调用fit
时,它需要两个形状相同的迭代。
线索,为什么在重塑不同方式时的论点是:
x = x.reshape(1, -1)
y = y.reshape(-1, 1)
也许试试:
x = x.reshape(-1, 1)
完全与您的问题无关,但是当您在训练集中遗漏的唯一元素为digits.data[-3]
时,您预测digits.data[-1]
。不确定这是否是故意的。
无论如何,使用scikit metrics软件包检查分类器的结果可能更好。 This page has an example of using it over the digits dataset
答案 1 :(得分:0)
重塑将您的8x8矩阵转换为1维向量,可用作特征。您需要重塑整个X矢量,而不仅仅是训练数据的X矢量,因为您将用于预测的那个需要具有相同的格式。
以下代码说明了如何:
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn import svm
digits = datasets.load_digits()
classifier = svm.SVC(gamma=0.4, C=100)
x, y = digits.images, digits.target
#only reshape X since its a 8x8 matrix and needs to be flattened
n_samples = len(digits.images)
x = x.reshape((n_samples, -1))
print("before reshape:" + str(digits.images[0]))
print("After reshape" + str(x[0]))
classifier.fit(x[:-2], y[:-2])
###
print('Prediction:', classifier.predict(x[-2]))
###
plt.imshow(digits.images[-2], cmap=plt.cm.gray_r, interpolation='nearest')
plt.show()
###
print('Prediction:', classifier.predict(x[-1]))
###
plt.imshow(digits.images[-1], cmap=plt.cm.gray_r, interpolation='nearest')
plt.show()
将输出:
before reshape:[[ 0. 0. 5. 13. 9. 1. 0. 0.]
[ 0. 0. 13. 15. 10. 15. 5. 0.]
[ 0. 3. 15. 2. 0. 11. 8. 0.]
[ 0. 4. 12. 0. 0. 8. 8. 0.]
[ 0. 5. 8. 0. 0. 9. 8. 0.]
[ 0. 4. 11. 0. 1. 12. 7. 0.]
[ 0. 2. 14. 5. 10. 12. 0. 0.]
[ 0. 0. 6. 13. 10. 0. 0. 0.]]
After reshape[ 0. 0. 5. 13. 9. 1. 0. 0. 0. 0. 13. 15. 10. 15. 5.
0. 0. 3. 15. 2. 0. 11. 8. 0. 0. 4. 12. 0. 0. 8.
8. 0. 0. 5. 8. 0. 0. 9. 8. 0. 0. 4. 11. 0. 1.
12. 7. 0. 0. 2. 14. 5. 10. 12. 0. 0. 0. 0. 6. 13.
10. 0. 0. 0.]
对最后两张未用于训练的图像进行正确预测 - 您可以决定在测试和训练集之间进行更大的分割。