哲哲的ML筆記(十九:如何評估假設函數)

1個場景

假如你在用線性迴歸訓練一個預測房價的模型,使用如下的代價函數
J=\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{i})-y^{i})+\lambda \sum_{j=1}^n\theta_j^2
但是發現在新數據集上進行TEST環節有了很大的誤差,怎麼辦?

根據之前的學習,可以想到的方法有:

  1. 訓練更多的樣本
  2. 嘗試更少的特徵,目前使用x_1, x_2,…x_{100}, 從中挑選一小部分
  3. 其它維度獲得特徵
  4. 增加多項式特徵,如x^2_1, x_1x_2…
  5. 增加/減少\lambda

我們不應該隨機選擇上面的某種方法來改進我們的算法,而是運用一些機器學習診斷法來幫助我們知道上面哪些方法對我們的算法是有效的
機器學習診斷法的意思是:這是一種測試法,你通過執行這種測試,能夠深入瞭解某種算法到底是否有用。這通常也能夠告訴你,要想改進一種算法的效果,什麼樣的嘗試,纔是有意義的

評估h_\theta(x)

得到一個非常小的訓練誤差一定是一件好事,但我們已經知道,僅僅是因爲這個假設具有很小的訓練誤差,並不能說明它就一定是一個好的假設函數,比如在下面這個例子中,是典型的過擬合現象。


如何判斷一個假設函數是過擬合的呢?對於這個簡單的例子,我們可以對假設函數進行畫圖,然後觀察圖形趨勢,但對於特徵變量不止一個的情況,還有像有很多特徵變量的問題,想要通過畫出假設函數來進行觀察,就會變得很難甚至是不可能實現。
因此,我們需要另一種方法來評估我們的假設函數過擬合檢驗。 爲了檢驗算法是否過擬合,我們將數據分成訓練集和測試集,通常用70%的數據作爲訓練集,用剩下30%的數據作爲測試集。很重要的一點是訓練集和測試集均要含有各種類型的數據,通常我們要對數據進行“洗牌”,然後再分成訓練集和測試集。

  1. 對於線性迴歸
    模型在訓練數據中學習參數\theta,最小化訓練損失函數J
    並計算測試集中的誤差函數J_{test}(\theta)=\frac{1}{2m_{test}}\sum_{i=1}^{m_{test}}[h_\theta(x^i_{test}-y^i_{test})]^2
  2. 對於邏輯迴歸
    模型在訓練數據中學習參數\theta,最小化訓練損失函數J

    誤分類比率,對於測試集
    error(h_\theta(x),y)=\left\{ \begin{array}{rcl} 1 & & h_\theta(x)\geqq0.5, y=0; h_\theta(x)<0.5, y=1 \\ 0 & & Otherwise \end{array} \right.
    測試集上的平均error, Test_{error} = \frac{1}{m_{test}}\sum_{i=1}^{m_{test}}error(h_\theta(x^i_{test}), y^i_{test})

模型選擇與訓練/交叉驗證/測試集

越高次數的多項式模型越能夠適應我們的訓練數據集,但是適應訓練數據集並不代表着能推廣至一般情況,我們應該選擇一個更能適應一般情況的模型。我們需要使用交叉驗證集來幫助選擇模型。 即:使用60%的數據作爲訓練集,使用 20%的數據作爲交叉驗證集,使用20%的數據作爲測試集


以此可以得到3個set上各自的損失函數


模型選擇的方法總結如下:


  1. 使用訓練集訓練出10個模型
  2. 用10個模型分別對交叉驗證集計算得出交叉驗證誤差J_{cv}
  3. 選取代價函數值最小的模型(圖中以J_{cv}(\theta^4)爲例
  4. 用步驟3中選出的模型對測試集計算得出推廣誤差J_{test}(\theta^4)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章