Was bedeutet "sample_weight" do-der Weg, ein `DecisionTreeClassifier " funktioniert in der sklearn?
Gelesen habe ich von diese Dokumentation:
"Class balancing getan werden kann, durch Stichproben die gleiche Anzahl von Proben aus jeder Klasse, oder vorzugsweise durch die Normalisierung der Summe der Stichprobe zu gewichten (sample_weight) für jede Klasse den gleichen Wert."
Aber es ist mir noch immer unklar, wie dies funktioniert. Wenn ich sample_weight
mit einer Reihe von nur zwei möglichen Werten 1
's und 2
's, bedeutet das, dass die Proben mit 2
's bekommen wird abgetastet doppelt so oft wie die Proben mit 1
's, wenn dabei das Absacken? Ich kann mir nicht vorstellen dazu ein praktisches Beispiel.
InformationsquelleAutor Hunle | 2015-12-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
So verbrachte ich ein wenig Zeit, sich auf den sklearn Quelle, weil ich eigentlich schon Sinn zu versuchen, um dies herauszufinden, mich für eine Weile jetzt, zu. Ich entschuldige mich für die Länge, aber ich weiß nicht, wie zu erklären, es kürzer.
Schnell ein paar Vorbereitungen:
Sagen wir, wir haben eine Klassifizierung problem mit K Klassen. In einer region, die von feature-Raum, repräsentiert durch die Knoten eines entscheidungsbaums, daran erinnern, dass die "Verunreinigung" der region ist gemessen durch die Quantifizierung der inhomogenität, mit der Wahrscheinlichkeit, dass die Klasse in dieser region. Normalerweise schätzen wir:
Die Verunreinigung zu Messen, verwendet als Eingabe das array von class-Wahrscheinlichkeiten:
und spuckt eine Zahl, die Ihnen sagt, wie "unrein" oder, wie inhomogen-von-Klasse-die region der feature-Raum ist. Zum Beispiel der gini-Maß für ein zwei-Klassen-problem ist
2*p*(1-p)
, wop = Pr(Class=1)
und1-p=Pr(Class=2)
.Nun, grundsätzlich ist die kurze Antwort auf Ihre Frage ist:
sample_weight
erhöht die Wahrscheinlichkeit schätzt die Wahrscheinlichkeit array ... das vermehrt die Verunreinigung zu Messen ... die augments, wie die Knoten aufgeteilt sind ... die augments, wie der Baum aufgebaut ist ... das erweitert wie bieten Platz wird gewürfelt bis zur Klassifizierung.Ich glaube dies wird am besten anhand eines Beispiels veranschaulichen.
Ersten betrachten Sie das folgende 2-Klassen-problem, wo die Eingänge sind 1 dimensional:
So, sehen wir uns die Bäume mit nur einem Wurzelknoten und zwei Kinder. Beachten Sie, dass die Standard-Verunreinigung Messen der gini-Maß.
Fall 1: keine
sample_weight
Den ersten Wert in der
threshold
array erzählt uns, dass die 1. Ausbildung ist beispielsweise an den linken Kind-Knoten, und der 2. und 3. Schulung Beispiele sind geschickt auf der rechten Kind-Knoten. Die letzten beiden Werte inthreshold
sind Platzhalter und werden ignoriert. Dieimpurity
array erzählt uns die berechnete Verunreinigung Werte in der übergeordneten, linken und rechten Knoten bzw.In den übergeordneten Knoten
p = Pr(Class=1) = 2. /3.
, so dassgini = 2*(2.0/3.0)*(1.0/3.0) = 0.444....
. Können Sie bestätigen, dass die untergeordneten Knoten Verunreinigungen als gut.Fall 2: mit
sample_weight
Nun, lassen Sie uns versuchen:
Können Sie sehen, die Funktion Schwelle ist unterschiedlich.
sample_weight
wirkt sich auch auf die Verunreinigung Maßnahme in jedem Knoten. Insbesondere in der Wahrscheinlichkeit schätzt, das erste training Beispiel wird gezählt, die gleiche, die zweite ist doppelt gezählt, und die Dritte ist dreifach gezählt, aufgrund der Stichprobe GEWICHTE die wir haben.Die Verunreinigung in der Eltern-Knoten der region ist der gleiche. Dies ist nur ein Zufall. Wir berechnen direkt:
Den gini-Maß
4/9
folgt.Nun können Sie sehen, aus der gewählten Schwellenwerts, der von dem ersten und zweiten training Beispiele sind an den linken Kind-Knoten, während der Dritte, an den richtigen. Wir sehen, dass die Verunreinigung berechnet werden
4/9
auch im linken Kind-Knoten, weil:Die Verunreinigung von null in das Rechte Kind ist durch nur ein training Beispiel liegen in dieser region.
Verlängern Sie diese mit nicht-integer-sample-Wichte ähnlich. Ich empfehle zu versuchen so etwas wie
sample_weight = [1,2,2.5]
, und bestätigt die berechnete Verunreinigungen.Hoffe, das hilft!
gini measure
, sollte es nicht2/3 * (1 - 2/3) = 2/9
? Okay, ich sehen, dass es wirkt sich auf die Verunreinigung zu Messen, aber wie sollte das anders sein als nur sampling-ein bestimmte Muster häufiger oder weniger Häufig auf der Grundlage relativersample weights
? Danke für die ausführliche Erklärung!Der gini-Maß ist
2*p*(1-p)
für binäre Klassifikation, die ist, warum das Ergebnis 4/9. Du hast Recht in deiner interpretation. Jedoch, "sampling", schlägt der Zufälligkeit, dem es nicht (nur um klar zu sein). Wennsample_weights
sind ganze zahlen, es ist wie die Replikation derith
Ausbildung Beispielsamples_weights[i]
mal in die Verunreinigung zu Messen. Natürlichsample_weights
müssen nicht ganze zahlen sein, aber die Idee ist die gleiche.so klar, sehr hilfreich
InformationsquelleAutor Matt Hancock
Wenn jemand gerade auf der Suche für den Weg zu berechnen, den sample_weight wie ich war, finden Sie vielleicht diese ganz praktisch.
sklearn.utils.class_weight.compute_sample_weight
InformationsquelleAutor Chris Farr