利用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 26 Python
Python实现购物车购物小程序
Apr 18 Python
用python给自己做一款小说阅读器过程详解
Jul 11 Python
Django Celery异步任务队列的实现
Jul 24 Python
python opencv调用笔记本摄像头
Aug 28 Python
python实现的发邮件功能示例
Sep 11 Python
10个Python面试常问的问题(小结)
Nov 20 Python
用Python去除图像的黑色或白色背景实例
Dec 12 Python
django xadmin action兼容自定义model权限教程
Mar 30 Python
PyTorch 中的傅里叶卷积实现示例
Dec 11 Python
python爬虫scrapy基本使用超详细教程
Feb 20 Python
Python爬虫入门案例之爬取二手房源数据
Oct 16 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 验证图片生成函数
2009/05/21 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
基于jquery的页面划词搜索JS
2010/09/14 Javascript
jquery构造器的实现代码小结
2011/05/16 Javascript
JS对象与JSON格式数据相互转换
2012/02/20 Javascript
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
js实时获取并显示当前时间的方法
2015/07/31 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
JS仿Base.js实现的继承示例
2017/04/07 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
JavaScript实现的文本框placeholder提示文字功能示例
2018/07/25 Javascript
微信小程序 可搜索的地址选择实现详解
2019/08/28 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
JavaScript浅层克隆与深度克隆示例详解
2020/09/01 Javascript
Javascript新手入门之字符串拼接与变量的应用
2020/12/03 Javascript
[04:13]2014DOTA2国际邀请赛 专访DC目前形势不容乐观
2014/07/12 DOTA
跟老齐学Python之??碌某?? target=
2014/09/12 Python
Python Requests安装与简单运用
2016/04/07 Python
python中如何使用朴素贝叶斯算法
2017/04/06 Python
PyQt5每天必学之滑块控件QSlider
2018/04/20 Python
多个应用共存的Django配置方法
2018/05/30 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
Django框架下静态模板的继承操作示例
2019/11/08 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
Pyorch之numpy与torch之间相互转换方式
2019/12/31 Python
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
澳大利亚女士时装在线:Rockmans
2018/09/26 全球购物
城市轨道专业个人求职信范文
2013/09/23 职场文书
学校食堂采购员岗位职责
2013/12/05 职场文书
会计专业毕业生求职信
2014/07/04 职场文书
班组拓展活动方案
2014/08/14 职场文书
爱祖国爱家乡演讲稿
2014/09/02 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
中职班主任培训心得体会
2016/01/07 职场文书
SQLServer常见数学函数梳理总结
2022/08/05 MySQL