利用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编辑器WingIDE的使用经验总结
Aug 31 Python
python使用str &amp; repr转换字符串
Oct 13 Python
Windows下安装python MySQLdb遇到的问题及解决方法
Mar 16 Python
Python实现Mysql数据库连接池实例详解
Apr 11 Python
Python实现的递归神经网络简单示例
Aug 11 Python
Python实现生成随机日期字符串的方法示例
Dec 25 Python
Python之列表实现栈的工作功能
Jan 28 Python
python numpy数组中的复制知识解析
Feb 03 Python
keras自定义损失函数并且模型加载的写法介绍
Jun 15 Python
python实现人性化显示金额数字实例详解
Sep 25 Python
selenium如何定位span元素的实现
Jan 13 Python
python爬虫破解字体加密案例详解
Mar 02 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 session处理的定制
2009/03/16 PHP
php 购物车实例(申精)
2009/05/11 PHP
php与java通过socket通信的实现代码
2013/10/21 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
js 验证身份证信息有效性
2014/03/28 Javascript
Jquery实现仿腾讯微博发表广播
2014/11/17 Javascript
jQuery实现DIV层收缩展开的方法
2015/02/27 Javascript
jquery合并表格中相同文本的相邻单元格
2015/07/17 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
2016/07/15 Javascript
Bootstrap CSS布局之按钮
2016/12/17 Javascript
js定时器实例分享
2016/12/20 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
2017/01/08 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
使用JavaScript通过前端发送电子邮件
2020/05/22 Javascript
[01:24:09]Ti4 冒泡赛第二轮DK vs C9 1
2014/07/14 DOTA
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
基于Python实现的ID3决策树功能示例
2018/01/02 Python
对Python中plt的画图函数详解
2018/11/07 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
2020/06/28 Python
python super()函数的基本使用
2020/09/10 Python
CSS3制作彩色进度条样式的代码示例分享
2016/06/23 HTML / CSS
Feelunique澳大利亚:欧洲的化妆品零售电商
2019/12/18 全球购物
大专毕业自我鉴定
2014/02/04 职场文书
售后求职信范文
2014/03/15 职场文书
初中英语课后反思
2014/04/25 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
公司领导班子群众路线四风问题对照检查材料
2014/10/02 职场文书
装配车间主任岗位职责
2015/04/08 职场文书
审查起诉阶段律师意见书
2015/05/19 职场文书
赢在中国观后感
2015/06/02 职场文书
2015暑假社会调查报告
2015/07/13 职场文书
2016年党风廉政建设承诺书
2016/03/25 职场文书
动视暴雪取消疫苗禁令 让所有员工返回线下工作
2022/04/03 其他游戏
SpringBoot详解自定义Stater的应用
2022/07/15 Java/Android