Prédire une valeur unique avec scikit-learn mène à ValueError

Nov 17 2020

J'essaye de faire des trucs de base sklearn, avec une seule variable X et une seule variable Y. Seul je prédis avec une seule colonne, je dois transformer X en un tableau 2D. Maintenant, je veux prédire une valeur unique, mais mon modèle me permet uniquement de prédire un tableau de longueur de longueur 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: le nombre de caractéristiques du modèle doit correspondre à l'entrée. Le modèle n_features est 32 et l'entrée n_features est 1

Quelqu'un peut m'aider à résoudre ce problème?

Réponses

2 StupidWolf Nov 17 2020 at 17:41

Vous avez mal ajusté le modèle avec des données de mauvaise forme, si vous faites:

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

X.shape
(1, 32)

Cela signifie que X est 1 observation et 32 ​​prédicteurs .. alors que vous avez 1 prédicteur et 32 ​​observations.

Donc ça devrait être:

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

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

Puis prédisez en utilisant:

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