error en la secuencia de comandos de Python “Se esperaba una matriz 2D, en su lugar se obtuvo una matriz 1D:”?

Estoy siguiendo este tutorial para hacer esta predicción de ML:

Tutorial de enlaces

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])) 

Estoy usando Python 3.6 y obtengo el error “Se esperaba una matriz 2D, se obtuvo una matriz 1D:” Creo que la secuencia de comandos es para versiones anteriores, pero no sé cómo convertirla a la versión 3.6.

Ya intente con el:

  X.reshape(1, -1) 

Se supone que debe proporcionar el método de predict con la misma matriz 2D, pero con un valor que desea procesar (o más). En resumen, simplemente puede reemplazar

 [0.58,0.76] 

Con

 [[0.58,0.76]] 

Y deberia funcionar

El problema está ocurriendo cuando ejecuta la predicción en la matriz [0.58,0.76] . Arregle el problema cambiándolo de forma antes de llamar a 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 

Me enfrenté al mismo problema, excepto que el tipo de datos de la instancia que quería predecir era un objeto panda.Series .

Bueno, solo necesitaba predecir una instancia de entrada. Lo tomé de una parte de mis datos.

 df = pd.DataFrame(list(BiogasPlant.objects.all())) test = df.iloc[-1:] # sliced it here 

En este caso, deberá convertirlo en una matriz 1-D y luego volver a darle reshape .

  test2d = test.values.reshape(1,-1) 

De los documentos , los values convertirán Series en una matriz numpy.

Me enfrenté al mismo problema. Solo tiene que convertirlo en una matriz y, además, debe colocar corchetes dobles para que sea un elemento único de la matriz 2D cuando el primer corchete inicializa la matriz y el segundo lo convierte en un elemento de esa matriz.

Así que simplemente reemplace la última statement por:

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

La matriz X e Y de la Variable Independiente y la Variable Dependiente respectivamente a DataFrame desde el tipo int64 para que se convierta de una matriz 1D a una matriz 2D. Es de clase pandas en python. y, por lo tanto, la escala de características a su vez no conduce a ningún error.