J'ai du mal à utiliser la fonction d'ajustement RandomForest
Ceci est mon ensemble d'entraînement
P1 Tp1 IrrPOA Gz Drz2
0 0.0 7.7 0.0 -1.4 -0.3
1 0.0 7.7 0.0 -1.4 -0.3
2 ... ... ... ... ...
3 49.4 7.5 0.0 -1.4 -0.3
4 47.4 7.5 0.0 -1.4 -0.3
... (10k rows)
Je veux prédire P1 grâce à toutes les autres variables utilisant sklearn.ensemble RandomForest
colsRes = ['P1']
X_train = train.drop(colsRes, axis = 1)
Y_train = pd.DataFrame(train[colsRes])
rf = RandomForestClassifier(n_estimators=100)
rf.fit(X_train, Y_train)
Voici l'erreur que j'obtiens:
ValueError: Unknown label type: array([[ 0. ],
[ 0. ],
[ 0. ],
...,
[ 49.4],
[ 47.4],
Je n'ai rien trouvé sur cette erreur d'étiquette, j'utilise Python 3.5. Tout conseil serait d'une grande aide!
Lorsque vous transmettez des données d'étiquette (y) à rf.fit(X,y)
, il s'attend à ce que y soit la liste 1D. Le découpage du cadre Panda entraîne toujours une liste 2D. Donc, conflit soulevé dans votre cas d'utilisation. Vous devez convertir la liste 2D fournie par pandas DataFrame en une liste 1D comme prévu par la fonction fit.
Essayez d'abord d'utiliser la liste 1D:
Y_train = list(train.P1.values)
Si cela ne résout pas le problème, vous pouvez essayer avec la solution mentionnée dans Erreur MultinomialNB: "Type d'étiquette inconnu" :
Y_train = np.asarray(train['P1'], dtype="|S6")
Donc, votre code devient,
colsRes = ['P1']
X_train = train.drop(colsRes, axis = 1)
Y_train = np.asarray(train['P1'], dtype="|S6")
rf = RandomForestClassifier(n_estimators=100)
rf.fit(X_train, Y_train)
Selon this SO post , Les classificateurs ont besoin d'étiquettes d'entiers ou de chaînes .
Vous pouvez envisager de passer à un modèle de régression à la place (qui pourrait convient mieux à vos données, car chaque donnée semble être un flottant), comme ceci:
X_train = train.drop('P1', axis=1)
Y_train = train['P1']
rf = RandomForestRegressor(n_estimators=100)
rf.fit(X_train.as_matrix(), Y_train.as_matrix())
peut être un peu tard pour la fête mais je viens de recevoir cette erreur et je l'ai résolue en m'assurant que ma variable y était de type (int) en utilisant
y = df['y_variable'].astype(int)
avant de faire un split de test de train, comme d'autres l'ont dit, votre problème semble mieux correspondre à un RFReg plutôt qu'à un RF