Wird die zufällige Gesamtstrukturimplementierung in scikit-learn unter Verwendung der mittleren Genauigkeit als Bewertungsmethode zum Schätzen des Generalisierungsfehlers mit Out-of-Bag-Stichproben verwendet? Dies wird in der Dokumentation nicht erwähnt, aber die score () -Methode gibt die mittlere Genauigkeit an.
Ich habe einen stark unausgeglichenen Datensatz und verwende AUC of ROC als Scoring-Metrik für die Rastersuche. Gibt es eine Möglichkeit, den Klassifizierer anzuweisen, dieselbe Bewertungsmethode auch für die OOB-Beispiele zu verwenden?
random-forest
scikit-learn
darXider
quelle
quelle
oob_score
melden Sie die Genauigkeit. Ich muss mir den Quellcode noch einmal ansehen.Antworten:
Im Allgemeinen wird die Leistung von Klassifizierern anhand der Genauigkeit verglichen. Dies ist ein Maß für die Anzahl der korrekt klassifizierten Instanzen geteilt durch die Gesamtanzahl der Instanzen. Aus den Trainingsdaten können wir jedoch eine bessere Annäherung des erwarteten Fehlers von unserem Klassifikator erhalten, wenn wir Ensemble-Lern- oder Bagging-Techniken verwenden.
Out-of-Bag-Fehler
Um oob in sklearn zu implementieren, müssen Sie es beim Erstellen Ihres Random Forests-Objekts als angeben
Dann können wir das Modell trainieren
Wie erwartet ist die Genauigkeit des Modells bei der Bewertung des Trainingssatzes sehr hoch. Dies ist jedoch bedeutungslos, da Sie Ihre Daten sehr gut überarbeiten können und Ihr Modell somit Müll ist. Wir können jedoch die Out-of-Bag-Bewertung als verwenden
Dies ist die Genauigkeit bei der Bewertung unserer Instanzen im Trainingssatz, wobei nur die Bäume verwendet werden, für die sie ausgelassen wurden. Berechnen wir nun die Punktzahl auf dem Testset als
Wir sehen, dass die von oob gemessene Genauigkeit der mit dem Testgerät erhaltenen sehr ähnlich ist. Aus dieser Theorie folgt, dass die OOB-Genauigkeit eine bessere Metrik ist, um die Leistung Ihres Modells zu bewerten, als nur die Punktzahl. Dies ist eine Konsequenz von Absackmodellen und kann nicht mit anderen Arten von Klassifikatoren durchgeführt werden.
Berechnung des OOB mit verschiedenen Metriken
Ja, das kannst du! Es kommt jedoch darauf an, wie genau Ihr Code aufgebaut ist. Ich bin nicht sicher, wie Sie die OOB und AUC alle zusammen mit der
cross_val_score
Funktion einschließen können. Wenn Sie die Kreuzvalidierung jedoch manuell durchführen, können Sie Folgendes tun: Der Algorithmus für zufällige Gesamtstrukturen in sklearn stellt Ihnen die Entscheidungsfunktion des OOB as zur VerfügungDie Klasse kann dann mit erhalten werden
Dann können wir die AUC wie folgt berechnen
quelle
RandomForestClassifier
ein OOB-Score zurückgegeben werden kann, der NICHT genau ist , und der zweite Teil Ihrer Antwort enthält einen sehr guten Hinweis, wie Sie dieses Problem angehen können. Ich muss jedoch betonen, dass man die Klassenbeschriftungen nicht verwenden sollte, um die AUC der ROC-Kurve zu berechnen. Vielmehr sollten die Klassenwahrscheinlichkeiten direkt verwendet werden. Die richtige Definition wäre alsopred_train = forest.oob_decision_function_[:, 1]
.