梯度下降法及回归问题评估

本文详细介绍了梯度下降算法的原理,包括其基本概念、公式及其在优化损失函数中的应用。此外,文章还探讨了回归问题中的评估方法,如平均绝对误差、均方误差和均方根误差,以及R²指标。重点讲解了不同梯度下降变种(如全梯度、随机梯度、小批量梯度和随机平均梯度)及其适用场景。
摘要由CSDN通过智能技术生成

前言

📽️📽️上期我们介绍了损失函数,这期我们主要掌握损失函数的优化算法以及回归问题的评估,简单来说就是测评模型预估的好坏

学习目标

  1. 掌握梯度下降算法的原理
  2. 掌握梯度下降法优化损失函数的原理
  3. 掌握常用回归问题评估方法的应用 

1.梯度下降 

1.1什么是梯度下降 

首先,我们有一个 可微分的函数 。这个函数就代表着一座山。

我们的目标就是找到 这个函数的最小值 ,也就是山底。最快的下山的方式就是找到当前位置最陡峭的方向,然后沿着此方向向下走,对应到函数中,就是 找到给定点的梯度 ,然后朝着梯度相反的方向,就能让函数值下降的最快!因为梯度的方向就是函数值变化最快的方向。 所以,我们重复利用这个方法,反复求取梯度,最后就能到达局部的最小值,这就类似于我们下山的过程

1.2梯度下降(Gradient Descent)公式 

🏷️我们对这个公式稍作解释 ,下文我们还会继续讨论他的推到流程

  1.α是什么含义?

✒️在梯度下降算法中被称作为 学习率 或者 步长 ,意味着我们可以通过α来控制每一步走的距离,控制参数不要走太快,错过了使损失函数取最小值的点。同时也要保证不要走的太慢,导致太阳下山了,还没有走到山下。所以α的选择在梯度下降法中往往是很重要的!α不能太大也不能太小,太小的话,可能导致迟迟走不到最低点,太大的话,会导致错过最低点! 

2.为什么梯度要乘以一个负号? 

✒️ 梯度前加一个负号,就意味着朝着梯度相反的方向前进!我们需要朝着下降最快的方向走,自然就是负的梯度的方向,所以此处需要加上负号。

2.梯度下降优化原理 

2.1相关概念 

📖首先我们回想一下一些概念,步长,步长决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度;特征,指的是样本中输入部分;假设函数,在监督学习中,为了拟合输入样本,而使用的假设函数;损失函数,为了评估模型拟合的好坏, 通常用损失函数来度量拟合的程度,损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。

2.2梯度下降法的推到流程 

1.首先确认函数模型的假设函数和损失函数 

比如对于线性回归,假设函数表示为 $h_\theta (x_1,x_2,...,x_n)=\theta _0+\theta _1x_1+...+\theta _nx_n$ ,其中,$\theta _i (i = 0,1,2... n)$为模型参数,$x_i (i = 0,1,2... n)$为每个样本的n个特征值。这个表示可以简化,我们增加一个特征$x_0=1$,这样:

\large h_\theta(x_{0}, x_{1}, \cdots, x_{n}) = \sum_{i=0}^{n}\theta_ix_i 

同样是线性回归,对应于上面的假设函数,损失函数为:  

J(\theta_0,\theta_1,\cdots,\theta_n) = \frac{1}{2m}\sum_{j=0}^{m}(h_{\theta}(x_0^{(j)},x_1^{(j)},\cdots,x_n^{(j)})-y_j)^2 

2.算法相关参数的初始化 (θ,步长,终止距离ε)

在没有任何先验知识的时候,可以将所有的θ初始化为0, 将步长初始化为1。在调优的时候再 优化。 

3.算法过程 

  1. 首先确定损失函数的梯度 :\large \frac{\partial}{\partial\theta_i}J(\theta_0,\theta_1,\cdots,\theta_n)
  2. 用步长乘以损失函数的梯度,得到当前位置下降的距离,即:\large \alpha\frac{\partial}{\partial\theta_i}J(\theta_0,\theta_1,\cdots,\theta_n)
  3. 确定是否所有的θ,梯度下降的距离都小于ε,如果小于ε则算法终止,当前所有的$\theta _i(i=0,1,...n)$即为最终结果。否则进入步骤4.
  4. 更新所有的\theta ,对于$\theta _i$,其更新表达式如下。更新完毕后继续转入步骤1。

 下面用线性回归的例子来具体描述梯度下降。假设我们的样本是: \large (x_1^{(0)},x_2^{(0)},\cdots,x_n^{(0)},y_0), (x_1^{(1)},x_2^{(1)},\cdots,x_n^{(1)},y_1), (x_1^{(m)},x_2^{(m)},\cdots,x_n^{(m)},y_m)

 损失函数如前面先决条件所述: \large J(\theta_0,\theta_1,\cdots,\theta_n) = \frac{1}{2m}\sum_{j=0}^{m}(h_{\theta}(x_1^{(j)},x_2^{(j)},\cdots,x_n^{(j)})-y_j)^2

 则在算法过程步骤1中对于$\theta _i$的偏导数计算如下:\large \frac{\partial}{\partial\theta_i}J(\theta_0,\theta_1,\cdots,\theta_n) = \frac{1}{m}\sum_{j=0}^{m}(h_{\theta}(x_1^{(j)},x_2^{(j)},\cdots,x_n^{(j)})-y_j)x_i^{(j)}

由于样本中没有$x_0$上式中令所有的$x_0^j$为1.

步骤4中$\theta _i$的更新表达式如下:\large \theta_{i+1} = \theta_i - \alpha\frac{1}{m}\sum_{j=0}^{m}(h_{\theta}(x_0^{(j)},x_1^{(j)},\cdots,x_n^{(j)})-y_j)x_i^{(j)}

从这个例子可以看出当前点的梯度方向是由所有的样本决定的,加$\frac{1}{m}$是为了好理解。由于步长也为常数,他们的乘积也为常数,所以这里$\alpha\frac{1}{m}$ 可以用一个常数表示。

3.其他梯度下降法的介绍 

 ✏️这里介绍四种梯度下降算法,不做其他要求,了解即可

3.1全梯度下降算法(FGD)

全梯度下降算法(FGD)-----每次迭代时, 使用全部样本的梯度值

批量梯度下降法,是梯度下降法最常用的形式,具体做法也就是在更新参数时使用所有的样本来进行更新。

计算训练集所有样本误差对其求和再取平均值作为目标函数

其是在整个训练数据集上计算损失函数关于参数θ的梯度:

图像表达可能会更清晰: 

 注意,我们在执行时不能在新更新模型,在运行的过程中,不能增加新的样本,且全梯度下降无法处理超出内存容量限制的数据集。

3.2随机梯度下降算法(SGD)

💡💡公式概念引入:  每次只代入计算一个样本目标函数的梯度来更新权重,再取下一个样本重复此过程,直到损失函数值停止下降或损失函数值小于某个可以容忍的阈值。

此过程简单,高效,通常可以较好地避免更新迭代收敛到局部最优解。其迭代形式为:

由于每次只食用一个样本迭代,若遇到噪音则很容易陷入局部最优解。

 Sklearn提供了随机梯度下降的API: 

from sklearn.linear_model import SGDRegressor

3.3小批量梯度下降算法(mini-bantch)

 概念:每次从训练样本集上随机抽取一个小样本集,在抽出来的小样本集上采用FG迭代更新权重,被抽出的小样本集所含样本点的个数称为batch_size,通常设置为2的幂次方,更有利于GPU加速处理。

公式: 

💡💡通过公式我们不难看出,若batch_size=1,则变成了SG;若batch_size=n,则变成了FG 

3.4随机平均梯度下降算法 

随机平均梯度下降算法(SAG)

  • 每次迭代时, 随机选择一个样本的梯度值和以往样本的梯度值的均值

在SG方法中,虽然避开了运算成本大的问题,但对于大数据训练而言,SG效果常不尽如人意,因为每一轮梯度更新都完全与上一轮的数据和梯度无关。

随机平均梯度算法克服了这个问题,在内存中为每一个样本都维护一个旧的梯度,随机选择第i个样本来更新此样本的梯度,其他样本的梯度保持不变,然后求得所有梯度的平均值,进而更新了参数。

如此,每一轮更新仅需计算一个样本的梯度,计算成本等同于SG,但收敛速度快得多。

其迭代形式为:

4.回归问题评估 

✒️不同于类别预测,不能苛刻回归预测的数值结果要严格的和真实值一致。一般情况下,我们希望衡量预测值和真实值之间的差距。因此,可以通过多种测评函数进行评价。 

4.1平均绝对误差 (MAE)

 

  • 上面的公式中:n 为样本数量, y 为实际值, $\hat{y}$ 为预测值

  • MAE 越小模型预测约准确

Sklearn中的MAE的API:

from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_test,y_predict)

4.2均方误差(MSE) 

  • 上面的公式中:n 为样本数量, y 为实际值, $\hat{y}$为预测值
  • MSE 越小模型预测约准确

 Sklearn 中MAE的API:

from sklearn.metrics import mean_squared_error
mean_squared_error(y_test,y_predict)

4.3均方根误差 (RMSE)

  • 上面的公式中:n 为样本数量, y 为实际值, $\hat{y}$为预测值
  • RMSE 越小模型预测约准确

  • RMSE 是 MSE 的平方根。某些情况下比MSE更有用,由于 MAE 和 RMSE 都是误差的一次方,可以将它们相互比较

 💗💗大多数情况下RMSE的值要大于MAE,在RMSE中有一个平方项,大的误差会被平方,会增加RMSE的值,可以得出结论,RMSE 会放大预测误差较大的样本对结果的影响,而 MAE 只是给出了平均误差,RMSE对于某些数据集中的少数异常点通常表现得比较敏感,那么是不是代表RMSE是更好的指标呢?注意哦✒️是少数异常点✒️。但其实并不是这样:

  • 假设数据中有少数异常点偏差很大,如果此时根据 RMSE 选择线性回归模型,可能会选出过拟合的模型来
  • 在这种情况下,由于数据中的异常点极少,选择具有最低 MAE 的回归模型可能更合适
  • 除此之外,当两个模型计算RMSE时数据量不一致,也不适合在一起比较

二者的优缺点这样一比较也就很明显,MAE 不能体现出误差大的数据点,RMSE虽然会加放大大误差的数据点对指标的影响, 但是对异常数据比较敏感

拓展

接下来我们简单介绍R²:

 R²代表了预测值和真实值拟合的拟合程度,既考虑了预测值与真实值的差异,同时也兼顾了真实值的离散程度

  • R²<0.5 → 弱拟合
  • 0.5 ≤ R² ≤ 0.8 → 中度拟合
  • R² > 0.8 强拟合

 R²的表达式:

 上面的公式中y = 真实值,  $\hat{y}$= 模型预测值,$\bar{y}$  = 真实值的平均值

 Sklearn 中R-Squared 的API:

from sklearn.metrics import r2_score
r2_score(y_test,y_predict)

R² 只能代表拟合的强弱,但不能说R² 越大模型越好,理论上存在R²<0的情况,但是只出现在模型特别差的情况

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值