python梯度下降法的简单示例


Posted in Python onAugust 31, 2018

梯度下降法的原理和公式这里不讲,就是一个直观的、易于理解的简单例子。

1.最简单的情况,样本只有一个变量,即简单的(x,y)。多变量的则可为使用体重或身高判断男女(这是假设,并不严谨),则变量有两个,一个是体重,一个是身高,则可表示为(x1,x2,y),即一个目标值有两个属性。

2.单个变量的情况最简单的就是,函数hk(x)=k*x这条直线(注意:这里k也是变化的,我们的目的就是求一个最优的   k)。而深度学习中,我们是不知道函数的,也就是不知道上述的k。   这里讨论单变量的情况:

在不知道k的情况下,我们是通过样本(x1,y1),(x2,y2),(xn,yn)来获取k。获取的k的好坏则有损失函数来衡量。

损失函数:就是你预测的值和真实值的差异大小(比如一个样本(1,1)他的真实值是1,而你预测的是0.5,则差异   比较大,如果你预测值为0.9999,则差异就比较小了)。

损失函数为定义如下(此处为单变量的情况)

python梯度下降法的简单示例

目的是求使损失函数最小的变量k(注意和变量x区分),则将损失函数对k求导(多变量时为求偏导得梯度,这里单变量求导,其实不算梯度),求偏导如下:

python梯度下降法的简单示例

然后迭代,迭代时有个步长alpha,(深度学习中貌似叫学习率)

python梯度下降法的简单示例

3.例子

假如我们得到样本(1,1),(2,2),(3,3).其实,由这三个样本可以得到函数为y = 1*x。此时损失函数为0.而机器是不知道的,所以我们需要训练。

下面是一段python代码。

import numpy as np
import matplotlib.pyplot as plt
x=np.arange(-5, 5, 0.001)
y=(((x-1)*(x-1)+(x*2-2)*(x*2-2)+(x*3-3)*(x*3-3))*1/6.0)
plt.plot(x,y) 
#plt.show() #显示图形 
 

def sum(x):
 return ((x*1-1)*1+(x*2-2)*2+(x*3-3)*3)
def fun(x):
 return ((1/3.0)*sum(x))
old = 0
new = 5
step = 0.01
pre = 0.00000001
 
def src_fun(x):
 print(((x-1)*(x-1)+(x*2-2)*(x*2-2)+(x*3-3)*(x*3-3))*1/6.0)
 
while abs(new-old)>pre:
 old = new
 #src_fun(old)  #输出每次迭代的损失值
 new = new - step*fun(old)
 
 
print(new)
print(src_fun(new))

下图是损失函数的图像,损失函数中变量是k。下图横坐标为k的不同取值,纵轴为对应的损失大小。由下图可以大致看出,当k为1时,损失函数值为0。注意:这里取的最优值k=1是在我们已有样本的情况下得出的,样本不同,k值自然不同。

python梯度下降法的简单示例

下面是print(new)和print(src_fun(new))的输出结果

python梯度下降法的简单示例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
举例讲解Python设计模式编程中对抽象工厂模式的运用
Mar 02 Python
Python元组及文件核心对象类型详解
Feb 11 Python
python2和python3在处理字符串上的区别详解
May 29 Python
python字典嵌套字典的情况下找到某个key的value详解
Jul 10 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
Mar 02 Python
Python 实现自动完成A4标签排版打印功能
Apr 09 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
May 17 Python
解决Keras 自定义层时遇到版本的问题
Jun 16 Python
Django如何实现密码错误报错提醒
Sep 04 Python
python 自定义异常和主动抛出异常(raise)的操作
Dec 11 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
Feb 18 Python
4种方法python批量修改替换列表中元素
Apr 07 Python
wxPython的安装与使用教程
Aug 31 #Python
python traceback捕获并打印异常的方法
Aug 31 #Python
基于python中theano库的线性回归
Aug 31 #Python
基于随机梯度下降的矩阵分解推荐算法(python)
Aug 31 #Python
python实现梯度下降算法
Mar 24 #Python
wtfPython—Python中一组有趣微妙的代码【收藏】
Aug 31 #Python
opencv python 图像去噪的实现方法
Aug 31 #Python
You might like
高亮度显示php源代码
2006/10/09 PHP
简单的php数据库操作类代码(增,删,改,查)
2013/04/08 PHP
php strrpos()与strripos()函数
2013/08/31 PHP
PHP判断远程图片或文件是否存在的实现代码
2014/02/20 PHP
Linux下手动编译安装PHP扩展的例子分享
2014/07/15 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
js正则表达式的使用详解
2013/07/09 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
JavaScript使用indexOf获得子字符串在字符串中位置的方法
2015/04/06 Javascript
JS数组array元素的添加和删除方法代码实例
2015/06/01 Javascript
jquery实现的横向二级导航效果代码
2015/08/26 Javascript
深入浅析JavaScript面向对象和原型函数
2016/02/06 Javascript
详解微信小程序 wx.uploadFile 的编码坑
2017/01/23 Javascript
axios学习教程全攻略
2017/03/26 Javascript
如何使用vuejs实现更好的Form validation?
2017/04/07 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
Python操作sqlite3快速、安全插入数据(防注入)的实例
2014/04/26 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
2019/08/09 Python
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
2013年研究生毕业感言
2014/02/06 职场文书
美容院经理岗位职责
2014/04/03 职场文书
内蒙古鄂尔多斯市市长寄语
2014/04/10 职场文书
岗位职责说明书
2014/05/07 职场文书
小学教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
2014保险公司个人工作总结
2014/12/09 职场文书
先进个人材料怎么写
2014/12/30 职场文书
自主招生英文自荐信
2015/03/25 职场文书
庆祝教师节主持词
2015/07/06 职场文书
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js