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将mdb数据库文件导入postgresql数据库示例
Feb 17 Python
linux 下实现python多版本安装实践
Nov 18 Python
python中sleep函数用法实例分析
Apr 29 Python
python协程用法实例分析
Jun 04 Python
python 网络编程详解及简单实例
Apr 25 Python
python实现数据库跨服务器迁移
Apr 12 Python
基于python实现学生管理系统
Oct 17 Python
Python程序控制语句用法实例分析
Jan 14 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
Apr 02 Python
解决reload(sys)后print失效的问题
Apr 25 Python
Python监听键盘和鼠标事件的示例代码
Nov 18 Python
Python按顺序遍历并读取文件夹中文件
Apr 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
AM/FM收音机的安装与调试
2021/03/02 无线电
php实现每天自动变换随机问候语的方法
2015/05/12 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
2016/05/09 PHP
给Javascript数组插入一条记录的代码
2007/08/30 Javascript
面向对象的Javascript之二(接口实现介绍)
2012/01/27 Javascript
使用jQuery避免鼠标双击的解决方案
2013/08/21 Javascript
理解Javascript闭包
2013/11/01 Javascript
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
JQuery中Ajax()的data参数类型实例分析
2015/12/15 Javascript
JS实现复制内容到剪贴板功能兼容所有浏览器(推荐)
2016/06/17 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
动态加载、移除js/css文件的示例代码
2018/03/20 Javascript
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
用Angular实现一个扫雷的游戏示例
2020/05/15 Javascript
python实现的二叉树算法和kmp算法实例
2014/04/25 Python
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
Python实现代码统计工具(终极篇)
2016/07/04 Python
Python按行读取文件的实现方法【小文件和大文件读取】
2016/09/19 Python
微信跳一跳python辅助软件思路及图像识别源码解析
2018/01/04 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
2018/01/27 Python
windows下python虚拟环境virtualenv安装和使用详解
2019/07/16 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
解决pycharm下pyuic工具使用的问题
2020/04/08 Python
初学者学习Python好还是Java好
2020/05/26 Python
详解向scrapy中的spider传递参数的几种方法(2种)
2020/09/28 Python
python 实现控制鼠标键盘
2020/11/27 Python
HTML5中5个简单实用的API
2014/04/28 HTML / CSS
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
垃圾回收的优点和原理。并考虑2种回收机制
2016/10/16 面试题
外科实习自我鉴定
2013/10/06 职场文书
班级聚会策划书
2014/01/16 职场文书
安全守法证明
2015/06/23 职场文书
原生JavaScript实现简单五子棋游戏
2021/06/28 Javascript
python3操作redis实现List列表实例
2021/08/04 Python