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中处理unchecked未捕获异常实例
Jan 17 Python
Python封装shell命令实例分析
May 05 Python
浅谈Python实现2种文件复制的方法
Jan 19 Python
Python 实现在文件中的每一行添加一个逗号
Apr 29 Python
Python中staticmethod和classmethod的作用与区别
Oct 11 Python
Django unittest 设置跳过某些case的方法
Dec 26 Python
Python logging设置和logger解析
Aug 28 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
Dec 09 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
Apr 23 Python
Python类super()及私有属性原理解析
Jun 15 Python
python 调整图片亮度的示例
Dec 03 Python
vue.js刷新当前页面的实例讲解
Dec 29 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
第四节 构造函数和析构函数 [4]
2006/10/09 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
2014/11/04 PHP
PHP数组实例详解
2016/06/26 PHP
另类调用flash无须激活的方法
2006/12/27 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
2014/03/05 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
Bootstrap+jfinal实现省市级联下拉菜单
2016/05/30 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
2017/01/22 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
javaScript中"=="和"==="的区别详解
2018/03/16 Javascript
详解vue组件基础
2018/05/04 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
Python中的作用域规则详解
2015/01/30 Python
解析Python中的二进制位运算符
2015/05/13 Python
python框架中flask知识点总结
2018/08/17 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
python实现超市商品销售管理系统
2019/11/22 Python
Django框架中间件定义与使用方法案例分析
2019/11/28 Python
Python2与Python3的区别详解
2020/02/09 Python
世界最大域名注册商:GoDaddy
2016/07/24 全球购物
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
二手书店创业计划书
2014/01/16 职场文书
创业资金计划书
2014/02/06 职场文书
奥巴马开学演讲观后感
2015/06/12 职场文书
小学六年级毕业感言
2015/07/30 职场文书
六一儿童节园长致辞
2015/07/31 职场文书
九九重阳节致辞
2015/07/31 职场文书
2016年情人节问候语
2015/11/11 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python
Pytorch实现图像识别之数字识别(附详细注释)
2021/05/11 Python
浅谈redis的过期时间设置和过期删除机制
2022/03/18 MySQL