Prevedere un singolo valore con scikit-learn porta a ValueError

Nov 17 2020

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

2 StupidWolf Nov 17 2020 at 17:41

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