Dois-je choisir un régresseur ou un classificateur Random Forest?

11

J'adapte un ensemble de données avec une classe cible binaire par la forêt aléatoire. En python, je peux le faire soit par randomforestclassifier ou randomforestregressor.

Je peux obtenir la classification directement à partir de randomforestclassifier ou je pourrais d'abord exécuter randomforestregressor et récupérer un ensemble de scores estimés (valeur continue). Ensuite, je peux trouver une valeur de coupure pour dériver les classes prédites de l'ensemble des scores. Les deux méthodes peuvent atteindre le même objectif (c.-à-d. Prédire les classes pour les données de test).

Je peux également observer que

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

est différent de

randomforestregressor.predict(X_test)

Donc, je veux juste confirmer que les deux méthodes sont valides et laquelle est la meilleure dans l'application forestière aléatoire?

LUSAQX
la source
1
Ma réaction immédiate est que vous devriez utiliser le classificateur car c'est précisément pour cela qu'il est conçu, mais je ne suis pas sûr à 100% que cela fait beaucoup de différence. Utiliser le régresseur reviendrait à utiliser une régression linéaire au lieu d'une régression logistique - cela fonctionne, mais pas aussi bien dans de nombreuses situations. Je pourrais trouver une bonne réponse, mais pas pour un jour ou deux.
Peter Ellis

Réponses:

7

Utilisez le classificateur. Non, ils ne sont pas tous les deux valides.

Tout d'abord, je vous encourage vraiment à vous lire dans le sujet de la régression vs classification. Parce que l'utilisation de ML sans rien en savoir vous donnera de mauvais résultats que vous ne réaliserez pas. Et c'est assez dangereux ... ( c'est un peu comme demander dans quel sens vous devriez tenir votre arme ou si cela n'a pas d'importance )

Que vous utilisiez un classificateur ou un régresseur ne dépend que du type de problème que vous résolvez. Vous avez un problème de classification binaire , utilisez donc le classificateur.

Je pourrais exécuter randomforestregressor en premier et récupérer un ensemble de probabilités estimées.

NON. Vous n'obtenez pas de probabilités de régression. Il essaie simplement "d'extrapoler" les valeurs que vous donnez (dans ce cas, seulement 0 et 1). Cela signifie que les valeurs supérieures à 1 ou inférieures à 0 sont parfaitement valables en tant que sortie de régression car elles n'attendent pas seulement deux valeurs discrètes en sortie (c'est ce qu'on appelle la classification !) Mais des valeurs continues.

Si vous voulez avoir les "probabilités" ( sachez que celles-ci ne doivent pas nécessairement être bien probabilisées ) pour qu'un certain point appartienne à une certaine classe, formez un classifieur (pour qu'il apprenne à classer les données) puis utilisez .predict_proba (), qui prédit ensuite la probabilité.

Juste pour le mentionner ici: .predict vs .predict_proba (pour un classificateur!)
.Predict prend simplement la sortie .predict_proba et change tout à 0 en dessous d'un certain seuil (généralement 0,5) respectivement à 1 au-dessus de ce seuil.

Remarque: bien sûr, en interne, ce sont les mêmes sauf pour la "dernière couche" etc.! Pourtant, voyez-les (ou mieux le problème qu'ils résolvent) comme complètement différents!

Mayou36
la source