前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >梯度下降法及其Python实现

梯度下降法及其Python实现

作者头像
企鹅号小编
发布2018-02-27 10:46:05
1.6K0
发布2018-02-27 10:46:05
举报
文章被收录于专栏:编程编程

梯度下降法及其Python实现

基本介绍

梯度下降法(gradient descent),又名最速下降法(steepest descent)是求解无约束最优化问题最常用的方法,它是一种迭代方法,每一步主要的操作是求解目标函数的梯度向量,将当前位置的负梯度方向作为搜索方向。

梯度下降法特点:越接近目标值,步长越小,下降速度越慢。

下面将通过公式来说明梯度下降法。

建立模型为拟合函数h(θ) :

接下来的目标是将该函数通过样本的拟合出来,得到最佳的函数模型。因此构建损失函数J(θ)(目的是通过求解minJ(θ),得到在最优解下的θ向量),其中的每一项

都表示在已有的训练集上我们的拟合函数与 y之间的残差,计算其平方损失函数作为我们构建的风险函数(这里采用最小二乘法构造损失函数,在逻辑回归中也可采用最大似然估计构造损失函数从而估计参数)。

要使得最小J(θ),则对其J(θ)求导等于零。

在处理以下步骤时,可以用批量梯度下降算法(BGD)与随机梯度下降算法(SGD)。

批量梯度下降算法(BGD)

单个特征的迭代如下:

a为步长,如果太小,则找到函数最小值的速度就很慢,如果太大,则可能会错过最小值,而使得函数值发散。初始点不同,获得的最小值也不同,因此梯度下降求得的只是局部最小值。

多个特征的迭代如下:

Repeat until convergence{

(for every )

}

当上式收敛时则退出迭代,一开始设置一个具体参数,当前后两次迭代差值小于该参数时候结束迭代。

使用梯度下降法,越接近最小值时,下降速度越慢。计算批量梯度下降法时,计算每一个θ值都需要遍历计算所有样本,当数据量比较大时这是比较费时的计算。

随机梯度下降算法(SGD)

为解决数据量大的时批量梯度下降算法费时的困境。随机梯度下降算法,每次迭代只是考虑让该样本点的J(θ)趋向最小,而不管其他的样本点,这样算法会很快,但是收敛的过程会比较曲折,整体效果上,大多数时候它只能接近局部最优解,而无法真正达到局部最优解。该算法适合用于较大训练集的例子。

Loop{

}

改进的随机梯度下降算法

为了避免迭代时系数出现周期性波动,同时让系数很快收敛,这里改进随机梯度下降算法。

1)在每次迭代时,调整更新步长a的值。随着迭代的进行,a越来越小,这会缓解系数的高频波动。同时为了避免a随着迭代不断减小到接近于0,约束a一定大于一个稍微大点的常数项。

2)每次迭代,改变样本的优化顺序。也就是随机选择样本来更新回归系数。这样做可以减少周期性的波动,因为样本顺序的改变,使得每次迭代不再形成周期性。

算法应用和python实现

梯度下降法可以用于在前面提到的logistic回归分类器中,主要是求解模型中的cost函数,这里用泰坦尼克数据集进行演示,并且使用python中的sklearn库进行实现,代码如下:

本文来自企鹅号 - 全球大搜罗媒体

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

本文来自企鹅号 - 全球大搜罗媒体

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档