天天看點

DW李宏毅機器學習筆記--Task03(上)-誤差從哪來前言Error的來源估測為什麼會有很多的模型?怎麼判斷?模型選擇總結

文章目錄

  • 前言
  • Error的來源
  • 估測
    • 估測變量x的偏差和方差
    • 評估x的偏差與方差
      • 求x的偏差
      • 求x的方差
  • 為什麼會有很多的模型?
    • 考慮不同模型的方差
    • 考慮不同模型的偏差
    • 偏差v.s.方差
  • 怎麼判斷?
    • 分析
    • 偏差大-->欠拟合
    • 方差大-->過拟合
  • 模型選擇
    • 交叉驗證
    • N-折交叉驗證
  • 總結

前言

這是我在Datawhale組隊學習李宏毅機器學習的記錄,既作為我學習過程中的一些記錄,也供同好們一起交流研究,此後還會繼續更新相關内容的部落格。

Error的來源

DW李宏毅機器學習筆記--Task03(上)-誤差從哪來前言Error的來源估測為什麼會有很多的模型?怎麼判斷?模型選擇總結

從上節課測試集資料來看, A v e r a g e   E r r o r Average\ Error Average Error 随着模型複雜增加呈指數上升趨勢。更複雜的模型并不能給測試集帶來更好的效果,而這些 E r r o r Error Error 的主要有兩個來源,分别是 b i a s bias bias (偏差)和 v a r i a n c e variance variance(方差)。

估測

還是以神奇寶貝的CP值的預測為例子。

DW李宏毅機器學習筆記--Task03(上)-誤差從哪來前言Error的來源估測為什麼會有很多的模型?怎麼判斷?模型選擇總結

假設真實的模型為 f ^ \hat f f^​ , 如果我們知道 f ^ \hat f f^​ 模型,那是最好不過了,但是 f ^ \hat f f^​ 隻有 Niamtic 公司才知道。

是以我們隻能通過收集 Pokemon精靈的資料,然後通過訓練得到我們的理想模型 f ∗ f^* f∗, f ∗ f^* f∗ 其實是 f ^ \hat f f^​ 的一個預估。

DW李宏毅機器學習筆記--Task03(上)-誤差從哪來前言Error的來源估測為什麼會有很多的模型?怎麼判斷?模型選擇總結

這個過程就像打靶, f ^ \hat f f^​ 就是我們的靶心, f ∗ f^* f∗ 就是我們投擲的結果。如上圖所示, f ^ \hat f f^​ 與 f ∗ f^* f∗ 之間藍色部分的差距就是偏差和方差導緻的。

估測變量x的偏差和方差

我們先了解一下偏差和方差是怎樣計算的呢?

評估x的偏差與方差

  • 假設 x x x 的平均值是 μ \mu μ,方差為 σ 2 \sigma^2 σ2

求x的偏差

首先說明一下Bias出現的原因:Bias主要指在模型簡單的時候帶來的誤差,這是因為你的假設空間中可能根本不包含實際模型,是以不論如何去訓練模型還是會存在誤差。而随着函數次數越來越大,或非線性越來越顯著,這時可以拟合的函數就越來越多,就更可能拟合到 f ^ \hat f f^​了,是以Bias就減小了。

讓我們來類比一下,如果從實體實驗的角度來看的話,Bias就是一個系統誤差(systematic error),來自于儀器本身(也就是模型本身)。這時不論你如何去調整,你最多隻讓結果的精度上升,卻無法保證準确性。

然後我們來談談評估平均值要怎麼做呢?

  1. 首先拿到 N N N 個樣本點: x 1 , x 2 , ⋅ ⋅ ⋅ , x N {x^1,x^2,···,x^N} x1,x2,⋅⋅⋅,xN
  2. 計算平均值 m m m, 得到 m = 1 N ∑ n x n ≠ μ m=\frac{1}{N}\sum_n x^n \neq \mu m=N1​∑n​xn​=μ
    DW李宏毅機器學習筆記--Task03(上)-誤差從哪來前言Error的來源估測為什麼會有很多的模型?怎麼判斷?模型選擇總結
    但是如果計算很多組的 m m m ,然後求 m m m 的期望:

E [ m ] = E [ 1 N ∑ x n ] = 1 N ∑ n E [ x n ] = μ E[m]=E[\frac{1}{N}\sum x^n]=\frac{1}{N}\sum_nE[x^n]=\mu E[m]=E[N1​∑xn]=N1​n∑​E[xn]=μ

這個估計就是無偏估計(unbiased)。

而我們在之前求得的 m m m與 E [ m ] E[m] E[m]之差反映的是Error中的偏差。舉個例子,當你去打靶時,由于種種原因你瞄準的目标并不在靶心,而是與靶心之間存在一些距離而這個偏移距離你在打靶過程中的偏差。

求x的方差

然後就是如何求 m m m 分布對于 μ \mu μ 的離散程度(方差): V a r [ m ] = σ 2 N Var[m]=\frac{\sigma^2}{N} Var[m]=Nσ2​

這個取決于 N N N,下圖看出 N N N 越小越離散:

DW李宏毅機器學習筆記--Task03(上)-誤差從哪來前言Error的來源估測為什麼會有很多的模型?怎麼判斷?模型選擇總結
DW李宏毅機器學習筆記--Task03(上)-誤差從哪來前言Error的來源估測為什麼會有很多的模型?怎麼判斷?模型選擇總結

再解釋一下上圖中的N-1/N。

因為在數學統計中發現在大多數情況下,某一個點的方差是比期望方差偏小的,如上圖中大多數的點是集中在紅點下方的,而随着N增大,N-1/N趨于1,這些離散點的中心就越發靠近紅點。

綜上所述:偏差和方差所造成的Error效果如下圖:

DW李宏毅機器學習筆記--Task03(上)-誤差從哪來前言Error的來源估測為什麼會有很多的模型?怎麼判斷?模型選擇總結

為什麼會有很多的模型?

讨論系列02中的案例:這裡假設是在平行宇宙中,抓了不同的神奇寶貝。

DW李宏毅機器學習筆記--Task03(上)-誤差從哪來前言Error的來源估測為什麼會有很多的模型?怎麼判斷?模型選擇總結

用同一個model,在不同的訓練集中找到的 f ∗ f^∗ f∗ 就是不一樣的。

DW李宏毅機器學習筆記--Task03(上)-誤差從哪來前言Error的來源估測為什麼會有很多的模型?怎麼判斷?模型選擇總結

這就像在靶心上射擊,進行了很多組(一組多次)。現在需要知道它的散布是怎樣的,将100個宇宙中的model畫出來。

DW李宏毅機器學習筆記--Task03(上)-誤差從哪來前言Error的來源估測為什麼會有很多的模型?怎麼判斷?模型選擇總結

不同的資料集之間什麼都有可能發生。

考慮不同模型的方差

一次模型的方差就比較小的,也就是是比較集中,離散程度較小。而5次模型的方差就比較大,同理散布比較廣,離散程度較大。

是以用比較簡單的模型,方差是比較小的(就像射擊的時候每次的時候,每次射擊的設定都集中在一個比較小的區域内)。如果用了複雜的模型,方差就很大,散布比較開。

這也是因為簡單的模型受到不同訓練集的影響是比較小的。

考慮不同模型的偏差

DW李宏毅機器學習筆記--Task03(上)-誤差從哪來前言Error的來源估測為什麼會有很多的模型?怎麼判斷?模型選擇總結

這裡沒辦法知道真正的 f ^ \hat{f} f^​,是以假設圖中的那條黑色曲線為真正的 f ^ \hat{f} f^​

結果可視化,一次平均的 f ˉ \bar{f} fˉ​ 沒有5次的好,雖然5次的整體結果離散程度很高。

一次模型的偏差比較大,而複雜的5次模型,偏差就比較小。

直覺的解釋:簡單的模型函數集的space比較小,是以可能space裡面就沒有包含靶心,肯定射不中。而複雜的模型函數集的space比較大,可能就包含的靶心,隻是沒有辦法找到确切的靶心在哪,但足夠多的,就可能得到真正的 f ̅。

偏差v.s.方差

DW李宏毅機器學習筆記--Task03(上)-誤差從哪來前言Error的來源估測為什麼會有很多的模型?怎麼判斷?模型選擇總結

将系列02中的誤差拆分為偏差和方差。簡單模型(左邊)是偏差比較大造成的誤差,這種情況叫做欠拟合,而複雜模型(右邊)是方差過大造成的誤差,這種情況叫做過拟合。

怎麼判斷?

分析

DW李宏毅機器學習筆記--Task03(上)-誤差從哪來前言Error的來源估測為什麼會有很多的模型?怎麼判斷?模型選擇總結

如果模型沒有很好的訓練訓練集,就是偏差過大,也就是欠拟合 如果模型很好的訓練訓練集,即再訓練集上得到很小的錯誤,但在測試集上得到大的錯誤,這意味着模型可能是方差比較大,就是過拟合。 對于欠拟合和過拟合,是用不同的方式來處理的。

偏差大–>欠拟合

此時應該重新設計模型。因為之前的函數集裡面可能根本沒有包含 f ∗ f^* f∗。可以:

将更多的函數加進去,比如考慮高度重量,或者HP值等等。 或者考慮更多次幂、更複雜的模型。 如果此時強行再收集更多的data去訓練,這是沒有什麼幫助的,因為設計的函數集本身就不好,再找更多的訓練集也不會更好。

方差大–>過拟合

簡單粗暴的方法:更多的資料

DW李宏毅機器學習筆記--Task03(上)-誤差從哪來前言Error的來源估測為什麼會有很多的模型?怎麼判斷?模型選擇總結

但是很多時候不一定能做到收集更多的data。可以根據對問題的了解來對資料集做補充調整,也就是做一些合乎常理的資料。比如識别手寫數字的時候,偏轉角度的資料集不夠,那就将正常的資料集左轉15度,右轉15度,類似這樣的處理。

模型選擇

現在在偏差和方差之間就需要一個權衡 想選擇的模型,可以平衡偏差和方差産生的錯誤,使得總錯誤最小 但是下面的做法最好不要去效仿:

DW李宏毅機器學習筆記--Task03(上)-誤差從哪來前言Error的來源估測為什麼會有很多的模型?怎麼判斷?模型選擇總結

用訓練集訓練不同的模型,然後在測試集上比較錯誤,模型3的錯誤比較小,就認為模型3好。但實際上這隻是你手上的測試集,真正完整的測試集并沒有。比如在已有的測試集上錯誤是0.5,但有條件收集到更多的測試集後通常得到的錯誤都是大于0.5的。

交叉驗證

DW李宏毅機器學習筆記--Task03(上)-誤差從哪來前言Error的來源估測為什麼會有很多的模型?怎麼判斷?模型選擇總結

圖中public的測試集是已有的,private是沒有的,不知道的。交叉驗證 就是将訓練集再分為兩部分,一部分作為訓練集,一部分作為驗證集。用訓練集訓練模型,然後再驗證集上比較,确實出最好的模型之後(比如模型3),再用全部的訓練集訓練模型3,然後再用public的測試集進行測試,此時一般得到的錯誤都是大一些的。不過此時會比較想再回去調一下參數,調整模型,讓在public的測試集上更好,但不太推薦這樣。

上述方法可能會擔心将訓練集拆分的時候分的效果比較差怎麼辦,可以用下面的方法。

N-折交叉驗證

将訓練集分成N份,比如分成3份。

DW李宏毅機器學習筆記--Task03(上)-誤差從哪來前言Error的來源估測為什麼會有很多的模型?怎麼判斷?模型選擇總結

比如在三份中訓練結果Average錯誤是模型1最好,再用全部訓練集訓練模型1。

總而言之,就是通過不同的方法隻使用training data對模型訓練,而不能再根據public test data再對參數進行調整。除非Err太離譜,可以直接換一個Model。

總結

這一節聚焦于訓練模型時出現的Error,對其背後的原理進行解析,并教授降低Error的方法。

繼續閱讀