Python - 尝试执行更强大的线性拟合

时间:2016-03-07 03:49:08

标签: python data-fitting robust

我有这个数据,我适合线性函数,适合决定其他工作(没关系,不重要)。我正在使用numpy.polyfit,当我只是简单地包含数据和拟合度时,没有别的,它会产生这个图:

enter image description here

现在,拟合是可以的,但普遍的共识是最佳拟合线被它上面的那些红色数据点倾斜,我实际上应该适合它下面的数据,形成一个很好的线性形状(开始在那个拥挤的蓝点附近)。所以我试图在我对polyfit的调用中添加一个权重,并且我选择了1 / sqrt(y值)的任意加权,所以基本上较小的y值将被更加有利地加权。这给出了以下内容:

enter image description here

不可否认的是,但我仍然不满意,因为现在看来这条线太了。理想情况下,我会喜欢中间地带,但由于我选择了真正的任意加权,我想知道是否总体上有一种方法可以使用Python执行更强大的拟合,或者即使可以使用polyfit来完成?使用单独的包,如果它的工作也会没问题。

2 个答案:

答案 0 :(得分:0)

这个问题与编程或python没什么关系,更多的是与统计学或线性代数有关。

您可以尝试查看最佳拟合线或最佳拟合二次曲线之间的误差差异,其中误差较小。但其中很多都与语境有关。

如果您有500个数据点,那么您可以找到500阶多项式来建模数据集,并且误差为零。但是,如果你对数据点进行加权,那么它需要对数据有意义。

如果你想要最合适的线条,那就是"看起来正确"然后只需剪切前戏并将其画到你想要的地方。如果你想让它变得有意义,那就向一位数学家询问一个有意义的公式,然后再遵循它。

答案 1 :(得分:0)

statsmodels具有强大的线性估计器RLM,具有各种权重函数,在这种情况下应该可以很好地工作。

http://www.statsmodels.org/dev/generated/statsmodels.robust.robust_linear_model.RLM.html http://www.statsmodels.org/dev/examples/index.html#robust

这些M-estimator对于" y outliers"非常强大,但对于" x outliers"这是有影响力的外围回归者。