matlab练习程序(加权最小二乘)

2023-05-16

起本篇题目还是比较纠结的,原因是我本意打算寻找这样一个算法:在测量数据有比较大离群点时如何估计原始模型。

上一篇曲面拟合是假设测量数据基本符合均匀分布,没有特别大的离群点的情况下,我们使用最小二乘得到了不错的拟合结果。

但是当我加入比如10个大的离群点时,该方法得到的模型就很难看了。所以我就在网上搜了一下,有没有能够剔除离群点的方法。

结果找到了如下名词:加权最小二乘、迭代最小二乘、抗差最小二乘、稳健最小二乘。

他们细节的区别我就不过分研究了,不过这些最小二乘似乎表达的是一个意思:

构造权重函数,给不同测量值不同的权重,偏差大的值权重小,偏差小的权重大,采用迭代最小二乘的方式最优化目标函数。

下面是matlab中robustfit函数权重函数,可以参考一下:

权重函数(Weight Function等式(Equation默认调节常数(Default Tuning Constant
'andrews'w = (abs(r)<pi) .* sin(r) ./ r1.339
'bisquare' (default)w = (abs(r)<1) .* (1 - r.^2).^24.685
'cauchy'w = 1 ./ (1 + r.^2)2.385
'fair'w = 1 ./ (1 + abs(r))1.400
'huber'w = 1 ./ max(1, abs(r))1.345
'logistic'w = tanh(r) ./ r1.205
'ols'传统最小二乘估计 (无权重函数)
'talwar'w = 1 * (abs(r)<1)2.795
'welsch'w = exp(-(r.^2))2.985

代码如下:


clear all;
close all;
clc;

a=2;b=2;c=-3;d=1;e=2;f=30;   %系数         
n=1:0.2:20;
x=repmat(n,96,1);
y=repmat(n',1,96);
z=a*x.^2+b*y.^2+c*x.*y+d*x+e*y +f;      %原始模型     
surf(x,y,z)

N=100;
ind=int8(rand(N,2)*95+1);

X=x(sub2ind(size(x),ind(:,1),ind(:,2)));
Y=y(sub2ind(size(y),ind(:,1),ind(:,2)));
Z=z(sub2ind(size(z),ind(:,1),ind(:,2)))+rand(N,1)*20;       %生成待拟合点,加个噪声

Z(1:10)=Z(1:10)+400;                    %加入离群点

hold on;
plot3(X,Y,Z,'o');

XX=[X.^2 Y.^2 X.*Y X Y ones(100,1)];
YY=Z;

C=inv(XX'*XX)*XX'*YY;                                          %最小二乘
z=C(1)*x.^2+C(2)*y.^2+C(3)*x.*y+C(4)*x+C(5)*y +C(6);           %拟合结果
Cm=C;
mesh(x,y,z)

z=C(1)*X.^2+C(2)*Y.^2+C(3)*X.*Y+C(4)*X+C(5)*Y +C(6);          
C0=C;
while 1
    r = z-Z;
    w = tanh(r)./r;                                             %权重函数
    W=diag(w);
        
    C=inv(XX'*W*XX)*XX'*W*YY;                                   %加权最小二乘
    z=C(1)*X.^2+C(2)*Y.^2+C(3)*X.*Y+C(4)*X+C(5)*Y +C(6);        %拟合结果

    if norm(C-C0)<1e-10
        break;
    end
    C0=C;
end

z=C(1)*x.^2+C(2)*y.^2+C(3)*x.*y+C(4)*x+C(5)*y +C(6);           %拟合结果
mesh(x,y,z)  

结果如下:

图中一共三个曲面,最下层是原模型,最上层是普通最小二乘拟合模型,中间层是加权最小二乘拟合模型。

可以看出,加权最小二乘效果要好一些。

参考:

https://www.cnblogs.com/xiongyunqi/p/3737323.html

https://blog.csdn.net/baidu_35570545/article/details/55212241

转载于:https://www.cnblogs.com/tiandsp/p/10330393.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matlab练习程序(加权最小二乘) 的相关文章

  • ubuntu apt-get和aptitude 安装软件包

    一 apt get apt get是一条linux命令 xff0c 适用于deb包管理式的操作系统 xff0c 主要用于自动从互联网的软件仓库中搜索 安装 升级 卸载软件或操作系统 什么是apt get编辑 是debian xff0c ub
  • 关于Egret Engine 2.5.3引入GUI模块问题记录

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 基本环境 xff1a Egret Engine 2 5 3 Egret Wing 2 1 使用EgretWing创建Game项目 xff0c 然后需要引入GUI模块 具体引
  • linux brctl command not found

    root 64 localhost brctl bash brctl command not found 解决方法 xff1a root 64 localhost yum install bridge utils
  • 参数LOG_ARCHIVE_MIN_SUCCEED_DEST

    LOG ARCHIVE MIN SUCCEED DEST PropertyDescriptionParameter type IntegerDefault value 1Modifiable ALTER SESSION ALTER SYST
  • Boot loader: Grub入门(转)

    Boot Loader Grub 在看完了前面的整个启动流程 xff0c 以及核心模块的整理之后 xff0c 你应该会发现到一件事情 xff0c 那就是 boot loader 是加载核心的重要工具 啊 xff01 没有 boot load
  • 容器概念与Linux Container原理

    一 容器与LxC 在像KVM等众多主机虚拟化解决方案中 xff0c 对每一个虚拟机实例提供的是从底层硬件开始一直到上层的环境 xff0c 在硬件级进行资源划分 虚拟机的内核是运行在硬件内核之上的 由于每个虚拟实例都有自己的运行内核 xff0
  • springboot security

    Authority 权限 Credential 证书 Grant 授予 Authentication 身份验证 以下 xff0c 我们将通过四步 xff0c 逐步实现spring security的username 43 password身
  • MPEG-4视频编码核心思想

    1 引言 当今时代 xff0c 信息技术和计算机互联网飞速发展 xff0c 在此背景下 xff0c 多媒体信息已成为人类获取信息的最主要载体 xff0c 同时也成为电子信息领域技术开发和研究的热点 多媒体信息经数字化处理后具有易于加密 抗干
  • xss payload

    gt lt SCRIPT gt alert 34 hello 34 lt SCRIPT gt 转载于 https www cnblogs com fanzi2009 archive 2009 08 13 1545474 html
  • NSIS学习笔记(转)

    转自 xff1a http blog csdn net lee353086 article details 45919901 NSIS学习笔记 Date 2015 05 20 Author kagula Env VS2013Update4
  • 英文破折号(em dash)、连接号(en dash)与连字符(hyphen)的区别及各自用法是什么?...

    英文破折号 xff08 em dash xff09 连接号 xff08 en dash xff09 与连字符 xff08 hyphen xff09 的区别及各自用法是什么 xff1f 在科技写作中有何特点 xff1f 2 条评论 分享 按票
  • vmware中按Ctrl+Alt+Del的困扰

    虚拟机技术越来越多的在日常工作中得以应用 xff0c 尤其是在软件开发行业 xff0c 虚拟机用得就更为广泛了 xff0c 而开发人员一般使用得虚拟机是vmware系列 xff0c 但是在使用过程中 xff0c 我们经常会被一个问题困扰 x
  • 一步一步学Linq to sql(十):分层构架的例子

    项目介绍 这节将要把 一步一步学 Linq to sql xff08 三 xff09 xff1a 增删改 中留言簿的例子修改为使用 WCF 的多层构架 我们将会建立以下项目 xff1a l A xff0c 网站项目 WebSite xff1
  • 查询某表所有列名的SQL语句

    select name from syscolumns where id 61 select max id from sysobjects where xtype 61 39 u 39 and name 61 39 表名 39 order
  • dell r910开机光盘启动设置

    dell r910开机 xff0c 按F11 xff0c 进入boot manager xff0c 选择sata optical driver xff0c 回车 xff0c 从光盘启动安装windows2008 64 more 64 来自
  • Pascal's Triangle

    Given numRows generate the first numRows of Pascal 39 s triangle For example given numRows 61 5 Return 1 1 1 1 2 1 1 3 3
  • Form验证实例

    程序目录 models py from django db import models Create your models here class UserInfo models Model user 61 models CharField
  • 由Unity發佈到Google Play (Android Market)的步驟

    由Unity發佈到Google Play Android Market 的步驟 Unity輸出設定與Keystore建立 xff0a 注意 xff1a 妥善保留Keystore 因為日後更新版本會再用到 輸出解析度選擇 Resolution
  • Greenplum 行存、列存,堆表、AO表的原理和选择

    转载自 xff1a https github com digoal blog blob master 201708 20170818 02 md spm 61 a2c4e 11153940 blogcont179210 17 6f68276
  • 【2019-06-26】改变的开始

    07 55 回到公司习惯性地打开了大厅和走廊上的灯 xff0c 光亮让人积极 xff0c 且安静给了我空间 xff0c 泡上一杯 小鱼叶 xff0c 这种美好 xff0c 让我每天5点起床 xff0c 我绝对愿意 永远要记住 xff0c 你

随机推荐