Wie führe ich eine unbeaufsichtigte Random Forest-Klassifizierung mit Breimans Code durch?

8

Ich arbeite mit Breimans zufälligem Waldcode ( http://stat-www.berkeley.edu/users/breiman/RandomForests/cc_manual.htm#c2 ) zur Klassifizierung von Satellitendaten (überwachtes Lernen). Ich verwende einen Trainings- und Testdatensatz mit einer Stichprobengröße von 2000 und einer Variablengröße von 10. Die Daten werden in zwei Klassen, A und B, klassifiziert. Im überwachten Lernmodus arbeitet der Algorithmus mit einem sehr geringen Klassifizierungsfehler (<2%) gut. . Jetzt möchte ich die unbeaufsichtigte Klassifizierung ohne Klassenbezeichnungen im Testdatensatz ausprobieren und sehen, wie der Algorithmus die Klassen vorhersagen kann. Gibt es eine Möglichkeit, eine unbeaufsichtigte Klassifizierung mithilfe des Breiman-Codes zu implementieren? Wird der Fehler dieser Methode höher sein als die überwachte Klassifizierung? Die Daten- und Laufparametereinstellung im Algorithmus ist unten angegeben

DATEN BESCHREIBEN 1 mdim = 10, ntrain = 2000, nclass = 2, maxcat = 1, 1 ntest = 2000, labelts = 1, labeltr = 1,

SET RUN PARAMETERS 2 mtry0 = 3, ndsize = 1, jbt = 500, look = 100, lookcls = 1, 2 jclasswt = 0, mdim2nd = 0, mselect = 0,

Bijoy
quelle
1
Können Sie weiter ausführen? Wenn Sie die Klassen vorhersagen möchten, müssen Sie eine überwachte Klassifizierung verwenden.
Simone
Sagen wir einfach, ich habe zwei Datensätze mit der gleichen Anzahl von Variablen und Stichproben. Der erste Datensatz enthält die Klasseninformationen (A und B), während der zweite Datensatz keine Klasseninformationen enthält. Unter Verwendung von RF-Code wurde der erste Datensatz mit sehr guter Genauigkeit in die beiden Klassen eingeteilt. Die oben angegebenen Ausführungsparameter gelten für die bestimmte Klassifizierung, für die die Klasseninformationen im Datensatz erforderlich sind. Meine Frage ist nun, wie man das zweite Datset in zwei Klassen einteilt.
Bijoy

Antworten:

3

Da Ihr Modell eine gute Genauigkeit aufweist, können Sie es einfach verwenden, um die Klassenbezeichnungen von Datensätzen im unbeschrifteten Datensatz vorherzusagen. Sie können die Leistung jedoch nicht für unbeschriftete Daten bewerten.

Achten Sie darauf, dass Sie die Qualität Ihres Modells anhand der gekennzeichneten Daten durch Kreuzvalidierung beurteilen. Es reicht nicht aus, die Trainingsfehlerrate zu überprüfen.

Wenn Ihr Modell nicht genau genug ist, können Sie über halbüberwachtes Lernen nachdenken . Die unbeschrifteten Daten werden verwendet, um die Qualität Ihres Modells durch induktives Lernen zu verbessern. Die Genauigkeit sollte immer durch Kreuzvalidierung Ihrer gekennzeichneten Daten berechnet werden.

Schauen Sie sich [Crimisini et al. Entscheidungswälder: Ein einheitlicher Rahmen für Klassifizierung, Regression, Dichteschätzung, vielfältiges Lernen und halbüberwachtes Lernen] Kapitel 7 über halbüberwachtes Lernen und 7.4 über Induktion mit halbüberwachtem Lernen.

Simone
quelle
Vielen Dank an Simone für die Kommentare ... Wie Sie in Ihren Kommentaren erwähnt haben, ist es mein Ziel, die Klassenbezeichnungen von Datensätzen im unbeschrifteten Datensatz mithilfe von RF vorherzusagen. Ich würde jedoch gerne wissen, ob dies mit dem RF-Code von Brieman und Cutler möglich ist.
Bijoy
Ich bin mit diesem Code nicht so vertraut. Es könnte auch etwas veraltet sein. Probieren Sie WEKA oder R aus. Sie bieten aktuelle zufällige Gesamtstrukturimplementierungen.
Simone
9

Ich bezweifle, dass unbeaufsichtigt besser funktioniert, aber es könnte eine coole Übung sein, sie auszuprobieren. Unüberwachtes Lernen mit zufälligen Gesamtstrukturen erfolgt durch Erstellen einer gemeinsamen Verteilung auf der Grundlage Ihrer unabhängigen Variablen, die Ihre Daten grob beschreibt. Simulieren Sie dann eine bestimmte Anzahl von Beobachtungen mit dieser Verteilung. Wenn Sie beispielsweise 1000 Beobachtungen haben, können Sie 1000 weitere simulieren. Dann beschriften Sie sie, zB 1: = echte Beobachtung, 0: = simulierte Beobachtung. Danach führen Sie einen üblichen zufälligen Waldklassifikator aus, um die tatsächlichen Beobachtungen von den simulierten zu unterscheiden. Beachten Sie, dass die Option zum Berechnen der Nähe aktiviert sein muss. Die wirklich nützliche Ausgabe ist genau dies, eine Beschreibung der Nähe zwischen Ihren Beobachtungen basierend darauf, was Random Forest tut, wenn Sie versuchen, diese Bezeichnungen zuzuweisen. Sie haben jetzt eine Beschreibung, wie " Ich meine, Beobachtungen zusammenhalten, die näher als eine bestimmte Schwelle liegen. Eine weitere einfache Option ist das hierarchische Clustering unter Verwendung dieser speziellen Distanzmatrix. Wenn Sie mit R arbeiten können, können Sie mit den meisten hierarchischen Clustering-Paketen die benutzerdefinierten Distanzmatrizen der Funktionen füttern. Sie wählen dann einen Grenzpunkt aus, Sie können ihn als Dendrogramm usw. visualisieren. Ich meine, Beobachtungen zusammenhalten, die näher als eine bestimmte Schwelle liegen. Eine weitere einfache Option ist das hierarchische Clustering unter Verwendung dieser speziellen Distanzmatrix. Wenn Sie mit R arbeiten können, können Sie mit den meisten hierarchischen Clustering-Paketen die benutzerdefinierten Distanzmatrizen der Funktionen füttern. Sie wählen dann einen Grenzpunkt aus, Sie können ihn als Dendrogramm usw. visualisieren.

Dies war früher ein sehr gutes Tutorial zum Random Forest-Clustering und sie teilten einige nützliche R-Funktionen, die sie für diesen Zweck geschrieben hatten, aber der Link scheint jetzt tot zu sein. Vielleicht kommt es später wieder. Sie haben auch ein sehr ordentliches zufälliges glm R-Paket geschrieben (das analog zu zufälliger Gesamtstruktur ist, aber auf duh ... glms basiert), wenn Sie das überprüfen möchten. Sie können jederzeit an die Autoren schreiben und nach dem Material für die Random Forest-Klassifizierung fragen, das früher auf dem toten Link verfügbar war. Ich habe den R-Code, aber er ist zu groß, um ihn hier einzufügen. Ich kann ihn Ihnen senden, wenn Sie mir eine private Nachricht senden.

JEquihua
quelle
Dieses R-Paket scheint auch dafür zu sein, ich habe es jedoch nicht gründlich untersucht: artax.karlin.mff.cuni.cz/r-help/library/CORElearn/html/…
JEquihua
4

Wenn Sie eine zufällige Gesamtstruktur in einer unbeaufsichtigten Umgebung verwenden möchten, konzentrieren Sie sich auf die Entfernungsmetrik, die in der von Breiman als "Nähe" bezeichneten Umgebung erhalten wird. Dies sollte eine NxN-Matrix sein, die die Zeiten darstellt, zu denen die Abtastwerte in Endknoten gleichzeitig auftreten. In Rs randomForest wird dies über erhalten (ich habe Breimans noch nie verwendet, aber ich bin sicher, dass es verfügbar ist):

rf = randomForest( ... )
1 - rf$proximities

In einer unbeaufsichtigten Umgebung hat die zufällige Gesamtstruktur keine Ahnung, wie viele Klassen es geben sollte, sodass dies Ihre Aufgabe sein wird. Dies kann auf verschiedene Arten erfolgen, z. B. KNN, PAM usw., wobei Sie k = 2 wählen.

Wie Sie sich vorstellen können, handelt es sich hierbei um eine ganz andere überwachte zufällige Gesamtstruktur, sodass ein Vergleich der Klassifizierungsgenauigkeit zwischen den beiden Verfahren möglicherweise nicht aufschlussreich ist.

Jimmyb
quelle