几种最小二乘法及python代码:ELS、TLS、RLS

news2025/4/5 15:16:05

1.ARMAX模型

在这里插入图片描述

下面各章节,我就是使用上面公式的符号,其中y是输出,u是输入,e是噪声。有m个输出y,r个输入u。

进一步精简为:

Y=Pθ+E

其中:Y为要预测的部分,P为已知数据(包括y的t-1前数据,u的t-1前数据等),E是噪声。

参见:
1)线性模型:AR、MA、ARMA、ARMAX、ARX、ARARMAX、OE、BJ等:
https://blog.csdn.net/zephyr_wang/article/details/128589032
2)正交最小二乘法求解NARMAX:
https://blog.csdn.net/zephyr_wang/article/details/128667425

2.增广最小二乘法Extended Least Squares method

当噪声均值为0时,最小二乘法参数估计算法为无偏估计,为了解决最小二乘法参数估计的有偏性,将噪声模型的辨识同时考虑进去,就是增广最小二乘法。

所以ELSM方法主要关注ARMAX噪声E的影响,方法如下:
1)首先用普通二乘法求解ARMAX模型(不考虑噪声E)参数θ;
2)然后用θ和输入P计算出预测y_hat;
3)然后求残差,y_hat减实际y。这个残差有点等于噪声E。
4)然后将残差和P拼接在一起,继续求解ARMAX(有了残差,即考虑噪声e)参数θ。循环执行第2-4步。

迭代的停止条件可以有两种:
1)参数θ不再变化或者变化微小
2)残差(噪音E)不再变化或者变化微小

python代码如下:

		#psi : The information matrix of the model.
 		e = y[max_lag:, ] - np.dot(psi, theta)#支持多输出
        #e = y[max_lag:, 0].reshape(-1, 1) - np.dot(psi, theta)
        for i in range(30):#为什么循环30次呢?
            #e = np.concatenate([np.zeros([max_lag, 1]), e], axis=0)
            e = np.concatenate([np.zeros([max_lag, y.shape[1]]), e], axis=0)#支持多输出

            lagged_data = self.build_output_matrix(e, elag)

            e_regressors = self.basis_function.fit(
                lagged_data, max_lag, predefined_regressors=None
            )

            psi_extended = np.concatenate([psi, e_regressors], axis=1)
            unbiased_theta = getattr(self, self.estimator)(psi_extended, y)
            # e = y[max_lag:, 0].reshape(-1, 1) - np.dot(
            #     psi_extended, unbiased_theta.reshape(-1, 1)
            # )
            #支持多输出
            e = y[max_lag:, ] - np.dot(
                psi_extended, unbiased_theta
            )

        #return unbiased_theta[0 : theta.shape[0], 0].reshape(-1, 1)
        return unbiased_theta[0: theta.shape[0]] #支持多输出

可以参见知乎的文章:https://zhuanlan.zhihu.com/p/87996248

3.总体最小二乘法Total Least Squares method

在最小二乘方法中,系数矩阵P被认为是不含有误差的。然而在实际情况中,系数矩阵中的变量往往也包含观测值,因此不可避免地会被误差污染。为同时考虑系数矩阵P和观测向量Y中的误差,提出了总体最小二乘法。

Y=Pθ+E变为Y+ΔY=(P+ΔP)θ

奇异值可以求解最小二乘法,即奇异值总体最小二乘法(singular value decomposition total least squares,SVDTLS)。python代码如下:

#psi : The information matrix of the model.
y = y[self.max_lag :, 0].reshape(-1, 1)
full = np.hstack((psi, y))
n = psi.shape[1]
u, s, v = np.linalg.svd(full, full_matrices=True)
theta = -v.T[:n, n:] / v.T[n:, n:]
return theta.reshape(-1, 1)

4.递归最小二乘法Recursive Least Squares method

递推最小二乘法:当矩阵维数增加时,矩阵求逆运算计算量过大,而且不适合在线辨识。为了减少计算量,并且可以实时地辨识出动态系统的特性,可以将最小二乘法转换成参数递推的估计。

限定记忆的最小二乘法(Fixed Memory Least Squares Method) 总是使用最近N组观测数据,每次估计时,当添入一组新的观测数据时,就丢弃一组最老的数据。因此,也叫做加矩形窗的最小二乘法。这种算法更适合于时变系统和克服数据饱和。

python代码如下:

		#psi : The information matrix of the model.
		y, n_theta, n, theta, self.xi = self._initial_values(y, psi)

        p = np.eye(n_theta) / self._delta

        for i in range(2, n):
            psi_tmp = psi[i, :].reshape(-1, 1)
            k_numerator = self._lam ** (-1) * p.dot(psi_tmp)
            k_denominator = 1 + self._lam ** (-1) * psi_tmp.T.dot(p).dot(psi_tmp)
            k = np.divide(k_numerator, k_denominator)
            self.xi[i, 0] = y[i, 0] - np.dot(psi_tmp.T, theta[:, i - 1])
            theta[:, i] = list(theta[:, i - 1].reshape(-1, 1) + k.dot(self.xi[i, 0]))

            p1 = p.dot(psi[i, :].reshape(-1, 1)).dot(psi[i, :].reshape(-1, 1).T).dot(p)
            p2 = (
                psi[i, :].reshape(-1, 1).T.dot(p).dot(psi[i, :].reshape(-1, 1))
                + self._lam
            )

            p_numerator = p - np.divide(p1, p2)
            p = np.divide(p_numerator, self._lam)

        self.theta_evolution = theta.copy()
        return theta[:, -1].reshape(-1, 1)
     

代码主要来源于SysIdentPy:
SysIdentPy is an open-source Python module for System Identification using NARMAX models built on top of numpy and is distributed under the 3-Clause BSD license. SysIdentPy provides an easy-to-use and flexible framework for building Dynamical Nonlinear Models for time series and dynamic systems.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/184638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k8s添加node节点和master节点

一.准备1.基本概述版本:kubelet:v1.20.4docker: 20.10.23资源:cpu:8mem:16kernel:3.10.0-1160.71.1.el7.x86_64镜像仓库地址:registry.cn-hangzhou.aliyuncs.com/google_containers/…

大部分人都容易焦虑,那么应该如何对待焦虑呢?

新年伊始,告别喜庆欢乐的春节,大家应该已经投入到正常的工作当中去了。面对节后的开工,难免都会有点焦虑,因为大多数人还沉浸在春节喜悦的回忆当中,回忆都是美好的,因为回忆中是带有感情的,美好…

总投资30亿、算力500P,宜昌先进计算产业可持续发展之路

近日,国家先进计算产业创新(宜昌)中心项目工程总承包和委托运营(EPCO)中标结果公示,由中科升哲数据科技有限公司联合重庆市设计院有限公司、中讯邮电咨询设计院有限公司、中国化学工程第十六建设有限公司组…

multipart/form-data 在低版本spring和webFlux中的解析

背景 最近在做一个技术项目的迁移,将老的springMVC项目迁移到SpringWebFlux项目中,在流量迁移过程中发现有一个业务方传过来的参数新项目拿不到,究其原因是老版本的spring解析器和新版本的解析器对multipart/form-data类型的contentType解析…

《深入浅出计算机组成原理》学习笔记 Day14

数据通路(下)1. PC 寄存器的实现2. 读写数据所需要的译码器3. 数据通路完整实现4. 总结参考1. PC 寄存器的实现 PC 寄存器又名程序计数器(Program Counter)。 PC 寄存器由两个部分组成: 时钟信号。提供定时的输入&a…

刚来的00后太卷了,上班还没2年,跳到我们公司起薪25k....

都说00后躺平了,但是有一说一,该卷的还是卷。 这不,前段时间我们公司来了个00后,工作都没两年,跳槽到我们公司起薪18K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了…

Arthas 入门到实战(四)arhtas idea plugin集成插件

前言: Arthas 官方的工具还不够足够的简单,需要记住一些命令,但是我们需要的是一个能够简单处理字符串信息的插件即可使用。当在处理线上问题的时候需要最快速、最便捷的命令,因此插件还是有存在的意义和价值的。 一、idea插件安…

Blender 粒子系统

文章目录简介.添加粒子系统.属性.自发光(发射).源.烘焙(仅发射体).速度(仅发射体).旋转(仅发射体,除非毛发系统开启了高级属性).物理(仅发射体).毛发动力学(仅毛发).渲染.路径.视图显示.子级.簇集.糙度.扭结.力场权重.顶点组.粒子编辑.渲染毛…

GraalVM和Spring Native尝鲜,一步步让Springboot启动飞起来,66ms完成启动

简介 GraalVM是高性能的JDK,支持Java/Python/JavaScript等语言。它可以让Java变成二进制文件来执行,让程序在任何地方运行更快。这或许是Java与Go的一场战争? 下载安装GraalVM 安装GraalVM 首先到官网下载,我是直接到GitHub Re…

7-2输入/输出系统-I/O方式

文章目录一.程序查询方式二.程序中断方式三.DMA方式1.传送过程2.DMA控制器(DMAC)的内部结构3.DMA传送方式(1)停止CPU访问主存(2)DMA与CPU交替访存(3)周期挪用/周期窃取4.DMA方式的特…

基于改进粒子群算法的混合储能系统容量优化(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

css特性(继承、层叠、优先级)

1、继承性 特性: 子元素有默认继承父元素样式的特点(子承父业) 可以继承的常见属性(文字控制属性都可以继承) colorfont-style、 font-weight、 font-size、 font-familytext-indent、text-align、line-height … 注意点: 控制字的都能继承 可以通过调试工具判断样式是否可以…

应用系统基于CAS实现单点登录的解决方案

单点登录 (SingleSign-On,SSO) ,是一种帮助用户快捷访问网络中多个站点的安全通信技术。单点登录系统基于一种安全的通信协议,该协议通过多个系统之间的用户身份信息的交换来实现单点登录。使用单点登录系统时,用户只需要登录一次…

JAVA的PDF Viewer:Big Faceless PDF Viewer Crack

PDF Viewer是一个可以显示PDF文档的Swing组件。针对不需要完整 API 的客户,Viewer 可以作为 Applet、应用程序或通过 Java Web Start 安装,或嵌入到 Swing 应用程序中。 产品概览 打印、保存、文本搜索、表单、数字签名和注释是众多可用功能中的一部分 -…

IB 课程的挑战(二)

以下我想换个角度用自身的经历以及多年来教学的经验去分享修读 IB课程的挑战。 (一)必修文学科2022尽管我于会考中文获得「A」级成绩,但面对IB课程的中国文学 (IB Chinese A Literature)时,却仍感到十分吃力。我之前从未接触过中国…

网络IO模型

1 介绍一提到网络IO,甚至一些网络框架,就无法避免遇到阻塞、非阻塞、同步、异步的概念,要理解这些概念,先要清楚网络IO是什么,以及网络IO如何工作。网络IO本质上也是IO的一种,就是数据的输入输出&#xff0…

护网行动(防守方)linux服务器通用安全加固指南(1)

实验所属系列:Linux服务器搭建/Linux服务安全 Linux 是一个开放式系统,可以在网络上找到许多现成的程序和工具,这既方便了用户,也方便了黑客,因为他们也能很容易地找到程序和工具来潜入 Linux 系统,或者盗…

CnOpenData中国观鸟记录数据

一、数据简介 观鸟,是指在自然环境中利用望远镜等观测记录设备在不影响野生鸟类正常生活的前提下观察鸟类的一种科学性质的户外活动。 鸟类,是生物多样性中最具指示性的类群。由全国各地观鸟爱好者们共同记录的观鸟信息,能够展示中国各地区的…

cesium +vue3 +vite 实现点线面功能

第一步:搭建vue3项目 1、npm在相应文件夹下创建 npm create vitelatest2、选择项目名称 3、选择vue 4、选择是否使用typescript 或者JavaScript 5、记得在终端npm install一下就可以启动项目了 第二步:引入cesiumJS 1、npm引入 npm i cesium vite…

海康Visionmaster-VM2D,VM3D,VM深度学习对电脑配置要求

为确保VM算法平台能正常安装及运行,对PC配置有所要求。 第一:推荐配置: 操作系统:Windows7/10(64位中文操作系统) CPU:Intel Core i7-6700 3.4GHz 或以上(如需使用CPU相关深度学习…