Je suis ce tutoriel pour faire cette prédiction 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]))
J'utilise Python 3.6 et j'obtiens l'erreur "Tableau 2D attendu, tableau 1D à la place:" Je pense que le script est destiné aux anciennes versions, mais je ne sais pas comment le convertir en version 3.6.
Déjà essayer avec le:
X.reshape(1, -1)
Vous êtes simplement censé fournir à la méthode predict
le même tableau 2D, mais une valeur à traiter (ou plus). En bref, vous pouvez simplement remplacer
[0.58,0.76]
Avec
[[0.58,0.76]]
Et ça devrait marcher
Le problème se produit lorsque vous exécutez la prédiction sur le tableau [0.58,0.76]
. Résolvez le problème en le remodelant avant d'appeler 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
J'ai rencontré le même problème, sauf que le type de données de l'instance que je voulais prédire était un objet panda.Series
.
Eh bien, je n'avais besoin que de prédire une instance d'entrée. Je l'ai pris à partir d'une tranche de mes données.
df = pd.DataFrame(list(BiogasPlant.objects.all()))
test = df.iloc[-1:] # sliced it here
Dans ce cas, vous devrez le convertir en un tableau 1-D, puis reshape
.
test2d = test.values.reshape(1,-1)
À partir de docs , values
convertira Series en un tableau numpy.
J'ai rencontré le même problème. Vous devez simplement en faire un tableau et, en outre, vous devez mettre des crochets doubles pour en faire un élément unique du tableau 2D, car le premier crochet initialise le tableau et le second en fait un élément de ce tableau.
Donc, remplacez simplement la dernière déclaration par:
print(clf.predict(np.array[[0.58,0.76]]))
J'utilise l'approche ci-dessous.
reg = linear_model.LinearRegression()
reg.fit(df[['year']],df.income)
reg.predict([[2136]])
Avec une fonctionnalité, ma liste Dataframe est convertie en série. Je devais le reconvertir en une liste Dataframe et cela a fonctionné.
if type(X) is Series:
X = X.to_frame()
Les matrices X et Y des variables indépendantes et des variables dépendantes, respectivement, en DataFrame de type int64 afin qu’elle soit convertie du tableau 1D en tableau 2D ) où pd est de classe pandas en python. et ainsi, la mise à l'échelle des fonctionnalités ne provoque aucune erreur!