简介
在机器学习中,验证曲线用于确定分类器在不同超参数值下的训练分数和验证分数。这有助于为模型选择最佳超参数。在本实验中,我们将使用 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 为支持向量机分类器绘制验证曲线。我们加载了一个数据集,定义了一系列超参数值,计算了验证分数,并绘制了结果。这有助于为模型选择最佳超参数并提高其性能。