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之PyUnit单元测试实例
Oct 11 Python
Python多进程同步Lock、Semaphore、Event实例
Nov 21 Python
详解Python中表达式i += x与i = i + x是否等价
Feb 08 Python
python删除文本中行数标签的方法
May 31 Python
Python中的CSV文件使用"with"语句的方式详解
Oct 16 Python
Python字符串逆序的实现方法【一题多解】
Feb 18 Python
python中的协程深入理解
Jun 10 Python
PyQt4编程之让状态栏显示信息的方法
Jun 18 Python
如何通过Python实现标签云算法
Jul 02 Python
使用python画社交网络图实例代码
Jul 10 Python
python实现小世界网络生成
Nov 21 Python
使用python创建生成动态链接库dll的方法
May 09 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/06/29 PHP
php跨站攻击实例分析
2014/10/28 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
2020/04/06 PHP
javascript JSON操作入门实例
2010/04/16 Javascript
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
2011/01/12 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
用jquery的方法制作一个简单的导航栏
2014/06/23 Javascript
javascript中clipboardData对象用法详解
2015/05/13 Javascript
基于JS实现数字+字母+中文的混合排序方法
2016/06/06 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
AngularJS前端页面操作之用户修改密码功能示例
2017/03/27 Javascript
ES6模块化的import和export用法方法总结
2017/08/08 Javascript
JS实现的全排列组合算法示例
2017/10/09 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
python清除字符串里非字母字符的方法
2015/07/02 Python
python实现简单名片管理系统
2018/11/30 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
查看端口并杀进程python脚本代码
2019/12/17 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
Pycharm安装Qt Design快捷工具的详细教程
2020/11/18 Python
CSS3中文字镂空、透明值、阴影效果设置示例小结
2016/03/07 HTML / CSS
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
澳大利亚顶级美发和美容贸易超市:glamaCo
2020/01/19 全球购物
香奈儿美国官网:CHANEL美国
2020/05/20 全球购物
do you have any Best Practice for testing
2016/06/04 面试题
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
2014年小学美术工作总结
2014/12/20 职场文书
四年级学生期末评语
2014/12/26 职场文书
建筑安全员岗位职责
2015/02/15 职场文书
2015年食品安全工作总结
2015/05/15 职场文书
简单了解 MySQL 中相关的锁
2021/05/25 MySQL
pd.drop_duplicates删除重复行的方法实现
2022/06/16 Python
vue实现简易音乐播放器
2022/08/14 Vue.js