簡體   English   中英

Scikit學習數字數據集

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM