绘制验证曲线

Machine LearningMachine LearningBeginner
立即练习

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

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在机器学习中,验证曲线用于确定分类器在不同超参数值下的训练分数和验证分数。这有助于为模型选择最佳超参数。在本实验中,我们将使用scikit-learn为支持向量机(SVM)分类器绘制验证曲线。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签页,以访问Jupyter Notebook进行练习。

有时,你可能需要等待几秒钟让Jupyter Notebook完成加载。由于Jupyter Notebook的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向Labby提问。课程结束后提供反馈,我们会及时为你解决问题。


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(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/svm("Support Vector Machines") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/svm -.-> lab-49326{{"绘制验证曲线"}} sklearn/model_selection -.-> lab-49326{{"绘制验证曲线"}} sklearn/datasets -.-> lab-49326{{"绘制验证曲线"}} ml/sklearn -.-> lab-49326{{"绘制验证曲线"}} end

加载数据集

我们将从scikit-learn中加载数字数据集,并选择数据的一个子集用于数字1和2的二分类。

from sklearn.datasets import load_digits

X, y = load_digits(return_X_y=True)
subset_mask = np.isin(y, [1, 2])  ## 二分类:1 对 2
X, y = X[subset_mask], y[subset_mask]

定义超参数范围

我们将定义想要测试的支持向量机(SVM)核参数gamma的值的范围。

param_range = np.logspace(-6, -1, 5)

计算验证分数

我们将使用scikit-learn中的validation_curve函数来计算具有不同gamma值的支持向量机(SVM)分类器的训练分数和验证分数。

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,
)

绘制验证曲线

我们将使用matplotlib绘制训练分数和验证分数作为gamma的函数。

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()

总结

在本实验中,我们学习了如何使用scikit-learn为支持向量机分类器绘制验证曲线。我们加载了一个数据集,定义了一系列超参数值,计算了验证分数,并绘制了结果。这有助于为模型选择最佳超参数并提高其性能。