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基于Socket实现的简单聊天程序示例
Aug 05 Python
JS设计模式之责任链模式实例详解
Feb 03 Python
Python实现读写INI配置文件的方法示例
Jun 09 Python
使用Python抓取豆瓣影评数据的方法
Oct 17 Python
Python 单元测试(unittest)的使用小结
Nov 14 Python
PyQt5 QListWidget选择多项并返回的实例
Jun 17 Python
python模拟菜刀反弹shell绕过限制【推荐】
Jun 25 Python
使用pygame写一个古诗词填空通关游戏
Dec 03 Python
Python ckeditor富文本编辑器代码实例解析
Jun 22 Python
virtualenv介绍及简明教程
Jun 23 Python
Python模拟键盘输入自动登录TGP
Nov 27 Python
python matlab库简单用法讲解
Dec 31 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
杏林同学录(七)
2006/10/09 PHP
非常好用的两个PHP函数 serialize()和unserialize()
2012/02/04 PHP
PHP中header和session_start前不能有输出原因分析
2013/01/11 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
2014/07/15 PHP
PHP面向对象程序设计之接口用法
2014/08/20 PHP
PHP递归调用数组值并用其执行指定函数的方法
2015/04/01 PHP
PHP观察者模式实例分析【对比JS观察者模式】
2019/05/22 PHP
jquery dialog键盘事件代码
2010/08/01 Javascript
JavaScript全局函数使用简单说明
2011/03/11 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
2014/12/18 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
2015/12/09 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
2016/11/15 Javascript
微信小程序实现蒙版弹窗效果
2018/11/01 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
Koa日志中间件封装开发详解
2019/03/09 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
Javascript中的this,bind和that使用实例
2019/12/05 Javascript
js 将多个对象合并成一个对象 assign方法的实现
2020/09/24 Javascript
基于ant design日期控件使用_仅月份的操作
2020/10/27 Javascript
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
Pycharm简单使用教程(入门小结)
2019/07/04 Python
简单了解Python3里的一些新特性
2019/07/13 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
2019/08/12 Python
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
Herschel美国官网:背包、手提袋及配件
2020/03/10 全球购物
建龙钢铁面试总结
2014/04/15 面试题
英语专业应届生求职信范文
2013/11/15 职场文书
四年级学生期末评语
2014/12/26 职场文书
电话营销开场白
2015/05/29 职场文书