轉載 https://blog.csdn.net/Robin_Pi/article/details/104539998
參考 https://www.jianshu.com/p/3a07adbfa03f
現實中採用最多的方法是通過測試誤差來評價學習方法的泛化能力。理論上:泛化誤差是模型對未知數據預測的誤差,事實上,泛化誤差就是所學習到的模型的期望風險
參考 https://blog.csdn.net/sollasido/article/details/106130505
誤差(error ):實際預測輸出和樣本真實輸出之間的差異
經驗誤差:同訓練誤差,即學習器在訓練集上的誤差
泛化誤差:同測試誤差,即學習器在測試集上的誤差,泛化誤差越小,泛化能力越強
在一個項目中,我們通過設計和訓練得到了一個model,該model的泛化可能很好,也可能不盡如人意,其背後的決定因素是什麼呢?或者說我們可以從哪些方面去改進從而使下次得到的model更加令人滿意呢?
1.1 概論
-
泛化誤差/預測誤差
學習算法的預測誤差, 或者說泛化誤差(generalization error)可以分解爲三個部分: 偏差(bias), 方差(variance) 和噪聲(noise). 在估計學習算法性能的過程中, 我們主要關注偏差與方差. 因爲噪聲屬於不可約減的誤差 (irreducible error). -
偏差:描述模型輸出結果的期望與樣本真實結果的差距。
(“偏”——偏離,偏離真實的標籤。) -
方差:描述模型對於給定值的輸出穩定性。
(在統計學中,方差描述的是這個隨機變量的離散程度,也就是該隨機變量在其期望值附近的波動程度。)
就像打靶一樣,偏差描述了我們的射擊總體是否偏離了我們的目標,而方差描述了射擊準不準。
1.2 解釋工具:”偏差-方差分解“
泛化誤差 = 偏差 + 方差 + 噪聲
算法的預測誤差, 或者說泛化誤差(generalization error)可以分解爲三個部分: 偏差(bias), 方差(variance) 和噪聲(noise)。
在估計學習算法性能的過程中, 我們主要關注偏差與方差. 因爲噪聲屬於不可約減的誤差 (irreducible error)。
假設:
-
測試樣本:X
-
訓練集:D
-
標記:yd(
有可能出現噪聲使得 yd != y,即所謂的打標樣本不純) -
x 的真實標記:y
-
在訓練集 D 上訓練得到的模型 :f
-
模型 f 對 x 的預測輸出:f(x;D)
-
模型 f 對 x 的 期望預測 輸出:(x)
以迴歸任務爲例,學習算法的期望預測爲:
(再次驗證,線性迴歸的本質就是均值預測)
注:(x) 可以理解爲通過世間所有(無限)樣本訓練得來的期望模型對x的預測輸出;f(x;D)t通過數據集 D 產生的期望模型對x的預測輸出!
對算法的期望泛化誤差進行分解:
整理得:
即,泛化誤差可分解爲:偏差、方差、噪聲之和。
泛化誤差 = 偏差 + 方差 + 噪聲
如何直觀理解?
三個對象:① 我們期望通過訓練所有樣本得到的模型(期望風險模型)的結果輸出、②我們期望根據所擁有的樣本集D訓練得到的(經驗風險模型)的結果輸出、③模型實際產生輸出的結果
注:①、②之所以叫“期望”是因爲都跟現實—③有差距!
拿着最理想的期望結果①,與較爲實際的期望結果②、以及實際的結果③,分別作比較,得到的兩個差值(variance 和 bias)的和,再加上一個不可約減的噪聲誤差(noise),三者之和即爲總共的誤差和(模型泛化誤差Err(x))。
注:爲什麼①是最理想狀態?——因爲我們的數據總是匱乏的,不可能達到“無限”的狀態,所以對應的誤差叫做期望風險,根據現實的數據集D建立起來的模型和真實結果的誤差,被叫做經驗誤差。更多,可以參考關鍵點1。
噪聲:錯誤標記
噪聲爲真實標記與數據集中的實際標記間的偏差:
模型在當前任務能達到的期望泛化誤差的下屆 - 數據決定算法的上界,算法只是在逼近這個上界。
方差: 數據擾動對模型的影響
在一個訓練集 D 上模型 f 對測試樣本 x 的預測輸出爲 f(x;D), 那麼學習算法 f 對測試樣本 x 的 期望預測 爲:
使用樣本數相同的不同訓練集產生的方差爲:
偏差:考察模型本身擬合能力
預測與真實標記的誤差稱爲偏差(bias), 即:
它體現了模型的擬合能力,這其實也就是經驗風險的計算公式。
小結
- 偏差
偏差度量了學習算法的期望預測與真實結果的偏離程序, 即 刻畫了學習算法本身的擬合能力 .
- 方差
方差度量了同樣大小的訓練集的變動所導致的學習性能的變化, 即 刻畫了數據擾動所造成的影響 .
- 噪聲
噪聲表達了在當前任務上任何學習算法所能達到的期望泛化誤差的下界, 即 刻畫了學習問題本身的難度 .
偏差-方差囧境(bias-variance dilemma)
偏差-方差分解說明,泛化性能是由學習算法的能力、數據的充分性以及學習任務本身的難度共同決定的。給定一個學習任務,爲了取得好的泛化性能,則需使偏差較小,即能夠充分擬合數據,並且使方差較小,即使得數據擾動產生的影響小。
一般來說,偏差與方差是有衝突的,這稱爲”偏差-方差窘境“,下圖中,給定學習任務,假定我們能控制學習算法的訓練程度,則在不同訓練程度下,偏差-方差的取值曲線如下:
在訓練不足時,學習器的擬合能力不夠強,訓練數據的擾動不足以使學習器產生顯著變化,此時偏差主導了泛化錯誤率;
隨着訓練程度的加深,學習器的擬合能力逐漸增強,訓練數據發生的擾動漸漸能被學習器學到,方差逐漸主導了泛化錯誤率;
在訓練程度充足後,學習器的擬合能力已非常強,訓練數據發生的輕微擾動都會導致學習器發生顯著變化,若訓練數據自身的、非全局的普遍特性被學習器學到了,則將發生過擬合。
經驗誤差與泛化能力之間的矛盾
其實說白了,還是因爲真實數據無法達到無限的水平造成的過擬合問題:
如果完全依賴手裏的數據集 D ,則訓練出來的模型則會對訓練數據表現得非常好(偏差小),但是對數據集 D 之外的數據集,即新數據,表現得不好(方差大);
若限制模型對數據集 D 的依賴,添加懲罰(正則項),則模型會增加了模型對數據擾動的抵抗能力(模型穩定性),但反過來又限制了模型自身的穩定性(偏差變大)。
2. 分析:泛化誤差評估方法
通常,我們通過實驗測試來對學習器的泛化誤差進行評估並進而做出選擇。爲此,需要一個和訓練集互斥的數據集來測試學習器對新樣本的判別能力,然後我們以測試集上的”測試誤差(testing error)“作爲泛化誤差的近似。
有幾種方法得到測試集:
- 留出法(hold-out)
- 交叉驗證法(cross validation)
- 自助法(bootstrapping)
不管我們採取了什麼測試集劃分方法,在評估結束後,模型參數選定後,我們需要採用全集D進行訓練,將數據集D訓練得到的模型交付給業務方,這纔是我們最終的模型。
2.1 模型複雜程度的影響
以多項式迴歸,
- 次數
- 正則化參數
2.2 訓練程度的影響:使用學習曲線分析
無論你是要檢查你的學習算法是否正常工作或是要改進算法的表現,學習曲線 都是一個十分直觀有效的工具。學習曲線 的橫軸是樣本數,縱軸爲 訓練集 和 交叉驗證集 的 誤差。
- 合理:Jcv(θ) 因爲訓練數據增加而擬合得更好不斷下降,接近Jtrain(θ) ,且誤差 很小
- 高偏差:Jtrain(θ) 與 Jcv(θ) 已經十分接近,但是 誤差 很大
- 高方差:Jtrain(θ) 的 誤差 較小,Jcv(θ) 比較大
3. 解決辦法
[高方差] 採集更多的樣本數據
[高方差] 減少特徵數量,去除非主要的特徵
[高偏差] 引入更多的相關特徵
[高偏差] 採用多項式特徵
[高偏差] 減小正則化參數 λ
[高方差] 增加正則化參數 λ
參考