Modellauswahl: Auswahl von Schätzern und deren Parametern

Beginner

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

Einführung

Beim maschinellen Lernen ist die Modellauswahl der Prozess, um das beste Modell für einen gegebenen Datensatz auszuwählen. Dabei wird der geeignete Schätzer ausgewählt und seine Parameter optimiert, um die optimale Leistung zu erzielen. In diesem Tutorial wird Ihnen der Prozess der Modellauswahl in scikit-learn erläutert.

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 der Einschränkungen von Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby um Hilfe bitten. Geben Sie nach der Sitzung Feedback ab, und wir werden das Problem für Sie prompt beheben.

Dies ist ein Guided Lab, das schrittweise Anweisungen bietet, um Ihnen beim Lernen und Üben zu helfen. Befolgen Sie die Anweisungen sorgfältig, um jeden Schritt abzuschließen und praktische Erfahrungen zu sammeln. Historische Daten zeigen, dass dies ein Labor der Stufe Anfänger mit einer Abschlussquote von 87% ist. Es hat eine positive Bewertungsrate von 88% von den Lernenden erhalten.

Score und Kreuzvalidierte Scores

Schätzer in scikit-learn bieten eine score-Methode an, die verwendet werden kann, um die Qualität der Modellanpassung oder der Vorhersage für neue Daten zu bewerten. Diese Methode gibt einen Score zurück, wobei ein höherer Wert eine bessere Leistung anzeigt.

from sklearn import datasets, svm

## Lade den Digits-Datensatz
X_digits, y_digits = datasets.load_digits(return_X_y=True)

## Erstelle einen SVM-Klassifizierer mit linearer Kernel
svc = svm.SVC(C=1, kernel='linear')

## Trainiere den Klassifizierer auf den Trainingsdaten und berechne den Score auf den Testdaten
score = svc.fit(X_digits[:-100], y_digits[:-100]).score(X_digits[-100:], y_digits[-100:])

Um eine genauere Messung der Vorhersagegenauigkeit zu erhalten, können wir Kreuzvalidierung verwenden. Die Kreuzvalidierung besteht darin, die Daten in mehrere Folds aufzuteilen, wobei jeder Fold als Testmenge und die verbleibenden Folds als Trainingsmengen verwendet werden. Dieser Prozess wird mehrmals wiederholt, und die Scores werden gemittelt, um die Gesamtleistung zu erhalten.

import numpy as np

## Teile die Daten in 3 Folds auf
X_folds = np.array_split(X_digits, 3)
y_folds = np.array_split(y_digits, 3)

## Führe die Kreuzvalidierung durch
scores = []
for k in range(3):
    X_train = list(X_folds)
    X_test = X_train.pop(k)
    X_train = np.concatenate(X_train)
    y_train = list(y_folds)
    y_test = y_train.pop(k)
    y_train = np.concatenate(y_train)
    scores.append(svc.fit(X_train, y_train).score(X_test, y_test))

print(scores)

Kreuzvalidierungsgeneratoren

Scikit-learn bietet eine Sammlung von Klassen an, die verwendet werden können, um Trainings-/Test-Indizes für beliebte Kreuzvalidierungsstrategien zu generieren. Diese Klassen haben eine split-Methode, die den Eingabedatensatz akzeptiert und die Trainings-/Test-Set-Indizes für jede Iteration des Kreuzvalidierungsprozesses liefert.

from sklearn.model_selection import KFold

## Teile die Daten in K Folds auf, indem die KFold-Kreuzvalidierung verwendet wird
k_fold = KFold(n_splits=5)
for train_indices, test_indices in k_fold.split(X_digits):
    print(f'Train: {train_indices} | test: {test_indices}')

Die Hilfsfunktion cross_val_score kann verwendet werden, um den Kreuzvalidierungsscore direkt zu berechnen. Sie teilt die Daten in Trainings- und Testsets für jede Iteration der Kreuzvalidierung auf, trainiert den Schätzer auf dem Trainingsset und berechnet den Score basierend auf dem Testset.

from sklearn.model_selection import cross_val_score

## Berechne den Kreuzvalidierungsscore für den SVM-Klassifizierer
scores = cross_val_score(svc, X_digits, y_digits, cv=k_fold, n_jobs=-1)
print(scores)

Grid-Search ist eine Technik, die verwendet werden kann, um die beste Kombination von Parameternwerten für einen Schätzer zu finden. Dabei wird ein Gitter von Parameternwerten angegeben, der Schätzer für jede Kombination von Parametern auf den Trainingsdaten angepasst und diejenigen Parameter ausgewählt, die zu dem höchsten Kreuzvalidierungsscore führen.

from sklearn.model_selection import GridSearchCV

## Definiere ein Gitter von Parameternwerten
Cs = np.logspace(-6, -1, 10)

## Erstelle ein GridSearchCV-Objekt mit dem SVM-Klassifizierer und dem Parametergitter
clf = GridSearchCV(estimator=svc, param_grid=dict(C=Cs), n_jobs=-1)

## Passt das GridSearchCV-Objekt auf den Trainingsdaten an
clf.fit(X_digits[:1000], y_digits[:1000])

print(clf.best_score_)
print(clf.best_estimator_.C)

Kreuzvalidierte Schätzer

Einige Schätzer in scikit-learn haben eingebautes Kreuzvalidierungsvermögen. Diese kreuzvalidierten Schätzer wählen ihre Parameter automatisch durch Kreuzvalidierung, was den Modellauswahlprozess effizienter macht.

from sklearn import linear_model, datasets

## Erstelle ein LassoCV-Objekt
lasso = linear_model.LassoCV()

## Lade den Diabetes-Datensatz
X_diabetes, y_diabetes = datasets.load_diabetes(return_X_y=True)

## Trainiere das LassoCV-Objekt auf dem Datensatz
lasso.fit(X_diabetes, y_diabetes)

print(lasso.alpha_)

Zusammenfassung

In diesem Tutorial haben wir den Prozess der Modellauswahl in scikit-learn kennengelernt. Wir haben die Bewertungs- Methoden, die Kreuzvalidierung, das Grid-Search und die kreuzvalidierten Schätzer untersucht. Indem Sie diese Schritte befolgen, können Sie den besten Schätzer für einen gegebenen Datensatz auswählen und seine Parameter optimieren, um die optimale Leistung zu erzielen.