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

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

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

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

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

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

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

权重函数(Weight Function 等式(Equation 默认调节常数(Default Tuning Constant
'andrews' w = (abs(r)<pi) .* sin(r) ./ r 1.339
'bisquare' (default) w = (abs(r)<1) .* (1 - r.^2).^2 4.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) ./ r 1.205
'ols' 传统最小二乘估计 (无权重函数)
'talwar' w = 1 * (abs(r)<1) 2.795
'welsch' w = exp(-(r.^2)) 2.985

代码如下:

clear all;
close all;
clc; a=;b=;c=-;d=;e=;f=; %系数
n=:0.2:;
x=repmat(n,,);
y=repmat(n',1,96);
z=a*x.^+b*y.^+c*x.*y+d*x+e*y +f; %原始模型
surf(x,y,z) N=;
ind=int8(rand(N,)*+); X=x(sub2ind(size(x),ind(:,),ind(:,)));
Y=y(sub2ind(size(y),ind(:,),ind(:,)));
Z=z(sub2ind(size(z),ind(:,),ind(:,)))+rand(N,)*; %生成待拟合点,加个噪声 Z(:)=Z(:)+; %加入离群点 hold on;
plot3(X,Y,Z,'o'); XX=[X.^ Y.^ X.*Y X Y ones(,)];
YY=Z; C=inv(XX'*XX)*XX'*YY; %最小二乘
z=C()*x.^+C()*y.^+C()*x.*y+C()*x+C()*y +C(); %拟合结果
Cm=C;
mesh(x,y,z) z=C()*X.^+C()*Y.^+C()*X.*Y+C()*X+C()*Y +C();
C0=C;
while
r = z-Z;
w = tanh(r)./r; %权重函数
W=diag(w); C=inv(XX'*W*XX)*XX'*W*YY; %加权最小二乘
z=C()*X.^+C()*Y.^+C()*X.*Y+C()*X+C()*Y +C(); %拟合结果 if norm(C-C0)<1e-10
break;
end
C0=C;
end z=C()*x.^+C()*y.^+C()*x.*y+C()*x+C()*y +C(); %拟合结果
mesh(x,y,z)

结果如下:

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

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

参考:

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

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

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

  1. matlab练习程序(最小二乘多项式拟合)

    最近在分析一些数据,就是数据拟合的一些事情,用到了matlab的polyfit函数,效果不错. 因此想了解一下这个多项式具体是如何拟合出来的,所以就搜了相关资料. 这个文档介绍的还不错,我估计任何一本 ...

  2. matlab练习程序(局部加权线性回归)

    通常我们使用的最小二乘都需要预先设定一个模型,然后通过最小二乘方法解出模型的系数. 而大多数情况是我们是不知道这个模型的,比如这篇博客中z=ax^2+by^2+cxy+dx+ey+f 这样的模型. 局 ...

  3. (转)matlab练习程序(HOG方向梯度直方图)

    matlab练习程序(HOG方向梯度直方图)http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html HOG(Histogram o ...

  4. matlab练习程序(SUSAN检测)

    matlab练习程序(SUSAN检测) SUSAN算子既可以检测角点也可以检测边缘,不过角点似乎比不过harris,边缘似乎比不过Canny.不过思想还是有点意思的. 主要思想就是:首先做一个和原图像 ...

  5. matlab练习程序(曲面拟合)

    这里用到的还是最小二乘方法,和上一次这篇文章原理差不多. 就是首先构造最小二乘函数,然后对每一个系数计算偏导,构造矩阵乘法形式,最后解方程组. 比如有一个二次曲面:z=ax^2+by^2+cxy+dx ...

  6. matlab示例程序--Motion-Based Multiple Object Tracking--卡尔曼多目标跟踪程序--解读

    静止背景下的卡尔曼多目标跟踪 最近学习了一下多目标跟踪,看了看MathWorks的关于Motion-Based Multiple Object Tracking的Documention. 官网链接:h ...

  7. IRLS(迭代加权最小二乘)

    IRLS用于解决这种目标函数的优化问题(实际上是用2范数来近似替代p范数,特殊的如1范数). 可将其等价变形为加权的线性最小二乘问题: 其中W(t)可看成对角矩阵,每步的w可用下面的序列代替 如果 p ...

  8. matlab练习程序(透视投影,把lena贴到billboard上)

    本练习程序是受到了这个老外博文的启发,感觉挺有意思,就尝试了一下.他用的是opencv,我这里用的是matlab. 过去写过透视投影,当时是用来做倾斜校正的,这次同样用到了透视投影,不过更有意思,是将 ...

  9. matlab练习程序(多圆交点)

    最近总是对计算几何方面的程序比较感兴趣. 多圆求交点,要先对圆两两求交点. 有交点的圆分为相切圆和相交圆. 相切圆求法: 1.根据两圆心求直线 2.求公共弦直线方程 3.求两直线交点即两圆切点. 相交 ...

随机推荐

  1. 如何测量并报告ASP.NET Core Web API请求的响应时间

    介绍 大家都知道性能是API的流行语.而相应时间则是API性能的一个重要并且可测量的参数.在本文中,我们将了解如何使用代码来测量API的响应时间,然后将响应时间数据返回到客户端. 作者:依乐祝 原文地 ...

  2. Jenkins系列之七——前端app自动打包

    了两周终于搞掂了,期间各种搜教程.各种懵逼,各种坑对小白来还是很难的额.废话不多说直接开撸~~~ 一.介绍下什么是Gradle Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持m ...

  3. sql server 索引阐述系列六 碎片查看与解决方案

    一 . dm_db_index_physical_stats 重要字段说明 1.1 内部碎片:是avg_page_space_used_in_percent字段.是指页的填充度,为了使磁盘使用状况达到 ...

  4. mysql 开发基础系列2 整型数据类型

    Mysql 的数据类型 1. 对整数类型, Mysql 还支持类型名称后面的小括号内指定的显示宽度,例如int(5) 表示宽度小于5位时填满宽度,如果不显示指定宽度默认是int(11),一般配合zer ...

  5. ASP.NET-FineUI开发实践-18

    Grid编辑下垃级联 看了看专业版的例子,分为以下几步,都是前端的 1.编辑父下拉框后,重置子下拉框 2.编辑子下垃框前,通过父下垃框数据得到下垃项,然后绑定数据 所以这里要截取Grid的两个事件,编 ...

  6. [总结] Min-Max容斥学习笔记

    min-max 容斥 给定集合 \(S\) ,设 \(\max(S)\) 为 \(S\) 中的最大值,\(\min(S)\) 为 \(S\) 中的最小值,则: \[\max(S)=\sum_{T\in ...

  7. Squid实现正向代理及访问控制--技术流ken

    Squid及正向代理简介 Squid cache(简称为Squid)是一个流行的自由软件,它符合GNU通用公共许可证.Squid作为网页服务器的前置cache服务器,可以代理用户向web服务器请求数据 ...

  8. 推荐写作平台gitbook——让我们换一种形式写作

    https://www.gitbook.com/ 我一直用这个平台进行写作.目前有两本电子书可以供大家阅读,分别如下 Office 365 开发入门指南 https://www.gitbook.com ...

  9. JQuery官方学习资料(译):JQuery对象

        每当创建一个新的元素(或者选择一个已经存在的元素)时,JQuery将返回一个元素的集合.大部分的开发人员新接触JQuery的时候,都把这个集合当做数组.这个集合中的DOM元素有从零开始的索引, ...

  10. asp.net-基础-20180320

    常用页面指令 <%@page%>:一个页面只能有一个 <%@Import NameSpace=“Value“%> 导入命名空间 <%@OutputCache%> 设 ...