Wie sollte man bei der Klassifizierung mit zufälligen Wäldern in R die unausgeglichenen Klassengrößen anpassen?


16

Ich erkunde verschiedene Klassifizierungsmethoden für ein Projekt, an dem ich arbeite, und bin daran interessiert, Random Forests auszuprobieren. Ich versuche mich weiterzubilden und würde mich über jede Hilfe durch die CV-Community freuen.

Ich habe meine Daten in Trainings- / Test-Sets aufgeteilt. Durch Experimente mit zufälligen Gesamtstrukturen in R (mit dem randomForest-Paket) hatte ich Probleme mit einer hohen Fehlklassifizierungsrate für meine kleinere Klasse. Ich habe dieses Papier über die Leistung von Zufallsgesamtstrukturen mit unausgeglichenen Daten gelesen und die Autoren stellten zwei Methoden zum Umgang mit Klassenungleichgewichten bei der Verwendung von Zufallsgesamtstrukturen vor.

1. Gewichtete zufällige Wälder

2. Ausgewogene zufällige Wälder

Das R-Paket erlaubt keine Gewichtung der Klassen (in den R-Hilfeforen habe ich gelesen, dass der classwt-Parameter nicht ordnungsgemäß ausgeführt wird und als künftige Fehlerbehebung geplant ist). Daher bleibt mir die Option 2. Ich kann angeben Die Anzahl der Objekte, die von jeder Klasse für jede Iteration der zufälligen Gesamtstruktur abgetastet wurden.

Es ist mir unangenehm, gleiche Stichprobengrößen für zufällige Gesamtstrukturen festzulegen, da ich das Gefühl habe, zu viele Informationen über die größere Klasse zu verlieren, was bei zukünftigen Daten zu einer schlechten Leistung führen würde. Die Fehlklassifizierungsraten beim Downsampling der größeren Klasse haben sich verbessert, aber ich habe mich gefragt, ob es andere Möglichkeiten gibt, mit unausgeglichenen Klassengrößen in zufälligen Wäldern umzugehen.


1
Bin auch mit dem ähnlichen Problem konfrontiert. Könnten Sie bitte das Skript für Weighted Random Forest und Metric based Random Forest bereitstellen, wenn Sie haben? Ich freue mich auf Ihre Antwort

Antworten:


5

Wenn Ihnen diese Optionen nicht gefallen, haben Sie überlegt, stattdessen eine Boosting-Methode zu verwenden? Bei entsprechender Verlustfunktion werden die Gewichte beim Boosten automatisch neu kalibriert. Wenn Ihnen die stochastische Natur von zufälligen Wäldern zusagt, wird dies auch durch die Erhöhung des stochastischen Gefälles unterstützt.


Hallo David, danke für den Vorschlag. Wäre Boosten innerhalb / in Kombination mit zufälligen Wäldern möglich? Ich habe auch gelesen, dass Boosten mit verrauschten Daten möglicherweise nicht anwendbar ist. Die Daten, mit denen ich arbeite, enthalten viele "verrauschte" Variablen. Derzeit führe ich zufällige Gesamtstrukturen ohne Featureauswahl aus. Dabei wird die größere Klasse heruntergerechnet, um das Ungleichgewicht zu beheben. Ich habe akzeptable Ergebnisse erzielt (85% der kleineren Klasse und 93% der größeren Klasse im Trainingssatz richtig klassifiziert), aber Verbesserungen sind immer willkommen.
ialm

@Jonathan Ich habe keine Ahnung, wie viel Lärm erforderlich ist, bevor zufällige Wälder anfangen, die verschiedenen Auffrischungsmethoden zu übertreffen, aber ich habe den Eindruck, dass es sehr anstrengend ist. Das gbmPaket in Rhat einen funktionierenden Ausdruck "Gewichte", und Sie können die Zufälligkeit auf sehr ähnliche Weise wie zufällige Wälder erhöhen, indem Sie den Ausdruck "bag.fraction" verringern. Es scheint, als wäre es einen Versuch wert.
David J. Harris

@ DavidJ.Harris Boosting leidet auch unter Klassenungleichgewicht, insbesondere bei absoluter Seltenheit, wenn Informationen über die Minderheitsklassen spärlich sind
Antoine

2

Ich denke, dass das Gewichten von Objekten irgendwie dem Duplizieren von Objekten entspricht. Vielleicht sollten Sie versuchen, den Bootstrap-Schritt zu ändern, indem Sie Ihre verschiedenen Klassen entsprechend abtasten.

Ein anderer Gedanke ist, dass ein Klassenungleichgewicht Ihren Entscheidungsschwellenwert auf einen anderen Wert als (wenn es sich um ein Binärklassifizierungsproblem handelt). Betrachten Sie die ROC-Kurven und die AUC, um festzustellen, wie stark das Ungleichgewicht die Leistung Ihrer Modelle beeinträchtigt.0,5


0

Anstatt große Klassen abzutasten, können Sie kleine Klassen erweitern! Wenn große Klassen um ein Vielfaches häufiger beobachtet werden als kleine, ist die Verzerrung gering. Ich hoffe, Sie können mit diesem übergroßen Datensatz umgehen.

Sie können auch Untergruppen von Beobachtungen identifizieren, die die meisten Informationen über große Klassen verarbeiten. Es gibt viele mögliche Verfahren. Die einfachste Methode basiert meiner Meinung nach auf der Methode des nächsten Nachbarn. Die Stichprobe der Beobachtung basiert auf einer Nachbarschaftsgraphenstruktur, die sicherstellt, dass die Stichprobe eine Wahrscheinlichkeitsdichte aufweist, die ähnlicher ist Original.

randomForest ist in Fortran und c geschrieben, der Quellcode ist verfügbar (http://cran.r-project.org/src/contrib/randomForest_4.6-2.tar.gz), aber ich kann den Ort nicht erkennen, an dem Enthropie berechnet wird. ps. ups that randomforest verwenden Gini anstelle von Enthropie


Das Identifizieren von Teilmengen von Beobachtungen in der größeren Klasse scheint eine interessante Idee zu sein. Der zweite Teil des Projekts besteht darin, die größere Klasse in kleinere, nützliche Untergruppen zu unterteilen, die für zukünftige Studien nützlich sein können. Bezüglich der Entropieberechnungen im Code habe ich mich nicht mit dem Code befasst und nur einen Teil der Theorie hinter rf betrachtet, daher kann ich dazu keinen Kommentar abgeben.
ialm

Ich wollte diesen Code schon vor langer Zeit ändern, aber dafür fehlte mir die Zeit. Das Hinzufügen von Gewichten sollte konzeptionell nicht schwierig sein.
Qbik

Zufällige Gesamtstruktur in R könnte als Regressionswerkzeug verwendet werden, möglicherweise auch für unbeaufsichtigte Klassifizierung. Ich wollte den Code von randomForest vor langer Zeit ändern, hatte aber keine Zeit dafür. Das Hinzufügen von Gewichten sollte konzeptionell nicht schwierig sein. Vor einiger Zeit habe ich mich selbst gefragt, wie ich Random Forest für die unbeaufsichtigte Clusterbildung verwenden soll. Ich habe eine Idee, habe sie aber noch nicht getestet. Leider scheint sie ziemlich rechenintensiv zu sein.
Qbik

0

(1) Sie haben Recht, die Gewichtungsfunktion funktioniert nicht und Sie sind sich nicht sicher, ob sie jemals behoben wurde.

(2) Die meisten verwenden Option 2 mit ausgeglichenen Daten. Der Schlüssel, um nicht zu viele Daten zu verlieren, ist das Stratified Sampling. Sie wählen für jeden Baum nach dem Zufallsprinzip einen eindeutigen ausgeglichenen Satz.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.