返回介绍

交叉验证 3 Cross-validation

发布于 2025-05-02 13:36:27 字数 1787 浏览 0 评论 0 收藏

作者: Bhan 编辑: Morvan

连续三节的交叉验证(cross validation) 让我们知道在机器学习中验证是有多么的重要,这一次的 sklearn 中我们用到了 sklearn.learning_curve 当中的另外一种,叫做 validation_curve ,用这一种曲线我们就能更加直观看出改变模型中的参数的时候有没有过拟合(overfitting) 的问题了. 这也是可以让我们更好的选择参数的方法。

例子 - 藉由 validation_curve 来检视模型参数有没有过拟合(Overfitting) 的问题

继续上一节的例子,并稍作小修改即可画出图形。这次我们来验证 SVC 中的一个参数 gamma 在什么范围内能使 model 产生好的结果. 以及过拟合和 gamma 取值的关系。

from sklearn.learning_curve import validation_curve #validation_curve 模块
from sklearn.datasets import load_digits 
from sklearn.svm import SVC 
import matplotlib.pyplot as plt 
import numpy as np

#digits 数据集
digits = load_digits()
X = digits.data
y = digits.target

#建立参数测试集
param_range = np.logspace(-6, -2.3, 5)

#使用 validation_curve 快速找出参数对模型的影响
train_loss, test_loss = validation_curve(
    SVC(), X, y, param_name='gamma', param_range=param_range, cv=10, scoring='mean_squared_error')

#平均每一轮的平均方差
train_loss_mean = -np.mean(train_loss, axis=1)
test_loss_mean = -np.mean(test_loss, axis=1)

#可视化图形
plt.plot(param_range, train_loss_mean, 'o-', color="r",
         label="Training")
plt.plot(param_range, test_loss_mean, 'o-', color="g",
        label="Cross-validation")

plt.xlabel("gamma")
plt.ylabel("Loss")
plt.legend(loc="best")
plt.show()

由图中可以明显看到 gamma 值大于 0.001 ,模型就会有过拟合(Overfitting) 的问题。

如果你觉得这篇文章或视频对你的学习很有帮助,请你也分享它,让它能再次帮助到更多的需要学习的人。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。