seuil de classification dans RandomForest-sklearn

9

1) Comment puis-je changer le seuil de classification (je pense que c'est 0,5 par défaut) dans RandomForest dans sklearn?

2) Comment puis-je sous-échantillonner dans Sklearn?

3) J'ai le résultat suivant du classificateur RandomForest: [[1635 1297] [520 3624]]

         precision    recall  f1-score   support

class 0       0.76      0.56      0.64      2932
class 1       0.74      0.87      0.80      4144

moyenne / total 0,75 0,74 0,73 7076

tout d'abord, les données sont déséquilibrées (30% de la classe 0 et 70% de la classe 1). Donc, je pense que le classificateur est plus susceptible d'être biaisé pour la classe 1, ce qui signifie en déplacer de la classe 0 à la classe 1 (il y a 1297 classification erronée pour la classe 0 mais 520 classification erronée pour la classe 1). Comment puis-je réparer cela? si le sous-échantillonnage peut aider? ou changer le seuil de classification?

Mise à jour: la classe 0 a 40% de la population tandis que la classe 1 est 60%. Cependant, la dérive de la classe 0 à la classe 1 (1297) est élevée alors que je veux que cela devienne faible.

Amateur de Big Data
la source

Réponses:

7

Vous pouvez en effet envelopper votre forêt aléatoire dans une classe qu'une predictméthode qui appelle la predict_probaméthode de la forêt aléatoire interne et produire la classe 1 uniquement si elle est supérieure à un seuil personnalisé.

Alternativement, vous pouvez biaiser l'algorithme d'apprentissage en passant un plus haut sample_weightpour les échantillons de la classe minoritaire.

ogrisel
la source
Merci. Je pensais à augmenter le poids pour les classes mineures. Cependant, je ne vois rien dans le classificateur RandomForest (il y en a dans SGDclassifier)
Big Data Lover
La méthode d'ajustement accepte un sample_weightparam (un poids par paramètre) qui est très flexible et permet de simuler class_weight(un poids par classe cible).
ogrisel
Merci. lorsque j'utilise clf = clf.fit (X, Y, sample_weight = preprocessing.balance_weights (y), cela me donne ValueError: les opérandes ne peuvent pas être diffusés avec les formes. y est binaire 0/1
Big Data Lover
Quelle est la forme de y? Pourquoi avez-vous différent Yet y?
ogrisel