截止目前,已經知道了常用的機器學習算法是怎么回事兒、學習的步驟是怎么進行的。但在機器學習的應用背景是多種多樣的,做實際工程必須學會如何根據具體的問題評估一個學習模型的好壞,如何合理地選擇模型、提取特征,如何進行參數調優。這些也是我以前做模式識別時欠缺的環節,所以在遇到識別率很低的情況時,往往很困惑,不知道該如何改進:到底是應該改進模型改變特征、還是應該增加訓練樣本數量,到底是應該優化迭代算法,還是應該改變目標函數。通過學習Learning Theory可以得到一些指導性的結論。
首先,是bias-variance trade off問題。假設訓練模型集合H中有k個備選模型,k表示了模型的復雜度,訓練集中有m個樣本,則式子 Test Error <= Training Error + 2*(log(2k/delta)*1/2m)^0.5 在概率1-delta成立。Training Error是所謂的bias,表征了訓練樣本跟模型的吻合程度,bias越大,即訓練誤差越大,訓練樣本跟模型的吻合程度越低,即出現“欠學習“的情況;2*(log(2k/delta)*1/2m)^0.5 是variance,k越大(即模型的復雜度越大)m越小(即訓練樣本數量越小)variance越大,模型的推廣能力越差,即出現“過學習“的情況。這個結論還有另外一個推論:給定delta和gamma,如果Test Error <= Training Error + 2*gamma 在概率1-delta下成立,則訓練樣本數量m必須滿足:m>=O(1/gamma*log(k/delta))。這個推論表明:為了保證Test Error不至於過大,訓練樣本的數量m必須同模型復雜度log(k)成正比。實際的模型復雜度一般不用k表示,而是假設模型有d個參數,則每個樣本點的維數為d,每個參數為double型,那么k=2^(64d),上面的條件變為:m>=O(d/gamma*log(1/delta)),即訓練樣本的數量m同模型參數個數d成正比。上面的結論是針對有限維空間的情況,對於無限維空間,d用H的VC維來代替,可以得到類似的結論。一般來講,VC維與模型的參數個數d成正比,但在一些特殊情況下,VC維不一定與樣本維數有關系,比如支持向量機。bias-variance trade off的過程實際上就是模型選擇和特征選擇的過程,對於模型選擇,最實用的辦法就是進行交叉驗證,得到Test Error最小的模型;對於特征選擇,可采用前向選擇或后向選擇的方法選擇好的特征,刪除不好的特征,或者采用濾波的方法,計算每個特征xi與y的互信息量,取互信息量較大的那個特征。
bias-variance trade off的目的是尋找訓練誤差和推廣能力的平衡,為了達到這個平衡也可以采用加入Regularation的辦法。用統計推斷的觀點看待機器學習問題:不加Regularation對應頻率學派的方法,即將參數theta看成一個未知的確定性變量,學習的過程就是求y和x的最大似然對應的theta,加Regularation對應貝葉斯學派的方法,即將參數theta看成一個隨機變量,學習的過程就是已知theta的先驗概率,求theta的最大后驗概率。加入Regularation后,目標函數中加入了lamda*||theta||^2的正則項。對一個回歸問題,加入正則項后,擬合的結果會更加平滑,有效地減少了”過擬合“。
學習了這么多Learning Theory,我們回到筆記開頭提出的問題:怎樣優化學習算法。首先判別是high bias問題還是high variance問題,判斷的方法有兩個:一、test error大則是high variance問題、 training error大則是high bias問題;二、增加訓練樣本數量,看兩類error的變化趨勢,test error變小,則是high variance問題。增加訓練樣本數量,減少特征數量可以解決high variance問題,增加特征數量可以解決high bias問題。