日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EMA - 指数移动平均

發布時間:2024/1/1 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EMA - 指数移动平均 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

EMA 基本概念見 Wikipedia,本文不贅述。

基本公式

S[0] = Y[0]
S[i] = Y[i] * alpha + S[i-1] * (1 - alpha)

其中 alpha 為平滑因子,數值越小曲線越平滑

要點

  • 初始值 S1 會引入誤差,為了消除誤差有幾種常見策略:

    • 取前 N 個值的均值作為 S1
    • 迭代的前 N 次使用動態平滑因子 alpha,從 1 逐漸變為設定值。
    • 系統空轉 N 次( ‘spin-up’ interval)之后再對外提供服務
  • 如何選擇 alpha?

    • 這是應用決定的,并沒有固定的規則。
    • 一種選擇alpha 的思路是使得均方差最小,數據最平滑。
    • 你也可以有自己的策略(思考:你真的需要特別平滑嗎?)
  • 一種自適應的計算 alpha 的方法

    S[i] 可以寫作:

    S[n] = w[n] * Y[n] + w[n-1] * Y[n-1] + w[n-2] * Y[n-2] + … w[1] * Y[1] + w[0] * Y[0]

    Y 值是隨機序列,我們無法預知。每個 Y 的權重 w 和 alpha 相關,是可以預先計算出來的。什么意思呢?分述如下:

    我們沒有辦法控制 Y[i] 在 S[n] 中的占比,因為 Y[i] 是一個輸入序列,我們無法預先知道它的值。舉個例子

    Y[0] = Y[1] = … = Y[n - k - 1] = 1;
    Y[n - k] = Y[n - k + 1] = … = Y [n - 1] = Y[n] = 0

    有:

    S[n] = w[n - k - 1] * Y[n - k - 1] + … w[1] * Y[1] + w[0] * Y[0]

    可知無論 w (w > 0 )為多少,Y[0], Y[1], … , Y[n - k - 1] 在 S[n] 中占比 100%。

    但是,我們可以控制 最后 k 個值的權重在總權重里的占比。>>參考文檔<<

    最后k個權重之外的權重和 / 總權重
    = (w[n-k] + w[n-k-1] + w[n-k-2] + …. ) / 1
    = a * ( 1 - a)^k + a * (1 - a)^(k+1) + ….
    = a * (1-a) ^k * [ 1 + (1-a) + (1-a)^2 + …..]
    = (1-a)^k

    第四步到第五步,數學不太好的同學注意:當 1 > a > 0, n->無窮時,
    a * [ 1 + (1-a) + (1-a)^2 + …..] = 1

    如果我們希望最近 k 步之前的權重占比為 10%,最近 k 步權重占比 90%,根據上面的公式有:

    0.1 = (1 - a) ^k
    則有: a = 1 - e^(ln0.1 / k)

    再看一個最近 k 步之前的權重值為一個特殊值的例子: e^-1。

    我們希望最近 k 步之前的權重占比為 e^-1 = 0.3678,最近 k 步權重占比 1- e ^ -1 = 0.6321,根據上面的公式有:

    e ^ -1 = (1 - a) ^k
    則有: a = 1 - e^(-1 / k)

    k-alpha 對照表:

    ka
    10.6321
    20.3934
    30.2834
    40.2212
    50.1813
    100.095
    200.049
    300.033
    400.025
    500.020
    1000.010
    2000.005

    設采樣周期為 interval,采樣窗口為 window,那么窗口內共采樣 window / interval 次。

    設 k = window / interval。
    則有 a = 1 - e ^ ( -1 / (window / interval)) = 1 - e ^ (- interval / window)

    在這種情況下,最近 2k 步權重占比為多少呢?

    1 - 忽略的權重 / 總權重 = 1 - (1-a)^2k = 1 - e ^ -2 = 1 - 0.1353 = 0.8647

    對照表:

    stepweight
    k0.6321
    2k0.8647
    3k0.9502
    4k0.9816

    從應用的角度看,這意味著什么呢?

    假設我們的 window 是 1 天,那么最近一天的權重占比 63%,最近 2 天的權重占比 86%,三天 95%,四天 98%,等等。這意味著四天之外的權重影響力只占到 2%。還啰嗦一句,這里是“權重影響力”,并不是”數據影響力“,w 和 Y 是兩碼事。如果 四天之外的數據特別大或者特別小,對當前計算出來的影響還是會很大的。

    最后附幾個例子。

    圖中,每個格子是 100 * 100, 紅色部分為 EMA曲線。

    數據特征永久變化,interval = 100,window = 100,alpha = 0.2834


    連續數日數據特征變化,后恢復,interval = 100,window = 100,alpha = 0.2834


    某日數據突變,后恢復,interval = 100,window = 100,alpha = 0.2834

    EMA 幾乎跟隨數據變化,interval = 1,window = 1,alpha = 0.033

    在線感受一下EMA曲線和參數之間的關系吧:http://reactshare.cn/ema

    總結

    以上是生活随笔為你收集整理的EMA - 指数移动平均的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。