Kreuzvalidierung mit linearen Modellen

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 verwenden wir Kreuzvalidierung mit linearen Modellen. Wir verwenden den Diabetes-Datensatz und wenden GridSearchCV an, um den besten Alpha-Wert für die Lasso-Regression zu finden. Anschließend werden wir die Fehler plotten und LassoCV verwenden, um zu sehen, wie vertrauenswürdig die Auswahl von Alpha ist.

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 öffnen.

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-49098{{"Kreuzvalidierung mit linearen Modellen"}} sklearn/model_selection -.-> lab-49098{{"Kreuzvalidierung mit linearen Modellen"}} ml/sklearn -.-> lab-49098{{"Kreuzvalidierung mit linearen Modellen"}} end

Laden und Vorbereiten des Datensatzes

Zunächst werden wir den Diabetes-Datensatz laden und vorbereiten. Für diese Übung verwenden wir nur die ersten 150 Stichproben.

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets

X, y = datasets.load_diabetes(return_X_y=True)
X = X[:150]
y = y[:150]

Anwenden von GridSearchCV

Als nächstes werden wir GridSearchCV anwenden, um den besten Alpha-Wert für die Lasso-Regression zu finden. Wir werden einen Bereich von Alpha-Werten von 10^-4 bis 10^-0,5 mit 30 Werten dazwischen verwenden. Wir werden 5 Folds für die Kreuzvalidierung verwenden.

from sklearn.linear_model import Lasso
from sklearn.model_selection import GridSearchCV

lasso = Lasso(random_state=0, max_iter=10000)
alphas = np.logspace(-4, -0.5, 30)

tuned_parameters = [{"alpha": alphas}]
n_folds = 5

clf = GridSearchCV(lasso, tuned_parameters, cv=n_folds, refit=False)
clf.fit(X, y)

Fehler plotten

Wir werden nun die Fehler plotten, um den besten Alpha-Wert zu sehen. Wir werden die durchschnittlichen Test-Scores und die Standardfehler der Scores plotten.

scores = clf.cv_results_["mean_test_score"]
scores_std = clf.cv_results_["std_test_score"]

plt.figure().set_size_inches(8, 6)
plt.semilogx(alphas, scores)

std_error = scores_std / np.sqrt(n_folds)

plt.semilogx(alphas, scores + std_error, "b--")
plt.semilogx(alphas, scores - std_error, "b--")

plt.fill_between(alphas, scores + std_error, scores - std_error, alpha=0.2)

plt.ylabel("CV score +/- std error")
plt.xlabel("alpha")
plt.axhline(np.max(scores), linestyle="--", color=".5")
plt.xlim([alphas[0], alphas[-1]])

Verwenden von LassoCV, um die Alpha-Auswahl zu überprüfen

Schließlich werden wir LassoCV verwenden, um zu sehen, wie vertrauenswürdig die Auswahl von Alpha ist. Wir werden KFold mit 3 Folds verwenden.

from sklearn.linear_model import LassoCV
from sklearn.model_selection import KFold

lasso_cv = LassoCV(alphas=alphas, random_state=0, max_iter=10000)
k_fold = KFold(3)

print("Antwort auf die Bonus-Frage:", "wie vertrauenswürdig ist die Auswahl von Alpha?")
print()
print("Alpha-Parameter, die die Verallgemeinerungsscore auf verschiedenen")
print("Teilmengen der Daten maximieren:")
for k, (train, test) in enumerate(k_fold.split(X, y)):
    lasso_cv.fit(X[train], y[train])
    print(
        "[Fold {0}] alpha: {1:.5f}, score: {2:.5f}".format(
            k, lasso_cv.alpha_, lasso_cv.score(X[test], y[test])
        )
    )

print()
print("Antwort: Nicht sehr, da wir für verschiedene Teilmengen der Daten unterschiedliche Alphas erhalten haben und darüber hinaus die Scores für diese Alphas sich erheblich unterscheiden.")

Zusammenfassung

In diesem Lab haben wir gelernt, wie man Kreuzvalidierung mit linearen Modellen anwendet. Wir haben GridSearchCV verwendet, um den besten Alpha-Wert für die Lasso-Regression zu finden und die Fehler geplottet, um die Auswahl zu visualisieren. Wir haben auch LassoCV verwendet, um die Auswahl von Alpha zu überprüfen.