利用Python实现最小二乘法与梯度下降算法


Posted in Python onFebruary 21, 2021

导入所需库

%matplotlib inline
import sympy
import numpy as np
import matplotlib.pyplot as plt
from sympy.abc import x as a,y as b

生成模拟数据

# 模拟函数 y=3x-1

#自变量
x=np.linspace(-5,5,num=1000)
#加入噪声
noise=np.random.rand(len(x))*2-1
#因变量
y=3*x-1+noise

查看所生成数据的图像

plt.figure(figsize=(10,10))
plt.scatter(x,y,s=1)

利用Python实现最小二乘法与梯度下降算法

求代价函数的偏导

y=ax+b  #目标函数

e=1/2*Σ([axi+b]-yi)^2   #代价函数,求使得代价函数为最小值时,对应的a和b

对a求偏导->Σ(axi+b-yi)*xi

对b求偏导->Σ(axi+b-yi)

1. 通过最小二乘法求a,b

我们知道当在a,b处的偏导为0时,代价函数e达到最小值,所以得到二元一次方程组

Σ(axi+b-yi)*xi=0
Σ(axi+b-yi)=0

该方程组是关于未知数为a,b的二元一次方程组,通过求解该方程,得到a,b

result=sympy.solve([
  np.sum((a*x+b-y)*x),
  np.sum(a*x+b-y)],[a,b])
print(result)	#{x: 3.01182977621975, y: -1.00272253325765}

通过sympy库解方程组,得出了a= 3.01182977621975,b= -1.00272253325765,已经与我们真实的a,b很接近了,下面进行作图

plt.figure(figsize=(10,10))
plt.scatter(x,y,s=1)
plt.plot(x,result[a]*x+result[b],c='red')

print(type(a),type(b))	#<class 'sympy.core.symbol.Symbol'> <class 'sympy.core.symbol.Symbol'>

利用Python实现最小二乘法与梯度下降算法

2. 通过梯度下降算法求a,b

我们注意到最小二乘法最后一步要求p个方程组,是非常大的计算量,其实计算起来很难,因此我们就有了一种新的计算方法,就是梯度下降法,梯度下降法可以看作是 更简单的一种 求最小二乘法最后一步解方程 的方法

# 注意这里覆盖了sympy.abc的a和b
# 设定a和b的起始点
a,b=0.1,0.1

#步长,也称作学习率
alpha=0.00001

#循环一千次结束
for i in range(1000):
  a-=alpha*np.sum((a*x+b-y)*x)
  b-=alpha*np.sum(a*x+b-y)

print(a,b)	#3.0118297762197526 -1.002674927350334

通过梯度下降法,得出了a= 3.0118297762197526,b= -1.002674927350334,也是很接近真实的a,b值了,作图看看

plt.figure(figsize=(10,10))
plt.scatter(x,y,s=1)
plt.plot(x,a*x+b,c='black')

print(type(a),type(b))	#<class 'numpy.float64'> <class 'numpy.float64'>

利用Python实现最小二乘法与梯度下降算法

到此这篇关于利用Python实现最小二乘法与梯度下降算法的文章就介绍到这了,更多相关Python最小二乘法与梯度下降内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现图片批量剪切示例
Mar 25 Python
Python设计模式之单例模式实例
Apr 26 Python
Python程序员鲜为人知但你应该知道的17个问题
Jun 04 Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
Jan 16 Python
Python实现通过文件路径获取文件hash值的方法
Apr 29 Python
python 删除指定时间间隔之前的文件实例
Apr 24 Python
django1.11.1 models 数据库同步方法
May 30 Python
Python实现将数据写入netCDF4中的方法示例
Aug 30 Python
python使用Plotly绘图工具绘制气泡图
Apr 01 Python
python中的decimal类型转换实例详解
Jun 26 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
详解Django中 render() 函数的使用方法
Apr 22 Python
Scrapy实现模拟登录的示例代码
Feb 21 #Python
scrapy-splash简单使用详解
Feb 21 #Python
详解使用scrapy进行模拟登陆三种方式
Feb 21 #Python
利用Python如何画一颗心、小人发射爱心
Feb 21 #Python
python 第三方库paramiko的常用方式
Feb 20 #Python
Python中Qslider控件实操详解
Feb 20 #Python
python基于selenium爬取斗鱼弹幕
Feb 20 #Python
You might like
PHP 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
PHP程序员基本要求和必备技能
2014/05/09 PHP
ThinkPHP中ajax使用实例教程
2014/08/22 PHP
PHP设计模式之工厂模式定义与用法详解
2018/04/03 PHP
浅谈laravel中的关联查询with的问题
2019/10/10 PHP
Javascript 中的 &amp;&amp; 和 || 使用小结
2010/04/25 Javascript
JSONP 跨域共享信息
2012/08/16 Javascript
javascipt基础内容--需要注意的细节
2013/04/10 Javascript
基于JavaScript 类的使用详解
2013/05/07 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
js中split和replace的用法实例
2015/02/28 Javascript
JavaScript获取一个范围内日期的方法
2015/04/24 Javascript
通过XMLHttpRequest和jQuery实现ajax的几种方式
2015/08/28 Javascript
javascript设计模式之Adapter模式【适配器模式】实现方法示例
2017/01/13 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
jQuery动态添加.active 实现导航效果代码思路详解
2017/08/29 jQuery
Vue.js 表单控件操作小结
2018/03/29 Javascript
js jquery 获取某一元素到浏览器顶端的距离实现方法
2018/09/05 jQuery
JS中appendChild追加子节点无效的解决方法
2018/10/14 Javascript
如何用原生js写一个弹窗消息提醒插件
2019/05/24 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
js实现缓动动画
2020/11/25 Javascript
Windows下安装python2.7及科学计算套装
2015/03/05 Python
用Django实现一个可运行的区块链应用
2018/03/08 Python
python实现简单遗传算法
2018/03/19 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
英国绿色商店:Natural Collection
2019/05/03 全球购物
波兰在线运动商店:YesSport
2020/07/23 全球购物
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
房地产开发计划书
2014/01/10 职场文书
保险专业自荐信范文
2014/02/20 职场文书
颁奖晚会主持词
2014/03/25 职场文书
体育教师求职信
2014/06/30 职场文书