用python+numpy+matplotalib实现梯度下降法
来源:互联网 发布:百度鹰眼定位软件 编辑:程序博客网 时间:2024/05/16 14:34
这个阶段一直在做和梯度一类算法相关的东西,索性在这儿做个汇总,
一、算法论述
梯度下降法(gradient descent)别名最速下降法(曾经我以为这是两个不同的算法-.-),是用来求解无约束最优化问题的一种常用算法。下面以求解线性回归为题来叙述:
设:一般的线性回归方程(拟合函数)为:(其中的值为1)
则这一组向量参数选择的好与坏就需要一个机制来评估,据此我们提出了其损失函数为(选择均方误差):
我们现在的目的就是使得损失函数取得最小值,即目标函数为:
如果的值取到了0,意味着我们构造出了极好的拟合函数,也即选择出了最好的值,但这基本是达不到的,我们只能使得其无限的接近于0,当满足一定精度时停止迭代。
那么问题来了如何调整使得取得的值越来越小呢?方法很多,此处以梯度下降法为例:
分为两步:(1)初始化的值。
(2)改变的值,使得按梯度下降的方向减少。
值的更新使用如下的方式来完成:
其中为步长因子,这里我们取定值,但注意如果取得过小会导致收敛速度过慢,过大则损失函数可能不会收敛,甚至逐渐变大,可以在下述的代码中修改的值来进行验证。后面我会再写一篇关于随机梯度下降法的文章,其实与梯度下降法最大的不同就在于一个求和符号。
二、代码实现:
三、绘制的图像如下:
迭代次数与损失精度间的关系图如下:步长为0.01
变量、与损失函数loss之间的关系:(从初始化之后会一步步收敛到loss满足精度,之后、会变的稳定下来)
下面我们来看一副当步长因子变大后的图像:步长因子为0.5(很明显其收敛速度变缓了)
当步长因子设置为1.8左右时,其损失值已经开始震荡
- 用python+numpy+matplotalib实现梯度下降法
- 梯度下降法(BGD,SGD,MSGD)python+numpy具体实现
- Python实现梯度下降法
- 逻辑回归-梯度下降法 python实现
- 梯度下降法及其Python实现
- python实现随机梯度下降法
- 梯度下降法及其Python实现
- 梯度下降法及其Python实现
- 梯度下降的python实现
- 梯度下降算法 Python实现
- 最小二乘法和梯度下降法有哪些区别? 以及梯度下降法Python实现
- 梯度下降法-python代码
- 梯度下降法Python代码
- 梯度下降法求解线性回归之python实现
- 梯度下降法 线性回归 多项式回归 python实现
- 线性回归参数估计--最小二乘法与梯度下降法Python实现
- 用python实现图形显示“线性回归+梯度下降”算法
- 用python实现图形显示“线性回归+梯度下降”算法
- java线程池
- Hdu2511汉诺塔X
- java IO流总结
- Android性能优化(View篇)
- hdu 6035 树分治
- 用python+numpy+matplotalib实现梯度下降法
- JavaScript创建对象—从es5到es6
- 深入分析Java并发中volatile的实现原理
- F
- Rescue HDU
- D3 笔记五:过渡、transition、duration、ease、delay
- C++中,自定义string类,实现字符串的赋值“=”和连接函数“+”
- 数据类型初始化后的默认值
- 推荐一款makdown剪辑器-mditor