Ich suche einen Klassifikator zu trainieren , die zwischen diskriminieren Type A
und Type B
Objekte mit einer einigermaßen großen Trainingssatz von etwa 10.000 Objekte, etwa die Hälfte davon sind Type A
und 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 A
und welche sind Type B
. Anstatt also kompromisslose Vorhersagen von Type A
oder zu liefern Type B
, möchten wir für jedes Objekt eine Punktzahl präsentieren, die beschreibt, wie A
oder wie B
ein Objekt ist. Wenn wir zum Beispiel eine Punktzahl zwischen 0 und 10 festlegen, kann eine Punktzahl von 0 darauf hinweisen, dass ein Objekt Type A
Objekten 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 A
bewertet 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 A
oder klassifiziert zu werden. Type B
Wird 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?
Antworten:
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.
quelle
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.
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'
mitmethod='svmLinear'
odermethod='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.quelle
modelLookup()
Befehl aus, um eine Liste der möglichen Optionen anzuzeigen.prob
Art vonpredict
ist auch verfügbar, indem SierandomForest
Ihr Modell trainieren (mit oder ohne die Verwendung anderer Pakete wiecaret
oderPerformanceAnalytics
).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.
quelle