线性回归的有关概念已在笔者相关文章中进行介绍。本篇内容将介绍梯度下降(BGD)相关内容。

1.梯度下降

梯度下降常用于机器学习中求解符合最小损失函数的模型的参数值,梯度下降也是BP神经网络的核心,本文将介绍批量梯度下降法(BGD)。

如上图所示,梯度下降的过程便是沿梯度方向,按照一定的步伐求解极小(大)值。这里举一个简单的例子,假如你在一座山上,你怎样才能最安全最快速地下山,这里有两个条件,一是安全下山,二是快速下山。答案便是沿着较为陡峭(梯度)的地方,且容易落脚(步伐大小,即学习率)的地方一步一步地下山。

梯度,也就是“山”的斜度,在上图中,便是每个点处的斜率,即导数。下面给出梯度下降的数学公式:

上式中,便是下一步,是当前所处的位置,是步伐大小(学习率),为梯度,也就是的偏导数。

另外,上式中的为损失函数,也就是描述结果准确程度的函数,在这里,我们定义损失函数为:

理论上,当损失函数取最小值0时,便为最优的结果。对于上述,其实还有其他的损失函数也能很好地发挥作用,但是平方误差损失函数是解决回归问题最常用的手段。

在上式中,表示当前与矩阵的点乘。如:

则                                                                 

在上式中,是我们的实际数据。

求偏导,得:

即最终表达式为:

按照上式,便可求出最终参数

关于学习率的说明:如果学习率太小,会导致学习时间变长,消耗资源变大。如果学习率太大,可能会越过最低(高)点,误差变大,甚至导致函数无法收敛。

2.python实现

一元参数测试:

import numpy as npX = mat([1, 2, 3]).reshape(3, 1)  # x为1,2,3
Y = mat([5, 10, 15]).reshape(3, 1)  # y为5,10,15
theta = 1 #初始为1
alpha = 0.1 # 学习率为0.1
for i in range(100):theta = theta + np.sum(alpha * (Y - dot(X, theta)) * X.reshape(1, 3))/3 # 公式实现
print(theta)

由代码的初始数据可知,方程应为,下面我们测试theta是否为5:

测试结果正确。

实战:

同样,这里准备了最小二乘法的测试数据,待下面测试结束后,读者可检查结果是否与最小二乘法的结果一致。

数据示例截图如下:

上述数据为某一商品的销售量与售价、服务投资和其它投资的对应关系,即我们要求出:

,,

中,矩阵

代码如下:

import numpy as np
import pandas as pd
from numpy import dotdataset = pd.read_csv('C:\\Users\\57105\\Desktop\\data.csv')  # 读入数据
X = dataset.iloc[:, 2: 5]  # x为所有行,2到4列
Y = dataset.iloc[:, 1]  # y为所有行,第1列
theta = np.array([1.0, 1.0, 1.0]).reshape(3, 1)  # theta初始值
alpha = 0.1  # 学习率
temp = theta
X0 = X.iloc[:, 0].values.reshape(60, 1)
X1 = X.iloc[:, 1].values.reshape(60, 1)
X2 = X.iloc[:, 2].values.reshape(60, 1)
Y = Y.values.reshape(60, 1)
for i in range(1000):  # 这里特别注意,在完成一次循环后,整体更新thetatemp[0] = theta[0] + alpha * np.sum((Y - dot(X, theta)) * X0) / 60.0temp[1] = theta[1] + alpha * np.sum((Y - dot(X, theta)) * X1) / 60.0temp[2] = theta[2] + alpha * np.sum((Y - dot(X, theta)) * X2) / 60.0theta = temp
print(theta)

测试结果:

,结果与最小二乘法几乎一致,如想再精确,可调整学习率。即,该回归方程反应了商品销售量与售价、服务投资和其它投资的关系。

上述便为梯度下降的相关内容。

python实现线性回归之梯度下降法,梯度下降详解相关推荐

  1. 批量梯度下降python实现_python实现梯度下降算法的实例详解

    python版本选择 这里选的python版本是2.7,因为我之前用python3试了几次,发现在画3d图的时候会报错,所以改用了2.7. 数据集选择 数据集我选了一个包含两个变量,三个参数的数据集, ...

  2. 最小二乘法+牛顿法+拟牛顿法+梯度下降法+梯度上升法+共轭梯度法

    最小二乘法+牛顿法+拟牛顿法+梯度下降法+梯度上升法+共轭梯度法 最小二乘法+牛顿法+拟牛顿法+梯度下降法+梯度上升法+共轭梯度法 上述几种方法,除了最小二乘法是直接使用公式取得之外,另外几种方法都是 ...

  3. Python必备基本技能——命令行参数args详解

    Python必备基本技能--命令行参数args详解 1. 效果图 2. 源码 2.1 简单命令行参数 2.1 轮廓检测源代码 参考 这篇博客将介绍一项开发人员.工程师和计算机科学家必备的技能--命令行 ...

  4. python判断是否回文_对python判断是否回文数的实例详解

    设n是一任意自然数.若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数.例如,若n=1234321,则称n为一回文数:但若n=1234567,则n不是回文数. 上面的解释就是说回文数和逆 ...

  5. python中的class怎么用_对python 中class与变量的使用方法详解

    python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键. #!/usr/bin/python #encoding ...

  6. python当型循环_对python while循环和双重循环的实例详解

    废话不多说,直接上代码吧! #python中,while语句用于循环执行程序,即在某个条件下,循环执行某段程序,以处理需要重复处理的相同任务. #while是"当型"循环结构. i ...

  7. python画三维平面-Python 绘制酷炫的三维图步骤详解

    通常我们用 Python 绘制的都是二维平面图,但有时也需要绘制三维场景图,比如像下面这样的: 这些图怎么做出来呢?今天就来分享下如何一步步绘制出三维矢量(SVG)图. 八面体 我们先以下面这个八面体 ...

  8. python 制作gif-利用Python如何制作好玩的GIF动图详解

    前言 之前我们分享过用Python进行可视化的9种常见方式.其实我们还能让可视化图形逼格更高一些,今天就分享一下如何让可视化秀起来:用Python和matplotlib制作GIF图表. 假如电脑上没有 ...

  9. python的编程模式-Python设计模式之状态模式原理与用法详解

    本文实例讲述了Python设计模式之状态模式原理与用法.分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 ...

  10. python画二维散点图-基于python 二维数组及画图的实例详解

    1.二维数组取值 注:不管是二维数组,还是一维数组,数组里的数据类型要一模一样,即若是数值型,全为数值型 #二维数组 import numpy as np list1=[[1.73,1.68,1.71 ...

最新文章

  1. X5同层播放器应用实践
  2. 面对疫情,飞书线上办公室,让我们换一种方式重聚!
  3. 面试--js实现继承的几种方式
  4. java打印jnibtye[]
  5. python中几种读取文件的方法_python 逐行读取文件的几种方法
  6. 算法——计数排序与快速排序
  7. Post请求,向服务器发送用户信息
  8. 【研发管理】为什么你的高效交付,却没有好的业绩
  9. GNU make manual 翻译( 一百零九)
  10. 中断底半部:softirq、tasklet、workqueue
  11. 电脑时代计算机应用,【2017年整理】计算机应用与发展的神话时代.docx
  12. MyBatis学习总结(13)——Mybatis查询之resultMap和resultType区别
  13. java 将base64字符串转换成图片
  14. iOS疑难问题排查之深入探究dispatch_group crash
  15. MySQL之 分库分表
  16. stringbuffer字符串反转操作
  17. java实现分时问候,asp实现语音分时问候_asp实例
  18. shp文件中polyline是什么_SHP文件坐标转换工具1.0版
  19. java淘宝客开发(一)
  20. linux vi波浪符号的作用,vi使用方法

热门文章

  1. 7牛-qshel的一些使用
  2. 游戏美术次世代制作流程图文详解
  3. 结对编程的合作情况,以及结对编程的优缺点
  4. 人工智能到底有多强大?
  5. 安卓插件化学习 - 类的加载
  6. win10的bat文件或者cmd文件关联了文本编辑器导致无法运行
  7. css实现文字大小自适应
  8. Fastadmin和Easywechat
  9. C#/WPF/.NET 第三方ddl强签名解决(xxx, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null)
  10. SNAT与DNAT详解