Prevedere un singolo valore con scikit-learn porta a ValueError
Cerco di fare alcune cose basilari di sklearn, con una singola variabile X e una singola variabile Y. Singolo prevedo con una singola colonna, devo trasformare X in un array 2D. Ora voglio prevedere un singolo valore, ma il mio modello mi consente solo di prevedere un array di lunghezza 32.
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: il numero di caratteristiche del modello deve corrispondere all'input. Il modello n_features è 32 e l'input n_features è 1
Qualcuno può aiutarmi a risolvere questo problema?
Risposte
Hai adattato il modello in modo errato con dati di forma sbagliata, se:
X = df["mpg"].values.reshape(1, -1)
y = df["cyl"].values.reshape(1, -1)
X.shape
(1, 32)
Ciò significa che X è 1 osservazione e 32 predittori .. mentre quello che hai è 1 predittore e 32 osservazioni.
Quindi dovrebbe essere:
X = df[["mpg"]]
y = df["cyl"]
clf = RandomForestClassifier(random_state=0)
clf.fit(X, y)
Quindi prevedere utilizzando:
clf.predict(np.array(35).reshape(-1,1))
array([4])