Comment contrôler le coût des erreurs de classification dans les forêts aléatoires?

21

Est-il possible de contrôler le coût des erreurs de classification dans le package R randomForest ?

Dans mon propre travail, les faux négatifs (par exemple, le fait de manquer par erreur qu'une personne peut avoir une maladie) sont beaucoup plus coûteux que les faux positifs. Le package rpart permet à l'utilisateur de contrôler les coûts de mauvaise classification en spécifiant une matrice de perte pour pondérer différemment les erreurs de classification. Existe-t-il quelque chose de similaire pour randomForest? Dois-je, par exemple, utiliser l' classwtoption pour contrôler le critère de Gini?

user5944
la source

Réponses:

8

Pas vraiment, sinon en faisant manuellement un clone RF en effectuant l'ensachage des rpartmodèles.

Une option vient du fait que la sortie de RF est en fait un score continu plutôt qu'une décision nette, c'est-à-dire la fraction d'arbres qui ont voté sur une classe. Il peut être extrait avec predict(rf_model,type="prob")et utilisé pour créer, par exemple, une courbe ROC qui révélera un meilleur seuil que 0,5 (qui peut ensuite être incorporé dans la formation RF avec cutoffparamètre).

classwt L'approche semble également valable, mais elle ne fonctionne pas très bien dans la pratique - la transition entre une prédiction équilibrée et une conversion triviale de la même classe, quels que soient les attributs, a tendance à être trop nette pour être utilisable.


la source
MBQ. Merci beaucoup. (i) Courbe ROC: Dans ce cas, je n'ai pas besoin de la courbe ROC car j'ai mes propres priorités sur la pondération des coûts. (ii) classwt: Oui, j'ai constaté que dans la pratique, et en ligne avec d'autres utilisateurs, les résultats ne sont pas comme prévu. (iii) cutoff: Je ne sais pas comment l'utiliser cutoffdans ce cas et je serais heureux de recevoir d'autres conseils.
user5944
3

Il existe plusieurs façons d'inclure les coûts.
(1) L'échantillonnage sur / sous pour chaque arbre ensaché (échantillonnage stratifié) est la méthode la plus courante pour introduire les coûts. vous déséquilibrez intentionnellement l'ensemble de données.
(2) Pondération. Ne fonctionne jamais. Je pense que cela est souligné dans la documentation. Certains prétendent qu'il suffit de peser à toutes les étapes, y compris le fractionnement de Gini et le vote final. Si ça va marcher, ça va être une implémentation délicate.
(3) Fonction Metacost à Weka.
(4) Traiter une forêt aléatoire comme un classificateur probabiliste et changer le seuil. J'aime le moins cette option. Probablement en raison de mon manque de connaissances, mais même si l'algorithme peut générer des probabilités, cela n'a pas de sens pour moi de les traiter comme s'il s'agissait d'un modèle probabiliste.

Mais je suis sûr qu'il existe des approches supplémentaires.

Charles
la source
3

Il est recommandé que si la variable que vous essayez de prédire n'est pas à 50% class 1et à 50% pour class 2(comme la plupart des cas), vous ajustez le cutoffparamètre pour qu'il représente le réel OOBen résumé.

Par exemple,

randomForest(data=my_data, formula, ntree = 501, cutoff=c(.96,.04))

Dans ce cas, la probabilité d'avoir une valeur de un class 1est .96tout en ayant une valeur de class 2is .04.

Sinon, les forêts aléatoires utilisent un seuil de 0.5.

pablo_sci
la source
1

On peut incorporer costMatrixdans randomForestexplicitement via le parmsparamètre:

library(randomForest)
costMatrix <- matrix(c(0,10,1,0), nrow=2)
mod_rf <- randomForest(outcome ~ ., data = train, ntree = 1000, parms = list(loss=costMatrix))
Sergey Bushmanov
la source
0

Vous pouvez intégrer la sensibilité aux coûts en utilisant la sampsizefonction dans le randomForestpackage.

model1=randomForest(DependentVariable~., data=my_data, sampsize=c(100,20))

Variez les chiffres en (100,20)fonction des données dont vous disposez et des hypothèses / règles commerciales avec lesquelles vous travaillez.

Il faut un peu d'essais et d'erreurs pour obtenir une matrice de confusion qui reflète les coûts des erreurs de classification. Jetez un œil aux prévisions criminelles du risque de Richard Berk : une approche d'apprentissage automatique , p. 82.

MH TING
la source