前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >梯度下降法及回归问题评估

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

作者头像
用户10950404
发布2024-07-30 13:25:57
810
发布2024-07-30 13:25:57
举报
文章被收录于专栏:人工智能

前言

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

学习目标

  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$
$h_\theta (x_1,x_2,...,x_n)=\theta _0+\theta _1x_1+...+\theta _nx_n$

 ,其中,

$\theta _i (i = 0,1,2... n)$
$\theta _i (i = 0,1,2... n)$

为模型参数,

$x_i (i = 0,1,2... n)$
$x_i (i = 0,1,2... n)$

为每个样本的n个特征值。这个表示可以简化,我们增加一个特征

$x_0=1$
$x_0=1$

,这样:

\large h_\theta(x_{0}, x_{1}, \cdots, x_{n}) = \sum_{i=0}^{n}\theta_ix_i
\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
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)
\large \frac{\partial}{\partial\theta_i}J(\theta_0,\theta_1,\cdots,\theta_n)
  1. 用步长乘以损失函数的梯度,得到当前位置下降的距离,即:
\large \alpha\frac{\partial}{\partial\theta_i}J(\theta_0,\theta_1,\cdots,\theta_n)
\large \alpha\frac{\partial}{\partial\theta_i}J(\theta_0,\theta_1,\cdots,\theta_n)
  1. 确定是否所有的θ,梯度下降的距离都小于ε,如果小于ε则算法终止,当前所有的
$\theta _i(i=0,1,...n)$
$\theta _i(i=0,1,...n)$

即为最终结果。否则进入步骤4.

  1. 更新所有的
\theta
\theta

,对于

$\theta _i$
$\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 (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
\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$
$\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)}
\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$

上式中令所有的

$x_0^j$
$x_0^j$

为1.

步骤4中

$\theta _i$
$\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)}
\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}$
$\frac{1}{m}$

是为了好理解。由于步长也为常数,他们的乘积也为常数,所以这里

$\alpha\frac{1}{m}$
$\alpha\frac{1}{m}$

可以用一个常数表示。

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

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

3.1全梯度下降算法(FGD)

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

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

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

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

图像表达可能会更清晰:

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

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

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

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

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

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

代码语言:javascript
复制
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}$
$\hat{y}$

 为预测值

  • MAE 越小模型预测约准确

Sklearn中的MAE的API:

代码语言:javascript
复制
from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_test,y_predict)

4.2均方误差(MSE) 

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

为预测值

  • MSE 越小模型预测约准确

 Sklearn 中MAE的API:

代码语言:javascript
复制
from sklearn.metrics import mean_squared_error
mean_squared_error(y_test,y_predict)

4.3均方根误差 (RMSE)

  • 上面的公式中:n 为样本数量, y 为实际值,
$\hat{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}$
$\hat{y}$

= 模型预测值,

$\bar{y}$
$\bar{y}$

  = 真实值的平均值

 Sklearn 中R-Squared 的API:

代码语言:javascript
复制
from sklearn.metrics import r2_score
r2_score(y_test,y_predict)

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 学习目标
  • 1.梯度下降 
    • 1.1什么是梯度下降 
      • 1.2梯度下降(Gradient Descent)公式 
      • 2.梯度下降优化原理 
        • 2.1相关概念 
          • 2.2梯度下降法的推到流程 
            • 1.首先确认函数模型的假设函数和损失函数 
            • 2.算法相关参数的初始化 (θ,步长,终止距离ε)
            • 3.算法过程 
        • 3.其他梯度下降法的介绍 
          • 3.1全梯度下降算法(FGD)
            • 3.2随机梯度下降算法(SGD)
              • 3.3小批量梯度下降算法(mini-bantch)
                • 3.4随机平均梯度下降算法 
                • 4.回归问题评估 
                  • 4.1平均绝对误差 (MAE)
                    • 4.2均方误差(MSE) 
                      • 4.3均方根误差 (RMSE)
                      • 拓展
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档