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编程中对super函数的正确理解和用法解析
Jul 02 Python
Python实现将16进制字符串转化为ascii字符的方法分析
Jul 21 Python
python实现事件驱动
Nov 21 Python
对Python的交互模式和直接运行.py文件的区别详解
Jun 29 Python
python实现在函数图像上添加文字和标注的方法
Jul 08 Python
简单了解django缓存方式及配置
Jul 19 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
Nov 19 Python
Python数据持久化存储实现方法分析
Dec 21 Python
Python基于httpx模块实现发送请求
Jul 07 Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 Python
浅析Python 多行匹配模式
Jul 24 Python
python3中布局背景颜色代码分析
Dec 01 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基于自定义类随机生成姓名的方法示例
2017/08/05 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
实现51Map地图接口(示例代码)
2013/11/22 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
js函数调用的方式
2014/05/06 Javascript
js对象的复制继承实例
2015/01/10 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
2015/03/13 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
Bootstrap选项卡与Masonry插件的完美结合
2016/07/06 Javascript
Webpack打包慢问题的完美解决方法
2017/03/16 Javascript
简述jQuery Easyui一些用法
2017/08/01 jQuery
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
详解Vue组件之作用域插槽
2018/11/22 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
对于防止按钮重复点击的尝试详解
2019/04/22 Javascript
vue Element左侧无限级菜单实现
2020/06/10 Javascript
详解Vue的异步更新实现原理
2020/12/22 Vue.js
[09:31]2016国际邀请赛中国区预选赛Yao赛后采访 答题送礼
2016/06/27 DOTA
Python删除空文件和空文件夹的方法
2015/07/14 Python
Python列表切片操作实例总结
2019/02/19 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
python进行参数传递的方法
2020/05/12 Python
python线性插值解析
2020/07/05 Python
python主要用于哪些方向
2020/07/05 Python
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
欧洲当代手工玻璃和瓷器的领先品牌:LSA International
2018/06/03 全球购物
男方婚前保证书
2015/02/28 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
小区环境卫生倡议书
2015/04/29 职场文书
2016春季田径运动会广播稿
2015/12/21 职场文书
面试官问我Mysql的存储引擎了解多少
2022/08/05 MySQL