2017-08-07 43 views
8

Obserwuję ten poradnik, aby ten przewidywania ML:Błąd w skrypcie Pythona "Oczekiwana tablica 2D, zamiast tablicy 1D:"?

Link Tutorial

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import style 

style.use("ggplot") 
from sklearn import svm 

x = [1, 5, 1.5, 8, 1, 9] 
y = [2, 8, 1.8, 8, 0.6, 11] 

plt.scatter(x,y) 
plt.show() 

X = np.array([[1,2], 
      [5,8], 
      [1.5,1.8], 
      [8,8], 
      [1,0.6], 
      [9,11]]) 

y = [0,1,0,1,0,1] 
X.reshape(1, -1) 

clf = svm.SVC(kernel='linear', C = 1.0) 
clf.fit(X,y) 

print(clf.predict([0.58,0.76])) 

im przy użyciu Pythona 3.6 i dostaję błąd "Oczekiwane tablicę 2D, dostał 1D tablicę zamiast:" myślę skrypt jest dla starszych wersji, ale nie wiem, jak przekonwertować go do wersji 3.6.

Już spróbować z:

X.reshape(1, -1) 
+3

Który wiersz powoduje błąd? – stackoverflowuser2010

+1

'X = X.reshape (1, -1)'. Przekształcenie nie jest na miejscu. –

+2

@ stackoverflowuser2010: Zgaduję, że ostatnia linia 'clf.predict ()', ponieważ 'X' jest już dwuwymiarowa (bezużyteczne' przekształcenie 'niezależnie od). –

Odpowiedz

14

Jesteś po prostu ma zapewnić metodę predict z tej samej tablicy 2D, ale z jednej wartości, które chcesz przetworzyć (lub więcej). W skrócie, można po prostu zastąpić

[0.58,0.76] 

Z

[[0.58,0.76]] 

i powinno działać

+1

działa jak urok! – JonTargaryen

+2

, ale dlaczego to działa? Nie rozumiem, o co chodzi. –

5

Problem występuje po uruchomieniu prognozy na tablicy [0.58,0.76]. Napraw problem, zmieniając go, zanim zadzwonisz pod numer predict():

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import style 

style.use("ggplot") 
from sklearn import svm 

x = [1, 5, 1.5, 8, 1, 9] 
y = [2, 8, 1.8, 8, 0.6, 11] 

plt.scatter(x,y) 
plt.show() 

X = np.array([[1,2], 
      [5,8], 
      [1.5,1.8], 
      [8,8], 
      [1,0.6], 
      [9,11]]) 

y = [0,1,0,1,0,1] 

clf = svm.SVC(kernel='linear', C = 1.0) 
clf.fit(X,y) 

test = np.array([0.58, 0.76]) 
print test  # Produces: [ 0.58 0.76] 
print test.shape # Produces: (2,) meaning 2 rows, 1 col 

test = test.reshape(1, -1) 
print test  # Produces: [[ 0.58 0.76]] 
print test.shape # Produces (1, 2) meaning 1 row, 2 cols 

print(clf.predict(test)) # Produces [0], as expected