1. 程式人生 > >斯坦福大學公開課機器學習: advice for applying machine learning - evaluatin a phpothesis(怎麽評估學習算法得到的假設以及如何防止過擬合或欠擬合)

斯坦福大學公開課機器學習: advice for applying machine learning - evaluatin a phpothesis(怎麽評估學習算法得到的假設以及如何防止過擬合或欠擬合)

class 中一 技術分享 cnblogs 訓練數據 是否 多個 期望 部分

怎樣評價我們的學習算法得到的假設以及如何防止過擬合和欠擬合的問題。

當我們確定學習算法的參數時,我們考慮的是選擇參數來使訓練誤差最小化。有人認為,得到一個很小的訓練誤差一定是一件好事。但其實,僅僅是因為這個假設具有很小的訓練誤差,當將其樣本量擴大時,會發現訓練誤差變大了,這說明它不是一個好的假設。比如下圖,擬合的非常好,一旦樣本量改變,其訓練誤差隨之增大。

技術分享圖片

那麽我們如何判斷一個假設是否是過擬合的呢?我們可以畫出假設函數h(x),然後觀察。但對於更一般的情況,特征有很多個,比如下圖。想要通過畫出假設函數來觀察,就變得很難甚至不可能了。因此,我們需要另一種評價假設函數的方法。

技術分享圖片

如下給出了一種評價假設的標準方法,假如我們有這樣一組數據組,在這裏只展示了10組訓練樣本,當然通常有成百上千組訓練樣本(下圖)。為了確保我們可以評價我們的假設函數,我們要做的是將這些數據分成兩部分。第一部分將成為我們的訓練集,第二部分將成為我們的測試集。將所有數據分成訓練集和測試集,其中一種典型的分割方法是按照7:3的比例,將70%的數據作為訓練集,30%的數據作為測試集。這裏的m表示訓練樣本的總數,而剩下的那部分數據將被用作測試集。下標test將表示這些樣本是來自測試集,因此x(1)test,y(1)test將成為第一組測試樣本。值得註意的是,在這裏選擇了前70%的數據作為訓練集,後30%的數據作為測試集。但如果這組數據有某種規律或順序的話,那麽最好是隨機選擇70%作為訓練集,剩下的30%作為測試集。當然如果數據已經隨機分布了,那麽可以選擇前70%和後30%。但如果你的數據不是隨機排列的,最好還是打亂順序,或者使用一種隨機的順序來構建數據,然後再取出前70%作為訓練集,後30%作為測試集。

技術分享圖片

下面展示了一種典型的訓練和測試線性回歸學習算法。首先,對訓練集進行學習,得到參數θ。具體來講就是最小化訓練誤差J(θ),這裏的J(θ)是使用那70%數據來定義得到的,也就是僅僅是訓練數據的。接下來,計算測試誤差,J下標test來表示測試誤差。取出之前從訓練集中學習得到的參數θ放在這裏,計算測試誤差,可以寫成如下圖的形式(藍色字跡),這實際上是測試集平方誤差的平均值,也就是我們期望得到的值。因此,我們使用包含參數theta的假設函數對每一個測試樣本進行測試,然後通過假設函數和測試樣本計算出mtest個平方誤差。這是當我們使用線性回歸和平方誤差標準時,測試誤差的定義。

技術分享圖片

那麽如果是分類問題,比如說使用邏輯回歸的時候呢。

訓練和測試邏輯回歸的步驟,與之前所說的非常類似。首先我們要從訓練數據,也就是所有數據的70%中學習得到參數theta,然後用如下的方式計算測試誤差,目標函數和我們平常做邏輯回歸的一樣。唯一的區別是,現在我們使用的是mtest個測試樣本,這裏的測試誤差Jtest(θ)其實叫誤分類率,也被稱為0/1錯分率。0/1表示了我們預測到的正確或錯誤樣本的情況。當假設函數h(x)的值大於等於0.5,並且y的值等於0,或者當h(x)小於0.5,並且y的值等於1,那麽這個誤差等於1。這兩種情況都表明假設函數對樣本進行了誤判,這裏定義閾值為0.5。也就是說,假設結果更趨向於1,但實際是0;或者說假設更趨向於0,但實際的標簽卻是1,這兩種情況都表明誤判。否則,我們將誤差值定義為0,此時假設值能夠正確對樣本y進行分類。

然後,我們就能應用錯分率誤差來定義測試誤差,也就是1/mtest乘以h(i)(xtest)和y(i)的錯分率誤差(從i=1到mtest的求和)。

技術分享圖片

斯坦福大學公開課機器學習: advice for applying machine learning - evaluatin a phpothesis(怎麽評估學習算法得到的假設以及如何防止過擬合或欠擬合)