[机器学习笔记]Note8--机器学习应用建议
繼續是機器學習課程的筆記,本節課的內容主要是一些機器學習應用的建議,包括對假設的評估,如何處理過擬合和欠擬合等。
覺得下一步做什么
到目前為止,我們已經學習了線性回歸,邏輯回歸以及神經網絡,梯度下降等算法,我們已經可以對給定一個訓練集使用上述一種算法來訓練,得到模型,然后進行預測,但是接著問題就來了,如果得到的預測結果誤差很大,那么應該如何減少誤差,提高準確率呢?
這里還是使用房價問題作為例子,當使用一個線性回歸模型來預測房價,但是發現訓練好的模型來預測未知數據的時候,發現有較大誤差,那么接下來可以采取的辦法有以下幾種:
雖然有這么多方法,但是我們不應該隨機選擇上面的某種方法來改進我們的算法,而是運用一些機器學習診斷法來幫助我們知道上面哪些方法對我們的算法是有效的。
誤差分析
這里主要介紹如何檢驗算法是否過擬合了。
首先是將數據分成訓練集和測試集,通常用70%的數據作為訓練集,剩余的30%的數據做為測試集。注意,訓練集和測試集均要包括有各種類型的數據,而且通常要對數據進行打亂順序,然后隨機生成訓練集和測試集。
在通過訓練集學習到模型的參數后,就需要使用測試集來使用該模型進行預測并計算誤差。這里分為線性回歸和邏輯回歸兩種情況:
Jtest(θ)=?1mtest∑i=1mtesty(i)testloghθ(x(i)test)+(1?y(i)test)loghθ(x(i)test)
還可以計算誤分類的比率,對于每一個測試集實例,計算:
err(hθ(x),y)={1?if?h(x)≥0.5?and?y=0,or?if?h(x)<0.5,and?y=10?Otherwise
然后對結果計算平均:error=1mtest∑mtesti=1err(hθ(x(i)test),y(i))
這里誤分類的計算是由于在之前的[邏輯回歸][1]中,我們是如此定義分類的:
- 當hθ≥0.5,預測y=1
- 當hθ<0.5,預測y=0
模型選擇(交叉驗證集)
假設對一個特定的數據集,要確定最合適的多項式次數,或者是怎么選用正確的特征,或者是選擇正則化參數λ來構建學習算法,這些問題都稱之為模型選擇。
這里舉例說明如何進行模型選擇。假設我們要在10個不同次數的二項次模型之間進行選擇:
顯然越高次數的二項式模型能夠適應訓練數據集,但是這種情況就可能是過擬合,也就是不能推廣至一般情況,因此我們需要選擇的是一個更能適應一般情況,即泛化能力更好的模型,這里就需要使用交叉驗證集來幫助選擇模型。
所以一般將數據集按下列方式分成訓練集,交叉驗證集以及測試集:
- 使用60%的數據作為訓練集
- 使用20%的數據作為交叉驗證集
- 使用20%的數據作為測試集
上述方法是一個比較經典的分法,可以按照實際需要調整比例。
所以模型選擇的方法為:
偏倚和偏差診斷(Diagnosis Bias Vs Variance)
高偏倚和高偏差的問題基本上就是低擬合和過擬合的問題。
假設還是房價問題,有以下三種模型,分別對應下面三幅圖,其分別就是低擬合,剛剛好以及過擬合三種情況:
通常我們會將訓練集和交叉驗證集的代價函數誤差與多項式的次數繪制在同一張圖表上來幫助分析,如下所示:
由上圖可以得知:
- 對于訓練集,當多項式次數d較小時,誤差比較大,模型擬合程度很低;隨著d的增大,誤差減小,擬合程度提高;
- 對于交叉驗證集,當d較小時,誤差比較大,模型擬合程度低;當d開始增大時,誤差會呈現先減小后增大的趨勢,轉折點就是模型開始過擬合訓練集的時候。
此外,通過上圖也可以進行判斷是偏倚還是偏差:
- 訓練集誤差和交叉驗證集誤差比較接近時:偏倚/低擬合
- 交叉驗證集誤差遠大于訓練集誤差時:偏差/過擬合
歸一化與偏倚/偏差
在訓練模型的時候,我們一般會使用到歸一化方法來防止過擬合的發生。假設有一個線性回歸模型hθ(x)=θ0+θ1x1+θ2x22+θ3x33+θ4x44,然后使用歸一化,則其代價函數為J(θ)=12m[∑mi=1((hθ(x(i))?y(i))2+λ∑nj=1θ2j)],但是這里歸一化會由于λ的取值大小而導致低擬合或者過擬合的情況,如下圖所示:
所以當λ過大,就會導致上圖中第一幅圖的情形,也就是低擬合的狀況,此時就是對多次的參數懲罰過大;而如果λ過小,則是導致如第三幅圖的情況,會過擬合。
只有中間一幅圖選擇的λ是剛剛好,所以這里面臨的問題就是選擇合適的歸一化因子λ。首先是選擇一系列的想要測試的λ值,通常是0-10之間的呈現2倍關系的值(如:0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,10總共12個)。
然后同樣把數據分為訓練集、交叉驗證集和測試集。然后按照下列方法:
同樣,可以將訓練集和交叉驗證集的誤差和λ的值繪制在同一張圖表上:
由上圖可以得到:
- 當λ較小時,訓練集誤差較小而交叉驗證集誤差較大,此時是過擬合;
- 隨著λ的增大,訓練集誤差不斷增加,這是因為處于低擬合的情況,而交叉驗證集誤差則是先減小后增加。
所以此時剛剛合適的λ值就是圖中紅色拋物線的最低點,也就是交叉驗證誤差減小到最低點然后開始增加的轉折點了。
學習曲線
學習曲線是學習算法的一個很好的合理檢驗。它是將訓練集誤差和交叉驗證集誤差作為訓練集實例數量(m)的函數繪制的圖表。
假設現在有100行數據,我們從第1行數據開始,逐漸學習更多行的數據。如下圖所示的學習曲線,分別是訓練集和交叉驗證集的誤差隨著使用的數據量增加而變化的曲線。
對于訓練集,當剛開始訓練的時候,數據量很小,所以得到的模型可以很好的擬合訓練數據,但隨著數據增大,得到的模型就很難非常完美地擬合訓練集數據,所以誤差是逐漸增大。
對于交叉驗證集,一開始是用在訓練集中訓練好的模型,交叉驗證集對于它就是一個陌生的數據集,所以初始誤差會比較大,隨著交叉驗證集中數據量增大,這個初始的模型也會隨之逐漸調整參數,所以誤差就會逐漸減小。
那么如何利用學習曲線來識別高偏倚和或者是高偏差呢?
對于高偏倚/低擬合,首先假設這里使用一條曲線,即一個模型hθ(x)=θ0+θ1x來訓練數據,由下圖所示。
這里可以看到當訓練集增加到多大,誤差都沒有多大改變。即在低擬合/高偏倚的情況下,增加訓練集數據并不會有多大幫助。
對于高偏差/過擬合,這里使用一個非常高次的多項式模型hθ(x)=θ0+θ1x+?+θ100x100,且歸一化因子λ非常小。
由上圖得知,在交叉驗證集誤差遠大于訓練集誤差的時候,增加訓練集數據是可以提高模型的效果的。
所以,在高偏差/過擬合的情況下,增加訓練集數據是可以提高算法效果的
小結
回顧下一開始選擇的六種方法,這里給出在不同情況下應該怎么選擇:
解決高偏差/過擬合:
- 增加訓練集數據
- 較少特征的數量
- 增大歸一化因子λ
解決高偏倚/低擬合:
- 增加特征的數量
- 減小歸一化因子λ
- 增加二項式特征
而對于神經網絡的偏倚和偏差,分別如下所示:
所以,通常選擇較大的神經網絡并采用歸一化處理會比較小的神經網絡效果要更好。
對于神經網絡中的隱藏層的層數的選擇,通常從一層開始逐漸增加層數。
為了更好作選擇,可以把數據分為訓練集、交叉驗證集和測試集,針對不同隱藏層層數的神經網絡選擇神經網絡,然后選擇交叉驗證集代價最小的神經網絡。
所以這節課主要就是介紹了如何找出所使用學習算法的問題,可以通過誤差分析,模型選擇,學習曲線來判斷是低擬合還是過擬合從而選擇不同的方法,最終是繼續提高算法的效果。
總結
以上是生活随笔為你收集整理的[机器学习笔记]Note8--机器学习应用建议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: codesys中打开linux端的串口_
- 下一篇: 消息队列遥测传输(MQTT)介绍