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 相关文章推荐
详解Django中的权限和组以及消息
Jul 23 Python
Python绘制七段数码管实例代码
Dec 20 Python
python numpy元素的区间查找方法
Nov 14 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
Jun 17 Python
Python split() 函数拆分字符串将字符串转化为列的方法
Jul 16 Python
Numpy的简单用法小结
Aug 28 Python
python生成随机红包的实例写法
Sep 02 Python
使用遗传算法求二元函数的最小值
Feb 11 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
Mar 31 Python
Pandas之read_csv()读取文件跳过报错行的解决
Apr 21 Python
基于pycharm 项目和项目文件命名规则的介绍
Jan 15 Python
Python OpenCV超详细讲解基本功能
Apr 02 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
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
一个php短网址的生成代码(仿微博短网址)
2014/05/07 PHP
将二维数组转为一维数组的2种方法
2014/05/26 PHP
两个php日期控制类实例
2014/12/09 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
php发送html格式文本邮件的方法
2015/06/10 PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
2016/01/04 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
php使用环形链表解决约瑟夫问题完整示例
2018/08/07 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
类似框架的js代码
2006/11/09 Javascript
实现超用户体验 table排序javascript实现代码
2009/06/22 Javascript
用jquery实现自定义风格的滑动条实现代码
2011/04/26 Javascript
javascript实现动态表头及表列的展现方法
2015/07/14 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
ES6新特性之Object的变化分析
2017/03/31 Javascript
jQuery实现可编辑表格并生成json结果(实例代码)
2017/07/19 jQuery
vue实现表单未编辑或未保存离开弹窗提示功能
2020/04/08 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
Python简单的制作图片验证码实例
2017/05/31 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
基于Python函数的作用域规则和闭包(详解)
2017/11/29 Python
Python使用sort和class实现的多级排序功能示例
2018/08/15 Python
python numpy数组的索引和切片的操作方法
2018/10/20 Python
Python 实现自动导入缺失的库
2019/10/29 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
2020/03/06 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
关于box-sizing的全面理解
2016/07/28 HTML / CSS
HTML5本地存储之Database Storage应用介绍
2013/01/06 HTML / CSS
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
Java基础面试题
2012/11/02 面试题
小学教师自我鉴定
2013/11/07 职场文书
文字自荐书范文
2014/02/10 职场文书
个人作风建设心得体会
2014/10/22 职场文书
工会工作个人总结
2015/03/03 职场文书
Python数据清洗工具之Numpy的基本操作
2021/04/22 Python