【问题标题】:Python - trying to perform a more robust linear fitPython - 尝试执行更稳健的线性拟合
【发布时间】:2016-06-20 12:56:21
【问题描述】:

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

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

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

【问题讨论】:

  • 是的,Python 有许多用于统计的高级包。但这更像是一个统计问题,然后是一个编程问题。查找Classification for outlier removalclusteringk-nearest neighborRANSACrobust regression。最后,了解您的实验并可能找到排除某些数据的原因通常是最好的一阶方法。
  • 非常感谢@roadrunner66!

标签: python data-fitting robust


【解决方案1】:

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 离群值”则不稳健。

【讨论】:

    【解决方案2】:

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

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

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

    如果您希望最适合的线条“看起来正确”,那么只需剪掉前戏并将其画在您想要的位置即可。如果您希望它有意义,请向数学家询问一个有意义的公式,然后按照它进行操作。

    【讨论】:

      猜你喜欢
      • 2017-02-09
      • 1970-01-01
      • 2015-12-12
      • 2022-11-02
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      • 2018-01-13
      • 2018-04-02
      相关资源
      最近更新 更多