绘制验证曲线

Beginner

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

简介

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

虚拟机使用提示

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

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

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

加载数据集

我们将从 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 为支持向量机分类器绘制验证曲线。我们加载了一个数据集,定义了一系列超参数值,计算了验证分数,并绘制了结果。这有助于为模型选择最佳超参数并提高其性能。