Search code examples
pythonarrayspython-3.xscikit-learnlibsvm

how to fix Python Error, In description is the code and the error


How to fix the error in the code, I'm using python 3.7, macOS high sierra installed libraries are: sklearn matplotlib numpy.

code:

import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn import svm
import numpy


digits=datasets.load_digits()
'''
print(digits.data)
print(digits.target)
print(digits.images[0])
 '''

clf=svm.SVC(gamma=0.001, C=1.0)

print(len(digits.data))

x,y = digits.data[:-1],digits.target[:-1]
clf.fit(x,y)

print('prediction:',clf.predict(digits.data[-1]))
plt.imshow(digits.images[-1], cmap=plt.cm.gray_r, 
interpolation="nearest")
plt.show()

Error:

  Traceback (most recent call last):
   File "/Users/harmanthind/Documents/Python/scikit learn 
  liberary/pehla.py", line 21, in <module>
  print('prediction:',clf.predict(digits.data[-1]))

  File"/Library/Frameworks/ 
   Python.framework/Versions/3.7/lib/python3.7/site- 
    packages/sklearn/svm/base.py", line 548, in predict
  y = super(BaseSVC, self).predict(X)
    File 
 "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site- 
  packages/sklearn/svm/base.py", line 308, in predict
   X = self._validate_for_predict(X)
   File 
"/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site- 
packages/sklearn/svm/base.py", line 439, in _validate_for_predict
 X = check_array(X, accept_sparse='csr', dtype=np.float64, order="C")
 File 
 "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site- 
 packages/sklearn/utils/validation.py", line 441, 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.

Solution

  • Have you indented correctly ?

    I have runned your code on my machine (Windows 8.1) with proper indentation and it worked fine.

    Indented code:

    import matplotlib.pyplot as plt
    from sklearn import datasets
    from sklearn import svm
    import numpy
    
    
    digits=datasets.load_digits()
    '''
     print(digits.data)
     print(digits.target)
     print(digits.images[0])
     '''
    
    clf=svm.SVC(gamma=0.001, C=1.0)
    
    print(len(digits.data))
    
    x,y = digits.data[:-1],digits.target[:-1]
    clf.fit(x,y)
    
    print('prediction:',clf.predict([digits.data[-1]]))
    plt.imshow(digits.images[-1], cmap=plt.cm.gray_r, interpolation="nearest")
    plt.show()
    

    Furthermore, if it doesn't work, then try changing the kernel/interpreter. Try Python 3.6.x kernel/interpreter.

    p.s: I have used Python 3.6.0 on Thonny IDE to run test this code and it worked fine on my machine.