首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二维数据点集的加权线性最小二乘

二维数据点集的加权线性最小二乘
EN

Stack Overflow用户
提问于 2012-07-19 23:26:06
回答 3查看 3.5K关注 0票数 3

我的问题是讨论How to fit the 2D scatter data with a line with C++的扩展。现在我想进一步扩展我的问题:当估计适合2D散布数据的线时,如果我们可以区别对待每个2D散布数据,那就更好了。也就是说,如果散点离直线很远,我们可以给该点一个较低的权重,反之亦然。因此,问题就变成了:给定一个2D散点数组以及它们的权重因子,我们如何估计通过它们的线性直线?在本文(weighted least regression)中可以找到该方法的一个很好的实现。但是,这篇文章中的算法实现太复杂了,因为它涉及矩阵计算。因此,我正在尝试寻找一种不需要矩阵计算的方法。该算法是simple linear regression的扩展,为了说明该算法,我编写了以下MATLAB代码:

代码语言:javascript
复制
function line = weighted_least_squre_for_line(x,y,weighting);


part1 = sum(weighting.*x.*y)*sum(weighting(:));

part2 = sum((weighting.*x))*sum((weighting.*y));

part3 = sum( x.^2.*weighting)*sum(weighting(:));

part4 = sum(weighting.*x).^2; 

beta = (part1-part2)/(part3-part4);

alpha = (sum(weighting.*y)-beta*sum(weighting.*x))/sum(weighting);

a = beta;
c = alpha;
b = -1;
line = [a b c];

在上述代码中,x,y,weighting分别表示x坐标、y坐标和加权因子。我用几个例子测试了算法,但仍然不确定它是否正确,因为这种方法与Polyfit得到了不同的结果,这依赖于矩阵计算。我现在在这里发布实现,并征求您的建议。你认为这是一个正确的实现吗?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-20 03:04:48

如果您认为降低远离直线的点的权重是一个好主意,那么您可能会被http://en.wikipedia.org/wiki/Least_absolute_deviations所吸引,因为计算这一点的一种方法是通过http://en.wikipedia.org/wiki/Iteratively_re-weighted_least_squares,它将对远离直线的点赋予较少的权重。

票数 3
EN

Stack Overflow用户

发布于 2012-07-20 02:50:22

如果你认为你所有的点都是“好数据”,那么根据它们与你初始拟合的距离来对它们进行天真的加权将是错误的。然而,丢弃“异常值”是一种相当常见的做法:如果一些数据点离拟合度高得令人难以置信,并且您有理由相信存在一种错误机制,可能会生成一小部分“糟糕”的数据点,那么您可以简单地从数据集中删除这些不可信的点,以获得更好的拟合。

就数学而言,我建议咬紧牙关,试着搞清楚矩阵数学。也许你可以找到一篇不同的文章,或者一本有更好的介绍的书。我不会评论你的Matlab代码,只想说你在从part3中减去part4的时候会有一些精度问题,从part1中减去part2也可能会有一些精度问题。

票数 1
EN

Stack Overflow用户

发布于 2012-07-21 06:35:46

这不完全是您想要的,但您应该研究一下robust regression。MATLAB具有robustfit函数(需要统计工具箱)。

甚至还有一个交互式演示,您可以使用它来比较常规线性回归和稳健回归:

代码语言:javascript
复制
>> robustdemo

这表明,在存在异常值的情况下,稳健回归往往会给出更好的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11564108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档