Where does the error come from?----Bias and Variance

Review

首先我們知道在不同的function set上error不同,也就是在不同的model上error是不同的,這個原因顯而易見;在同一個function set裏不同的function對data產生的error也是不同的,因爲同一個model但參數不同導致model有細微的差異,所以error自然也不相同。

那我們知道當model越複雜,error不一定是會越小的。當model過於複雜會導致overfitting,這個時候error在training data上error會很小,但在testing data上error反而會變大。
在這裏插入圖片描述
這張圖中橫軸x是model的最高次,縱軸y是testing data上的error。可以看到在x = 3處,error達到圖中的最小值,在x = 5處反而error會非常大。

?But where does the error come from

Estimator

假設,我們根據training data訓練出來了一個模型 f f^* ,真實的model其實是 f ^ \hat f f f^* 則是 f ^ \hat f 的估計值, f ^ \hat f f f^* 之間必定存在誤差。
在這裏插入圖片描述
從這個圖中可以看出 f ^ \hat f 是靶心點, f f^* 是右上角藍色的點。兩個點之間的距離就是兩個model之間的誤差。而這個誤差是由Bias和Variance共同決定的。

下圖中,藍點表示 f f^* ,靶心紅點表示 f ^ \hat f
在這裏插入圖片描述
f f^* 的平均值 f ˉ \bar f ,就是那個藍點,藍點到靶中心的距離就是bias,小藍點是每次實驗得到的估計值,小藍點越分散Variance越小,越集中越大。
在這裏插入圖片描述

Bias V.S. Variance

現在知道了error是由bias和varience共同決定的,但是二者應該影響不同的方面來產生error。
在這裏插入圖片描述
當underfitting的時候bias較大,當overfitting的時候Variance較大,兩者相互制衡共同影響error。

What to do with large bias?

當model沒有擬合training data,就會產生underfitting的現象,這個時候bias可能會過大。
當model完全擬合trianing data,但是在testing data上error較大,就會產生overfitting 的現象,這個時候很可能是因爲Varience過大了。
當bias過大,或者低擬合時,你應該爲你的model增加feature,或者重新選擇一個更加複雜的function set。用線性模型來解釋,也許應該用更高次的模型來擬合,或者增加x的緯度。
在這裏插入圖片描述
上圖中用了一條一次曲線來擬合圖上的點,而此時在training data上的擬合效果並不好,此時很有可能是underfitting,因此bias對error的影響更大。此時考慮換一個更加複雜的函數來擬合training data。
在這裏插入圖片描述
使用一個二次式去擬合顯然bias有所下降了。
在這裏插入圖片描述
又換了一個三次式擬合後bias更低了。
在這裏插入圖片描述
當換用一個5次式作爲model時,training data上的error已經很小了,但此時在testing data上的error大大增加。如下圖是在testing data上的情況。
在這裏插入圖片描述
此時model轉爲overfitting,variance對error的影響更大。

What to do with large variance?

當模型過擬合,variance對error的影響占主導地位。很容易理解爲什麼過擬合後model在testing data上的error變大,因爲在training data上,劃一條線穿過所有的點,此時在training data上完全擬合,而這樣一條線是不可能完全擬合於testing data的,除非training data中的數據涵蓋了全部的數據點,這顯然時不可能的。
當model的variance過大時,你需要更多的data,去用於擬合function set,從而更好的排除一些不相關的model。
在這裏插入圖片描述
當data數由10變爲100的時候,從圖中可以明顯看到減少了非常多的function。
第二種方法是正則化,正則化可以使function變得更加平滑等作用,具體作用和方法會在後面的博客中提到。基本形式就是在function後面加上一個懲罰項,像是「配重」一樣,讓function更加平均。這種方法雖然可以減小variance,但是由於是對model進行了改變,所以勢必對bias也會產生一定影響。
在這裏插入圖片描述

但是如何知道model分別在training data與testing data上的error呢?

testing data在訓練模型的時候應該時不知道的,僅僅能通過training data來對模型進行訓練。因此testing data是不能出現在training data裏面的。我們將training data劃分出一部分作爲validation data,來模擬model在testing data上的情況。
但是這樣的做法會產生比較大的誤差,很可能training data是全部數據集中的很小一部分,而validation set又是training data上很小一部分,這樣的測試結果太具有偶然性了。

N-fold Cross Validation

因此引出n次交叉驗證,這個方法的做法是將training set 分爲n份,每次取其中一份作爲validation set剩下 n 1 n-1 份作爲training set,得出一個error,這樣的操作重複n次,將得到error進行平均,作爲這個模型的error。
在這裏插入圖片描述