1

我有一个单调增长的整数序列。例如

seq=[(0, 0), (1, 5), (10, 20), (15, 24)].

以及大于序列中最大参数的整数值(a > seq[-1][0])。我想估计与给定值对应的值。序列几乎呈线性增长,早期的值不如后面的重要。尽管如此,我不能简单地取最后两个点并计算新值,因为很可能出错,曲线可能会改变角度。

任何人都可以为 Python 中的此类任务提出一个简单的解决方案吗?

4

2 回答 2

3

有很多问题。外推是一件令人讨厌的事情。你假设一个线性外推吗?一般而言,多项式模型(超出线性)的外推非常差。或者你应该假设某种对一条线渐近的外推?重要的是您愿意承担什么,以及您可以为建模过程带来什么信息。

如果你可以假设一个线性外推,那么我可能会做一个加权最小二乘拟合,一个直线模型随着你远离端点而减小权重。(事实上​​,无论你最终提出什么模型,加权最小二乘估计似乎是合乎逻辑的,权重是位置的函数。)

因此,假设您选择提出一个非线性模型,类似于

y = a + bx + c*exp(-d*x)

当 x 变大时,该模型将渐近地逼近一条斜率为 b 的直线。您可能仍会使用加权模型,将这些点从您感兴趣的末尾扣除。

同样,长距离外推是一件很难尝试的事情。记住马克吐温的话...

“在一百七十六年的时间里,下密西西比河已经缩短了两百四十二英里。这是平均每年超过一英里和三分之一。因此,任何冷静的人,只要不是瞎子或白痴,都可以看到,在古奥里特志留纪时期,也就是一百万年前的次年十一月,密西西比河下游长达一百万三十万英里,突出于大地之上。墨西哥湾就像一根钓鱼竿。同样的道理,任何人都可以看到,七百四十二年后,密西西比河下游将只有一英里四分之三长,而开罗[伊利诺伊州]和新奥尔良将与他们的街道连在一起,步履蹒跚在一个市长和一个共同的市议员委员会的领导下,安然无恙。科学有一些令人着迷的东西。人们从如此微不足道的事实投资中获得了如此巨大的猜测回报。” “密西西比河上的生活”,马克吐温,1884

于 2012-05-27T01:27:31.087 回答
0

如果序列没有很多噪音,只需使用最新的点,以及当前 1/3 的点,然后据此估计你的线。否则,做一些更复杂的事情,比如适合序列后半部分的最小二乘法。

如果您在 Google 上搜索,有许多代码示例可以用于后者,并且一些模块可能会有所帮助。(我不是 Python 程序员,所以我不能给最好的一个有意义的推荐。)

于 2012-05-26T18:45:13.933 回答