Я подгоняю набор данных с бинарным целевым классом по случайному лесу. В Python я могу сделать это либо randomforestclassifier, либо randomforestregressor.
Я могу получить классификацию напрямую из randomforestclassifier или я могу сначала запустить randomforestregressor и вернуть набор оценочных баллов (непрерывное значение). Затем я могу найти предельное значение, чтобы вывести прогнозируемые классы из набора баллов. Оба метода могут достичь одной и той же цели (т.е. предсказать классы для тестовых данных).
Также я могу наблюдать, что
randomforestclassifier.predict_proba(X_test)[:,1])
отличается от
randomforestregressor.predict(X_test)
Так что я просто хочу подтвердить, что оба метода действительны, а затем какой из них лучше в приложении случайного леса?
python
random-forest
LUSAQX
источник
источник
Ответы:
Используйте классификатор. Нет, они не действительны.
Во-первых, я настоятельно рекомендую вам ознакомиться с темой «Регрессия против классификации». Потому что использование ML, ничего не зная об этом, даст вам неправильные результаты, которые вы не поймете. И это довольно опасно ... ( это немного похоже на вопрос, с какой стороны вы должны держать свой пистолет или, если это не имеет значения )
Используете ли вы классификатор или регрессор, зависит только от того, какую проблему вы решаете. У вас есть проблема двоичной классификации , поэтому используйте классификатор.
NO. Вы не получаете вероятности от регрессии. Он просто пытается «экстраполировать» заданные вами значения (в данном случае только 0 и 1). Это означает, что значения выше 1 или ниже 0 вполне допустимы в качестве выходных данных регрессии, поскольку они не ожидают только двух дискретных значений в качестве выходных данных (это называется классификацией !), Но непрерывных значений.
Если вы хотите иметь «вероятности» (имейте в виду, что они не обязательно должны быть точно откалиброванными вероятностями ), чтобы определенная точка принадлежала определенному классу, обучите классификатор (чтобы он научился классифицировать данные), а затем используйте .predict_proba (), который затем прогнозирует вероятность.
Просто упомяну это здесь: .predict vs .predict_proba (для классификатора!)
.Predict просто берет вывод .predict_proba и изменяет все на 0 ниже определенного порога (обычно 0,5) соответственно на 1 выше этого порога.
Замечание: конечно, внутренне они такие же, кроме «последнего слоя» и т. Д.! Тем не менее, рассматривайте их (или лучше проблему, которую они решают) как совершенно другую!
источник