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