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中使用hashlib模块处理算法的教程
Apr 28 Python
python制作花瓣网美女图片爬虫
Oct 28 Python
Python Requests 基础入门
Apr 07 Python
Python中Selenium模拟JQuery滑动解锁实例
Jul 26 Python
用tensorflow构建线性回归模型的示例代码
Mar 05 Python
利用python画出折线图
Jul 26 Python
Python 做曲线拟合和求积分的方法
Dec 29 Python
python使用 request 发送表单数据操作示例
Sep 25 Python
python 画3维轨迹图并进行比较的实例
Dec 06 Python
如何在Python3中使用telnetlib模块连接网络设备
Sep 21 Python
Python3获取cookie常用三种方案
Oct 05 Python
PyTorch 实现L2正则化以及Dropout的操作
May 27 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
使用swoole扩展php websocket示例
2014/02/13 PHP
php实现的树形结构数据存取类实例
2014/11/29 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
如何确保JavaScript的执行顺序 之jQuery.html深度分析
2011/03/03 Javascript
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
2012/02/03 Javascript
Javascript无阻塞加载具体方式
2013/06/28 Javascript
javascript框架设计之框架分类及主要功能
2015/06/23 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
jQuery+Ajax实现无刷新操作
2016/01/04 Javascript
微信小程序 switch组件详解及简单实例
2017/01/10 Javascript
jQuery实现的浮动层div浏览器居中显示效果
2017/02/03 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
2020/03/09 Javascript
[02:41]2015国际邀请赛中国区预选赛观战指南
2015/05/20 DOTA
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
Tornado服务器中绑定域名、虚拟主机的方法
2014/08/22 Python
python监控文件或目录变化
2016/06/07 Python
Python冲顶大会 快来答题!
2018/01/17 Python
tensorflow更改变量的值实例
2018/07/30 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
pycharm快捷键汇总
2020/02/14 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
Python基于Twilio及腾讯云实现国际国内短信接口
2020/06/18 Python
python3中for循环踩过的坑记录
2020/12/14 Python
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
六道php面试题附答案
2014/06/05 面试题
小学英语教学反思
2014/01/30 职场文书
超越自我演讲稿
2014/05/21 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
新员工考核评语
2014/12/31 职场文书
合作意向书怎么写
2019/06/24 职场文书
创业计划书之寿司
2019/07/19 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers