模型性能的度量
目標:已知樣本\((x_1, y_1),(x_2,y_2),...,(x_n, y_n)\),要求擬合出一個模型(函數)\(\hat{f}\),其預測值與樣本實際值y的誤差最小。
考慮到樣本數據其實是采樣,y並不是真實值本身,假設真實模型(函數)是f,則采樣值\(y=f(x)+\epsilon\),其中\(\epsilon\) 代表噪音,其均值為0, 方差為\(\sigma^2\)。
噪音(noise)
實際應用中的數據基本都是有干擾的,例如信用卡發放問題:
噪聲產生的原因:
- 標記錯誤:應該發卡的客戶標記成不卡,或者兩個數據相同的客戶一個發卡一個不發卡
- 輸入錯誤:用戶的數據本身就有錯誤,例如年收入少寫一個0,性別寫反了等
擬合函數\(\hat{f}\)的主要目的是希望它能對新的樣本進行預測,所以,擬合出函數\(\hat{f}\)后,需要在測試集上檢測其預測值與實際值y之間的誤差。用平方誤差函數(mean square error)來度量其擬合的好壞程度,即\(((y-\hat{f}(x))^2\)
理解誤差期望值
期望值的含義是指在同樣的條件下重復多次隨機試驗,得到的所有可能狀態的平均結果。對於機器學習,則是我們選擇一種算法,以及設置一個固定的訓練集大小(即所謂的特定的模型)。每次訓練時從樣本空間中選擇一批樣本作為訓練集,但每次都隨機抽取不同的樣本,這樣重復進行多次訓練。每次訓練會得到一個具體的模型,每個具體模型對同一個未見過的樣本進行預測可以得到預測值。不斷重復訓練和預測,就能得到一系列預測值,根據樣本和這些預測值計算出方差和偏差,可以幫助我們考察該特定模型的預測誤差的期望值,衡量該特定模型的性能。通過對比多個特定模型的誤差的期望值,可以幫助我們選擇合適的模型。
舉例說明如下:
假設真實模型為\(f(x)=x+2sin(1.5x)\),函數圖像如下圖曲線所示。樣本值y就在真實值得基礎上疊加一個隨機噪音N(0,0.2)
import numpy as np
import math
from matplotlib import pyplot as plt
import random
x = np.arange(1, 10, 0.1)
y = [i+2*math.sin(1.5*i) for i in x]
index = random.sample(range(len(x)), 20)
x_samples = [x[i] for i in index]
y_samples = [y[i] + np.random.normal(0, 0.2, 1) for i in index]
plt.plot(x, y)
plt.scatter(x_samples, y_samples, marker='o', color='r')
plt.show()
假設我們用線性函數來構建模型,訓練樣本為y(\(y=f(x)+\epsilon\))。經過多次重復,可以得到一系列具體的線性模型,如下圖中那一組聚集在一起的黑色直線所示,其中間有一條紅色線是這一組線性函數的平均(期望值)。這就是特定模型(線性函數)在同樣條件下(每次取固定數個樣本點)重復多次(得到50個線性函數)。
根據生成的50個具體的線性函數來考察該線性模型的預測性能,選取一個樣本點,比如選擇 x=5 時(下圖中紅色豎線位置),真實值f(x)=6.878, 樣本y約等於6.876,y與f(x)的偏差體現在圖片右下方的噪音部分。紅色線性函數在x=5位置的值是這50個線性函數在該位置的期望值,黑色直線在x=5位置的一系列值得分布則反映了它們的方差(varaince)。50個預測的期望值與真實值f(x)之間的距離體現了偏差(bias)。
誤差期望值的分解及公式推導
誤差的期望值可以分解為三個部分:樣本噪音、模型預測值的方差、預測值相對真實值的偏差
即誤差的平方的期望 = 噪音的方差 + 模型預測值的方差 + 預測值相對真實值得偏差的平方
推導如下
真實模型(函數):\(f=f(x)\)
擬合模型(函數):\(\hat{f}=\hat{f}(x)\)
方差的計算公式:\(Var[X] = E[X^2] - (E[X])^2\)
測試樣本值y的期望值: \(E(y)=E(f+\epsilon)=E(f)+E(\epsilon)=E(f)=f\)
測試樣本值y的方差: \(Var(y)= E[(y-E(y)^2]=E[(y-f)^2]=E[(f+\epsilon-f)^2]=E(\epsilon)^2=Var(\epsilon)+(E(\epsilon))^2=\sigma^2\)
誤差的平方的期望公式推導如下:
使用特定模型對一個測試樣本進行預測,就像打靶一樣。
靶心(紅點)是測試樣本的真實值,測試樣本的y(橙色點)是真實值加上噪音,特定模型重復多次訓練會得到多個具體的模型,每一個具體模型對測試樣本進行一次預測,就在靶上打出一個預測值(圖上藍色的點)。所有預測值的平均就是預測值的期望(較大的淺藍色點),淺藍色的圓圈表示預測值的離散程度,即預測值的方差。
所以,特定模型的預測值 與 真實值 的誤差的 期望值,分解為上面公式中的三個部分,對應到圖上的三條橙色線段:預測值的偏差、預測值的方差、樣本噪音。
總之,在機器學習中考察偏差和方差,最重要的是要在不同數據集上訓練出一組特定模型,對一個測試樣本進行預測,考察這一組預測值的方差和偏差。
偏差-方差的選擇
理想中,我們希望得到一個偏差和方差都很小的模型,但實際上往往很困難。
相對較好的模型的順序:方差小,偏差小>方差小,偏差大>方差大,偏差小>方差大,偏差大。
方差小,偏差大之所以在實際中排位比較靠前,是因為它比較穩定。很多時候,實際中無法獲得非常全面的數據集,那么,如果一個模型在可獲得的樣本上有較小的方差,說明它對不同數據集的敏感度不高,可以期望它對新數據集的預測效果比較穩定。