【西瓜書筆記】——第二章:模型評估與選擇

【索引】
本節涉及核心內容:
1、評估方法(留出法、交叉驗證法……)
2、性能度量方式(錯誤率與精度、查準率P與查全率R、ROC曲線……)


1、經驗誤差與過擬合

錯誤率:分類錯誤的樣本數佔樣本總數的比例
精度:精度=1-錯誤率

誤差:學習器的實際預測輸出與樣本的真是輸出之間的差異
其中:
訓練誤差經驗誤差:指的是學習器在訓練集上的誤差
泛化誤差:指的是學習器在新樣本上的誤差

因此,我們希望得到泛化誤差小的學習器,但在事先不知道新樣本是什麼樣的情況下智能努力使經驗誤差最小化。爲了達到該目的,應該從訓練樣本中儘可能學出適用於所有潛在樣本的“普遍規律”。

然而,當學習器把訓練樣本學的“太好”了的時候,可能已經把訓練樣本自身的一些特點當作所有潛在樣本都會具有的一般性質,這樣會導致泛化性能下降。
過擬合:把訓練樣本自身特點當作將潛在樣本具有的一般性質,從而導致泛化性能下降(就是學的太好了,以至於一根筋、死腦筋)
欠擬合:對訓練樣本的一般性質尚未學好(學的才粗糙了,不具備舉一反三的辨識能力)
通常情況下,欠擬合比較容易克服,而過擬合是目前機器學習領域所面臨的關鍵障礙,且過擬合是無法徹底避免的,我們所能做到的就只是緩解或減小其風險。可否再多項式時間內解決的算法決定了此類問題是不是P/NP問題。而機器學習通常面臨的問題都是NP難甚至更難,因此若想避免過擬合,那麼經驗誤差最小化就必須要能獲得最優解,這就意味着需要構造性地證明P=NP。但實際上P≠NP,那麼過擬合就是不可避免的。


2、評估方法

【引言】在現實任務中,我們往往有多種學習算法可供選擇,甚至對同一個學習算法,當使用不同的參數配置時,也會產生不同的模型,那麼,我們該選用哪一個學習算法、使用哪一種參數配置呢?這就機器學習中的模型選擇問題。理想的解決方案是對候選模型的泛化誤差進行評估,然後選擇泛化誤差最小模型,但由於無法直接獲得,以及過擬合現象的存在,這個過程往往沒有那麼簡單。

簡單說來,泛化誤差無法直接獲得是因爲必須先有訓練數據的模擬,但是訓練數據並非標準數據。因此機器學習沒有一個固定的、準確衡量的標準來定義對於一個新樣本而言,其泛化結果是否正確。(就像考試永遠不會考原題一樣)

通過“測試集”來測試學習器對新樣本的判別能力,然後以測試集上的“測試誤差”作爲泛化誤差的近似。通常我們假設測試樣本也是從樣本真實分佈中獨立同分布採樣而得,但要注意的是,測試集應該儘可能與訓練集互斥,即測試樣本儘量不在訓練集中出現、未在訓練過程中使用過。
因此,我們需要一個能夠舉一反三地模型,而非只會死記硬背的模型。


留出法

留出法直接將數據集D劃分成兩個互斥的集合,其中一個作爲訓練集S,另一個作爲測試集T。通過在S上訓練模型,用T來評估測試誤差,作爲泛化誤差的估計。總之,S用來訓練出模型,而T用來計算泛化誤差
採取分層採樣的方式,保留類別比例,即使按不同比例劃分訓練/測試集,但是正、反例所在集合中的相對比例還是近似的。

訓練集和測試集的劃分需要儘可能保持數據分佈的一致性,目的是爲了避免因數據劃分過程引入額外的偏差,從而對最終結果產生影響。(例如:不同類別樣本的比例要在訓練集、測試集中保持一致。試想如果訓練集中全是正例而測試集中全是反例,那將無法劃分數據)

不過通常的單次留出法所得到的評估結果往往不夠穩定可靠,一般需要進行若干次隨即劃分、重複進行實驗評估後取平均值作爲留出法的評估結果。

分層採樣:保留類別比例的採樣方式稱爲分層採樣。

例如對一個集合進行100次劃分,每次都是不同的訓練/測試集,總共會得出100個結果,而留出法最後的結果就是這100次結果的平均值。

但是留出法的侷限在於:集合只侷限在D集合中。無論T也好,D也好,調整比例無法保證結果的穩定性(S小了,方差會大;T小了,偏差會大)。一般做法是將大約2/3 ~ 4/5的樣本用於判斷,剩餘的作爲測試。


交叉驗證法

將數據集D劃分爲k個大小相似的互斥子集,每個子集Di都儘可能保持數據分佈的一致性,即都從D中通過分層採樣得到。每次用k-1個子集的並集作爲訓練集,剩下的那個子集作爲測試集,總共可獲得k組訓練/測試集,並進行訓練,得到k個測試結果,以它們的均值作爲最後輸出

交叉驗證法的穩定性和保真性很大程度上取決於k值,通常取值爲10的稱爲“10折交叉驗證”,其他也有k=5或k=20等。

與留出法相似,數據集D的劃分也存在多種方式,通常會再對k折交叉驗證的過程整體進行p次最終的評估計算,最後求這p次的均值。常見的有10次10折交叉驗證

10次10折交叉驗證的方式相當於進行100次留出法驗證

留一法:交叉驗證的特例。當數據集不夠龐大時,可以採用留一法,即對所有樣本進行唯一分類。假設D數據集合中有m個樣本,那麼只有唯一方式劃分爲m個子集,每個子集包含一個樣本。(其中每一次在17個樣本的集合中,將16個作爲訓練集,1個作爲測試集)絕大多數小數據量的情況下,留一法中被實際評估的模型與期望評估的用D訓練出的模型很相似


自助法

【引言】在留出法和交叉驗證發中,由於保留了一部分樣本用於測試,因此實際評估的模型所使用的訓練集是比D要小的,這必然會引入一些因訓練樣本規模不同而導致的估計偏差。而留一法的樣本規模變化最小(只比D少一個樣本),但是複雜度太高。

自助法:直接以自助採樣法爲基礎,給定包含m個樣本的數據集D,對它進行採樣產生數據集D’:每次隨機從D中挑選一個樣本,將其拷貝放入D‘,然後再將該樣本放回初始數據集D中,使得該樣本在下次採樣時仍有可能被採到。這個過程重複m次後,就得到了包含m個樣本的數據集D’(D和D‘的規模相同,但是D’中可能有重複樣本,也可能有的樣本一次未出現過)。

通過計算可知(書P27,已推導),通過自助採樣,初始數據集D中約有36.8%的樣本未出現在採集數據集D‘中。

因此,用D‘作爲訓練集,D\D’作爲測試集,以此保證實際評估模型與期望評估模型規模,這樣測試的結果稱爲包外估計

【利】自助法有利於集成學習,因爲它能從初始數據集中產生多個不同的訓練集;且針對數據集較小、難以有效劃分訓練/測試集的情況下很有效果。
【弊】自助法產生的數據改變了初始數據集的分佈,會引入估計偏差。因此,在數據量較大的情況下,還是使用交叉驗證發和留出法較爲合適。

個人界定:當數據集規模小於1000樣本時,可以考慮使用自助法;當數據集規模小於300樣本時,可以考慮使用留一法。當然,具體情況還需考慮計算機處理效率。

調參與最終模型

算法參數配置不同,學得模型的性能也會有顯著差別。因爲很多參數僅在實數範圍內取值,因此對每種參數配置都訓練出模型是不可取的,需要給參數選定一個範圍變化步長

例如:[0, 0.2]範圍內以0.05爲步長可以劃分爲[0, 0.05]、[0.05, 0.1]、[0.1, 0.15]、[0.15, 0.2]這4個區間,同時產生了0、0.05、0.1、0.15、0.2這5個候選值,然後在其中產生選定值。

這樣產生的選定值往往不是最佳值,但也是綜合了計算開銷和性能估計之間進行折中的結果。

試想,如果就像上述例子所說的5個候選值,而對於某一個算法,有3個參數需要調,那麼就有5*5*5=125個模型需要考察,這將需要很強大的學習過程以及大量的調參工程。

值得一提的是,往往無論我們採用留出法、交叉驗證法還是自助法,通常我們只使用了一部分數據來訓練模型因此,還需要在模型選擇完成後(此時學習算法、參數配置已經確定的情況下),對整個數據集D進行重新訓練,即對全部m個樣本進行訓練的結果纔是我們最終提交給用戶的模型。


驗證集

模型評估與選擇之後,用於評估測試的數據集。
在對比不同模型的泛化能力時,通常利用測試集上的判別效果來估計模型在實際使用時的泛化能力,而把訓練數據另外劃分爲訓練集和驗證集,然後基於驗證集上的性能來進行模型選擇和調參。(具體可以想想爲內測公測的過程)


機器學習種的參數

算法參數:也被稱爲超參數,數目通常在10以內。一般由人工設定多個參數候選值後產生模型。
模型參數:數目可以很多。如大型的深度學習項目中,參數甚至可以達到上百億。一般通過學習來產生多個候選模型。(如:神經網絡在不同輪數時停止訓練)

上述兩者的調參方式相似,均是產生多個模型之後,基於某種評估方法對參數進行選擇


3、性能度量

對學習器的泛化性能進行評估,不僅需要有效可行的實驗估計方法,還需要有衡量模型泛化能力的評價標準,這就是性能度量。

性能度量反映了任務需求,在對比不同模型的能力時,使用不同的性能度量往往會導致不同的評判結果,這意味着模型的好壞是相對的。

模型的好壞取決於:算法、數據和任務需求三大要素。

正如機器學習中的損失函數所提到的,將預測結果f(x)與真實標記y進行比較,正如迴歸任務中的均方誤差MSE;更一般的,對於數據分佈D和概率密度分佈p(·),均方誤差可以描述爲其積分(書P29頁)。

概率密度:某個隨機變量的輸出值在某個確定的取值點附近的可能性的函數。落在某個區域內的概率即爲概率密度函數在該區域的積分。


3.1錯誤率與精度

錯誤率精度是分類任務中最常用的兩種性能度量。既適用於二分類任務,頁適用於多分類任務。
E(f;D)=1mi=1mI(f(xi)yi)E(f;D)=\frac1m\sum_{i=1}^mI(f(x_i)≠y_i)
其中 I 爲指示函數,若爲真,則爲1;若爲假,則爲0。

if (預測結果 ≠ 實際標籤)爲真
	則 I 返回1
	否則 I 返回0
sum(I 的全部結果)
avg(sum)

然而,錯誤率僅僅是對整體性能的評估,例如,100個瓜裏有90個是好瓜,那麼這100個瓜的好瓜率就是90%,相當於精度;而壞瓜率就是10%,相當於錯誤率。

而有時候,人們更傾向於瞭解從100個瓜中,選出50個瓜,這50個瓜的好瓜率爲多少。

因此,錯誤率err和精度acc是最常用的用來衡量性能的指標之一。

3.2查準率、查全率和F1

相比較瞭解整體的準確與否,有時候,人們更希望瞭解經過檢索或挖掘處理後的信息的正確率如何

查準率P:全部已查樣例中正例所佔的比例,基底爲全部所查樣例*。
查全率R:全部正例中,包括漏檢樣例中*,查出來是正例的樣例所佔的比例,基底爲全部正例

真正例:TP
假正例:FP(誤檢)
用於計算查準率PP=TPTP+FPP=\frac {TP}{TP+FP}

真反例:TN
假反例:FN(漏檢)
其中,TP+FP+TN+FN=樣本總數
用於計算查全率PR=TPTP+FNR=\frac {TP}{TP+FN}

其中,假反例就是正例,因爲它被漏檢了。

查全率和查準率是一對矛盾的度量。查準率高時,查全率往往偏低;而查全率高時,查準率往往偏低。無法同時保證查全率和查準率,通常脂會在簡單的任務中,才能使這兩個概率都很高。

通常情況下,可以根據學習器的預測結果對樣例進行排序,排在前面的是學習器認爲“最可能”是正例的樣本,排在最後的則是”最不可能“是正例的樣本。因此,每次都可以計算並分別以當前的查全率、查準率爲橫軸和縱軸進行作圖,就可以得到”P-R圖”或PR曲線

平衡點(BEP):作爲綜合考慮查準率和查全率的性能度量,它是查準率=查全率時的取值。

F1度量(調和平均)F1=2PRP+R=2TP+TPTNF1= \frac{2*P*R}{P+R} = \frac{2*TP}{樣例總數+TP-TN}
實爲:1F1=12(1P+1R)\frac1{F1} = \frac12 * (\frac1P+\frac1R)

1、當需要儘可能少打擾用戶,推送更準確的內容給用戶時,查準率顯得更爲重要。
2、而當進行逃犯信息檢索時,爲了保證沒有漏網之魚,查全率就顯得更爲重要。

因此,根據對查準率和查全率的不同偏好,可以將F1度量改爲更加一般的形式:Fβ
Fβ=(1+β2)PR(β2P)+RF_β = \frac{(1+β^2)*P*R}{(β^2*P)+R}
其中β>0度量了查全率對查準率的相對重要性:
1、當β=1時,Fβ退化爲F1;
2、β>1時,查全率R有更大的影響;
3、β<1時,查準率P有更大的影響。
(觀察分母)

針對二分類混淆矩陣的兩種計算方法

宏觀法:計算查準率和查全率,再計算平均值,從而得到宏查準率(macro-P)和宏查全率(macro-R)以及宏F1(macro-F1)
微觀法:將混淆矩陣對應元素進行平均後的TP、FP、TN、FN,然後得到微查準率(micro-P)和微查全率(micro-R)微F1(micro-F1)

計算公式與此前的P、R和F1相同

因此,查準率P和查重率R是利用全局域來衡量性能地指標之一。

3.3 ROC與AUC

閾值是用於界定正類和反類的關鍵。將預測值與閾值比較,其概率預測結果的好壞直接決定了學習器的泛化能力。

例如,根據預測結果的判定類別,將測試樣本進行排序,最可能是正例的排在最前面,最不可能是正例的排在最後面。因此,可以在該排序列表中找到一個**截斷點(閾值)**將樣本集分爲兩個部分,前半部分作爲正例,後半部分作爲反例。**可以根據任務需求的不同,決定截斷點(閾值)的位置。**若截斷點靠前,則更重視查準率P;若截斷點靠後,則更重視查全率R。

排序本身的質量的好壞,體現了綜合考慮學習器在不同任務下的“一般情況下泛化性能”的好壞。ROC曲線(受試者工作特徵曲線-Receiver Operating Characteristic)則便是以此作爲出發點來研究學習器泛化性能的有力工具。

ROC曲線:根據學習器的預測結果對樣例進行排序,按此順序逐個把樣本作爲正例進行預測,每次計算出兩個重要量的值,分別以它們爲橫、縱座標作圖,就得到了“ROC曲線”。與P-R曲線不同的是,ROC曲線的橫軸是假正例率(FPR),縱軸是真正例率(TPR)
FPR=TPTP+FNFPR = \frac{TP}{TP+FN}
TPR=FPTP+FPTPR = \frac{FP}{TP+FP}

AUC(Area Under ROC Curve):指的是ROC曲線下的面積。因爲與P-R圖有所不同的是,當兩個學習器的ROC曲線發生交叉,則難以一般性地斷言兩者孰優孰劣,因此需要藉助AUC來得出結果。

因此,ROC及AUC是利用面積來衡量泛化性能地工具和指標之一。且AUC中引用了懲罰計算機制。

3.4 代價敏感錯誤率與代價曲線

在進行分類的過程中,由於錯誤的分類,往往會產生不同的損失或代價。爲了權衡不同類型錯誤所造成的不同損失,可以錯誤賦予“非均等代價”。

以二分類任務爲例,定義代價:
costijijcostii=0cost_{ij}表示將第i類樣本誤判爲j類樣本的代價,一般的,cost_{ii}=0
且在代價中,重要的是代價的比值而非絕對值,損失程度越大,互相錯認的兩個類別間的差值就越大。

代價敏感(cost-sensitive):與前述三種度量標準不同之處在於其建立在非均等代價基礎之上,前面三種方式都默認數據代價是均等存在的。在非均等代價情況下,我們希望最小化總體代價,而不是最小化錯誤次數

通常情況下,用的最多的依然是錯誤率與精度,其次是ROC/AUC或查準/查全率。

4、比較檢驗

對於學習其性能評估,經過前述的幾個步驟可知:
1、需要對數據進行預處理(前期工作);
2、利用留出法、交叉驗證發等進行實驗評估;
3、對訓練好的學習器進行實踐預測,利用精度/錯誤率、ROC/AUC等方法獲得學習器的泛化性能的度量結果,然後就行比較

那麼,怎樣進行比較呢?

要知道,我們需要比較的是泛化性能,但是通過實驗評估方法獲得的卻是測試集上的性能,因此與訓練集的結果可能未必相同;其次,測試集的選擇也有一定的影響,包含測試樣例的不同也會導致測試結果不同。最後,機器學習算法本身具有一定的隨機性,參數相同的情況下也可能產生不同的結果。

4.1統計假設檢驗(hypothesis test)

在現實任務中,我們無法知道學習器的泛化錯誤率,只能知道它的測試錯誤率,且泛化錯誤率也許會和測試錯誤率相差甚大。但是一般情況下,兩者之間的差別不會特別大,因此可以利用測試錯誤率估推出泛化錯誤率的分佈


5、偏差與方差

對學速算法除了通過實驗估計其泛化性能,人們往往還希望瞭解它爲什麼具有這樣的性能——利用偏差-方差分解是解釋學習算法泛化性能的一種重要工具。
E(f;D)=bias2(x)+var(x)+δ2E(f;D) = bias^2(x) + var(x) + δ^2
推導過程見書P45頁,也就是說,泛化誤差可分解爲偏差、方差和噪聲之和。

偏差:度量了學習算法的期望預測與真實結果的偏離程度,刻畫了學習算法本身的擬合能力
方差:度量了同樣大小的訓練集的變動所導致的學習性能的變化,刻畫了數據擾動所造成的影響;
噪聲:表達了當前任務上任何學習算法所能達到的期望泛化誤差的下屆,刻畫了學習問題本身的難度。

因此可以看出,泛化性能是由學習算法的能力、數據的充分性以及學習任務本身的難度所共同決定的。給定了學習任務,爲了取得好的泛化性能,則需使偏差較小,即能夠充分擬合數據,並且使方差較小,即使得數據擾動產生的影響小。且偏差和方差分別在數據訓練的前期和後期佔據了主導地位,取決於訓練集的少或多,以及擬合程度的不同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章