web-dev-qa-db-fra.com

Python RandomForest - Erreur d'étiquette inconnue

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!

16
Dragonfly

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)
22
Gurupad Hegde

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())
9
N. Wouda

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

1
RunD.M.C.