機器入門系列文章中,我已經根據課程,介紹了許多演算法,比如線性回歸、logistic回歸,以及神經網路,等等。而針對具體的問題,我們採取了某種演算法,實現後,發現效果不好,需要改進。有些時候需要增加資料量,有些時候則不需要;我們需要評估乙個模型的好壞,從而比較選出更優者;或者根據模型出現的問題,提出解決模型訓練出現問題的方法。
分類、回歸或者**模型,最終會得出乙個假設函式,然後根據輸入,帶入假設函式中,實現相應的功能,那麼假設函式的正確與否與功能實現的優劣有直接關係。因此,在經過訓練得出假設函式後,需要對其進行評價,看看它有沒有欠擬合、過擬合或者其他問題。
如何評價假設函式方法有很多,首先針對資料特徵少的,資料量少的,可以畫圖,將假設函式和資料一起畫出來,從圖中直觀顯示擬合情況。
如下圖所示:
由圖可見,該假設曲線將所有訓練資料都擬合得很好,也就是說訓練集中代價很小,但整個趨勢看上去不正確,很可能就是過擬合了。當然,畫圖這個方法是很直觀的,但對於多個特徵的資料,難以實現。
這時,我們可以採取另外一種方法,也是常用的方法。就是將訓練的資料集,進行劃分,劃分為兩部分,一部分是訓練集,另外一部分是測試集。劃分比例大概為7:3,同時需進行隨機選取。
通過劃分,我們可以得到兩部分的資料,一部分是訓練集,另一部分是測試集。對於線性回歸,有以下定義:
訓練代價:
測試代價:
對於logistic回歸,有以下定義:
訓練代價:
測試代價:
對於多分類問題
首先定義誤差函式:
代價為:
這個也是我之前有關手寫數字識別的文章中計算測試集準確率的方法。
無論是線性回歸還是logistic回歸,都是使用訓練中使用訓練代價函式,學習到的θ引數,代入測試代價函式中計算測試集中的代價大小,如果小,那該演算法模型泛化能力強,如果訓練集中代價小,而測試集中代價大,則是過擬合;而如果兩個資料集中的代價都大,則是欠擬合的。
在實際建模解決問題時,我們會使用一些方法,比如多項式回歸。當然,同一種方法也需要多次嘗試,一次多項式擬合可能會欠擬合,四次多項式可能就過擬合了,當然怎麼看這些同一類模型欠擬合和過擬合很重要。同時,有時為了避免過擬合,我們會加上乙個正則化的引數,但是正則化的程度需要多少呢,這個也是需要考慮的。
如何選取模型這裡針對多項式的擬合問題講解。對於乙個龐大的資料集,假設我們使用一次、二次、三次、四次到十次多項式進行擬合,我們怎麼怎麼選擇使用多少次是最合理的呢?
這時,我們需要將整個資料集分為三個部分,分別是訓練集、交叉驗證集(驗證集)和測試集。
具體選擇過程
使用訓練集,通過求解訓練代價最小化,可以得出θ引數的值;然後代入交叉驗證集中,選取交叉驗證集中代價最小的,作為模型,最後代入測試集中,得出泛化誤差。
如果執行的機器學習演算法模型不理想,一般就會有兩種情況,偏差(bias)大,或者方差(variance)大,也就是要麼欠擬合,要麼過擬合。那麼怎麼判斷和區別他們兩者呢?
10.3.1 兩者的判斷
以多項式擬合為例子,通過畫出不同多項式的模型關於訓練代價和驗證代價的曲線,可以直觀的看出偏差大還是方差大。如下圖所示:
由圖可見,當假設函式的次數較小時,訓練代價和驗證代價同樣大,這時就是偏差大的情況,也是欠擬合;而當假設函式的次數較大時,訓練代價小,但驗證代價遠比訓練代價大,這時就是方差大的情況,也就是過擬合。
10.3.2 正則化與偏差和方差的關係
當我們選取好了假設函式後,在之前的課程中,為了避免過擬合,我們會引入乙個正則化的引數。而正則化引數是怎麼定的呢?
假設四次多項式擬合的效果最好,因此我們決定使用四次多項式作為假設函式。
則其假設函式為:
如果我們加入正則化的引數,則其代價函式為:
這時,我們討論一下λ的取值問題。當λ的值很大時,為了使代價最小化,則有:當λ的值很小時,避免過擬合的程度變小,這時候就會產生高方差。
那麼怎麼選取合適的λ值呢我們可以先列出一系列λ的值,比如:
將λ值代入訓練代價函式中,求出θ引數,由例子中可見,有12組值,然後將這些θ值代入各自的交叉驗證集中,計算代價值,然後選取交叉驗證代價值最小的一組θ值作為模型的θ引數,最後代入測試集中,求出代價,這個就是用來衡量模型的泛化能力的依據了。
下面我們畫出代價關於λ的函式曲線。
形象一點來說,學習曲線能夠反映學習演算法的學習情況。通過學習曲線,我們可以直觀的判斷我們的模型的學習情況,學得不夠(欠擬合)還是學得太好(過擬合),從而從不同方面優化演算法模型,而不是浪費時間。
一般情況下的學習曲線,如下圖所示:
分析:一般而言,當訓練集小時,假設函式容易把訓練資料大多或者全部擬合,這樣訓練代價就小,但泛化能力低,所以驗證集代價大;相反,當資料集大了,假設函式不能將大多數的資料都完全擬合,這樣,訓練代價就大,但資料多了,泛化能力有所增強,所以驗證代價也小了。
討論高偏差和高方差的情況高偏差時,訓練集小,訓練代價小,但驗證代價大;訓練集大,訓練代價大,驗證代價也大,同時,增加訓練集的規模,驗證代價同樣大。
高方差時,訓練集小,訓練代價小,驗證代價大;訓練集大,訓練代價大,驗證代價會減少,同時,增加訓練集規模能減少驗證代價,增強泛化能力。
這些判斷都是基於學習曲線反映出來的結果,因此這種方法也叫學習曲線診斷法。
下面總結幾種措施的應用場景。如下表所示:
同時,我們把之前在多項式中的結論,拓展到神經網路中。
在神經網路中,如果隱含層較少,或者隱含層神經單元較少,那麼模型容易欠擬合,但是優點是計算量小;而隱含層多,並且隱含層神經單元多,那麼模型容易過擬合,但是往往效果比少的好,只是運算量大。在神經網路中,如果隱含層多,為了避免過擬合,我們可以加入正則化引數,也可以採取dropout。
機器學習之 機器學習應用建議
機器學習的應用建議 好久沒有更新機器學習的學習筆記了,上一次還是更新的神經網路的部分。這一次我們來聊一聊,機器學習的應用建議。決定下一步做什麼 假設我們需要用乙個線性回歸模型 linear regression 來 房價,當我們運用訓練好了的模型來 未知資料的時候,發現有較大的誤差,我們下一步可以做...
Coursera 應用機器學習的建議
偏差方差權衡 損失函式和收斂情況 誤差分析和銷蝕分析對順序敏感,所以需要經過多次試驗。訓練集 交叉驗證集和測試集 訓練集是用來學習的樣本集,通過匹配一些引數來建立乙個分類器。驗證集是用來調整分類器的引數的樣本集,比如在神經網路中選擇隱藏單元數。驗證集還用來確定網路結構或者控制模型複雜程度的引數。測試...
吳恩達機器學習筆記 11 應用機器學習的建議
本篇講述了在機器學習應用時,如何進行下一步的優化。如訓練樣本的切分驗證?基於交叉驗證的引數與特徵選擇?在訓練集與驗證集上的學習曲率變化?在高偏差或者高方差時如何進行下一步的優化,增加訓練樣本是否有效?樣本的切分 首先針對我們的樣本集,選擇其中的70 作為訓練集,訓練模型 選擇其中的30 作為測試集,...