Ich folge diesem Tutorial , um diese ML-Vorhersage zu treffen:
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]))
Ich verwende Python 3.6 und erhalte die Fehlermeldung "Erwartetes 2D-Array, stattdessen 1D-Array:" Ich denke, das Skript ist für ältere Versionen, aber ich weiß nicht, wie ich es in die Version 3.6 konvertieren soll.
Versuchen Sie es bereits mit:
X.reshape(1, -1)
python
python-3.x
machine-learning
predict
JonTargaryen
quelle
quelle
X = X.reshape(1, -1)
. Umformung ist nicht vorhanden.clf.predict(<a-1d-thing>)
, da sieX
bereits zweidimensional ist (reshape
ungeachtet davon nutzlos ).X
.Antworten:
Sie sollten der
predict
Methode nur dasselbe 2D-Array zur Verfügung stellen , jedoch einen Wert, den Sie verarbeiten möchten (oder mehr). Kurz gesagt, Sie können einfach ersetzen[0.58,0.76]
Mit
[[0.58,0.76]]
Und es sollte funktionieren.
EDIT: Diese Antwort wurde populär, also dachte ich, ich würde etwas mehr Erklärung über ML hinzufügen. Die Kurzversion: Wir können nur
predict
Daten verwenden, die dieselbe Dimension haben wie die Trainingsdaten (X
).In dem fraglichen Beispiel geben wir dem Computer eine Reihe von Zeilen
X
(mit jeweils 2 Werten) und zeigen ihm die richtigen Antworten iny
. Wenn wirpredict
neue Werte verwenden möchten, erwartet unser Programm dasselbe - eine Reihe von Zeilen. Selbst wenn wir es nur mit einer Zeile (mit zwei Werten) machen wollen, muss diese Zeile Teil eines anderen Arrays sein.quelle
Das Problem tritt auf, wenn Sie eine Vorhersage für das Array ausführen
[0.58,0.76]
. Beheben Sie das Problem, indem Sie es umformen, bevor Sie anrufenpredict()
: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
quelle
Ich benutze den folgenden Ansatz.
reg = linear_model.LinearRegression() reg.fit(df[['year']],df.income) reg.predict([[2136]])
quelle
Ich hatte das gleiche Problem, außer dass der Datentyp der Instanz, die ich vorhersagen wollte, ein
panda.Series
Objekt war.Nun, ich musste nur eine Eingabeinstanz vorhersagen. Ich habe es einem Teil meiner Daten entnommen.
df = pd.DataFrame(list(BiogasPlant.objects.all())) test = df.iloc[-1:] # sliced it here
In diesem Fall müssen Sie es in ein 1-D-Array konvertieren und dann
reshape
.test2d = test.values.reshape(1,-1)
Aus dem docs ,
values
wird die Serie in eine numpy Array konvertieren.quelle
Ich hatte das gleiche Problem. Sie müssen es nur zu einem Array machen und außerdem doppelte eckige Klammern setzen, um es zu einem einzelnen Element des 2D-Arrays zu machen, da die erste Klammer das Array initialisiert und die zweite es zu einem Element dieses Arrays macht.
Ersetzen Sie einfach die letzte Aussage durch:
print(clf.predict(np.array[[0.58,0.76]]))
quelle
Ich hatte früher das gleiche Problem, aber ich habe irgendwie die Lösung gefunden. Sie können es versuchen
reg.predict([[3300]])
.Die API, die verwendet wurde, um skalare Werte zuzulassen, aber jetzt müssen Sie ein 2D-Array angeben.
quelle
Fügen Sie einfach das Argument zwischen eine doppelte eckige Klammer ein:
regressor.predict ([[Werte]])
das hat bei mir funktioniert
quelle
Mit einer Funktion wird meine Dataframe-Liste in eine Serie konvertiert. Ich musste es wieder in eine Dataframe-Liste konvertieren und es funktionierte.
if type(X) is Series: X = X.to_frame()
quelle
Die X- und Y-Matrix der unabhängigen Variablen bzw. der abhängigen Variablen in DataFrame vom Typ int64, sodass sie vom 1D-Array in das 2D-Array konvertiert wird. Dh X = pd.DataFrame (X) und Y = pd.dataFrame (Y) wobei pd ist von der Pandas-Klasse in Python. und somit führt die Feature-Skalierung wiederum nicht zu Fehlern!
quelle