Einführung
Beim maschinellen Lernen werden Validierungskurven verwendet, um die Trainings- und Validierungsergebnisse eines Klassifikators für verschiedene Hyperparameterwerte zu bestimmen. Dies kann helfen, die besten Hyperparameter für ein Modell auszuwählen. In diesem Lab verwenden wir scikit-learn, um Validierungskurven für einen Support Vector Machine (SVM)-Klassifikator zu zeichnen.
Tipps für die VM
Nachdem der VM-Start 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 von Einschränkungen in 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 prompt beheben.
Laden des Datensatzes
Wir beginnen, indem wir den Digits-Datensatz aus scikit-learn laden und einen Teilsatz der Daten für die binäre Klassifizierung der Ziffern 1 und 2 auswählen.
from sklearn.datasets import load_digits
X, y = load_digits(return_X_y=True)
subset_mask = np.isin(y, [1, 2]) ## binary classification: 1 vs 2
X, y = X[subset_mask], y[subset_mask]
Definieren des Hyperparameterbereichs
Wir werden einen Bereich von Werten für den SVM-Kernparametern gamma definieren, den wir testen möchten.
param_range = np.logspace(-6, -1, 5)
Berechnen der Validierungsergebnisse
Wir werden die validation_curve-Funktion aus scikit-learn verwenden, um die Trainings- und Validierungsergebnisse für den SVM-Klassifikator mit verschiedenen Werten von gamma zu berechnen.
from sklearn.svm import SVC
from sklearn.model_selection import validation_curve
train_scores, test_scores = validation_curve(
SVC(),
X,
y,
param_name="gamma",
param_range=param_range,
scoring="accuracy",
n_jobs=2,
)
Zeichnen der Validierungskurven
Wir werden matplotlib verwenden, um die Trainings- und Validierungsergebnisse als Funktion von gamma zu zeichnen.
import matplotlib.pyplot as plt
train_scores_mean = np.mean(train_scores, axis=1)
train_scores_std = np.std(train_scores, axis=1)
test_scores_mean = np.mean(test_scores, axis=1)
test_scores_std = np.std(test_scores, axis=1)
plt.title("Validation Curve with SVM")
plt.xlabel(r"$\gamma$")
plt.ylabel("Score")
plt.ylim(0.0, 1.1)
lw = 2
plt.semilogx(
param_range, train_scores_mean, label="Training score", color="darkorange", lw=lw
)
plt.fill_between(
param_range,
train_scores_mean - train_scores_std,
train_scores_mean + train_scores_std,
alpha=0.2,
color="darkorange",
lw=lw,
)
plt.semilogx(
param_range, test_scores_mean, label="Cross-validation score", color="navy", lw=lw
)
plt.fill_between(
param_range,
test_scores_mean - test_scores_std,
test_scores_mean + test_scores_std,
alpha=0.2,
color="navy",
lw=lw,
)
plt.legend(loc="best")
plt.show()
Zusammenfassung
In diesem Lab haben wir gelernt, wie man mit scikit-learn Validierungskurven für einen Support-Vector-Machine-Klassifikator zeichnet. Wir haben einen Datensatz geladen, einen Bereich von Hyperparameterwerten definiert, die Validierungsergebnisse berechnet und die Ergebnisse geplottet. Dies kann helfen, die besten Hyperparameter für ein Modell auszuwählen und dessen Leistung zu verbessern.