【Python機器學習】105:機器學習中誤差的來源與正規化
Errors in Machine Learning and Regularization
還記得之前在評估模型的好壞時,MSE是怎麼算的嗎?是要用真實情況(test)的結果去和預測比對,但是我們一直以來都是用validation data,畢竟真正的testing data要等事情已經發生完了,才能事後檢查模型的好壞。
除了MSE,大家還記得機器學習的最終任務嗎?
機器學習的任務:於可及範圍的 H中挑選一個與 f最相似的 h
但是 h 與 f 終究是不同的函數,而我們關心的是 𝑦̂ 與 y 間的差異,差異小的h稱為泛化(Generalization)的能力好
h的誤差可能源於 Training error 與 Test error:
Training error 常被稱為誤差( error or bias)
Test error 亦可被稱為 Generalization error, 亦被稱為泛化誤差,被簡稱為變異( variance)
如果太過度注重 training data,擴增回歸模型的可及範圍H常伴隨 error 降低,但variance提高。因此機器學習的另一非常重要的任務就是要找平衡。我們試著在回歸模型中紀錄不同高次項參數(從1-10次方)對誤差與變異的影響:
回歸模型 fit 完10次了之後,Training error這個list裡會有10筆資料,是X_train丟到模型h裡,預測出來的值(y_pred)和y_train的差距。可以看到隨著次方越來越高,Training error是越來越小的。
接著看Test error:在前幾次分別加入二次項、三次項,error是有往下降一點,但是隨著加入的次方提高,越到後面error開始飆高。這說明如果模型太複雜,即使 training data 丟到模型裡表現很完美,但是一旦丟testing data,模型的預測結果會非常不準。
h在training data的表現和在validation data的表現各別畫出來:
如上圖,隨著次方提高 Training error確實越來越低,但是 Testing error 卻不斷上升。機器學習實務上在找最佳模型的時候,要找兩個error都是低點的時候,單以這個case來說,似乎加入3次項為最好的模型。一旦再加入更高次項到模型裡,即使 Training error 變得非常低,但是 Testing error 已經不知道飆到哪裡去了,這也是所謂的過度配飾(Overfitting),亦即此模型泛化的能力非常的差。
通常會用兩個面向評斷h是不是在所有H中的一個好選擇:
Training error (誤差)是否夠小
Training error 與 Generalization error之間的差異(變異)是否夠小
這兩個面向分別對應到機器學習的挑戰:
Underfitting(配適不足):Training error與Generalization error 均大
Overfitting(過度配適):Training error 小,但是 Generalization error大
正規化(Regularization)
正規化指的是在目標函式(成本函式)增加資訊以解決「配適」問題的技巧。
如果我們要降低這些多項式模型的複雜程度,最常見的方式就是限制w,讓W越小越好,甚至變成0。至於如何去限制w,如何讓h在加入更多高次項、特徵時盡可能保持平滑的方法,就是正規化(Regularization)
在原本的MSE公式後面加上一個 λ 乘上w向量的平方。λ又叫做懲罰係數,如果我的模型變的太複雜,w太大,整個MSE就會變得非常大,因此懲罰係數就是來抑制w的大小。
誤差與變異的平衡是由使用者來拿捏!!!
具備正規化的Normal equations:
給定 X_train, y_train 與 λ=0 利用 Normal equarions with Regularization 求w:
由於 X_train 的shape是m*n,X_train的轉置矩陣的shape是n*m,兩者相乘後的大小為n*n,因此相加的單位矩陣的shape也要是n*n。
比對之後發現即便使用 Normal equations with Regularization 求w,在 λ=0 的情況下跟 sklearn.model.LinearRegression 得到的結果相同,意即沒有正規化。
如果連Linear Regression()都想要捨棄掉,可以改用 Scikit-Learn 中的sklearn.linear_model.Ridge:
當 𝛼=0 與原本的 Normal Equation 解相同:
𝛼 愈大表示「正規化」程度愈高,意味著對 𝑤 的抑制愈大:
𝛼=1000 時:
不同的 𝛼 與其所對應的誤差、變異:
感謝你閱讀完這篇文章,如果你覺得這些文章對你有幫助請在底下幫我拍個手(長按最多可以拍50下手)。