wake-up-neo.com

fehler im Python-Skript "Erwartetes 2D-Array, stattdessen 1D-Array:"?

Ich folge diesem Tutorial, um diese ML-Vorhersage zu treffen:

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

Ich benutze Python 3.6 und erhalte den Fehler "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.

Versuche es schon mit dem:

   X.reshape(1, -1)
35
JonTargaryen

Sie sollen lediglich die predict-Methode mit demselben 2D-Array, jedoch mit einem Wert, den Sie verarbeiten möchten (oder mit einem höheren Wert) bereitstellen. Kurz gesagt, können Sie einfach ersetzen

[0.58,0.76]

Mit

[[0.58,0.76]]

Und es sollte funktionieren

70
Ofer Sadan

Das Problem tritt auf, wenn Sie die Vorhersage für das Array [0.58,0.76] ausführen. Beheben Sie das Problem, indem Sie es vor dem Aufruf von predict() umformen.

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
10

Ich war mit dem gleichen Problem konfrontiert, mit der Ausnahme, dass der Datentyp der Instanz, die ich vorhersagen wollte, ein panda.Series-Objekt war.

Nun, ich musste nur eine Eingabeinstanz vorhersagen. Ich habe es aus einem Teil meiner Daten genommen.

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 und dann reshape konvertieren.

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

In docs konvertiert values die Serie in ein numpy-Array.

2
devsaw

Ich hatte das gleiche Problem. Sie müssen es nur zu einem Array machen und außerdem müssen Sie doppelte eckige Klammern setzen, um es zu einem einzelnen Element des 2D-Arrays zu machen, wenn die erste Klammer das Array initialisiert und das zweite Element es zu einem Element dieses Arrays macht. 

Ersetze also einfach die letzte Aussage durch:

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

Ich benutze den folgenden Ansatz.

reg = linear_model.LinearRegression()
reg.fit(df[['year']],df.income)

reg.predict([[2136]])
0
Vikas Rathour

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()
0
kingarthur

Die X- und Y-Matrix der unabhängigen Variablen und der abhängigen Variablen von Int64-Typ zu DataFrame, sodass sie vom 1D-Array in das 2D-Array konvertiert wird... Dh X = pd.DataFrame (X) und Y = pd.dataFrame (Y ) wobei pd eine Pandas-Klasse in Python ist. und somit führt die Skalierung der Funktionen nicht zu Fehlern!

0
Chahat Agarwal