0

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

在此处输入图像描述

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

在此处输入图像描述

诚然哪个更好,但我仍然不满意,因为现在看来这条线太低了。理想情况下,我想要一个中间立场,但由于我选择了一个任意的权重,我想知道一般来说是否有一种方法可以使用 Python 执行更稳健的拟合,或者即使这可以使用polyfit? 如果可行,使用单独的包也可以。

4

2 回答 2

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 估计量,对“y 异常值”具有鲁棒性,但对具有影响的异常回归量的“x 异常值”则不具有鲁棒性。

于 2016-03-07T04:54:30.113 回答
0

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

您可以尝试查看最佳拟合线或最佳拟合二次曲线之间的误差差异,看看哪个误差较小。但很多都是上下文相关的。

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

如果你想让你最合适的线条“看起来正确”,那么只需剪掉前戏并将它画在你想要的地方。如果您希望它有意义,请向数学家询问一个有意义的公式,然后遵循它。

于 2016-03-07T04:15:33.427 回答