Ma question concerne la classification binaire, disons séparer les bons clients des mauvais clients, mais pas la régression ou la classification non binaire. Dans ce contexte, une forêt aléatoire est un ensemble d'arbres de classification. Pour chaque observation, chaque arbre vote «oui» ou «non», et le vote moyen de tous les arbres est la probabilité finale pour la forêt.
Ma question concerne la modification du comportement des arbres sous-jacents: comment pouvons-nous modifier la fonction randomForest (du package randomForest de R) afin que chaque arbre vote une décimale au lieu d'un binaire oui / non. Pour mieux comprendre ce que je veux dire par décimale, réfléchissons au fonctionnement des arbres de décision.
Un arbre de décision entièrement développé a 1 bonne ou 1 mauvaise instance dans ses nœuds terminaux. Supposons que je limite la taille du nœud terminal à 100. Ensuite, les nœuds terminaux vont ressembler à:
Node1 = 80 mauvais, 20 bons
Node2 = 51 mauvais, 49 bons
Node3 = 10 mauvais, 90 bons
Remarquez, même si Node1 et Node2 votent «mauvais», leur «force de méchanceté» est très différente. C'est ce que je recherche. Au lieu de les faire produire 1 ou 0 (ce qui est le comportement par défaut), peut-on modifier le package R pour qu'ils votent 80/100, 51/100, 10/100, etc.?
la source
Réponses:
C'est un point subtil qui varie d'un logiciel à l'autre. Il existe deux méthodes principales que je connais:
randomForest
fonctionne R, même en utilisantpredict(..., type="prob")
sklearn.ensemble.RandomForestClassifier.predict_proba
marche. Dans une autre réponse, @ usεr11852 souligne que leranger
package de R fournit également cette fonctionnalité. Heureusement, je peux attester que mon utilisation limitéeranger
est aussi beaucoup, beaucoup plus rapide querandomForest
.Je ne pense pas qu'il existe un moyen facile
randomForest
d'utiliser la méthode des feuilles proportionnelles, car le logiciel R est en fait juste un crochet dans un programme C & FORTRAN. Sauf si vous aimez modifier le code de quelqu'un d'autre, vous devrez soit écrire le vôtre, soit trouver une autre implémentation logicielle.la source
randomForest
peut être modifié pour accompagner cela?randomForest
c'est juste une interface R dans le code FORTRAN, donc cela peut prendre des ressources considérables à accomplir.Il est parfaitement possible de faire pousser une "forêt probabiliste". La méthodologie de Malley et al. (2012) « Machines de probabilité: estimation cohérente des probabilités à l'aide de machines d'apprentissage non paramétriques . De plus, l' excellent ranger du package R implémente déjà cette fonctionnalité; il suffit de définir
probability = TRUE
lors de l'appel de la fonction àranger
.la source
Utilisez simplement
predict.randomForest(..., type="prob")
. Vous faites une bonne chose .la source
predict.all
lesnorm.votes
paramètres et, cela ne semble pas être possible. Si vous le voulez vraiment, vous devrez probablement coder votre propre forêt aléatoire. Je suis d'accord avec @psarka que cela est parfaitement logique. (Je supprimerais cette réponse, mais nous perdrions cette discussion dans les commentaires.)