當我們運用訓練好了的模型來**未知資料的時候發現有較大的誤差,我們下一步可以做什麼
下面是幾種方法:
我們不應該隨機選擇上面的某種方法來改進我們的演算法,而是運用一些機器學習診斷法來幫助我們知道上面哪些方法對我們的演算法是有效的。
我們將以此為基礎來討論如何避免過擬合和欠擬合的問題。
為了檢驗演算法是否過擬合,我們將資料分成訓練集和測試集,通常用70%的資料作為訓練集,用剩下30%的資料作為測試集。很重要的一點是訓練集和測試集均要含有各種型別的資料,通常我們要對資料進行「洗牌」,然後再分成訓練集和測試集。
測試集評估在通過訓練集讓我們的模型學習得出其引數後,對測試集運用該模型,我們有兩種方式計算誤差:
誤分類的比率,對於每乙個測試集樣本
如何進行模型的選擇
越高次數的多項式模型越能夠適應我們的訓練資料集,但是適應訓練資料集並不代表著能推廣至一般情況,我們應該選擇乙個更能適應一般情況的模型。我們需要使用交叉驗證集來幫助選擇模型。 我們可以使用60%的資料作為訓練集,20%的資料作為交叉驗證集,20%的資料作為測試集
模型選擇的方法為:
如果這個演算法的表現不理想,很有可能出現兩種情況:偏差比較大或者方差比較大。換句話說,出現的情況要麼是欠擬合,要麼是過擬合問題。搞清楚這一點非常重要,因為能判斷出現的情況是這兩種情況中的哪一種。
接下來是他們的判斷方法:
訓練集誤差和交叉驗證集誤差近似時:偏差/欠擬合 交叉驗證集誤差遠大於訓練集誤差時:方差/過擬合
在我們在訓練模型的過程中,一般會使用一些正則化方法來防止過擬合。但是我們可能會正則化的程度太高或太小了,即我們在選擇λ的值時也需要思考與剛才選擇多項式模型次數類似的問題。
正則化表示式
學習曲線就是一種很好的工具,我經常使用學習曲線來判斷某乙個學習演算法是否處於偏差、方差問題。學習曲線是學習演算法的乙個很好的合理檢驗(sanity check)。學習曲線是將訓練集誤差和交叉驗證集誤差作為訓練集樣本數量(m)的函式繪製的圖表。
學習曲線識別高偏差/欠擬合:作為例子,我們嘗試用一條直線來適應下面的資料,可以看出,無論訓練集有多麼大誤差都不會有太大作用:
讓我們來看一看我們在什麼情況下應該怎樣選擇:
使用較小的神經網路,類似於引數較少的情況,容易導致高偏差和欠擬合,但計算代價較小使用較大的神經網路,類似於引數較多的情況,容易導致高方差和過擬合,雖然計算代價比較大,但是可以通過正則化手段來調整而更加適應資料。 通常選擇較大的神經網路並採用正則化處理會比採用較小的神經網路效果要好。 對於神經網路中的隱藏層的層數的選擇,通常從一層開始逐漸增加層數,為了更好地作選擇,可以把資料分為訓練集、交叉驗證集和測試集,針對不同隱藏層層數的神經網路訓練神經網路, 然後選擇交叉驗證集代價最小的神經網路。
如何應用ML的建議 上
遇到問題 部分 一 錯誤統計 部分 二 正確的選取資料集 部分 三 辨識是欠擬合還是過擬合 部分 四 正則化與過擬合 high variance 和欠擬合 high bias 的關係 部分 五 部分 六 部分 七 見 如何應用ml的建議 下 部分 一 在經過思維考慮後,很有想法的提出了幾個自認為有助...
機器學習入門 應用機器學習的建議
機器入門系列文章中,我已經根據課程,介紹了許多演算法,比如線性回歸 logistic回歸,以及神經網路,等等。而針對具體的問題,我們採取了某種演算法,實現後,發現效果不好,需要改進。有些時候需要增加資料量,有些時候則不需要 我們需要評估乙個模型的好壞,從而比較選出更優者 或者根據模型出現的問題,提出...
Coursera 應用機器學習的建議
偏差方差權衡 損失函式和收斂情況 誤差分析和銷蝕分析對順序敏感,所以需要經過多次試驗。訓練集 交叉驗證集和測試集 訓練集是用來學習的樣本集,通過匹配一些引數來建立乙個分類器。驗證集是用來調整分類器的引數的樣本集,比如在神經網路中選擇隱藏單元數。驗證集還用來確定網路結構或者控制模型複雜程度的引數。測試...