Przewiduj pojedynczą wartość za pomocą scikit-learn prowadzi do ValueError

Nov 17 2020

Próbuję zrobić kilka podstawowych rzeczy, z jedną zmienną X i jedną zmienną Y. Pojedynczy Przewiduję z jedną kolumną, muszę przekształcić X w tablicę 2D. Teraz chcę przewidzieć pojedynczą wartość, ale mój model pozwala mi przewidzieć tylko tablicę o długości 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: Liczba funkcji modelu musi być zgodna z danymi wejściowymi. Model n_features to 32, a wejściowe n_features to 1

Czy ktoś może mi pomóc rozwiązać ten problem?

Odpowiedzi

2 StupidWolf Nov 17 2020 at 17:41

Źle dopasowałeś model danymi o niewłaściwym kształcie, jeśli:

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

X.shape
(1, 32)

Oznacza to, że X to 1 obserwacja i 32 predyktory ... podczas gdy mamy 1 predyktor i 32 obserwacje.

Więc powinno być:

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

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

Następnie prognozuj, używając:

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