Regression

程度★ 難度★★

Regression

「迴歸」就是找一個函數,盡量符合手邊的一堆數據。此函數稱作「迴歸函數」。

這裡談的是用函數符合數據們,主角是函數,所以會把數據對應到函數的格式。

也許讀者很好奇,為什麼主角是函數呢?私以為函數有著優美的性質,函數也是眾人從小到大接觸、非常熟悉的數學元件,因此大家第一個直覺就是使用函數。另一方面,使用函數,就能多少發現一些輸入、輸出之間的關係,例如成正比、成反比等等。

也許讀者很好奇,能不能用隨意曲線、隨意幾何圖形符合數據們呢?也許是可以的。我想這是個新學問,該由讀者們來開創。在圖形辨識領域,已經存在一些方法,有志者不妨先從這裡下手。

Error

強硬地用函數符合數據們,就會有「誤差」。

單一數據的誤差,有許多種衡量方式,一般是用數據與函數值的平方差(平方誤差),其他還有數據與函數值的差的絕對值(絕對值誤差)、數據與函數曲線的最短距離等等。

人腦考慮的「最符合」,放到了電腦就被設定成「所有數據的誤差總和最小」。把所有數據的誤差總和寫成一個函數,迴歸問題就變成了最佳化問題!

例如用函數 f(x) = y = ax2 + bx + c

符合數據 (2,3) ... (7,8)
用代數符號標記成 (x1,y1) ... (xN,yN)

每個數據的平方誤差分別是
[(a*22 + b*2 + c) - 3]2 ... [(a*72 + b*7 + c) - 8]2
用代數符號標記成
[f(x1) - y1]2 ... [f(xN) - yN]2
[(ax12 + bx1 + c) - y1]2 ... [(axN2 + bxN + c) - yN]2

所有數據的誤差總和是
 [(a*22 + b*2 + c) - 3]2 + ... + [(a*72 + b*7 + c) - 8]2
用代數符號標記成 
e(a,b,c) = [(ax12 + bx1 + c) - y1]2 + ... + [(axN2 + bxN + c) - yN]2

目標是令e(a,b,c)越小越好。
選定一個最佳化演算法,
求出e(a,b,c)的最小值,求出此時abc的實際數值,
就得到迴歸函數f(x)。

Underfitting / Overfitting

用單純的函數去符合複雜的數據們,顯然符合的不太完美。

用複雜的函數去符合單純的數據們,顯然事情被搞複雜了。

如果我們不清楚數據的性質,也就無法抉擇函數了。那麼,該如何了解數據的性質呢?這屬於統計學的範疇,就此打住。

下面討論一些簡易的迴歸方式,尚不需要用到最佳化演算法。

UVa 10691

Linear Regression

程度★ 難度★★★

演算法

線性代數課程有教,可以表示成矩陣乘法,此處就不贅述了。

solve Ax = b

       T    -1  T
x = ( A  A )   A  b

     -1  T
x = R   Q  b

Timus 1668

Linear Prediction

程度★★ 難度★★

Linear Prediction

一串數列,推定每一個數值,皆是用前面緊鄰的N個數值計算而得──因此就用遞迴函數符合此串數列。使用線性的遞迴函數時,此函數稱作「線性預測函數」,此行為稱作「線性預測」。

訊號學領域則把此行為稱作Linear Predictive Coding。即是把一串長長的數列,壓縮成一個遞迴函數,只需儲存N個係數;套用函數就可預測即將出現的數字。

f(n) = cN * a[n-N] + ... + c2 * a[n-2] + c1 * a[n-1]

a[n]:數列,可以非常長
f(n):線性預測函數
c1...cN:線性預測係數

演算法

想讓平方誤差總和最小,等價於解Yule-Walker Equations。矩陣剛好是Toeplitz Matrix,解聯立方程式僅需時O(N^2)。

[ AC(0)   AC(1)   ... AC(N-1) ] [ c1   ] = [ AC(1)   ]
[ AC(1)   AC(0)   ... AC(N-2) ] [ c2   ] = [ AC(2)   ]
[    .       .           .    ] [  .   ] = [    .    ]
[    .       .           .    ] [  .   ] = [    .    ]
[ AC(N-2) AC(N-1) ... AC(1)   ] [ cN-1 ] = [ AC(N-1) ]
[ AC(N-1) AC(N-2) ... AC(0)   ] [ cN   ] = [ AC(N)   ]

AC:自相關函數(autocorrection)

Parameter Estimation(Under Construction!)

程度★★ 難度★★

Parameter Estimation

「參數估計」是替一個機率分布函數,找到恰當的平均值、變異數,盡量符合手邊的一堆數據。

「參數估計」也是迴歸,主角是一種特定的機率分布函數,但是不知道確切的平均值、變異數。例如常態分布、二項式分布。

使用函數進行迴歸,所謂最符合就是誤差最小,例如讓平方誤差最小。使用機率分布函數進行迴歸,所謂最符合,除了誤差最小以外,尚有其他方式,例如最常用的就是ML,再來是MAP。

一、已知一堆數據X = {x1, ..., xN}。
  已知特定的機率分布函數f(x, θ, σ)。
  不知此機率分布函數的平均值θ、變異數σ。

二、統計學者習慣將這件事寫成條件機率。
  p( θ, σ | x1, ..., xN, f )

三、所謂最符合,就是機率越大越好。
  max p( θ, σ | x1, ..., xN, f )

四、找到此時平均值θ、變異數σ是多少。
  argmax p( θ, σ | x1, ..., xN, f )
   θ, σ

五、雖然我們知道一定存在p函數,
  但是我們不知道p函數實際上長什麼樣。
  上式根本無法計算。只好改用ML或者MAP。
一、Maximum Likelihood Estimation是計算
  argmax f(X, θ)
    θ

二、推定數據之間互相獨立、不互相影響,就可以套用乘法定理。
  argmax f(X, θ)
    θ
 = argmax [ f(x1, θ) * ... * f(xN, θ) ]
    θ

二、取 log 最大值不會改變。取 log 將連乘化作連加。
  argmax log f(X, θ)
    θ
 = argmax log [ f(x1, θ) * ... * f(xN, θ) ]
    θ
 = argmax     [ log f(x1, θ) + ... + log f(xN, θ) ]
    θ

三、對於常見的分布,例如常態分布、二項式分布,
  可以拿log f(X, θ)進行微分,求得最大值。
Maximum Likelihood Estimation, ML:

   arg max log p(X|θ)
    θ

Maximum a Posteriori Estimation, MAP:

   arg max log p(X,θ) = arg max [log p(X|θ) + log p(θ)]
    θ                    θ

Bias

演算法(Expectation-Maximization Algorithm)

專為ML與MAP所設計的最佳化演算法。

http://www.seanborman.com/publications/EM_algorithm.pdf

http://www.cs.cmu.edu/~awm/10701/assignments/EM.pdf

一、凹(凸)函數定義可以寫成內插。
  內插之後函數值必然上升(下降)。
  註:凹函數的外觀是隨時向上凸,定義不太直覺。
二、機率函數的期望值就是一種內插!
  如果機率函數是凹(凸)函數,
  想求極值,那就好辦,不斷求期望值即可!
三、改變ML函數、移動log位置,變成一個凹函數。
  證明此凹函數小於等於原式,是ML函數的下界。
四、凹函數往上爬:求期望值,函數值嚴格上升。
  ML函數的函數值必然同時跟著上升。
五、根據現在位置,
  不斷求一個新的凹函數、不斷往上爬。
  最後就會得到區域極值,類似Hill Climbing演算法。