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
xich
Um oob in sklearn zu implementieren, müssen Sie es beim Erstellen Ihres Random Forests-Objekts als angeben
from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators = 100, oob_score = True)
Dann können wir das Modell trainieren
forest.fit(X_train, y_train)
print('Score: ', forest.score(X_train, y_train))
Ergebnis: 0.979921928817
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
print(forest.oob_score_)
0,86453272101
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
print('Score: ', forest.score(X_test, y_test))
Ergebnis: 0.86517733935
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ügung
print(forest.oob_decision_function_)
Die Klasse kann dann mit erhalten werden
from sklearn import metrics
pred_train = np.argmax(forest.oob_decision_function_,axis=1)
Dann können wir die AUC wie folgt berechnen
metrics.roc_auc_score(y_train, pred_train)
0.86217157846471204