模型的评估与选择
文章目錄
- 1、樣本的劃分方式
- 1.1 留出法(hold-out)
- 1.2 交叉驗證法(cross validation)
- 1.3 自助法(bootstrapping)
- 2、泛化能力的度量
- 2.1 回歸問題的的性能度量
- 2.2 分類問題的性能度量
- 2.2.1 錯誤率與精度
- 2.2.2 準確率與召回率
- 2.2.3 ROC曲線
【本文部分內容參考周志華《機器學習》韓家燁《數據挖掘:概念與技術》】
我們在根據同一個數據集通過不同的的算法,或者是同一個算法的不同參數,會得到不同的模型。那我們怎么決定最終選擇使用哪個模型呢?
我們知道,我們是要選擇泛化誤差最小的那個模型。但泛化誤差無法直接計算,我們根據訓練數據集得到的只是訓練誤差,那我們應該怎么評估一個模型的泛化誤差?最簡單直觀的方法就是將訓練數據集中的一部分用作訓練,另一部分用作驗證,它們之前沒有交集,這樣就可以近似得到所需要的泛化誤差了。
下面我們第一部分先介紹如何將訓練數據集分為訓練與驗證2部分。
將數據分成了2部分以后,通過不同的的算法,或者是同一個算法的不同參數得到了各種各樣的模型,怎么衡量這些模型的好壞呢?泛化誤差是一個最終的目標,但同時他并不適用于所有的情況,或者說各種應用場景會有不同的側重點。比如,醫療問題中,我們希望不要錯過發現任何一個病例,但可以接受部分沒病的人被誤判為有病,這個示例中的正樣本的泛化誤差代價就遠高于負樣本了。但另一些示例中,則可以只是希望盡量的提升精度,減少錯誤率。
因此,在第二部分我們介紹了各種詳細的指標,說明如何衡量一個算法的好壞。
簡單的說:
(1)為了得到盡量準確的泛化能力,我們將樣本集分為訓練樣本集和驗證樣本集—樣本的劃分方式。
(2)用各種各樣的方法表示泛化誤差,以適應不同的應用場景----泛化能力的衡量。
1、樣本的劃分方式
樣本的劃分方式主要是指如何將樣本集劃分為訓練樣本集和驗證樣本集。
1.1 留出法(hold-out)
留出法是指直接將數據集D劃分為2個互斥的集合(訓練集S和驗證集T)。但要注意以下幾個細節:
(1)訓練/測試數據集的劃分要盡可能的保持一致性,避免由于數據劃分的差異而對最終結果產生影響。比如對于分類來說,要保持各個類別的比例在訓練/測試數據集中保持一致,這種方式一般稱為“分層采樣”。舉個例子,如果數據集中的正負樣本比例是1:3,則在訓練/測試數據集中都應該近似為1:3。
(2)即使使用了分層采樣,仍存在多種劃分方法對數據集進行劃分。比如選前70%數據作訓練,或者是后70%作訓練,會得到不同的結果。所以,如果數據集并非十分龐大時,一般要會進行若干次隨機劃分、重復進行計算評估后以平均值作為最終的模型評估值。
(3)如果S包含了大部分樣本,則由于T的數據過少,會導致評估結果不夠穩定準確;而如果S過少,則與D相差太大,降低了保真性。一般的做法是將大約2/3~4/5的數據用于訓練,其余用于驗證。
1.2 交叉驗證法(cross validation)
交叉驗證法將數據集D按照分層采樣分為k個子集,然后每次訓練選擇其中一個作為驗證數據集,其余k-1個子集作為訓練數據集。通常把交叉驗證法稱為“k折交叉驗證法”。k最常用的是10,此時稱為10折交叉驗證法。
與留出法類似,如何將數據集D劃分為k個子集同樣存在多種劃分方式。為減少因樣本劃分不同而引入差別,k折交叉驗證法通常隨機使用不同的劃分p重復p次,最終的評估結果就是p次k折交叉驗證結果的均值,例如常見的“10次10折交叉驗證”。
極端情況下,令k=m(m為D中的樣本數量),即是交叉驗證法的特例:留一法。留一法有以下特點:
(1)不受樣本隨機劃分方式的影響,因為每個樣本都會一次且唯一一次充當驗證數據。
(2)訓練數據集S僅比D少了一個樣本,因此其得到的模型與使用D極為類似,一般認為其結果比較準確。
(3)問題:在數據集比較大時,訓練m個模型的開銷難以接受。
1.3 自助法(bootstrapping)
自助法的做法是每次從數據集D中隨機取出一個樣本,然后將樣本重新放加D中,接著開始下一輪的抽取。。。這個過程重復m次。
自助法抽樣得到的樣本數與D中的樣本數相同,但D中的部分樣本在S中出現了多次,部分樣本從未在S中出現,這些樣本將作為驗證集T。一個樣本不被放入S的概率為(1-1/m)^m,當m無窮大時,概率趨向于1/e=0.368。也就是說大約36.8%的樣本將作為測試集。
優點:(1)當數據集較小,難以劃分訓練/測試數據集時很有效。(2)能從初始數據集中產生多個不同的訓練集,對于集成學習等很有好處。
缺點:(1)改變了初始數據集的分布,這會引入偏差。
在數據量充足時,盡量不要使用自助法。
2、泛化能力的度量
通過合適的方法對數據集進行劃分,并計算后可以得到一個模型,那么如何衡量這個模型的泛化能力呢?正如上面所言,衡量不同模型的泛化能力時,使用不同的度量有可能得到不同的評判結果。這意味著沒有絕對好壞的模型,模型的好壞不僅取決于數據和算法,還取決于任務的需求。
2.1 回歸問題的的性能度量
在回歸任務中,一般會使用均方誤差作度量:
E(f:D)=1m∑i=1m(f(xi)?yi)2E(f:D)=\frac{1}{m}\sum_{i=1}^m(f(x_i)-y_i)^2 E(f:D)=m1?i=1∑m?(f(xi?)?yi?)2
而一般的,對于概率密度為p(x)的數據而言,均方誤差可以表示為:
E(f:D)=∫x~D(f(x)?y)2p(x)dxE(f:D)= \int_{x\thicksim D}(f(x)-y)^2p(x)dx E(f:D)=∫x~D?(f(x)?y)2p(x)dx
2.2 分類問題的性能度量
2.2.1 錯誤率與精度
錯誤率即被錯誤分類的樣本占總樣本數量的比例,而精度則是分類正確的樣本占總樣本數量的比例。很明顯:1-錯誤率=精度。
2.2.2 準確率與召回率
我們先定義幾個符號:
TP:本身為正,分類結果也為正的樣本數量。
TN:本身為負,分類結果也為負的樣本數量。
FP:本身為負,但分類結果為正的樣本數量,也就是假的正樣本。
FN:本身為正,但分類結果為負的樣本數量,也就是假的負樣本。
P:正樣本的數量。
N:負樣本的數量。
很明顯,我們有以下關系:
TP+FN=PTN+FP=NTP+FN+TN+FP=P+N=m\begin{aligned} TP+FN=P \\ TN+FP=N \\ TP+FN+TN+FP=P+N=m \\ \end{aligned} TP+FN=PTN+FP=NTP+FN+TN+FP=P+N=m?
準確率的定義為:
P=TP/(TP+FP)P=TP/(TP+FP) P=TP/(TP+FP)
召回率的定義為:
R=TP/(TP+FN)=TP/PR=TP/(TP+FN)=TP/P R=TP/(TP+FN)=TP/P
準確率的含義為:被分類為正的樣本中,有多少是真實的正樣本。比如在信息檢索中,我們要考慮搜索出來的結果有多少是用戶真正感興趣的。
召回率的含義為:所有正樣本中,有多少被分類為了正樣本。
一般而言,準確率高則召回率低,召回率高則準確率低。把二者的數值畫成一條曲線,則是PR曲線。根據PR曲線,如何比較不同模型的好示呢:
(1)如果一個模型的PR曲線完全包住另一個模型,則可以認為前者更優。
(2)比較PR曲線下的面積,面積越大,模型越優。
(3)平衡點(BEP),即準確率=召回率時的值,越大越好。
(4)F1和Fbeta。見周志華《機器學習》P31
2.2.3 ROC曲線
ROC曲線的縱坐標為真正例率(TPR),橫坐標為假正例率(FPR),定義為:
TPR=TP/(TP+FN)FPR=FP/(FP+TN)\begin{aligned} TPR=TP/(TP+FN) \\ FPR=FP/(FP+TN) \end{aligned} TPR=TP/(TP+FN)FPR=FP/(FP+TN)?
ROC曲線下的面積可以用于衡量模型的效果。
一個典型的ROC曲線如下圖:
2.2.4 代價敏感錯誤率與代價曲線
正如上面所言,不同類別的分類錯誤會有不同的損失,可以為錯誤賦予非均等代價。詳見周志華《機器學習》P35
2.3 比較檢驗
使用上面某種評估方法計算得到算法的性能度量,然后對這些性能度量作比較,從而找到更好的模型。那怎么比較?直接比大小嗎?實際上比這個復雜。
簡單的說,假設在測試集上觀察到模型A比模型B好,則A的泛化能力是否在統計意義上好于B,這個結論的把握有多大?比較檢驗理論就是分析這些內容。這里不再細說,有興趣可以參考周志華《機器學習》P37。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: 最大似然估计与损失函数
- 下一篇: 使用sklearn加载公共数据集、内存数