欠拟合、过拟合、正则化、学习曲线

这篇具有很好参考价值的文章主要介绍了欠拟合、过拟合、正则化、学习曲线。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.欠拟合、过拟合、正则化、学习曲线

1.1 欠拟合、过拟合

欠拟合:模型相对于要解决的问题来说太简单了,模型并没有拟合训练数据的状态
过拟合:模型相对于要解决的问题来说太复杂了,模型只能拟合训练数据的状态

下图来自:数据分析中的插值与拟合(2) —— 拟合
欠拟合、过拟合、正则化、学习曲线
如何避免过拟合呢?

  1. 增加全部训练数据的数量
  2. 使用简单模型
  3. 正则化

1.2 正则化

正则化有L1正则化、L2正则化等
欠拟合、过拟合、正则化、学习曲线

欠拟合、过拟合、正则化、学习曲线

L1正则化、L2正则化区别

L1 正则化的特征是被判定为不需要的参数会变为 0,从而减少变量个数。而 L2 正则化不会把参数变为 0
L2 正则化会抑制参数,使变量的影响不会过大,而 L1 会直接去除不要的变量。

使用哪个正则化取决于要解决什么问题,不能一概而论

1.2.1 回归的L2正则化

新目标函数 = 目标函数 + 正则项
m m m为参数个数、 λ \lambda λ 是决定正则化项影响程度的正的常数
注意: θ 0 \theta_0 θ0这种只有参数的项称为偏置项,一般不对它进行正则化
欠拟合、过拟合、正则化、学习曲线
通过目标函数、正则项、新目标函数的图像来看看正则化到底怎么起作用的
欠拟合、过拟合、正则化、学习曲线
这就是正则化的效果。它可以防止参数变得过大,有助于参数接近较小的值。虽然我们只考虑了 θ 1 \theta_1 θ1,但其他 θ j \theta_j θj 参数的情况也是类似的。
参数的值变小,意味着该参数的影响也会相应地变小,通过减小不需要的参数的影响,将复杂模型替换为简单模型来防止过拟合的方式
为了防止参数的影响过大,在训练时要对参数施加一些惩罚,而 λ \lambda λ 可以控制正则化惩罚的强度, λ \lambda λ越大,惩罚越严厉

1.2.2 包含正则项的表达式的微分

欠拟合、过拟合、正则化、学习曲线
欠拟合、过拟合、正则化、学习曲线

欠拟合、过拟合、正则化、学习曲线
欠拟合、过拟合、正则化、学习曲线

欠拟合、过拟合、正则化、学习曲线
欠拟合、过拟合、正则化、学习曲线
欠拟合、过拟合、正则化、学习曲线

1.2.3 回归的正则化的实现

import numpy as np
import matplotlib.pyplot as plt
# 真正的函数
def g(x):
    return 0.1 * (x ** 3 + x ** 2 + x)

欠拟合、过拟合、正则化、学习曲线

x = np.linspace(-2, 2, 100)
plt.plot(train_x, train_y, 'o')
plt.plot(x, g(x), linestyle = 'dashed', color= 'm')
plt.ylim(-1, 2)
plt.show()

欠拟合、过拟合、正则化、学习曲线
向函数 g ( x ) g(x) g(x)中加入一些自己造的训练数据

# 随意准备一些向真正的函数加入了一点噪声的训练数据
train_x = np.linspace(-2, 2, 8)
train_y = g(train_x) + np.random.randn(train_x.size) * 0.05

标准化变量x

# 标准化
mu = train_x.mean()
sigma = train_x.std()
def standardize(x):
    return (x - mu) / sigma

train_z = standardize(train_x)

假设我们用 10 次多项式来学习这个训练数据

# 创建训练数据的矩阵
def to_matrix(x):
    return np.vstack([
        np.ones(x.size),
        x,
        x ** 2,
        x ** 3,
        x ** 4,
        x ** 5,
        x ** 6,
        x ** 7,
        x ** 8,
        x ** 9,
        x ** 10
    ]).T

X = to_matrix(train_z)
# 参数初始化
theta = np.random.randn(X.shape[1])
# 预测函数
def f(x):
    return np.dot(x, theta)

# 目标函数
def E(x, y):
    return 0.5 * np.sum((y - f(x)) ** 2)
# 正则化常量
LAMBDA = 0.5

# 学习率
ETA = 1e-4

# 误差
diff = 1

未应用正则化与应用正则化

# 重复学习(不应用正则化)
error = E(X, train_y)
while diff > 1e-6:
    theta = theta - ETA * (np.dot(f(X) - train_y, X))

    current_error = E(X, train_y)
    diff = error - current_error
    error = current_error

theta1 = theta
# 重复学习(应用正则化)
theta = np.random.randn(X.shape[1])
diff = 1
error = E(X, train_y)
while diff > 1e-6:
    reg_term = LAMBDA * np.hstack([0, theta[1:]])
    theta = theta - ETA * (np.dot(f(X) - train_y, X) + reg_term)

    current_error = E(X, train_y)
    diff = error - current_error
    error = current_error

theta2 = theta
# 绘图确认
plt.plot(train_z, train_y, 'o')
z = standardize(np.linspace(-2, 2, 100))
theta = theta1 # 未应用正则化
plt.plot(z, f(to_matrix(z)), linestyle='dashed')
theta = theta2 # 应用正则化
plt.plot(z, f(to_matrix(z)))
plt.show()

下图中绿色线为添加了正则项的,橙色线为未添加正则项的

欠拟合、过拟合、正则化、学习曲线

1.2.4 逻辑回归的L2正则化

欠拟合、过拟合、正则化、学习曲线
欠拟合、过拟合、正则化、学习曲线
为什么突然添加负号?
反转符号是为了将最大化问题替换为最小化问题
对数似然函数本来以最大化为目标。但是,这次我想让它变成和回归的目标函数一样的最小化问题,所以加了负号。这样就可以像处理回归一样处理它,所以只要加上正则化项就可以了

1.2.5 包含正则项的表达式的微分

欠拟合、过拟合、正则化、学习曲线
欠拟合、过拟合、正则化、学习曲线
欠拟合、过拟合、正则化、学习曲线

欠拟合、过拟合、正则化、学习曲线

1.3 学习曲线(区分欠拟合和过拟合)

先来看一个例子,有10个训练数据
欠拟合、过拟合、正则化、学习曲线
若我们随机挑选2个训练数据,选择一次函数模型对其进行拟合,可以看到一次函数完美拟合,误差为0
欠拟合、过拟合、正则化、学习曲线
我们用这10个训练数据,选择一次函数模型对其进行拟合,可以看到一次函数并不能很好的拟合这些数据,误差已经无法为0了
欠拟合、过拟合、正则化、学习曲线
模型选的太简单了,随着数据量的增加,误差逐渐变大,精度逐渐下降
欠拟合、过拟合、正则化、学习曲线
用测试数据对上面这个简单模型进行评估
欠拟合、过拟合、正则化、学习曲线

使用少量训练数据来训练模型,然后用测试数据评估该模型精度
然后增加训练数据来训练模型,随后用测试数据对模型进行评估,重复这样的步骤,最终能绘制出数据数量和精度的关系曲线图,展示了数据数量和精度的图称为学习曲线

欠拟合状态
欠拟合、过拟合、正则化、学习曲线
图中上方曲线为使用训练数据时,数据数量与其精度的关系曲线
数据量少时,由于只有几个数据,模型可以很好的拟合这些少量数据,误差会很小,精度会很大,但由于模型过于简单,那么随着数据量的增加,误差也会一点点变大。换句话说就是精度会一点点下降

图中下方曲线为使用测试数据时,数据数量与其精度的关系曲线
训练数据较少时训练好的模型难以预测未知的数据,所以精度很低;反过来说,训练数据变多时,预测精度就会一点点地变高。

过拟合状态
欠拟合、过拟合、正则化、学习曲线
随着数据量的增加,使用训练数据时的精度一直很高,而使用测试数据时的精度一直没有上升到它的水准。只对训练数据拟合得较好,这就是过拟合的特征

高偏差为欠拟合
下图来自:2022吴恩达机器学习Deeplearning.ai课程:学习曲线
欠拟合、过拟合、正则化、学习曲线
高方差为过拟合
下图来自:2022吴恩达机器学习Deeplearning.ai课程:学习曲线
欠拟合、过拟合、正则化、学习曲线

通过学习曲线判断出是过拟合还是欠拟合之后,就可以采取相应的对策以便改进模型了。文章来源地址https://www.toymoban.com/news/detail-510059.html

到了这里,关于欠拟合、过拟合、正则化、学习曲线的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习学习笔记——解决过拟合问题的方法:权重衰减和暂退法,与正则化之间的关系

    解决过拟合问题是机器学习和深度学习中关键的任务之一,因为它会导致模型在训练数据上表现良好,但在未见数据上表现不佳。以下是一些解决过拟合问题的常见方法: 增加训练数据 : 增加更多的训练数据可以帮助模型更好地捕捉数据的真实分布,减少过拟合的可能性。

    2024年02月09日
    浏览(42)
  • 【吴恩达·机器学习】第三章:分类任务:逻辑回归模型(交叉熵损失函数、决策边界、过拟合、正则化)

    博主简介: 努力学习的22级计算机科学与技术本科生一枚🌸 博主主页: @Yaoyao2024 每日一言🌼: 勇敢的人,不是不落泪的人,而是愿意含着泪继续奔跑的人。 ——《朗读者》 本系列博客文章是博主本人根据吴恩达老师2022年的机器学习课程所学而写,主要包括老师的核心讲义

    2024年02月19日
    浏览(39)
  • 曲线拟合和函数拟合在线工具

    曲线拟合在线工具(跟距据几个坐标点求方程) 链接:https://qianqianquege.com/math 名称:千千工具箱    

    2024年03月21日
    浏览(35)
  • Python做曲线拟合(一元多项式拟合及任意函数拟合)

    目录 1. 一元多项式拟合 使用方法 np.polyfit(x, y, deg) 2. 任意函数拟合 使用 curve_fit() 方法 实例: (1)初始化 x 和 y 数据集 (2)建立自定义函数 (3)使用自定义的函数生成拟合函数绘图  polyfig 使用的是最小二乘法,用于拟合一元多项式函数。 参数说明: x 就是x坐标,

    2024年02月02日
    浏览(37)
  • MATLAB实现任意函数曲线拟合(高斯曲线为例)

    matlab实现多项式拟合的函数相对比较简单,且容易记忆,但是复杂曲线的拟合就比较繁杂,比如高斯曲线,也叫正态分布函数,线上做个笔记,大家共勉。 拟合前后曲线对比结果如下。

    2024年02月16日
    浏览(37)
  • 利用Labview实现曲线拟合

    线性(Linear)   利用最小二乘法找到最能代表输入数据集的直线斜率和截距。 多项式(Polynomial)   通过最小二乘法找到最能代表输入数据集的多项式拟合系数。 样条插值(Spline)   返回区间个数为 n 的样条插值,结果中包含样条插值函数在内接点处的二阶导数。

    2024年02月09日
    浏览(33)
  • MATLAB 曲线拟合

    MATLAB 曲线拟合 eg: 与数据插值类似,曲线拟合也是一种函数逼近的方法。 最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小优化误差的平方和来寻找数据的最佳函数匹配。 polyfit():多项式拟合系数 功能:求得最小二乘拟合多项式系数 调用格式: p=polyfit(X,Y,m

    2024年02月06日
    浏览(23)
  • 数学建模——曲线拟合

     已知一组数据(二维),即平面上n个点       (xi,yi)(i=1,2,…,n), xi互不相同。寻求一个函数y=f(x),使得f(x)在某种准则下与所有的数据点最为接近,即拟合得最好。 线性最小二乘法是解决曲线拟合最常用的方法,基本思路是,令                         其中,r1(x),…,r

    2024年02月12日
    浏览(33)
  • MATLAB数据曲线拟合

    MATLAB数据曲线拟合 数据拟合是我们常用的一种方法,可以通过一组离散的数据点来找到一个函数,使这个函数能够对数据进行预测和描绘。在MATLAB中实现数据拟合非常简单,而且MATLAB还提供了许多工具箱来帮助我们完成这项任务。下面我们将会介绍如何使用MATLAB对数据进行曲

    2024年02月14日
    浏览(25)
  • MATLAB根据数据拟合曲线

    阿楠 零基础入门matlab教程基础版 阿楠 Simulink 模型创建 Matlab simulink建模与仿真视频教程

    2024年02月01日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包