Должен ли я выбрать регрессор или классификатор Random Forest?

11

Я подгоняю набор данных с бинарным целевым классом по случайному лесу. В Python я могу сделать это либо randomforestclassifier, либо randomforestregressor.

Я могу получить классификацию напрямую из randomforestclassifier или я могу сначала запустить randomforestregressor и вернуть набор оценочных баллов (непрерывное значение). Затем я могу найти предельное значение, чтобы вывести прогнозируемые классы из набора баллов. Оба метода могут достичь одной и той же цели (т.е. предсказать классы для тестовых данных).

Также я могу наблюдать, что

randomforestclassifier.predict_proba(X_test)[:,1]) 

отличается от

randomforestregressor.predict(X_test)

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

LUSAQX
источник
1
Моя немедленная реакция: вы должны использовать классификатор, потому что это именно то, для чего он построен, но я не уверен на 100%, что он имеет большое значение. Использование регрессора было бы похоже на использование линейной регрессии вместо логистической регрессии - это работает, но не так хорошо во многих ситуациях. Я мог бы найти правильный ответ, но не за день или около того.
Питер Эллис

Ответы:

7

Используйте классификатор. Нет, они не действительны.

Во-первых, я настоятельно рекомендую вам ознакомиться с темой «Регрессия против классификации». Потому что использование ML, ничего не зная об этом, даст вам неправильные результаты, которые вы не поймете. И это довольно опасно ... ( это немного похоже на вопрос, с какой стороны вы должны держать свой пистолет или, если это не имеет значения )

Используете ли вы классификатор или регрессор, зависит только от того, какую проблему вы решаете. У вас есть проблема двоичной классификации , поэтому используйте классификатор.

Сначала я могу запустить randomforestregressor и получить набор оценочных вероятностей.

NO. Вы не получаете вероятности от регрессии. Он просто пытается «экстраполировать» заданные вами значения (в данном случае только 0 и 1). Это означает, что значения выше 1 или ниже 0 вполне допустимы в качестве выходных данных регрессии, поскольку они не ожидают только двух дискретных значений в качестве выходных данных (это называется классификацией !), Но непрерывных значений.

Если вы хотите иметь «вероятности» (имейте в виду, что они не обязательно должны быть точно откалиброванными вероятностями ), чтобы определенная точка принадлежала определенному классу, обучите классификатор (чтобы он научился классифицировать данные), а затем используйте .predict_proba (), который затем прогнозирует вероятность.

Просто упомяну это здесь: .predict vs .predict_proba (для классификатора!)
.Predict просто берет вывод .predict_proba и изменяет все на 0 ниже определенного порога (обычно 0,5) соответственно на 1 выше этого порога.

Замечание: конечно, внутренне они такие же, кроме «последнего слоя» и т. Д.! Тем не менее, рассматривайте их (или лучше проблему, которую они решают) как совершенно другую!

Mayou36
источник