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?
la source
Réponses:
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.
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!
la source