m估计及其c++简单实现

文章目录

    • 什么是m估计
    • 怎么求解m估计呢?
    • Huber函数时的线性m估计

什么是m估计

自20世纪60年代稳健统计建立以来,在国内外众多学者的研究之下,诞生了一系列稳健统计重要理论和成果。其中最主要且广泛使用的稳健统计有以下三类:

  • L-estimators (linear combinations of order statistics of the observations);
  • R-estimators (estimator based on waste ranking);
  • M-estimators (generalizations of a Maximum Likelihood estimator)
    m估计可以翻译为通用的最大似然估计,其是由Huber提出的,是最常用的稳健统计方法。其标准形式为:

min ⁡ S ( x j ) = min ⁡ ∑ i = 1 n ρ ( r i ) (1) \min{S(x_j)}=\min \sum_{i=1}^n \rho(r_i)\tag{1} minS(xj)=mini=1nρ(ri)(1)
S 为目标函数, x j 为估计参数, ρ ( ) 为残差函数 , r i 为残差 S为目标函数,x_j为估计参数,\rho()为残差函数,r_i为残差 S为目标函数,xj为估计参数,ρ()为残差函数,ri为残差 ρ ( ) 残差函数需要满足以下性质: \rho()残差函数需要满足以下性质: ρ()残差函数需要满足以下性质:
连续性,偶函数,非负性,通过原点,在正半轴单调递增。
提出了很多的残差函数:Huber, l1-l2, Fair, Cauchy, Geman-McClure, Welsch, and Tukey estimators等等。

怎么求解m估计呢?

通常使用迭代加权最小二乘(Iterative Reweight Least Square, IRLS,有时也叫迭代选权最小二乘?)求解m估计。具体过程如下:
要求解的式1,一般需要对其求一阶偏导:
∂ S ∂ x j = ∑ i = 1 m d ρ ( r i ) d r i ∂ r i ∂ x j = 0 , j = 0 , … , n (2) \frac{\partial S}{\partial x_j}=\sum_{i=1}^m \frac{d \rho\left(r_i\right)}{d r_i} \frac{\partial r_i}{\partial x_j}=0, j=0, \ldots, n\tag{2} xjS=i=1mdridρ(ri)xjri=0,j=0,,n(2) ρ ( r ) \rho(r) ρ(r) 的一阶导数(梯度)为 ψ ( r ) = a ρ ( r ) d r , ψ ( r ) \psi(r)=\frac{a \rho(r)}{d r} , \psi(r) ψ(r)=draρ(r)ψ(r) 在M估计中被叫做影响力函数(Influence Function);
w ( r ) = ψ ( r ) r w(r)=\frac{\psi(r)}{r} w(r)=rψ(r) ,该函数在M估计中被叫做权重函数(Weight Function);
( 2 ) (2) (2) 变形:
∂ S ∂ x j = ∑ i = 1 m d ρ ( r i ) d r i ∂ r i ∂ x j = ∑ i = 1 m ψ ( r i ) ∂ r i ∂ x j = ∑ i = 1 m w ( r i ) r i ∂ r i ∂ x j = 0 (3) \frac{\partial S}{\partial x_j}=\sum_{i=1}^m \frac{d \rho\left(r_i\right)}{d r_i} \frac{\partial r_i}{\partial x_j}=\sum_{i=1}^m \psi\left(r_i\right) \frac{\partial r_i}{\partial x_j}=\sum_{i=1}^m w\left(r_i\right) r_i \frac{\partial r_i}{\partial x_j}=0\tag{3} xjS=i=1mdridρ(ri)xjri=i=1mψ(ri)xjri=i=1mw(ri)rixjri=0(3)

如果 w ( r i ) w\left(r_i\right) w(ri) 是一个常数,比如用上一次迭代优化的结果 x k x^k xk 的残差替换:
∑ i = 1 m w ( r i k ) r i ∂ r i ∂ x j = 0 (4) \sum_{i=1}^m w\left(r_i^k\right) r_i \frac{\partial r_i}{\partial x_j}=0\tag{4} i=1mw(rik)rixjri=0(4)

式(4)等价于 argmin ⁡ x 1 2 ∑ i = 1 m w i ( r i k ) . r i ( x ) 2 \underset{x}{\operatorname{argmin}} \frac{1}{2} \sum_{i=1}^m w_i\left(r_i^k\right). r_i(x)^2 xargmin21i=1mwi(rik).ri(x)2,即等价于加权最小二乘求解问题。由于权重函数的数值不是固定的,因此我们很自然地想到通过多次迭代求解加权最小二乘来得到的最终的 x x x.因此迭代加权最小二乘算法步骤如下:

  • (1)获取 x x x初值,线性最小二乘可以通过 x 0 = ( X T X ) − 1 X T Y x_0=(X^TX)^{-1}X^TY x0=(XTX)1XTY,非线性问题,可以通过别的方式获得
  • (2)利用得到的 x k x_k xk计算 ψ ( r ) \psi(r) ψ(r),再计算 w ( r ) w(r) w(r)
  • (3)利用权重求解 argmin ⁡ x 1 2 ∑ i = 1 m w i ( r i k ) . r i ( x ) 2 \underset{x}{\operatorname{argmin}} \frac{1}{2} \sum_{i=1}^m w_i\left(r_i^k\right). r_i(x)^2 xargmin21i=1mwi(rik).ri(x)2,获得新的 x k + 1 x_{k+1} xk+1.非线性问题可以通过梯度法,牛顿高斯法,牛顿法,共轭梯度法或者lm方法求解,线性问题可以利用 x k + 1 = ( X T W X ) − 1 X T W Y , W 为权重 x_{k+1}=(X^TWX)^{-1}X^TWY,W为权重 xk+1=(XTWX)1XTWY,W为权重
  • (4)若 ∣ x k + 1 − x k ∣ < ε |x_{k+1}-x_{k}|<\varepsilon xk+1xk<ε或者大于迭代次数,终止迭代,否则返回第二步

Huber函数时的线性m估计

对于Huber而言:
ρ ( r ) = { r 2 2 , ∣ r ∣ ≤ k k ∣ r ∣ − k 2 2 , ∣ r ∣ > k \rho(r)= \begin{cases}\frac{r^2}{2}, & |r| \leq k \\ k|r|-\frac{k^2}{2}, & |r|>k\end{cases} ρ(r)={2r2,kr2k2,rkr>k

φ ( r ) \varphi(\mathrm{r}) φ(r) ρ ( r ) \rho(\mathrm{r}) ρ(r) 的导数:
φ ( r ) = { − k r < − k r ∣ r ∣ ≤ k k r > k \varphi(r)=\left\{\begin{array}{cc} -k & r<-k \\ r & |r| \leq k \\ k & r>k \end{array}\right. φ(r)= krkr<krkr>k
权重函数 w ( r ) w(r) w(r):
w ( r ) = { − k r r < − k 1 ∣ r ∣ ≤ k k r r > k w(r)=\left\{\begin{array}{cc} \frac{-k}{r} & r<-k \\ 1 & |r| \leq k \\ \frac{k}{r} & r>k \end{array}\right. w(r)= rk1rkr<krkr>k
已知线性函数的自变量为 x i x_i xi,因变量为 y i y_i yi,设线性函数为 a x + b = 0 ax+b=0 ax+b=0,有残差 r i = a x i + b − y i r_i=ax_i+b-y_i ri=axi+byi,令:

A = [ x 1 1 x 2 1 . . . x i 1 . . . x n 1 ] , Y = [ y 1 y 2 . . . y i . . . y n ] , A= \begin{bmatrix} x_1&1\\ x_2&1\\ ...\\ x_i&1\\ ...\\ x_n&1 \end{bmatrix}, Y=\begin{bmatrix} y_1\\ y_2\\ ...\\ y_i\\ ...\\ y_n \end{bmatrix}, A= x1x2...xi...xn1111 ,Y= y1y2...yi...yn ,
有: r = A [ a , b ] T − Y r=A[a,b]^T-Y r=A[a,b]TY
对于最小二乘直接解为: a , b = ( X T X ) − 1 X T Y a,b=(X^TX)^{-1}X^TY a,b=(XTX)1XTY,对于加权最小二乘直接解为: a , b = ( X T W X ) − 1 X T W Y , W a,b=(X^TWX)^{-1}X^TWY,W a,b=(XTWX)1XTWY,W为权重.
codes:

#include <iostream>
#include<Eigen/Core>
#include<Eigen/Dense>
int main()
{const  int size = 7;const double k = 1.5;//huber超参数//y=2x+1double x[size]{ 1.0,2.1,2.9,5.01,8.093,6.0,3.0 };double y[size]{ 3.02,4.97,7.1,10.88,17.06 ,2.0,17.6};//初值Eigen::MatrixXd  A = Eigen::MatrixXd::Zero(size, 2);Eigen::MatrixXd  Y = Eigen::MatrixXd::Zero(size, 1);for (size_t i = 0; i < size; i++){A(i, 0) = x[i];A(i, 1) = 1;Y(i, 0) = y[i];}Eigen::MatrixXd ab0 = (A.transpose()*A).inverse()*A.transpose()*Y;std::cout << ab0 << std::endl;//残差Eigen::MatrixXd  R = Eigen::MatrixXd::Zero(size, 1);Eigen::MatrixXd  W = Eigen::MatrixXd::Zero(size, size);//对角阵//初值double a_k = ab0(0, 0);double b_k = ab0(1, 0);int iter_times = 1;while (true){for (size_t j = 0; j < size; j++){//计算残差R(j, 0) = a_k * x[j] + b_k - y[j];//计算Huber权重if (R(j, 0)<-1.0*k){W(j, j) = -1.0*k / R(j, 0);}else if (std::abs(R(j, 0)) < k){W(j, j) = 1.0;}else if (R(j, 0) > k){W(j, j) = k/ R(j, 0);}}Eigen::MatrixXd ab= (A.transpose()*W*A).inverse()*A.transpose()*W*Y;++iter_times;if (std::abs(ab(0,0)-a_k)<1e-3&&std::abs(ab(1, 0) - b_k) < 1e-3){std::cout << ab << std::endl;break;}else if(iter_times>20){std::cout << ab << std::endl;break;}else{a_k=ab(0,0);b_k = ab(1, 0);}}std::cout << "Hello World!\n"; std::cout << iter_times << std::endl;
}

结果:

a0=1.09263
b0=4.56053
a=1.83641
b=1.58977

在这里插入图片描述

直线h为直接最小二乘计算的结果,直线p为m估计的结果。
参考:
1
2
3
4
《A review on robust M-estimators for regression analysis》
《ROBUST ESTIMATION IN ROBOT VISION AND PHOTOGRAMMETRY: A NEW MODEL AND ITS APPLICATIONS》

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

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

相关文章

Jmeter学习系列之八:控制器Controllers 的入门介绍

一、Controllers 简介 Jmeter有两种类型的控制器&#xff1a;Samplers&#xff08;取样器&#xff09;和Logical Controllers&#xff08;逻辑控制器&#xff09;&#xff1b;它们驱动着测试的进行取样器&#xff1a;让jmeter发送请求到服务器以及接收服务器的响应数据逻辑控制…

@SpringBootApplication

目录 1. SpringBootApplication注解简介 2. 使用SpringBootApplication注解 3. 自定义SpringBootApplication注解 在Spring Boot中&#xff0c;SpringBootApplication是一个非常重要的注解&#xff0c;它用于开启自动配置&#xff0c;简化了我们的开发工作。本文将详细介绍这…

施华洛世奇 Swarovski EDI需求分析

施华洛世奇为全球首屈一指的光学器材及精确切割仿水晶制造商&#xff0c;为时尚服饰、首饰、灯饰、建筑及室内设计提供仿水晶元素。施华洛世奇有两个主要业务&#xff0c;分别负责制造及销售仿水晶元素&#xff0c;以及设计制造成品。 EDI传输协议 施华洛世奇 Swarovski 与合作…

自定义el-upload 上传文件

前言 最近在做一个文件上传的功能&#xff0c;后端接口写好了、发现前端上传文件的页面不会写……&#xff08;我很笨的&#xff09;然后我就找啊找发现element有个组件是<el-upload/>能直接上传文件。我就想直接用拿来改改改成自己想要的&#xff0c;可是就是这样我花了…

远程连接服务器及可视化方法(Win和Linux)

1.win端 1、通过SSH连接至服务器 在window下&#xff0c;打开命令行提示符&#xff08;快捷键winr后输入cmd回车&#xff09; 在命令行中输入 ssh 服务器上的用户名192.168.50.204回车并输入服务器上的用户登录密码 至此&#xff0c;已成功通过SSH连接至服务器。 2、通过…

Java根据excel模版导出Excel(easyexcel、poi)——含项目测试例子拿来即用

Java根据excel模版导出Excel&#xff08;easyexcel、poi&#xff09;——含项目测试例子拿来即用 1. 前言1.1 关于Excel的一般导出2.2 关于easyexcel的根据模版导出 2. 先看效果2.1 模版2.2 效果 3. 代码实现&#xff08;核心代码&#xff09;3.1 项目代码结构3.2 静态填充例子…

《高考》期刊杂志投稿邮箱知网教育类期刊发表

《高考》杂志是由国家新闻出版总署批准的正规教育类期刊。主要宣传高中新课程改革的专业性&#xff0c;是教育管理工作者、高中一线教师交流经验、探讨问题的重要平台&#xff0c;期刊突出政策性、针对性、指导性&#xff0c;是一本以教育科研成果展示为主&#xff0c;兼具教育…

x86使用GDT表实现系统调用--用户调用系统功能

系统调用 视频讲解可以看这一个课程 GDT表相关知识 原理 注册 允许应用调用操作系统的一些函数, 主要是由于权限, 需要在特区级下面运行一些操作 页表相关设置的时候有一个设置是PDE_U位, 这时候用户就可以访问这一段地址, 否则就是需要系统操作级来进行操作 实现系统调用…

xss-跨站脚本攻击漏洞

前备知识&#xff1a; Cookie和Session是Web开发中用于维持用户状态、跟踪用户会话的核心技术&#xff0c;它们的主要目的是在无状态的HTTP协议基础上实现有状态的用户交互。 **Cookie**&#xff1a; - Cookie是一种由服务器发送到客户端&#xff08;通常是用户的浏览器&#x…

OpenAI视频生成Sora技术简析

基本介绍 Sora是春节期间OpenAI发布的产品&#xff0c;主要是通过文字描述生成视频&#xff0c;通过大规模视频数据训练而成的生成模型&#xff0c;当前还没开放试用。官方发布的技术报告&#xff1a;https://openai.com/research/video-generation-models-as-world-simulators…

无线综合测试仪8960(E5515C)

无线综合测试仪8960&#xff08;E5515C&#xff09; 简述&#xff1a; 8960是美国安捷伦&#xff08;Agilent&#xff09;公司生产的手机综测仪&#xff0c;8960测试仪是一款E5515C主机&#xff0c;具有特定于技术的硬件选件和软件应用程序。有两个硬件选项&#xff0c;8960能…

SpringBoot 学习笔记

文章目录 一、IoC二、AOP三、bean3.1 bean 生命周期3.2 三种依赖注入方式3.3 bean 线程安全 四、SpringMVC五、常用注解5.1 Scope5.2 PostConstruct 和 PreDestroy5.3 Component 和 Bean5.4 Autowired 和 Resource 六、基于 ApplicationContextAware 实现工厂模式七、事务失效八…

[AutoSar]BSW_Com03 DBC详解 (一)

目录 关键词平台说明一、DBC 定义1.1 相关工具 二、主要组成部分介绍2.1 Networks2.2 ECUs2.3 Network nodes2.4 messages2.5 signal2.6 Value Tables 三、主要组成部分关系图 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector &am…

推荐一个 Obsidian 的 ChatGPT 插件

源码地址&#xff1a;https://github.com/nhaouari/obsidian-textgenerator-plugin Text Generator 是目前我使用过的最好的 Obsidian 中的 ChatGPT 功能插件。它旨在智能生成内容&#xff0c;以便轻松记笔记。它不仅可以在 Obsidian 中直接使用 ChatGPT&#xff0c;还提供了优…

二叉树高频题目(不含树形DP)

二叉树高频题 二叉树的层序遍历 . - 力扣&#xff08;LeetCode&#xff09; 按点弹出 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>>ans;if(root!nullptr){queue<TreeNode*>q;unordered_map&…

音视频技术-电脑连接调音台时交流声的产生与消除

当电脑&#xff08;笔记本/台式机&#xff09;声卡通过音频线与调音台&#xff08;或扩音机&#xff09;连接时&#xff0c;能听到“交流声”。有时很轻微&#xff0c;有时很明显&#xff0c;甚至干扰正常的演讲或发言。 很多时候&#xff0c;我们在台上演讲时&#xff0c;都会…

Centos7.9环境源码编译安装ffmpeg6.x

1.官网ffmpeg下载源码 https://ffmpeg.org/download.html#build-windows 2.未安装x264库则先安装配置 可以先查询x264库: whereis libx264 安装编译工具和依赖库&#xff1a; sudo yum install gcc make cmake mercurial git yasm pkgconfig autoconf automake libtool sudo…

UE4 材质多张图片拼接成一张图片(此处用2×2拼接)

UE4 材质多张图片拼接成一张图片&#xff08;此处用22拼接&#xff09; //TexCoord,TextureA,TextureB,TextureC,TextureDfloat3 ReturnTexture TextureA; if(TexCoord.x < 0.5 && TexCoord.y < 0.5) {ReturnTexture TextureA; } else if(TexCoord.x > 0.5…

力扣1290. 二进制链表转整数

Problem: 1290. 二进制链表转整数 文章目录 题目描述思路复杂度Code 题目描述 思路 1.记录一个变量res初始化为0&#xff0c;指针p指向链表头&#xff1b; 2.循环每次res res * 2 p -> val;p p -> next;&#xff08;充分利用二进制数的特性&#xff1b;其中利用指针先…

VMware使用虚拟机,开启时报错:无法连接虚拟设备 0:0,因为主机上没有相应的设备。——解决方法

检查虚拟机配置文件并确保物理设备已正确连接。 操作&#xff1a; 选中虚拟机&#xff0c;打开设置&#xff0c;点击CD/DVD。在连接处选择使用ISO镜像文件