我有一個單調遞增的整數序列。例如,如何計算Python中單調增長序列的估計值?
seq=[(0, 0), (1, 5), (10, 20), (15, 24)]
。
並且一個整數值大於序列中最大的參數(a > seq[-1][0])
。我想估計對應於給定值的值。序列幾乎呈線性增長,而較早的值不如以後重要。儘管如此,我不能簡單地拿出2個最後的分數來計算新的價值,因爲錯誤很可能發生,曲線可能會改變角度。
任何人都可以提出一個簡單的解決方案,這種任務在Python中?
我有一個單調遞增的整數序列。例如,如何計算Python中單調增長序列的估計值?
seq=[(0, 0), (1, 5), (10, 20), (15, 24)]
。
並且一個整數值大於序列中最大的參數(a > seq[-1][0])
。我想估計對應於給定值的值。序列幾乎呈線性增長,而較早的值不如以後重要。儘管如此,我不能簡單地拿出2個最後的分數來計算新的價值,因爲錯誤很可能發生,曲線可能會改變角度。
任何人都可以提出一個簡單的解決方案,這種任務在Python中?
有很多問題。推斷是一個討厭的事情開始。你是否假設線性外推?多項式模型(超越線性)一般外推得非常差。或者你應該假設一種漸近線的外推?重要的是你願意承擔什麼,以及你可以給建模過程帶來什麼信息。
如果你可以假設一個線性外推函數,那麼我可以做一個加權最小二乘擬合,當你離開端點時,用一個直線模型來減去權重。 (事實上,不管你到底是什麼型號最多冒充,加權最小二乘估計似乎是合乎邏輯,與權重位置的功能。)
因此,假設你選擇造成非線性模型是一樣的東西
y = a + bx + c*exp(-d*x)
當x變大時,該模型將漸近地逼近一條直線,斜率爲b。您仍然可以使用加權模型,將這些點偏離您感興趣的末端。
同樣,長距離外推是一件很難嘗試的事情。請記住馬克吐溫的話......
「在一千七百六十年的時間裏,密西西比河下游已縮短了二百二十四英里。這是平均每年超過一英里和三分之一的小事。因此,任何不是盲目或愚昧的冷靜的人都可以看到,在距離明年11月的一百萬年前的古老的志留紀時期,密西西比河下游長達一百三十萬英里,並且突出於墨西哥灣像一根釣魚杆。同樣的道理,任何人都可以看到,從現在起,密西西比河下游將只有一英里和四分之三長,開羅(伊利諾伊州)和新奧爾良將會一起加入他們的街道,舒適地在一個單一的市長和一個相互委員會的市議員下。有一些關於科學的迷人之處。人們可以從這種事實上的微不足道的投資中獲得這樣的批發回報。「 」密西西比河上的生活「,馬克吐溫,1884年
如果該序列沒有很多噪音,只需使用最新的點,並將該點用於1/3的電流,然後根據該點估算出您的線。否則,做一些更復雜的事情,比如適合後半部分序列的最小二乘法。
如果您在Google上進行搜索,那麼可以使用一些代碼示例來執行後者,以及一些可能有用的模塊。 (我不是一個Python程序員,所以我不能給出最好的建議。)
使用最近的五點。或者10.或者你想要的最近的點數。 – robert
相關http://stackoverflow.com/a/488941/4279 – jfs
你的意思是「曲線可能會改變角度」?漸漸或突然?如果逐漸地,那麼簡單地拿最後10個(如另一個評論中所建議的),計算10個角度,通過離開兩個離羣值並且取其餘的平均值。另一個,一種常見的多邊形平滑技術是,取10個最後的片段,用它的中間點替換每個片段,對所得到的9個片段8,...重複。 –