k-fold stratified cross-validation mit unausgewogenen Klassen
Habe ich die Daten mit 4 Klassen und ich bin versucht, erstellen Sie eine benutzerdefinierte klassifizierungsfunktion. Ich habe ~1000 Vektoren für eine Klasse, ~10^4 für andere, ~10^5 für das Dritte und ~10^6 für die vierte. Ich hatte gehofft, mit cross-validation so dass ich schaute auf die scikit-learn docs .
Meinem ersten Versuch war der Einsatz von StratifiedShuffleSplit aber das gibt den gleichen Prozentsatz für jede Klasse, verlassen die Klassen drastisch unausgewogen immer noch.
Gibt es einen Weg, um cross-validation aber mit den Klassen ausgeglichen
die Trainings-und test-set?
Als eine Randnotiz, ich konnte allerdings nicht herausfinden, den Unterschied zwischen StratifiedShuffleSplit und StratifiedKFold . Die Beschreibungen sind sich sehr ähnlich.
InformationsquelleAutor eleanora | 2015-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich das Gefühl, dass Sie sind verwirrend, was eine geschichtete Strategie zu tun, aber Sie müssen zeigen Sie Ihren code und Ihre Ergebnisse zu sagen, für sicher, was Los ist (den gleichen Prozentsatz wie Ihr Anteil in der ursprünglichen Menge, oder den gleichen Prozentsatz innerhalb der zurückgegebenen Zug /test-set? Die erste ist, wie es sein soll).
Einer von diesen sollte auf jeden Fall funktionieren. Die Beschreibung der ersten Art ist auf jeden Fall ein wenig verwirrend, aber hier ist, was Sie tun.
StratifiedShuffleSplit
Dies bedeutet, dass es teilt die Daten in eine Zug-und test-set. Die geschichtete Teil bedeutet, dass Prozentsätze gepflegt werden, in diesem split. Also, wenn
10%
Ihrer Daten ist in der Klasse 1 und90%
ist in der Klasse 2, dadurch wird sichergestellt, dass10%
Ihre Zug-set wird in Klasse 1 und90%
werden in der Klasse 2. Gleich für den test festgelegt.Dein post macht es klingen wie Sie wollen
50%
jeder Klasse im test-set. Das ist nicht das, was die Schichtung hat, die Schichtung bleibt die ursprüngliche Prozentsätze. Sollten Sie diese beibehalten, da du sonst geben Sie sich eine bedeutungslose Idee über die Leistung Ihrer Klassifizierer: wer kümmert sich, wie gut es klassifiziert50/50
split, wenn du Sie in der Praxis sehen10/90
teilt?StratifiedKFold
Sehen k-fold cross validation. Ohne Schichtung, nur teilt Ihre Daten in
k
Falten. Dann, jede Falte1 <= i <= k
verwendet wird, einmal als test gesetzt, während die anderen für die Ausbildung verwendet. Die Ergebnisse sind gemittelt in das Ende. Es ist so ähnlich wie laufen dieShuffleSplit
k
Zeiten.Schichtung wird sichergestellt, dass die Prozentsätze der jeweiligen Klasse in Ihrer gesamten Daten werden die gleichen (oder sehr nahe) in jedem einzelnen Fach.
Gibt es eine Menge Literatur, die sich mit unausgeglichenen Klassen. Einige einfache Methoden beinhalten, die mit Klassen-GEWICHTE und-Analyse die ROC-Kurve. Ich schlage vor, die folgenden Ressourcen für Ansatzpunkte:
wirklich, Sie wollen nicht, das zu tun. Es wird nicht helfen, am Ende, und im schlimmsten Fall wird es nur geben Ihnen ein Falsches Gefühl der Sicherheit. Wenn Sie haben, unbalancierte Klassen, Blick in die Klassen-GEWICHTE: scikit-learn.org/stable/auto_examples/svm/... ; quora.com/... ; ROC-Kurven: stats.stackexchange.com/questions/6067/...
wenn Sie darauf bestehen, es zu tun, es ist ziemlich einfach: entscheiden Sie sich für eine Größe
x
für das training eingestellt haben, dann Holen Siex / 4
der Klasse 1, die gleiche Klasse 2, 3, 4. Aber, wirklich, es ist ein falsch, was zu tun ist!Nochmals vielen Dank. Ich bin mit einem random forest und ich werde in mit class_weight . Ich lese stackoverflow.com/questions/8704681/... das scheint eng verwandt, wo es sich beraten, machen die Klassen weniger unausgewogen. Ich bin nicht sicher über die Verwendung von ROC-Kurven für eine multiclass problem.
das ist ein bisschen anders, denn die Klassen sind viel mehr Gleichgewicht, als Ihre eigenen, und die Antwort schlägt nur reduzieren Sie es ein wenig. Dennoch denke ich, gibt es bessere Möglichkeiten. Wenn man sich die stats SE Frage, du wirst sehen, dass es akzeptabel ist, zu tun, was Sie wurden, was darauf hindeutet, aber nur so lange, wie Sie vorsichtig sind die Ergebnisse zu interpretieren anders.
InformationsquelleAutor IVlad
K-Fold CV
K-Fold CV Werke nach dem Zufallsprinzip zu partitionieren Ihre Daten in
k
(ziemlich) gleich-Partitionen. Wenn Ihre Daten wurden gleichmäßig verteilt über Klassen wie[0,1,0,1,0,1,0,1,0,1]
bei zufälliger Probenahme mit (oder ohne Ersatz) geben Sie etwa eqal sample-Größen von0
und1
.Jedoch, wenn Ihre Daten mehr wie
[0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0]
wo die eine Klasse repräsentiert die Daten, k-fold cv ohne gewichtete Stichproben geben würde, Sie zu fehlerhaften Ergebnissen führen.
Wenn Sie mit einem normalen k-fold CV ohne Anpassung sampling GEWICHTE von der einheitlichen Probenahme, dann würden Sie erhalten etwas ähnliches wie
wo es klar teilt ohne brauchbare Darstellung der beiden Klassen.
Den Punkt der k-fold CV zu trainieren/testen, ein Modell über alle Teilmengen der Daten, während bei jeder Prüfung verlassen aus 1 Teilmenge und training auf k-1 Teilmengen.
In diesem Szenario werden Sie wollen, um zu verwenden, aufgeteilt nach Schichten. In der oben genannten Daten setzen, gibt es 27
0s
und 51s
. Wenn Sie möchten, um zu berechnen, k=5 CV, wäre es nicht zumutbar sein, teilen die Schichten des1
in 5 Untergruppen. Eine bessere Lösung ist die Aufteilung in k < 5 Untergruppen, wie 2. Die Schichten des0s
bleiben kann, mit k=5 aufspaltet, da es viel größer ist. Dann, während des Trainings, Sie hätten ein einfaches Produkt von2 x 5
aus dem Daten-set. Hier ist etwas code zur VeranschaulichungDieser Methode erreichen kann die Aufteilung der Daten in Partitionen, wo alle Partitionen sind schließlich nur noch für Testzwecke. Es sollte angemerkt werden, dass nicht alle statistischen Lernens-Methoden erlauben eine Gewichtung, so dass die Anpassung Methoden wie Lebenslauf ist unerlässlich, um Konto für die Probenahme Proportionen.
InformationsquelleAutor Jon