Qu'est-ce que sample_weight "faire à la manière d'un "DecisionTreeClassifier" des œuvres en sklearn?
J'ai lu de cette documentation que :
"Classe d'équilibrage peut être fait par l'échantillonnage d'un nombre égal d'échantillons de chaque classe, ou, de préférence, par la normalisation de la somme des facteurs de pondération (sample_weight) pour chaque classe à la même valeur."
Mais, c'est pas encore clair pour moi comment cela fonctionne. Si j'ai mis sample_weight
avec un tableau de seulement deux valeurs possibles, 1
's et 2
's, est-ce à dire que les échantillons avec 2
's obtiendrez échantillonnés deux fois plus souvent que les échantillons avec 1
's lors de l'ensachage? Je ne peux pas penser à un exemple pratique pour cela.
OriginalL'auteur Hunle | 2015-12-21
Vous devez vous connecter pour publier un commentaire.
J'ai donc passé un peu de temps à regarder les sklearn source parce que j'ai été réellement sens pour essayer de comprendre cela moi-même pour un peu de temps maintenant, trop. Je m'excuse pour la longueur, mais je ne sais pas comment l'expliquer plus brièvement.
Quelques préliminaires:
Disons que nous avons un problème de classement avec des K classes. Dans une région de l'espace de la fonctionnalité représentée par le nœud d'un arbre de décision, rappelons que la "impureté" de la région est mesurée par la quantification de l'hétérogénéité, à l'aide de la probabilité de la classe dans cette région. Normalement, nous estimons:
L'impureté mesure prend comme entrée, le tableau de la classe probabilités:
et crache un certain nombre, qui vous indique comment "impures" ou comment inhomogène par classe la région de l'espace de la fonctionnalité. Par exemple, le coefficient de gini mesure pour un deux classes problème est
2*p*(1-p)
, oùp = Pr(Class=1)
et1-p=Pr(Class=2)
.Maintenant, fondamentalement, la réponse courte à votre question est:
sample_weight
augmente la probabilité des estimations de la probabilité de la matrice de ... ce qui augmente l'impureté mesure ... ce qui augmente la façon dont les nœuds sont répartis ... ce qui augmente la façon dont l'arbre est construit ... ce qui augmente de façon caractéristique de l'espace est coupé en dés pour la classification.Je crois que c'est le mieux illustrée par l'exemple.
D'abord considérer les 2 suivants de la classe problème où les entrées sont à 1 dimensions:
Donc, nous allons regarder les arbres avec seulement un nœud racine et de deux enfants. Notez que par défaut, l'impureté de mesurer le coefficient de gini mesure.
Cas 1: pas de
sample_weight
La première valeur dans la
threshold
tableau nous indique que la 1ère formation exemple est envoyé vers la gauche nœud enfant, et les 2e et 3e exemples de formation sont envoyés vers la droite nœud enfant. Les deux dernières valeurs dansthreshold
sont des espaces réservés et doivent être ignorés. Leimpurity
tableau nous indique le résultat de l'impureté des valeurs dans la société mère, de gauche, de droite et de nœuds respectivement.Dans le nœud parent,
p = Pr(Class=1) = 2. /3.
, de sorte quegini = 2*(2.0/3.0)*(1.0/3.0) = 0.444....
. Vous pouvez confirmer le nœud enfant impuretés.Cas 2: avec
sample_weight
Maintenant, essayons:
Vous pouvez voir la fonction seuil est différent.
sample_weight
affecte également l'impureté mesurer dans chaque nœud. Plus précisément, dans les estimations de probabilité, le premier exemple d'apprentissage est compté, la seconde est comptée double, et la troisième est compté triple, en raison du poids de l'échantillon nous vous avons donné.L'impureté dans le nœud parent de la région est la même. C'est juste une coïncidence. On peut calculer directement:
Le coefficient de gini mesure de
4/9
suit.Maintenant, vous pouvez le voir sur le seuil choisi la première et la seconde les exemples d'apprentissage sont envoyés vers la gauche nœud enfant, tandis que le troisième est envoyé vers la droite. Nous voyons que l'impureté est calculé pour être
4/9
aussi dans la gauche nœud enfant parce que:L'impureté de zéro dans le droit de l'enfant est due à un seul exemple d'apprentissage couché dans cette région.
Vous pouvez étendre cette non-entier de l'échantillon-les revenants de la même façon. Je vous recommande d'essayer quelque chose comme
sample_weight = [1,2,2.5]
, et confirmant le calcul des impuretés.Espérons que cette aide!
gini measure
, ne devrait-elle pas être2/3 * (1 - 2/3) = 2/9
? Ok, donc, je vois qu'il affecte l'impureté de la mesure, mais comment cela serait-il différent de la juste de l'échantillonnage d'un certain échantillon plus ou moins fréquente selon l'importance relative desample weights
? Merci pour l'explication détaillée!Le coefficient de gini mesure est
2*p*(1-p)
pour la classification binaire, c'est pourquoi le résultat est 4/9. Vous avez raison dans votre interprétation. Cependant, "l'échantillonnage", suggère aléatoire, qui n'est pas (juste pour être clair). Lorsquesample_weights
sont des nombres entiers, c'est comme la réplication de l'ith
formation exemplesamples_weights[i]
fois dans l'impureté de la mesure. Bien sûr,sample_weights
n'ont pas à être des entiers, mais l'idée est la même.très clair, très utile
OriginalL'auteur Matt Hancock
Si quelqu'un est à la recherche de la manière de calculer l'sample_weight comme je l'étais, vous trouverez peut-être ce à portée de main.
sklearn.utils.class_weight.compute_sample_weight
OriginalL'auteur Chris Farr