1. 程式人生 > >Python機器學習:6.3 使用學習曲線和驗證曲線 調試算法

Python機器學習:6.3 使用學習曲線和驗證曲線 調試算法

畫出 很好 pos 正則 log gin htm 設置 valid

這一節我們學習兩個非常有用的診斷方法,可以用來提高算法的表現。他們就是學習曲線(learning curve)和驗證曲線(validation curve)。學習曲線可以判斷學習算法是否過擬合或者欠擬合。

使用學習曲線判別偏差和方差問題

如果一個模型相對於訓練集來說過於復雜,比如參數太多,則模型很可能過擬合。避免過擬合的手段包含增大訓練集,但這是不容易做到的。通過畫出不同訓練集大小對應的訓練集和驗證集準確率,我們能夠很輕松滴檢測模型是否方差偏高或偏差過高,以及增大訓練集是否有用。

技術分享圖片

上圖的左上角子圖中模型偏差很高。它的訓練集和驗證集準確率都很低,很可能是欠擬合。解決欠擬合的方法就是增加模型參數,比如,構建更多的特征,減小正則項。

上圖右上角子圖中模型方差很高,表現就是訓練集和驗證集準確率相差太多。解決過擬合的方法有增大訓練集或者降低模型復雜度,比如增大正則項,或者通過特征選擇減少特征數。

這倆問題可以通過驗證曲線解決。

我們先看看學習曲線是怎麽回事吧:

技術分享圖片

技術分享圖片

learning_curve中的train_sizes參數控制產生學習曲線的訓練樣本的絕對/相對數量,此處,我們設置的train_sizes=np.linspace(0.1, 1.0, 10),將訓練集大小劃分為10個相等的區間。learning_curve默認使用分層k折交叉驗證計算交叉驗證的準確率,我們通過cv設置k。

上圖中可以看到,模型在測試集表現很好,不過訓練集和測試集的準確率還是有一段小間隔,可能是模型有點過擬合。

用驗證曲線解決過擬合和欠擬合

驗證曲線是非常有用的工具,他可以用來提高模型的性能,原因是他能處理過擬合和欠擬合問題。

驗證曲線和學習曲線很相近,不同的是這裏畫出的是不同參數下模型的準確率而不是不同訓練集大小下的準確率:

技術分享圖片

技術分享圖片

我們得到了參數C的驗證曲線。

和learning_curve方法很像,validation_curve方法使用采樣k折交叉驗證來評估模型的性能。在validation_curve內部,我們設定了用來評估的參數,這裏是C,也就是LR的正則系數的倒數。

觀察上圖,最好的C值是0.1。

Python機器學習中文版目錄(http://www.aibbt.com/a/20787.html)

轉載請註明出處,Python機器學習(http://www.aibbt.com/a/pythonmachinelearning/)

Python機器學習:6.3 使用學習曲線和驗證曲線 調試算法