Skip to content

Online 演算法入門:一次掃描資料也能完成計算

原文連結:https://www.johndcook.com/blog/2026/05/29/online-one-pass-algorithms/

文章說明

這是統計學家與應用數學家 John D. Cook 撰寫的技術科普文,介紹 online(one-pass)演算法的核心概念:只需掃描資料流一次,無需儲存完整資料集,就能精確或近似計算統計量。文章以樣本變異數為範例,並延伸到高階動差、回歸分析等應用。

內容介紹

經典範例:樣本變異數

標準的樣本變異數公式看起來需要兩次掃描:

$$s^2 = \frac{1}{n-1}\sum_{i=1}^n (x_i - \bar{x})^2$$

先算平均值 $\bar{x}$,再回頭計算每個點與平均值的平方差。

教科書會給另一個「等價」公式(基於平方和):

$$s^2 = \frac{1}{n(n-1)}\left(n\sum_{i=1}^n x_i^2 - \left(\sum_{i=1}^n x_i\right)^2\right)$$

這個公式理論上正確,但數值不穩定(numerically unstable)。Cook 實際見過它在真實資料上返回負數(理論上不可能),導致程式在計算標準差時崩潰(對負數開根號)。

Welford 演算法(1962)

真正的解法是 B. P. Welford 在 1962 年提出的演算法,能在一次掃描中精確計算平均值與變異數,且數值穩定。Cook 在另一篇文章中提供完整實作。

"Online" 一詞的歷史

Cook 澄清,電腦科學中的 "online algorithm" 這個術語遠早於網際網路。他引用 1965 年的論文 [1],當時 "online" 意指:

"在 online 計算中,輸入資料一次一個符號地提供給機器……在 offline 計算中,所有輸入符號在計算開始前就寫在磁帶上。"

現在為了避免與「線上服務」混淆,現代文獻也使用 "streaming algorithm"(串流演算法)一詞。

擴展應用

  1. 高階動差:不只平均值與變異數,偏度(skewness)與峰度(kurtosis)也能 online 計算

  2. 簡單線性回歸:單變數回歸係數可以用類似方法遞增更新,Cook 有舊筆記說明

  3. 多元回歸:多變數情況更複雜,需要遞迴最小平方法(recursive least squares, RLS)。Cook 引用兩篇論文 [2][3] 但未深入

與函數式編程的連結

Online 演算法的概念與函數式編程中的 fold(摺疊)操作密切相關。Cook 列出相關文章:

參考文獻

[1] F. C. Hennie, "One-Tape, Off-Line Turing Machine Computations," Information and Control 8, 553-578 (1965)

[2] Arthur Albert & Robert W. Sittler, "A Method for Computing Least Squares Estimators that Keep Up with the Data," SIAM Journal on Control, 1965

[3] Petre Stoica & Per Ashgren, "Exact initialization of the recursive least-squares algorithm," Int. J. Adapt. Control Signal Process., 2002

你可以帶走的重點

  1. 理論正確 ≠ 數值穩定:基於平方和的變異數公式在浮點運算中可能返回負數,Welford 演算法才是工程實務標準。

  2. One-pass 不只省記憶體,也避免多次 I/O:當資料在磁碟或網路上時,減少掃描次數可大幅降低成本。

  3. Online 演算法是函數式 fold 的特例:許多遞增更新的統計量都可以用 fold 抽象化,這是函數式編程與數值計算的美妙交會點。

  4. 多元回歸需要矩陣遞迴更新:不像單變數那麼直觀,但 RLS 演算法已有成熟理論與實作(Kalman filter 的近親)。

  5. 歷史術語會演化:"Online" 在 1965 年指的是即時輸入,現在可能被誤解為雲端服務,所以現代文獻改用 "streaming"。

適合誰閱讀

  • 資料工程師與串流處理系統開發者
  • 需要處理大規模即時統計的後端工程師
  • 學習數值穩定性與浮點誤差的計算機科學學生
  • 函數式編程愛好者(想看 fold 的實際應用)
  • 統計軟體庫開發者(需要實作標準差、回歸等基礎功能)
  • 對統計計算與演算法有興趣的讀者

由 Wo9Fei 製作