À l'aide de la predict_proba() la fonction de RandomForestClassifier dans le coffre-fort et de la bonne façon
Je suis en utilisant Scikit-apprendre à appliquer l'algorithme d'apprentissage automatique sur mon jeux de données. Parfois, j'ai besoin d'avoir les probabilités d'étiquettes/classes instauré des étiquettes/classes elles-mêmes. Au lieu d'avoir de Spam/Non Spam comme les étiquettes d'e-mails, je souhaite que par exemple: 0.78 probabilité un e-mail est un Spam.
À cette fin, je suis en utilisant predict_proba() avec RandomForestClassifier comme suit:
clf = RandomForestClassifier(n_estimators=10, max_depth=None,
min_samples_split=1, random_state=0)
scores = cross_val_score(clf, X, y)
print(scores.mean())
classifier = clf.fit(X,y)
predictions = classifier.predict_proba(Xtest)
print(predictions)
Et j'ai obtenu ces résultats:
[ 0.4 0.6]
[ 0.1 0.9]
[ 0.2 0.8]
[ 0.7 0.3]
[ 0.3 0.7]
[ 0.3 0.7]
[ 0.7 0.3]
[ 0.4 0.6]
Où la deuxième colonne est pour la classe: le Spam. Cependant, j'ai deux problèmes principaux résultats à propos de laquelle je ne suis pas convaincu. Le premier problème est que les résultats représentent les probabilités de les étiquettes, sans être affectée par la taille de mes données? Le deuxième problème est que les résultats ne montrent qu'un seul chiffre qui n'est pas très précis dans certains cas où le 0.701 probabilité est très différent de 0.708. Est-il possible d'obtenir la prochaine à 5 chiffres, par exemple?
Merci beaucoup d'avance pour votre temps à la lecture de ces deux problèmes et leurs questions.
Chers PRresle, je vous remercie pour votre commentaire.
OriginalL'auteur Clinical | 2015-06-13
Vous devez vous connecter pour publier un commentaire.
- Je obtenir plus d'un chiffre dans mes résultats, vous êtes sûr que c'est pas à cause de votre jeu de données ? (par exemple à l'aide d'un très petit dataset donnerait à de simples arbres de décision et donc de "simple" des probabilités). Sinon, il ne peut être l'écran qui affiche un chiffre, mais essayez d'imprimer
predictions[0,0]
.Je ne suis pas sûr de comprendre ce que tu veux dire par "les probabilités ne sont pas affectées par la taille de mes données". Si votre problème est que vous ne voulez pas de prédire, par exemple, de trop nombreux spams, ce qui est généralement fait est d'utiliser un seuil de
t
tels que vous prévoyez 1 siproba(label==1) > t
. De cette façon, vous pouvez utiliser le seuil d'équilibre de vos prédictions, par exemple de limiter le mondial probabilty de spams. Et si vous voulez l'échelle mondiale analyser votre modèle, nous avons l'habitude de calculer l'Aire sous la courbe (ASC) de la caractéristique de fonctionnement du Récepteur (ROC) de la courbe (voir l'article de wikipédia ici). Fondamentalement, la courbe ROC est une description de vos prédictions selon le seuilt
.Espère que cela aide!
predict_proba
de laDecisionTreeClassifier
classe:The predicted class probability is the fraction of samples of the same class in a leaf.
Et la prédiction d'une forêt aléatoire est la moyenne sur tous les arbres :The predicted class probabilities of an input sample is computed as the mean predicted class probabilities of the trees in the forest.
Cher Sébastien, j'espère que vous êtes bien. Merci beaucoup pour vos réponses. Ils ont aidé, c'est sûr. Cependant, je pense que mon anglais n'était pas très clair. Donc, je suis désolé. Laissez-moi vous expliquer point numéro deux d'une autre manière. Si je fournis les 10 cas (nouveaux e-mails) à nos produits (modèle Aléatoire Forêt classificateur). Si le classificateur me donne 0.6 probabilité que l'e-mail numéro 1 sera de spam, est de 0,6 affecté par les autres probabilités des valeurs de l'9 autres instances, ou la probabilité est indépendante et représente la probabilité d'occurrence de 1 à spam avec 60% quelque soit les 9 autres instances des probabilités.
Et, concernant le premier point et votre suggestion pour vérifier la valeur d'une prédiction, en fait j'ai eu le même nombre de chiffres. La seule façon d'obtenir plus de chiffres est d'augmenter le nombre d'estimateurs (arbres) et une telle façon est sûr, c'est pas une façon acceptable.
1) Sur la prédiction de la précision: j'insiste mais ce n'est pas une question de nombre d'arbres. Même avec un seul arbre de décision, vous devriez être en mesure d'obtenir la probabilité predicitions avec plusieurs chiffres. Un arbre de décision vise à regrouper les données fondées sur des règles (la décision), et ces clusters sont les feuilles de l'arbre. Si vous avez une feuille avec 2 non-spam e-mails et un email de spam à partir de vos données d'entraînement, alors la probabilité de prédiction pour n'importe quel e-mail qui appartient cette feuille/cluster (en ce qui concerne les règles établies par l'application du modèle), est la suivante : 1/3 pour le spam et 2/3 pour les non-spam.
2) Sur les dépendances dans les prédictions: Nouveau Sklearn définition donne la réponse : la probabilité est calculée en ce qui concerne la feuille (correspondant à votre e-mail de test) 's caractéristiques : le nombre d'instances de chaque classe dans cette feuille. C'est ensemble, lorsque votre modèle est équipé, de sorte qu'il ne dépend que des données d'entraînement. En conclusion : le résultat est la probabilité d'occurrence de 1 à spam avec 60% quelque soit les 9 autres instances des probabilités.
OriginalL'auteur Sebastien
Un
RandomForestClassifier
est une collection deDecisionTreeClassifier
'. Peu importe comment grand votre entraînement, un arbre de décision renvoie simplement: une décision. Une classe a une probabilité de 1, les autres classes ont une probabilité 0.La RandomForest simplement de voix parmi les résultats.
predict_proba()
renvoie le nombre de votes pour chaque classe (chaque arbre dans la forêt fait sa propre décision et choisit exactement une classe), divisé par le nombre d'arbres dans la forêt. Par conséquent, votre précision est exactement1/n_estimators
. Vous voulez plus de "précision"? Ajouter plus d'estimateurs. Si vous voulez voir une variation, lors de la 5e chiffre, vous aurez besoin de10**5 = 100,000
estimateurs, ce qui est excessif. Normalement, vous ne voulez pas plus de 100 estimateurs, et souvent pas beaucoup.OriginalL'auteur Andreus