1. 程式人生 > >提高模型識別率——偏差、方差問題

提高模型識別率——偏差、方差問題

Introduction

本篇是針對當憑直覺做完一個Baseline以後,如何提高現有的識別率?依然憑直覺有以下幾種方法:

1、增加訓練資料集

2、挑選出更少的特徵

3、增加其他特徵

4、增加多項式x1*x2

5、減少或增加懲罰係數

然而,事實上雖然花了大量時間完成上述工作,效果不一定好(以上一篇Titanic為例,事實證明,三天的優化,識別率下降了。。。。)。再思考一下,識別率低的原因是什麼?——欠擬合或者過擬合。因此,解決欠擬合和過擬合的方法就是提高識別率的方法

Method

一、首先什麼是欠擬合,過擬合?



過擬合會導致,訓練集損失函式小,測試集損失函式大,該假設不能很好的擬合測試集資料

從偏差(bias)和方差(variance)角度來說兩種狀態特點,欠擬合狀態下,訓練集和測試集誤差都高;

過擬合狀態下,訓練集誤差極低,測試集誤差極高。下圖,橫座標為模型最高次數,縱座標為誤差值


二、那麼如何判斷此時模型是欠擬合還是過擬合?

採用交叉驗證法


正則化係數

正則化方法防止過擬合,但如何選擇懲罰係數?懲罰係數為多少時,驗證集誤差率最低?



很明顯可以看出,懲罰係數太小,容易過擬合即高方差;懲罰係數太大,欠擬合即高偏差。

藍線是訓練集誤差,紫色線是驗證集誤差,橫座標是懲罰係數,縱座標是誤差值。

學習曲線

學習演算法偏差、方差的檢驗方法,描述了訓練集數量與訓練集和驗證集誤差的關係圖。

欠擬合狀態下:增加資料不一定有太大幫助


過擬合狀態下:訓練資料少容易過擬合,增加訓練集可能會減少誤差


綜合以上內容:

上述手段的適應範圍如下:


但是,你的模型並非只是單純的擬合問題,即便擬合的很好,誤差依然不令人滿意。怎麼辦?

可以進行誤差分析

誤差分析

其實就是親自去看看,到底哪些樣本被演算法分錯了?從中找到規律並尋找新的特徵。

強烈推薦在訓練集上進行誤差分析,而非測試集。因此,最好先用簡單的演算法做一個不太完美的模型,通過上述方法不斷優化你的模型,在交叉驗證集上驗證。最後再在測試集上運用。同時運用評估方法,幫助你 評價此時的模型的好壞。

(資料不平衡)偏斜類誤差度量問題

以癌症預測問題為例,1%的錯誤率對於只有0.5%例項是惡性腫瘤的測試集而言,問題依然很嚴峻。換句話說,這個模型並不是很好。所以,錯誤率作為模型評價標準已經不可靠了。




Precision = 真陽性/預陽性=TP/(TP+FP);

Recall = 真陽性/實陽性 = TP/(TP+FN);

以上都是數量之比,都為正實數

陽性表示(y=1),數量少的那一型別。

此案例而言,查準率:在所有預測為惡性腫瘤的病人中,實際上有惡性腫瘤的百分比。當然是越高越好

                      查全率:在所有實際上有惡性腫瘤的病人中,成功預測有惡性腫瘤的病人百分比。當然是越高越好

存在的問題

一山不能容二虎,除非一公和一母!

如果P高,R低:非常確信的情況下才認為是癌症,會存在一些是癌症患者被確診為不是的風險。

如果P低,R高:比較保守,看似像癌症的情況確認為癌症,會存在誤診的風險。

如果P, R都高,當然最好。但是往往,一個演算法得到的曲線是下圖:


那麼有沒有一個指標平衡他們的關係?


這個指標越高說明分類效果越好!!尤其是這種斜偏類問題!!

大資料問題

先來看一個圖:


上圖特點:

橫座標是訓練集規模,縱座標是準確度。這四種演算法都有相似效能,隨著訓練資料集增大,

演算法效能對應增強。給一個劣質演算法更多的資料,效果可能比優質演算法還好。因此,幾個普遍共識是:“取得成功的人不是擁有最好演算法 的人,而是擁有最多資料的人”。

這種情況什麼時候是真的?

滿足下面情況:

這個演算法擁有很多引數來避免高偏差,也就是說在此演算法下會得到低偏差的訓練誤差。

其次,擁有足夠多的資料,使得避免模型過擬合,也就是說在“大資料”下會得到低方差模型。

此時,測試誤差會接近訓練誤差,最終使得測試誤差變小。


總結一下:

上述給出瞭如何評價一個模型好壞的幾種方法以及相關指標;同時給出了針對不同的問題(偏差、方差)給出了相應的解決方案;最後特別指出,大資料的作用!這也是大資料成為主流的原因!

下一步實踐!多參加比賽,多做專案!才是王道!