[英]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.