Gradient Boosting Out-of-Bag-Schätzungen

Machine LearningMachine LearningBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden Sie durch die Implementierung eines Gradient Boosting Classifiers mit Out-of-Bag (OOB)-Schätzungen mithilfe der scikit-learn-Bibliothek in Python geführt. OOB-Schätzungen sind eine Alternative zu Kreuzvalidierungsschätzungen und können sofort berechnet werden, ohne dass es erforderlich ist, das Modell wiederholt anzupassen. In diesem Lab werden die folgenden Schritte behandelt:

  1. Daten generieren
  2. Klassifizierer mit OOB-Schätzungen anpassen
  3. Besten Iterationszähler mit Hilfe der Kreuzvalidierung abschätzen
  4. Besten Iterationszähler für Testdaten berechnen
  5. Ergebnisse grafisch darstellen

Tipps für die VM

Nachdem der Start der VM abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen von Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie sofort beheben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/ensemble("Ensemble Methods") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/metrics("Metrics") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/ensemble -.-> lab-49151{{"Gradient Boosting Out-of-Bag-Schätzungen"}} sklearn/model_selection -.-> lab-49151{{"Gradient Boosting Out-of-Bag-Schätzungen"}} sklearn/metrics -.-> lab-49151{{"Gradient Boosting Out-of-Bag-Schätzungen"}} sklearn/datasets -.-> lab-49151{{"Gradient Boosting Out-of-Bag-Schätzungen"}} ml/sklearn -.-> lab-49151{{"Gradient Boosting Out-of-Bag-Schätzungen"}} end

Daten generieren

Der erste Schritt besteht darin, einige Beispiel-Daten zu generieren, die wir verwenden können, um unser Modell zu trainieren und zu testen. Wir werden die Funktion make_classification aus dem Modul sklearn.datasets verwenden, um ein zufälliges binäres Klassifizierungsproblem mit 3 informativen Merkmalen zu generieren.

import numpy as np
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=1000, n_features=3, n_informative=3,
                           n_redundant=0, n_classes=2, random_state=1)

Klassifizierer mit OOB-Schätzungen anpassen

Als nächstes erstellen wir einen Gradient Boosting Classifier mit OOB-Schätzungen mithilfe der Klasse GradientBoostingClassifier aus dem Modul sklearn.ensemble. Wir setzen die Anzahl der Schätzer auf 100 und die Lernrate auf 0,1.

from sklearn.ensemble import GradientBoostingClassifier

params = {
    "n_estimators": 100,
    "learning_rate": 0.1,
    "subsample": 1.0,
    "max_depth": 3,
    "min_samples_leaf": 1,
    "random_state": 1,
    "oob_score": True
}

clf = GradientBoostingClassifier(**params)
clf.fit(X, y)

Besten Iterationszähler mit Hilfe der Kreuzvalidierung abschätzen

Wir können den besten Iterationszähler mithilfe der Kreuzvalidierung abschätzen. Wir werden eine 5-fache Kreuzvalidierung verwenden und die negative Log-Loss-Funktion für jede Anzahl an Iterationen berechnen.

from sklearn.model_selection import cross_val_score

cv_scores = []
for i in range(1, params['n_estimators'] + 1):
    clf.set_params(n_estimators=i)
    scores = -1 * cross_val_score(clf, X, y, cv=5, scoring='neg_log_loss')
    cv_scores.append(scores.mean())

Besten Iterationszähler für Testdaten berechnen

Wir können auch den besten Iterationszähler für die Testdaten berechnen. Wir werden die negative Log-Loss-Funktion für jede Anzahl an Iterationen auf den Testdaten berechnen.

from sklearn.metrics import log_loss
import matplotlib.pyplot as plt

test_scores = []
for i, y_pred in enumerate(clf.staged_predict_proba(X)):
    score = log_loss(y, y_pred)
    test_scores.append(score)

best_n_estimators = np.argmin(test_scores) + 1

Ergebnisse grafisch darstellen

Schließlich können wir die Ergebnisse grafisch darstellen, um die Leistung des Modells für verschiedene Iterationszahlen zu visualisieren. Wir werden die negative Log-Loss-Funktion auf der y-Achse und die Iterationszahl auf der x-Achse darstellen.

plt.figure(figsize=(10, 5))
plt.plot(range(1, params['n_estimators'] + 1), cv_scores, label='CV')
plt.plot(range(1, params['n_estimators'] + 1), test_scores, label='Test')
plt.axvline(x=best_n_estimators, color='red', linestyle='--')
plt.xlabel('Number of iterations')
plt.ylabel('Negative log-loss')
plt.legend()
plt.show()

Zusammenfassung

In diesem Lab haben wir gelernt, wie man einen Gradient Boosting Classifier mit Out-of-Bag-Schätzungen implementiert und den besten Iterationszähler mithilfe der Kreuzvalidierung abschätzt. Wir haben auch die besten Iterationszahlen für die Testdaten berechnet und die Ergebnisse grafisch dargestellt, um die Leistung des Modells für verschiedene Iterationszahlen zu visualisieren.