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中的闭包
Jul 08 Python
python使用mysql数据库示例代码
May 21 Python
老生常谈python之鸭子类和多态
Jun 13 Python
安装Python的教程-Windows
Jul 22 Python
python numpy格式化打印的实例
May 14 Python
python matlibplot绘制多条曲线图
Feb 19 Python
Python函数any()和all()的用法及区别介绍
Sep 14 Python
Python Django切换MySQL数据库实例详解
Jul 16 Python
Django框架ORM数据库操作实例详解
Nov 07 Python
深入理解Tensorflow中的masking和padding
Feb 24 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
Jun 02 Python
Python-OpenCV实现图像缺陷检测的实例
Jun 11 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
为php4加入动态flash文件的生成的支持
2006/10/09 PHP
第六节 访问属性和方法 [6]
2006/10/09 PHP
php数字运算验证码的实现代码
2015/07/30 PHP
php实现基于PDO的预处理示例
2017/03/28 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
Swoole源码中如何查询Websocket的连接问题详解
2020/08/30 PHP
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
jquery淡入淡出效果简单实例
2016/01/14 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
Bootstrap Table表格一直加载(load)不了数据的快速解决方法
2016/09/17 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
2016/12/13 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
微信小程序 支付功能(前端)的实现
2017/05/24 Javascript
Vue学习笔记进阶篇之函数化组件解析
2017/07/21 Javascript
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
webpack 单独打包指定JS文件的方法
2018/02/22 Javascript
小程序实现发表评论功能
2018/07/06 Javascript
angular 服务的单例模式(依赖注入模式下)详解
2018/10/22 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Django Admin 实现外键过滤的方法
2017/09/29 Python
Python中常见的异常总结
2018/02/20 Python
Numpy数组转置的两种实现方法
2018/04/17 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
Python APScheduler执行使用方法详解
2020/12/10 Python
大学生职业生涯规划书范文
2014/01/14 职场文书
草船借箭教学反思
2014/02/03 职场文书
房地产资料员岗位职责
2014/07/02 职场文书
带香烟到学校抽的检讨书
2014/09/25 职场文书
离婚代理词范文
2015/05/23 职场文书
初中数学教学随笔
2015/08/15 职场文书
Golang连接并操作MySQL
2022/04/14 MySQL