Das Vorhersagen eines einzelnen Werts mit scikit-learn führt zu ValueError

Nov 17 2020

Ich versuche, einige grundlegende sklearn-Dinge zu tun, mit einer einzelnen X-Variablen und einer einzelnen Y-Variablen. Single Ich sage mit einer einzelnen Spalte voraus, ich muss X in ein 2D-Array umwandeln. Jetzt möchte ich einen einzelnen Wert vorhersagen, aber mit meinem Modell kann ich nur ein Array mit einer Länge von 32 vorhersagen.

import pandas as pd
from sklearn.ensemble import RandomForestClassifier
import numpy as np

df = pd.read_csv("https://gist.githubusercontent.com/seankross/a412dfbd88b3db70b74b/raw/5f23f993cd87c283ce766e7ac6b329ee7cc2e1d1/mtcars.csv")
df

X = df["mpg"].values.reshape(1, -1)
y = df["cyl"].values.reshape(1, -1)

y
clf = RandomForestClassifier(random_state=0)
clf.fit(X, y)

clf.predict([[35]])

ValueError: Die Anzahl der Features des Modells muss mit der Eingabe übereinstimmen. Das Modell n_features ist 32 und die Eingabe n_features ist 1

Kann mir jemand helfen, dieses Problem zu lösen?

Antworten

2 StupidWolf Nov 17 2020 at 17:41

Sie haben das Modell falsch mit Daten der falschen Form versehen, wenn Sie Folgendes tun:

X = df["mpg"].values.reshape(1, -1)
y = df["cyl"].values.reshape(1, -1)

X.shape
(1, 32)

Dies bedeutet, dass X 1 Beobachtung und 32 Prädiktoren ist. Während Sie 1 Prädiktor und 32 Beobachtungen haben.

So sollte es sein:

X = df[["mpg"]]
y = df["cyl"]

clf = RandomForestClassifier(random_state=0)
clf.fit(X, y)

Dann sagen Sie voraus mit:

clf.predict(np.array(35).reshape(-1,1))
array([4])