Python RandomForest - Неизвестная метка Ошибка

У меня проблема с функцией Randomforest fit

Это мой тренировочный набор

         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)

Я хочу предсказать P1 благодаря всем остальным переменным, используя 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)

Вот ошибка, которую я получаю:

ValueError: Unknown label type: array([[  0. ],
       [  0. ],
       [  0. ],
       ..., 
       [ 49.4],
       [ 47.4],

Я ничего не нашел об этой ошибке метки, я использую Python 3.5. Любой совет будет большой помощью!

Ответы

Ответ 1

Когда вы передаете данные метки (y) на rf.fit(X,y), она ожидает, что y будет 1D-списком. Нарезка кадра Panda всегда приводит к 2D-списку. Итак, конфликт возник в вашем случае использования. Вам необходимо преобразовать 2D-список, предоставленный pandas DataFrame, в 1D-список, как ожидается, с помощью функции соответствия.

Сначала попробуйте использовать 1D-список:

Y_train = list(train.P1.values)

Если это не решит проблему, вы можете попробовать с решением, упомянутым в Ошибка MultinomialNB: "Неизвестный тип метки" :

Y_train = np.asarray(train['P1'], dtype="|S6")

Итак, ваш код будет,

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)

Ответ 2

В соответствии с этим сообщением SO классификаторам нужны целые или строковые метки.

Вместо этого вы можете переключиться на регрессионную модель (что может лучше соответствовать вашим данным, так как каждая точка привязки выглядит как float), например:

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

Ответ 3

может быть немного поздно, но я только что получил эту ошибку и решил ее, убедившись, что моя переменная y была типом (int), используя

 y = df['y_variable'].astype(int) 

перед тем, как выполнить разделение теста поезда, также как и другие, вы сказали, что проблема кажется более подходящей с RFReg, а не RF