(一元)线性回归算法

假设函数和代价函数

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​=m1​i=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一元线性回归算法,代码及参数更新动图展示相关推荐

  1. 机器学习(二)-一元线性回归算法(代码实现及数学证明)

    解决回归问题 思想简单,实现容易 许多强大的非线性模型的基础 结果具有很好的可解释性 蕴含机器学习中的很多重要思想 回归问题:连续值 如果样本 特征 只有一个 称为简单线性回归 y=ax + b 通过 ...

  2. python一元线性回归算法_6一元线性回归_清华编程高手尹成带你基于算法实践python量化交易_其他视频-51CTO学院...

    清华编程高手尹成带你基于算法实践python量化交易 量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种"大概率"事件以制定策 ...

  3. java实现一元线性回归算法

    网上看一个达人用java写的一元线性回归的实现,我觉得挺有用的,一些企业做数据挖掘不是用到了,预测运营收入的功能吗?采用一元线性回归算法,可以计算出类似的功能.直接上代码吧: 1.定义一个DataPo ...

  4. python实现rsa加密解密代码_使用python实现rsa算法代码

    RSA算法是一种非对称加密算法,是现在广泛使用的公钥加密算法,主要应用是加密信息和数字签名. 维基百科给出的RSA算法简介如下: 假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息.她可以 ...

  5. 【经典排序算法】二分查找法 (动图演示 + C 语言代码实现)

    [经典排序算法]二分查找法 (动图演示 + C 语言代码实现)   

  6. python画人民大会堂_太震撼了,我用python画出全北京的公交线路动图

    原标题:太震撼了,我用python画出全北京的公交线路动图 今天教大家用pyecharts制作北京市公交线路动态图,这应该是全网唯一一篇能正常运行的教程 一.获取百度秘钥 首先,本项目需要引用百度地图 ...

  7. Java经典排序算法:选择排序,动图演示排序过程

    Java经典排序算法:选择排序,动图演示排序过程 示意动图: public class Main {public static void main(String[] args) {new Main() ...

  8. 用C语言实现一个简单的一元线性回归算法

    今天我们用C语言实现一个简单的线性回归算法:在代码前面我们在回顾一下线性回归. 线性回归是回归问题中的一种,线性回归假设目标值与特征是线性相关的,即满足一个多元一次方程式.通过构建损失函数,来求解损失 ...

  9. 机器学习------一元线性回归算法

    文章目录 预测数据型数据:回归 回归的含义 回归应用 线性回归 利用Sklearn做线性回归的预测 线性回归拟合原理(fit方法) 损失函数 梯度下降法 梯度下降的分类 "Batch&quo ...

  10. 用python实现线性回归算法

    本文是根据https://blog.csdn.net/dqcfkyqdxym3f8rb0/article/details/79767043这篇博客写出来的.其中的公式什么的可以去这个博客里面看. 本文 ...

最新文章

  1. DOM---文档对象模型(Document Object Model)的基本使用
  2. Python如何实现穷举搜索?
  3. go channel 缓冲区最大限制_Java内卷系列之你不得不知的Go并发基础
  4. 解决JQuery.Treeview在CI中无法加载查询函数的方法
  5. [转]Entity Framework 异常: ‘OFFSET‘ 附近有语法错误。\r\n在 FETCH 语句中选项 NEXT 的用法无效
  6. linux php 升级5.3,Linux php5.2.10升级到PHP5.3.29
  7. 222. Count Complete Tree Nodes
  8. 新手玩家一定要学会配枪,使命召唤手游,对枪械是非常专业的
  9. Dcmtk在PACS开发中的应用(基础篇) 第一章 与影像设备互连 作者 冷家锋
  10. 2014.8坝上之一:在路上
  11. beego框架开发投票网站(1) beego基础之运行逻辑
  12. Excel中的VLOOKUP函数之数据匹配
  13. Java map转list
  14. 破解app 在so层的密钥key
  15. linux 内网ip扫描工具,C#开发:局域网IP地址扫描小工具
  16. 日夕如是寒暑不间,基于Python3+Tornado6+APScheduler/Celery打造并发异步动态定时任务轮询服务
  17. 如何解决win7开机提示未能连接一个Windows服务
  18. 中文版ASAM OpenSCENARIO与OpenDRIVE标准正式发布
  19. python 听歌识曲_听歌识曲--用python实现一个音乐检索器
  20. dell服务器服务器数据丢失后,数据恢复

热门文章

  1. URLError: urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify fai
  2. Warning: Class ‘com.bupt.dts.DTSFortran‘ not found in module ‘AntlrTest‘
  3. 内外双修,人剑合璧——IT运维人员的九阳神功(大结局)
  4. 基于SSM高校教室管理系统毕业设计-附源码181523
  5. C语言输出三阶魔方阵
  6. UE4插件研发 So Easy
  7. 雷达原理---时频分析--6.利用小波分析进行奇异点定位和消除
  8. 未来十年最容易消失和最不易被取代的22个职业,越看越心惊!附相关专业
  9. 解决windows下无法ctrl+A全选数据快捷键的问题
  10. 缩略图-快速开始(GraphicsMagick )