python一元线性回归算法,代码及参数更新动图展示
(一元)线性回归算法
假设函数和代价函数
1.设已知数据集为(X,Y),假设其线性关系为:
y_pred=hθ(x)=θ0+θ1×xy\_pred=h_{\theta}\left( x \right) =\theta _0+\theta _1\times x y_pred=hθ(x)=θ0+θ1×x
2.用均平方误差(MSE)作为代价函数(损失函数),其中m为样本数:
J(x,y,θ)(MSE)=12m∑i=1m(hθ(x(i))−y(i))2^{J(x,y,\theta )(MSE)=\frac{1}{2m}\sum_{i=1}^m{\left( h_{\theta}\left( x^{\left( i \right)} \right) -y^{^{\left( i \right)}} \right) ^2}} J(x,y,θ)(MSE)=2m1∑i=1m(hθ(x(i))−y(i))2
梯度下降算法更新公式
根据梯度下降算法,对θ求偏导数,其偏导为:
∂J∂θj=1m∑i=1m(hθ(x(i))−y(i))xj(i)\frac{\partial J}{\partial \theta _j}=\frac{1}{m}\sum_{i=1}^m{\left( h_{\theta}\left( x^{\left( i \right)} \right) -y^{\left( i \right)} \right)}{x_j}^{\left( i \right)} ∂θj∂J=m1i=1∑m(hθ(x(i))−y(i))xj(i)
所以其参数更新公式为:
θj=θj−α∂J∂θj=θj−αm∑i=1m(hθ(x(i))−y(i))xj(i)\theta _j=\theta _j-\alpha \frac{\partial J}{\partial \theta _j}=\theta _j-\frac{\alpha}{m}\sum_{i=1}^m{\left( h_{\theta}\left( x^{\left( i \right)} \right) -y^{\left( i \right)} \right)}{x_j}^{\left( i \right)} θj=θj−α∂θj∂J=θj−mαi=1∑m(hθ(x(i))−y(i))xj(i)
假设函数可以写成:
hθ(x)=θ0×x0+θ1×x1=θ0×1+θ1×x1h_{\theta}\left( x \right) =\theta _0\times x_0+\theta _1\times x_1=\theta _0\times 1+\theta _1\times x_1 hθ(x)=θ0×x0+θ1×x1=θ0×1+θ1×x1
所以
θ0=θ0−α∂J∂θ0=θ0−αm∑i=1m(hθ(x(i))−y(i))x0(i)=θ0−αm∑i=1m(hθ(x(i))−y(i))\theta _0=\theta _0-\alpha \frac{\partial J}{\partial \theta _0}=\theta _0-\frac{\alpha}{m}\sum_{i=1}^m{\left( h_{\theta}\left( x^{\left( i \right)} \right) -y^{\left( i \right)} \right)}{x_0}^{\left( i \right)} \\ =\theta _0-\frac{\alpha}{m}\sum_{i=1}^m{\left( h_{\theta}\left( x^{\left( i \right)} \right) -y^{\left( i \right)} \right)} θ0=θ0−α∂θ0∂J=θ0−mαi=1∑m(hθ(x(i))−y(i))x0(i)=θ0−mαi=1∑m(hθ(x(i))−y(i))
至此,参数迭代公式完成。
代码
import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import make_regression ##产生一元线性回归数据
m=80 ##80份数据
##产生一元线性回归数据
x_train,y_train=make_regression(n_samples=m,n_features=1,noise=30,bias=20,random_state=17)
theat=np.array([0,0]) #初始化参数
lr=0.003 #学习率
def Y_pred(x,a) #假设函数:return x*a[0]+a[1]
def partial_theat(x,y,a):##求偏导cost_all=[0,0]for i in range(m):cost_all[0]=cost_all[0]+(Y_pred(x[i],a)-y[i])*x[i]cost_all[1]=cost_all[1]+(Y_pred(x[i],a)-y[i])return cost_all
def J(x,y,a):#损失或代价函数cost=0for i in range(m):cost=cost+(Y_pred(x[i],a)-y[i])**2return (1/2*m)*cost
iterations=0##迭代次数,初始化为0
theat_list=np.array([0,0])
while(iterations<100): ##参数更新100次theat[0]=theat[0]-lr*partial_theat(x_train,y_train,theat)[0]theat[1]=theat[1]-lr*partial_theat(x_train,y_train,theat)[1]theat_list=np.vstack((theat_list,theat))iterations=iterations+1
theat_list=np.array(theat_list)##保留参数更新过程
from matplotlib.animation import FuncAnimation #导入动画图接口
import matplotlib.pyplot as plt
fig,ax=plt.subplots() #画布申请
##--------初始状态--------------
atext_anti=plt.text(2,2,'',fontsize=15)
btext_anti=plt.text(2,40,'',fontsize=15)
ln,=plt.plot([],[],'red')
#--------------初始状态--------------------
def init():ax.set_xlim(np.min(x_train),np.max(x_train))ax.set_ylim(np.min(y_train),np.max(y_train))return ln,
def upgrad(frame):x=x_trainy=frame[0]*x+frame[1]ln.set_data(x,y)atext_anti.set_text('a=%.3f'%frame[0])btext_anti.set_text('b=%.3f'%frame[1])return ln,#--------静态图----------------
ax.scatter(x_train,y_train)
#---------静态图-------------
ani=FuncAnimation(fig,upgrad,frames=theat_list,init_func=init)
plt.show()
参数更新可视化
python一元线性回归算法,代码及参数更新动图展示相关推荐
- 机器学习(二)-一元线性回归算法(代码实现及数学证明)
解决回归问题 思想简单,实现容易 许多强大的非线性模型的基础 结果具有很好的可解释性 蕴含机器学习中的很多重要思想 回归问题:连续值 如果样本 特征 只有一个 称为简单线性回归 y=ax + b 通过 ...
- python一元线性回归算法_6一元线性回归_清华编程高手尹成带你基于算法实践python量化交易_其他视频-51CTO学院...
清华编程高手尹成带你基于算法实践python量化交易 量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种"大概率"事件以制定策 ...
- java实现一元线性回归算法
网上看一个达人用java写的一元线性回归的实现,我觉得挺有用的,一些企业做数据挖掘不是用到了,预测运营收入的功能吗?采用一元线性回归算法,可以计算出类似的功能.直接上代码吧: 1.定义一个DataPo ...
- python实现rsa加密解密代码_使用python实现rsa算法代码
RSA算法是一种非对称加密算法,是现在广泛使用的公钥加密算法,主要应用是加密信息和数字签名. 维基百科给出的RSA算法简介如下: 假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息.她可以 ...
- 【经典排序算法】二分查找法 (动图演示 + C 语言代码实现)
[经典排序算法]二分查找法 (动图演示 + C 语言代码实现)
- python画人民大会堂_太震撼了,我用python画出全北京的公交线路动图
原标题:太震撼了,我用python画出全北京的公交线路动图 今天教大家用pyecharts制作北京市公交线路动态图,这应该是全网唯一一篇能正常运行的教程 一.获取百度秘钥 首先,本项目需要引用百度地图 ...
- Java经典排序算法:选择排序,动图演示排序过程
Java经典排序算法:选择排序,动图演示排序过程 示意动图: public class Main {public static void main(String[] args) {new Main() ...
- 用C语言实现一个简单的一元线性回归算法
今天我们用C语言实现一个简单的线性回归算法:在代码前面我们在回顾一下线性回归. 线性回归是回归问题中的一种,线性回归假设目标值与特征是线性相关的,即满足一个多元一次方程式.通过构建损失函数,来求解损失 ...
- 机器学习------一元线性回归算法
文章目录 预测数据型数据:回归 回归的含义 回归应用 线性回归 利用Sklearn做线性回归的预测 线性回归拟合原理(fit方法) 损失函数 梯度下降法 梯度下降的分类 "Batch&quo ...
- 用python实现线性回归算法
本文是根据https://blog.csdn.net/dqcfkyqdxym3f8rb0/article/details/79767043这篇博客写出来的.其中的公式什么的可以去这个博客里面看. 本文 ...
最新文章
- DOM---文档对象模型(Document Object Model)的基本使用
- Python如何实现穷举搜索?
- go channel 缓冲区最大限制_Java内卷系列之你不得不知的Go并发基础
- 解决JQuery.Treeview在CI中无法加载查询函数的方法
- [转]Entity Framework 异常: ‘OFFSET‘ 附近有语法错误。\r\n在 FETCH 语句中选项 NEXT 的用法无效
- linux php 升级5.3,Linux php5.2.10升级到PHP5.3.29
- 222. Count Complete Tree Nodes
- 新手玩家一定要学会配枪,使命召唤手游,对枪械是非常专业的
- Dcmtk在PACS开发中的应用(基础篇) 第一章 与影像设备互连 作者 冷家锋
- 2014.8坝上之一:在路上
- beego框架开发投票网站(1) beego基础之运行逻辑
- Excel中的VLOOKUP函数之数据匹配
- Java map转list
- 破解app 在so层的密钥key
- linux 内网ip扫描工具,C#开发:局域网IP地址扫描小工具
- 日夕如是寒暑不间,基于Python3+Tornado6+APScheduler/Celery打造并发异步动态定时任务轮询服务
- 如何解决win7开机提示未能连接一个Windows服务
- 中文版ASAM OpenSCENARIO与OpenDRIVE标准正式发布
- python 听歌识曲_听歌识曲--用python实现一个音乐检索器
- dell服务器服务器数据丢失后,数据恢复
热门文章
- URLError: urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify fai
- Warning: Class ‘com.bupt.dts.DTSFortran‘ not found in module ‘AntlrTest‘
- 内外双修,人剑合璧——IT运维人员的九阳神功(大结局)
- 基于SSM高校教室管理系统毕业设计-附源码181523
- C语言输出三阶魔方阵
- UE4插件研发 So Easy
- 雷达原理---时频分析--6.利用小波分析进行奇异点定位和消除
- 未来十年最容易消失和最不易被取代的22个职业,越看越心惊!附相关专业
- 解决windows下无法ctrl+A全选数据快捷键的问题
- 缩略图-快速开始(GraphicsMagick )