python - scikit - sklearn example
error en la secuencia de comandos de Python "Se esperaba una matriz 2D, en su lugar se obtuvo una matriz 1D:”? (4)
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
Estoy siguiendo este tutorial para hacer esta predicción de ML:
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)
La matriz X e Y de la Variable Independiente y la Variable Dependiente, respectivamente, a DataFrame del 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!
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 docs , los values
convertirán Series en una matriz numpy.
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