利用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中尝试多线程编程的一个简明例子
Apr 07 Python
python网络编程之数据传输UDP实例分析
May 20 Python
python获取指定目录下所有文件名列表的方法
May 20 Python
一些常用的Python爬虫技巧汇总
Sep 28 Python
Python的地形三维可视化Matplotlib和gdal使用实例
Dec 09 Python
Python实现爬虫抓取与读写、追加到excel文件操作示例
Jun 27 Python
利用Python实现Shp格式向GeoJSON的转换方法
Jul 09 Python
django 信号调度机制详解
Jul 19 Python
pytorch 加载(.pth)格式的模型实例
Aug 20 Python
Python函数调用追踪实现代码
Nov 27 Python
解决pytorch 保存模型遇到的问题
Mar 03 Python
python 如何用terminal输入参数
May 25 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中this,self,parent的区别详解
2013/06/08 PHP
使用dump函数,给php加断点测试
2013/06/25 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
2013/07/15 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
php面向对象程序设计入门教程
2019/06/22 PHP
删除重复数据的算法
2006/11/23 Javascript
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
JavaScript学习笔记(十)
2010/01/17 Javascript
js 获取、清空input type=&quot;file&quot;的值示例代码
2014/02/19 Javascript
jQuery实现跨域
2015/02/03 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
JS实现弹出居中的模式窗口示例
2016/06/20 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
Es6 写的文件import 起来解决方案详解
2016/12/13 Javascript
AngularJS中update两次出现$promise属性无法识别的解决方法
2017/01/05 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
js实现点赞效果
2020/03/16 Javascript
微信小程序之导航滑块视图容器功能的实现代码(简单两步)
2020/06/19 Javascript
零基础写python爬虫之神器正则表达式
2014/11/06 Python
Python的Bottle框架中实现最基本的get和post的方法的教程
2015/04/30 Python
python3 模拟登录v2ex实例讲解
2017/07/13 Python
python 读取鼠标点击坐标的实例
2018/12/29 Python
Python内置函数locals和globals对比
2020/04/28 Python
简单了解python列表和元组的区别
2020/05/14 Python
Python操作word文档插入图片和表格的实例演示
2020/10/25 Python
python 调整图片亮度的示例
2020/12/03 Python
宝拉珍选官方旗舰店:2%水杨酸精华液,收缩毛孔粗大和祛痘
2018/07/01 全球购物
护士实习自我鉴定
2013/10/22 职场文书
在校大学生的职业生涯规划书
2014/03/14 职场文书
授权委托书(完整版)
2014/09/10 职场文书
工作服管理制度范本
2015/08/06 职场文书
Python连续赋值需要注意的一些问题
2021/06/03 Python
React + Threejs + Swiper 实现全景图效果的完整代码
2021/06/28 Javascript
MySQL系列之开篇 MySQL关系型数据库基础概念
2021/07/02 MySQL
《最终幻想14》6.01版本4月5日推出 追加新任务新道具
2022/04/03 其他游戏