利用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实现的AES双向对称加密解密与用法分析
May 02 Python
JS设计模式之责任链模式实例详解
Feb 03 Python
django中的HTML控件及参数传递方法
Mar 20 Python
Python爬虫抓取代理IP并检验可用性的实例
May 07 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
Jul 26 Python
对Python 除法负数取商的取整方式详解
Dec 12 Python
Python3简单爬虫抓取网页图片代码实例
Aug 26 Python
python脚本后台执行方式
Dec 21 Python
Python的对象传递与Copy函数使用详解
Dec 26 Python
对python中 math模块下 atan 和 atan2的区别详解
Jan 17 Python
python实现拼图小游戏
Feb 22 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
Jun 30 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开源项目的源码指南
2014/12/21 PHP
php 二维数组时间排序实现代码
2016/11/19 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
JS分割字符串并放入数组的函数
2011/07/04 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
jQuery 如何先创建、再修改、后添加DOM元素
2014/05/20 Javascript
jquery实现兼容IE8的异步上传文件
2015/06/15 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
自定义require函数让浏览器按需加载Js文件
2016/11/24 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
EasyUI的DataGrid每行数据添加操作按钮的实现代码
2017/08/22 Javascript
老生常谈JavaScript面向对象基础与this指向问题
2017/10/16 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
ElementUI 修改默认样式的几种办法(小结)
2020/07/29 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
[02:09]2018DOTA2亚洲邀请赛TNC赛前采访
2018/04/04 DOTA
Python实现约瑟夫环问题的方法
2016/05/03 Python
Python生成密码库功能示例
2017/05/23 Python
Scrapy的简单使用教程
2017/10/24 Python
Python3实现购物车功能
2018/04/18 Python
Flask框架学习笔记之消息提示与异常处理操作详解
2019/08/15 Python
Django调用支付宝接口代码实例详解
2020/04/04 Python
如何在django中实现分页功能
2020/04/22 Python
django正续或者倒序查库实例
2020/05/19 Python
Python 实现一个简单的web服务器
2021/01/03 Python
荷兰浴室和卫浴网上商店:Badkamerxxl.nl
2020/10/06 全球购物
美国最大的购物网站:Amazon.com(亚马逊美国)
2020/05/23 全球购物
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
幼儿园实习自我鉴定
2013/12/15 职场文书
一月红领巾广播稿
2014/02/11 职场文书
大学优秀班主任事迹材料
2014/05/02 职场文书
安康杯竞赛活动总结
2014/05/05 职场文书
小学生表扬稿范文
2015/05/05 职场文书
幼儿园六一主持词开场白
2015/05/28 职场文书
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫