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 04 Python
用C++封装MySQL的API的教程
May 06 Python
利用python实现数据分析
Jan 11 Python
Python基于回溯法子集树模板解决数字组合问题实例
Sep 02 Python
Python-接口开发入门解析
Aug 01 Python
python爬虫-模拟微博登录功能
Sep 12 Python
Python高级编程之继承问题详解(super与mro)
Nov 19 Python
学Python 3的理由和必要性
Nov 19 Python
python 通过手机号识别出对应的微信性别(实例代码)
Dec 22 Python
Python3 把一个列表按指定数目分成多个列表的方式
Dec 25 Python
Python 找出出现次数超过数组长度一半的元素实例
May 11 Python
基于Python把网站域名解析成ip地址
May 25 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 图片上传类代码
2009/07/17 PHP
php 使用file_get_contents读取大文件的方法
2014/11/13 PHP
php中关于长度计算容易混淆的问题分析
2016/05/27 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
[原创]php正则删除html代码中class样式属性的方法
2017/05/24 PHP
Javascript实现的分页函数
2006/12/22 Javascript
NodeJS的模块写法入门(实例代码)
2012/03/07 NodeJs
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
使用jquery制作弹出框效果
2015/04/03 Javascript
两款JS脚本判断手机浏览器类型跳转WAP手机网站
2015/10/16 Javascript
js生成随机数的方法实例
2015/10/16 Javascript
js实现继承的5种方式
2015/12/01 Javascript
JavaScript中创建对象的模式汇总
2016/04/19 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
2016/05/11 Javascript
AngularJS入门教程之链接与图片模板详解
2016/08/19 Javascript
js实现股票实时刷新数据案例
2017/05/14 Javascript
在小程序Canvas中使用measureText的方法示例
2018/10/19 Javascript
vue实现的上拉加载更多数据/分页功能示例
2019/05/25 Javascript
JS实现简单的文字无缝上下滚动功能示例
2019/06/22 Javascript
npm ci命令的基本使用方法
2020/09/20 Javascript
python魔法方法-属性访问控制详解
2016/07/25 Python
Python根据文件名批量转移图片的方法
2018/10/21 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
python同时替换多个字符串方法示例
2019/09/17 Python
python 通过手机号识别出对应的微信性别(实例代码)
2019/12/22 Python
Python统计学一数据的概括性度量详解
2020/03/03 Python
Lovedrobe官网:英国领先的大码服装品牌
2019/09/19 全球购物
Oracle中delete,truncate和drop的区别
2016/05/05 面试题
实习求职信
2013/12/01 职场文书
医院护士见习期自我鉴定
2014/04/10 职场文书
正风肃纪剖析材料
2014/09/30 职场文书
三八红旗手事迹材料
2014/12/26 职场文书
中国梦宣传标语口号
2015/12/26 职场文书
Vue + iView实现Excel上传功能的完整代码
2021/06/22 Vue.js
MySQL中正则表达式(REGEXP)使用详解
2022/07/07 MySQL