Aus den Stimmen in zufälligen Wäldern eine „Sicherheitsbewertung“ erstellen?

36

Ich suche einen Klassifikator zu trainieren , die zwischen diskriminieren Type Aund Type BObjekte mit einer einigermaßen großen Trainingssatz von etwa 10.000 Objekte, etwa die Hälfte davon sind Type Aund die Hälfte davon Type B. Der Datensatz besteht aus 100 kontinuierlichen Merkmalen, die die physikalischen Eigenschaften der Zellen (Größe, mittlerer Radius usw.) genau beschreiben. Die Visualisierung der Daten in paarweisen Streudiagrammen und Dichtediagrammen zeigt, dass es in vielen Merkmalen eine signifikante Überlappung der Verteilungen der krebsartigen und normalen Zellen gibt.

Ich untersuche derzeit zufällige Wälder als Klassifizierungsmethode für diesen Datensatz und sehe einige gute Ergebnisse. Mit R können zufällige Gesamtstrukturen etwa 90% der Objekte korrekt klassifizieren.

Eines der Dinge, die wir versuchen möchten, ist eine Art "Sicherheitsbewertung", die quantifiziert, wie sicher wir von der Klassifizierung der Objekte sind. Wir wissen, dass unser Klassifikator niemals 100% genau sein wird, und selbst wenn eine hohe Genauigkeit bei den Vorhersagen erreicht wird, möchten wir, dass geschulte Techniker erkennen, welche Objekte wirklich Type Aund welche sind Type B. Anstatt also kompromisslose Vorhersagen von Type Aoder zu liefern Type B, möchten wir für jedes Objekt eine Punktzahl präsentieren, die beschreibt, wie Aoder wie Bein Objekt ist. Wenn wir zum Beispiel eine Punktzahl zwischen 0 und 10 festlegen, kann eine Punktzahl von 0 darauf hinweisen, dass ein Objekt Type AObjekten sehr ähnlich ist , während eine Punktzahl von 10 darauf hinweist, dass ein Objekt sehr ähnlich ist Type B.

Ich dachte, ich könnte die Stimmen in den zufälligen Wäldern verwenden, um eine solche Punktzahl zu entwickeln. Da die Klassifizierung in zufälligen Wäldern durch Mehrheitsvoting innerhalb des Waldes generierter Bäume erfolgt, würde ich davon ausgehen, dass sich Objekte, die von 100% der zu bewertenden Bäume Type Abewertet wurden, von Objekten unterscheiden würden, für die beispielsweise 51% der Bäume gestimmt haben sein Type A.

Derzeit habe ich versucht, einen willkürlichen Schwellenwert für den Stimmenanteil festzulegen, den ein Objekt erhalten muss, um als Type Aoder klassifiziert zu werden. Type BWird der Schwellenwert nicht überschritten, wird er als klassifiziert Uncertain. Wenn ich zum Beispiel die Bedingung erzwinge, dass 80% oder mehr der Bäume einer Entscheidung zustimmen müssen, damit eine Klassifizierung bestanden wird, stelle ich fest, dass 99% der Klassenvorhersagen korrekt sind, aber ungefähr 40% der Objekte als gruppiert sind Uncertain.

Wäre es dann sinnvoll, die Abstimmungsinformationen zu nutzen, um die Sicherheit der Vorhersagen zu gewährleisten? Oder gehe ich mit meinen Gedanken in die falsche Richtung?

ialm
quelle
Stellen Sie sicher, dass Sie separate Trainings- und Testdatensätze haben. Stellen Sie sicher, dass Sie Ihr Test-Set so wenig wie möglich verwenden (idealerweise nur einmal).
Boris Gorelik
@bgbg Ich verwende ein Schulungs- / Validierungs- / Testschema in einer 70/20/10-Aufteilung. Ich trainiere ein Modell mit 70% der Daten und stimme die Parameter basierend auf den Ergebnissen des Validierungssatzes von 20% ab. Nachdem ich die Parameter für diese beiden Sätze eingestellt habe, bewerte ich das Modell für den 10% -Testsatz. Obwohl Breiman behauptet, dass die eingebaute OOB-Fehlerrate einen separaten Testsatz überflüssig macht, bin ich seiner Behauptung gegenüber vorsichtig.
ialm

Antworten:

19

Es macht durchaus Sinn, und alle Implementierungen von Zufallsforsten, mit denen ich gearbeitet habe (wie z. B. MATLABs), liefern auch probabilistische Ausgaben, um genau das zu tun.

Ich habe nicht mit der R-Implementierung gearbeitet, aber ich wäre schockiert, wenn es keinen einfachen Weg gäbe, weiche Ergebnisse aus den Abstimmungen und der harten Entscheidung zu erhalten.

Bearbeiten: Nur ein Blick auf R und predict.randomForest gibt auch Wahrscheinlichkeiten aus.

benhamner
quelle
1
Danke für Ihre Antwort. Sie haben Recht, ich habe ein Skript erstellt, das den Stimmenanteil ausgibt, den jedes Objekt erhält. Ich frage mich jedoch, wie nützlich diese Abstimmungen sein werden. Gibt es weitere Schritte, die Sie empfehlen? Sollte ich die Variabilität der Stimmanteile durch zusätzliche RF-Läufe untersuchen? Ich verstehe, dass RF ein stochastisches Element hat. Gibt es eine Diagnose, die ich mir ansehen sollte?
ialm
3
@Jonathan Sie können versuchen, einen Plot zu betrachten, der den Bruchteil des realen Objekts einer Klasse als Funktion eines Bruchteils der Stimmen für diese Klasse aus dem Wald enthält. Ich arbeitete an einem Problem, für das eine Vertrauensbewertung erforderlich war, und es stellte sich heraus, dass ich eine sehr schöne logistische Kurve erzielen konnte.
@mbq Entschuldigung, können Sie klarstellen, was Sie damit meinen? Ich bin an Ihrem Vorschlag interessiert und werde ihn morgen weiterverfolgen!
ialm
1
Die Variabilität in einem RF kommt auch in der Trainingsphase vor, so dass das mehrmalige Durchlaufen von Testproben durch den RF die Ergebnisse nicht verändert. Ich würde die AUC im Verhältnis zur Anzahl der Bäume in RF untersuchen, um sicherzustellen, dass Sie genügend Bäume haben, und dann den minimalen Blattparameter gemäß der AUC optimieren.
Benhamner
2
@ Jonathan Ich denke, mbq bezieht sich auf etwas namens Kalibrierung (obwohl es andere Namen geben kann). Siehe zum Beispiel diese Fragen: Kalibrieren eines verstärkten Klassifikators für mehrere Klassen . Worauf beziehen sich „reale Werte“ in der überwachten Klassifizierung?
Steffen
17

Wenn Sie R verwenden, erspart Ihnen das Caret-Paket die Neuerfindung des Rads. Der folgende Code verwendet beispielsweise die Kreuzvalidierung, um die Optimierungsparameter für ein zufälliges Gesamtstrukturmodell auszuwählen, und gibt dann den Mittelwert und die Standardabweichung der Genauigkeit für jede Kreuzvalidierungsfalte aus. Schließlich werden die Klassenwahrscheinlichkeiten für das Modell berechnet.

library(caret)
library(PerformanceAnalytics)
data(iris)

#Make a yes/no dataset
Dataset <- iris
Dataset$Class <- ifelse(Dataset$Species=='versicolor','Yes','No')
Dataset$Class  <- as.factor(Dataset$Class)
Dataset$Species<- NULL
chart.Correlation(Dataset[-5], col= Dataset$Class)

#Fit an RF model
model <- train(Class~.,Dataset,
                method='rf',TuneLength=3,
                trControl=trainControl(
                    method='cv',number=10,
                    classProbs = TRUE))
model$results

#Predict class probabilities (i.e. 'certainty' scores)
pred <- predict(model,iris,"prob")
head(pred)

Das Schöne an Caret ist, dass es sehr einfach ist, verschiedene Vorhersagemodelle zu vergleichen. Zum Beispiel, wenn Sie ein SVM ausprobieren möchten, können Sie den Text ersetzen method='rf'mit method='svmLinear'oder method='svmRadial'. Sie können auch Ihre Tuning - Parameter basierend auf wählen AUC anstatt Genauigkeit durch eine Linie zum trainControl Parameter ergänzt: summaryFunction=twoClassSummary.

Letztendlich ist ein bisschen Code aus dem PerformanceAnalytics-Paket enthalten, chart.Correlation(Dataset[-5], col= Dataset$Class)der nicht zum Erstellen des Modells benötigt wird, aber eine schöne Visualisierung Ihres Datasets bietet.

Zach
quelle
Du machst mich zu einem Fan des Caret-Pakets. Ich denke, ich werde einen zweiten R-Thread offen halten, nur um verschiedene Klassifizierungsmethoden auszuprobieren und Caret CV- und Parameter-Tuning selbst durchführen zu lassen und um zu sehen, ob ich vergleichbare Ergebnisse erhalte.
ialm
@ Jonathan freut sich, es zu hören! Es ist ein wunderbares Paket. Probieren Sie den modelLookup()Befehl aus, um eine Liste der möglichen Optionen anzuzeigen.
Zach
Die probArt von predictist auch verfügbar, indem Sie randomForestIhr Modell trainieren (mit oder ohne die Verwendung anderer Pakete wie caretoder PerformanceAnalytics).
Hack-R
2

Das randomForest- Paket in R ist ein recht anständiges Paket, um mehr über Ihre Analyse zu erfahren . Es liefert Ihnen die Stimmen (entweder als Bruchzahl oder als Rohzahl) und bietet eingebaute Kapazitäten für die Abstimmung und Gegenprüfung und kann Ihnen sogar mehr Informationen über Ihre Funktionen geben (wenn Sie wissen möchten, welche von Ihren 100 sind) das wichtigste in der Analyse).

Wenn Sie dieses Paket bereits verwenden, möchten Sie es vielleicht genauer untersuchen, und wenn Sie es nicht verwenden, sehen Sie es sich vielleicht an.

user4673
quelle