機器學習讀書筆記(二)

機器學習讀書筆記

第二章 模型與評估

2.1 經驗誤差與過擬合

錯誤率

通常我們把分類錯誤的樣本數佔樣本總數的比例稱爲“錯誤率”(error rate),即如果在 mm 個樣本中有 aa 個樣本分類錯誤,則錯誤率 E=a/mE = a/m; 相應的,1a/m1 - a/m 稱爲“精度”(accuracy),即 “精度 = 1 - 錯誤率”。更一般地,我們把學習器的實際預測輸出與樣本的真實輸出之間的差異稱爲“誤差”(error),學習器在訓練集上的誤差稱爲“訓練誤差”(training error)或“經驗誤差”(empirical error),在新樣本上的誤差稱爲“泛化誤差”(generalization error)。顯然,我們希望得到泛化誤差小的學習器。然而,我們事先並不知道樣本是什麼樣,實際能做的是努力使經驗誤差最小化。

過擬合

當學習器把訓練樣本學習得“太好”了的時候,很可能已經把訓練樣本自身的一些特點當作了所有潛在樣本都會具有一般性質,這樣就會導致泛化性能下降,這種現場在機器學習中,稱爲“過擬合”。

過擬合是機器學習面臨的關鍵障礙,且過擬合無法避免,我們所能做的只是“緩解”,或者說減小其風險。關於這一點,可以大致這樣理解:機器學習面臨的問題通常是NP難甚至更難,而有效的學習算法必然是多項式時間內運行完成,若可徹底避免過擬合,則通過經驗誤差最小化就能獲得最優解,這就是意味着我們構造性地證明了P=NPP = NP;因此,只要相信PNPP \ne NP,過擬合就不可避免。

NP 問題(完全多項式非確定性問題,Non-Deterministic Polynomial Complete Problems)

NP 問題是指一個複雜問題不能確定是否多項式時間內找到答案,但是可以在多項式時間內驗證答案是否正確。

2.2 評估方法

通常,我們可以通過實驗測試來對學習器的泛化誤差進行評估並進而做出選擇。爲此,我們需要使用一個“測試集”(testing error) 來測試學習器對新樣本的判別能力,然後以測試集上的"測試誤差"(testing error)作爲泛化誤差的近似。通常我們假設測試樣本也是從樣本真實分佈中獨立同分步採樣而得,但需要注意的是,測試集應該與訓練集互斥,即測試樣本儘量不在訓練集中出現、未在訓練過程中使用過。

獨立同分布(iid, independently identically distribution)

在概率論理論中,指隨機過程中,任何時刻的取值都爲隨機變量,如果這些隨機變量服從同一分佈,並且相互獨立,那麼這些隨機變量是獨立同分布。

如果隨機變量X1X_1X2X_2 相互獨立,是指X1X_1 的取值不影響X2X_2 的取值,X2X_2 的取值也不影響X1X_1 的取值且隨機變量X1X_1X2X_2 服從 同一分佈,這意味着X1X_1X2X_2 具有相同的分佈形狀和相同的分佈參數,對離隨機變量具有相同的分佈律,對連續隨機變量具有相同的概率密度函數,有着相同的分佈函數,相同的期望、方差。

示例——擲骰子

  • 獨立

    每次抽樣之間是沒有關係,互不影響的;

    就像拋骰子,每次拋到幾就是幾,這就是獨立的,但如果要求兩次拋的和大於8,其餘的不算,那麼第一次拋和第二次拋就不獨立了,因爲第二次拋的時候結果是和第一次相關的。

  • 同分布

    每次抽樣,樣本都服從同一個分佈。

    拋骰子每次得到任意點數的概率都是 16\frac{1}{6} ,這就是同分布的。但如果第一次拋的是6面的骰子,第二次拋的是一個正12面體的骰子,就不再是同分布了。

如果我們只有一個包含mm 個樣例的數據集D={(x1,y1),(x2,y2),,(xm,ym)}D = \lbrace (x_1, y_1), (x_2, y_2), \cdots, (x_m, y_m) \rbrace,既要訓練,又要進行測試,怎麼樣才能做到呢?答案是:通過對DD 進行適當的處理,從中產生出訓練集SS 和測試集TT 。下面介紹幾中常見的做法。

2.2.1 留出法

“留出法”(hold-out)直接將數據集DD劃分爲兩個互斥的集合,其中一個集合作爲訓練集 SS ,另一個作爲測試集 TT,即 D=STD = S \bigcup TST=S \bigcap T = \emptyset, 在 SS 上訓練出模型後,用 TT 來評估其測試誤差,作爲對泛化誤差的估計。

需要注意的是,訓練/測試集的劃分要儘可能保持數據分佈的一致性,避免因數據劃分過程引入額外的偏差而對最終結果產生影響。如果從採樣(sampling)的角度來看待數據集的劃分過程,則保留出類別比例的採樣方式通常稱爲"分層採樣"(stratified sampling)。

分層抽樣

它是從一個可以劃分成不同子總體(或稱爲層)的總體中,按規定的比例從不同層中隨機抽取樣品(個體)的方法。

  • 優點

    樣本的代表性比較好,抽樣誤差比較小。

  • 缺點

    抽樣手續較簡單隨機抽樣還要繁雜些。

留出法,使用過程中,常見的做法是將大約2/34/52/3 \sim 4/5 的樣本用於訓練,剩餘樣本用於測試。

2.2.2 交叉驗證法

“交叉驗證法”(cross validation) 先將數據集DD 劃分爲 kk 個大小相似的互斥子集,即,D=D1D2DkD = D_1 \bigcup D_2 \bigcup \cdots D_kDiDj=(ij)D_i \bigcap D_j = \emptyset (i \ne j)。每個子集 DiD_i 都儘可能保持數據分佈一致性。即從DD中通過分層採樣得到,然後,每次用 k1k-1 個子集的並集作爲訓練集,餘下的那個子集作爲測試集;這樣就可以獲得 kk 個測試結果的均值。顯然,交叉驗證法評估結果的穩定性和保真性在很大程度上取決於 kk 的取值,爲強調這一點,通常把交叉驗證法稱爲**"kk 折交叉驗證"**(kk - fold cross validation)。kk 最常用的取值是 10,此時稱爲 10 折交叉驗證;其他常用的 kk 值有 5205 、 20 等。

2.2.3 自助法

當數據集較小,難以有效劃分訓練/測試集時,“自助法”(bootsrapping) 很有用,如果初始數據量足夠時,留出法和交叉驗證法更常用一些。

自助法,直接以自助採樣(bootstrap sampling)爲基礎。給定包含 mm 個樣本的數據集 DD ,我們對它進行採樣產生數據集 DD':每次隨機從DD 中挑選一個樣本,將其拷貝放入 DD',然後再將該樣本放回初始數據集 DD 中,使得該樣本在下次採樣時,仍有可能被採到;這個過程重複執行 mm 次後,我們就得到了包含 mm 個樣本的數據集 DD' ,這就是自助採樣的結果。顯然,DD 中有一部分樣本會在 DD' 中多次出現,而另一部分樣本不出現。可以做一個簡單估計,樣本在 mm 次採樣中始終不被採到的概率是 (11m)m(1 - \frac{1}{m})^m,取極限得到
limm(11m)m1e0.368(2.1) \lim_{m \mapsto \infty}(1-\frac{1}{m})^m \mapsto \frac{1}{e} \approx0.368 \tag{2.1}
即,通過自助採樣,初始數據 DD 中約有 36.8%36.8 \% 的樣本未出現在採樣數據集 DD' 中。這樣,實際評估的模型與期望評估的模型都使用mm個訓練樣本,而我們仍有數據總量約爲 1/31/3 的、沒在訓練集中出現的樣本用於測試。這樣的測試結果,亦稱"包外估計"(out-of-bag estimate)。

公式 2.1,推導

根據兩個重要極限定理,第二重要極限定理:
limn(1+1n)n=elimn(1+n)1n=e \lim_{n \mapsto \infty}(1 + \frac {1}{n})^n = e \quad 或 \quad \lim_{n \mapsto \infty}(1+n)^{\frac{1}{n}} = e
則式中,
limm(11m)m=limm[(1+1m)m]1=e1 \lim_{m \mapsto \infty}(1 - \frac{1}{m})^m = \lim_{m \mapsto \infty}[(1 + \frac{1}{-m})^{-m}]^{-1} =e^{-1}
此公式得證。

以上公式的推導過程,詳見兩個重要極限的推導過程

2.2.4 調參與最終模型

大多數的學習算法都有些參數需要設定,參數配置不同,學得的模型的性能往往有顯著差別。因此,在進行模型評估與選擇時,除了要對適用學習算法進行選擇,還需要對算法參數進行設定,這就是通常所說的"參數調節"或簡稱"調參"。

我們通常把學得的模型在實際使用中遇到的數據稱爲測試數據,爲了加以區分,模型評估與選擇中用於評估測試的數據集通常稱爲"驗證集"(validation set)。

2.3 性能度量

對學習器的泛化性能進行評估,不僅需要有效可行的實驗估計方法,還需要有衡量模型泛化的評價標準,這就是性能度量(performance measure)。性能度量反映了任務需求,在對比不同模型的能力時,使用不同的性能度量往往會導致不同的評判結果。這意味着模型的"好壞"是相對的,什麼樣的模型是好的,不僅取決於算法和數據,還決定於任務需求。

在預測任務中,給定樣例集 D={(x1,y1),(x2,y2),(xn,yn)}D = \lbrace (x_1, y_1), (x_2, y_2), \cdots (x_n, y_n) \rbrace,其中 yiy_i 是示例 xix_i 的真實標記。要評估學習器 ff 的性能,就要把學習器預測結果 f(x)f(x) 與真實標記 yy 進行比較。

迴歸任務最常用的性能度量是"均方誤差"(mean squared error)
E(f;D)=1mi=1m(f(xi)yi)2(2.2) E(f; D) = \frac{1}{m} \sum_{i=1}^m(f(x_i) - y_i)^2 \tag{2.2}
更一般的,對於數據分佈 DD 和概率密度函數 p()p(\cdot),均方誤差可描述爲
E(f;D)=xD(f(x)y)2p(x)dx(2.3) E(f;D) = \int_{x \sim D}(f(x) - y)^2p(x)dx \tag{2.3}

在數學中,[連續型隨機變量的概率密度函數(在不至於混淆時可以簡稱爲密度函數)是一個描述這個隨機變量的輸出值,在某個確定的取值點附近的可能性的函數。而隨機變量的取值落在某個區域之內的概率則爲概率密度函數在這個區域上的積分(。當概率密度函數存在的時候,累積分佈函數是概率密度函數的積分。

定義

對於一維實隨機變量 XX, 設它的積累分佈函數是 FX(x)F_X(x),如果存在可測函數 fX(x)f_X(x),滿足:FX(x)=xfX(t)dtF_X(x) = \int_{- \infty}^x f_X(t)dt,那麼 XX 是一個連續型隨機變量,並且 fX(x)f_X(x) 是它的概率密度函數。

性質

這裏指的是一維連續隨機變量,多維連續變量也類似。

隨機數據的概率密度函數:表示瞬時幅值落在某指定範圍內的概率,因此是幅值的函數。它隨所取範圍的幅值而變化。

密度函數f(x)f(x) 具有下列性質:

  1. f(x)0f(x) \ge 0
  2. f(x)dx=1\int_{- \infty}^{\infty} f(x)dx = 1
  3. P(a<xb)=abf(x)dxP(a< x \le b) = \int_a^bf(x)dx

2.3.1 錯誤率與精度

這是分類任務中最常用的兩種性能度量,既適用於二分類任務,也適用於多分類任務。錯誤率是分類錯誤的樣本數佔樣本總數的比例。精度則是分類正確的樣本佔樣本總數的比例。對樣例集 DD ,分類錯誤率的定義爲
E(f;D)=1mi=1mII(f(xi)yi)(2.4) E(f; D) = \frac{1}{m} \sum_{i=1}^m \mathrm {II}(f(x_i) \ne y_i) \tag{2.4}

精度則定義爲
acc(f;D)=1mi=1mII(f(xi)=yi)=1E(f;D).(2.5) acc(f; D) = \frac{1}{m}\sum_{i=1}^m \mathrm{II}(f(x_i) = y_i) = 1 - E(f; D). \tag{2.5}
更一般的,對於數據分佈 DD 和概率密度函數p()p(\cdot),錯誤率與精度可分別描述爲
E(f;D)=xDII(f(x)y)p(x)dx(2.6) E(f; D) = \int_{x \sim D} \mathrm{II}(f(x) \ne y)p(x)dx \tag{2.6}

acc(f;D)=xDII(f(x)=y)p(x)dx(2.7) acc(f; D) = \int_{x \sim D} \mathrm{II}(f(x) = y)p(x) dx \tag{2.7}

2.3.2 查準率、查全率與 F1F1

以信息檢索爲例,我們經常會關心"檢索出的信息中有多少比例是用戶感興趣的" “用戶感興趣的信息中有多少被檢索出來了”。“查準率”(precision)與"查全率"(recall)是更爲適用於此類需求的性能度量。

對於二類分類問題,可將樣例根據其真實類別與學習器類別預測類別的組合劃分爲真正例(true postive)、假正例(false positive)、真反例(true negative)、假反例(false negative) 四種情形。令 TPTPFPFPTNTNFNFN 分別表示其對應的樣例數,則顯然有$TP + FP + TN + FN = $ 樣例總數。分類結果的"混淆矩陣"(confusion matrix)如表 2.1 所示。

真實情況 預測結果
正例 反例
正例 TP(真正例) FN(假反例)
反例 FP(假正例) TN(真反例)
  • TP:正確地標記爲正,即算法預測它爲正樣本,且這個樣本真實情況也是正樣本;
  • FP:錯誤地標記爲正,即算法預測它爲正樣本,但這個樣本真實情況是負樣本;
  • FN:錯誤地標記爲負,即算法預測它爲負樣本,仩這個樣本真實情況是正樣本;
  • TN:正確地標記爲負,即算法預測它爲負樣本,且這個樣本真實情況也是負樣本;

所以有:
Accuracy==TP+TNTP+TN+FP+FN(2.8) Accuracy = \frac{預測正確的樣本數}{總樣本數} = \frac{TP + TN}{TP + TN + FP + FN} \tag{2.8}

Precision=11=TPTP+FP(2.9) Precision = \frac{預測爲 1 且正確預測的樣本數}{所有預測爲 1 的樣本數} = \frac{TP}{TP + FP} \tag{2.9}

Recall=11=TPTP+FN(2.10) Recall = \frac{預測爲 1 且正確預測樣本數}{真實情況下所有爲1的樣本數} = \frac{TP}{TP + FN} \tag{2.10}

查準率和查全率是一對矛盾的度量。一般來說,查準率高時,查全率往往偏低;而查全率高時,查準率往往偏低。

在實際的模型評估中,單用Precision或者Recall來評價模型是不完整的,評價模型時必須用Precision/Recall兩個值。這裏介紹三種使用方法:平衡點(Break-Even Point,BEP)、F1度量、F1度量的一般化形式。

-BEP是產準率和查全率曲線中查準率=查全率時的取值,如下:

在這裏插入圖片描述

“平衡點”(Break-Even Point,簡稱 BEP)就是這樣一個度量,它是"查準率=查全率"時的取值。如上圖所示,算法的效果爲:A>B>CA > B > C ,但 BEP 還是過於簡化了些,更常用的是 F1F1 度量:
F1=2×P×RP+R=2×TP+TPTN(2.11) F1 = \frac{2 \times P \times R}{P + R} = \frac{2 \times TP}{樣例總數 + TP - TN} \tag{2.11}

F1F1 是基於查準率與查全率的調和平均(harmonic mean) 定義的:
1F1=12(1P+1R) \frac {1}{F1} = \frac {1}{2}\left(\frac {1}{P} + \frac {1}{R}\right)

F1F1 度量的一般形式——FβF_\beta,能讓我們表達出對查準率/查全率的不同偏好,它定義爲:
Fβ=(1+β2)×P×R(β2×P)+R(2.12) F_{\beta} = \frac{(1 + \beta^2) \times P \times R}{(\beta^2 \times P) + R} \tag{2.12}
其中,β>0\beta > 0 度量了查全率對查準率的相對重要性;β=1\beta = 1時退化爲標準的 F1F1β>1\beta > 1 時,查全率有更大影響;β<1\beta < 1時查準率有更大影響。

FβF_{\beta} 是加權調和平均:
1Fβ=11+β2(1P+β2R) \frac {1}{F_{\beta}} = \frac {1}{1+\beta^2}\left( \frac{1}{P} + \frac{\beta^2}{R} \right)
與算法平均(P+R2)\left( \frac{P + R}{2} \right) 和幾何平均 (P×R)(\sqrt{P \times R}) 相比,調和平均更重視較小值

很多時候,我們需要在 nn 個二分類混淆矩陣上綜合考察查準率和查全率。一種直接的做法是先在各混淆矩陣上分別計算出查準率和查全率,記爲(P1,R1),(P2,R2),,(Pn,Rn)(P_1, R_1),(P_2, R_2),\cdots, (P_n, R_n),再計算平均值,這樣就得到了"宏查準率"(macro-P)、“宏查全率”(macro-R),以及相應的"宏 F1"(macro-F1):
macroP=1ni=1nPi(2.13) macro-P = \frac {1}{n}\sum_{i=1}^n P_i \tag{2.13}

macroR=1ni=1nRi(2.14) macro-R = \frac{1}{n} \sum_{i=1}^n R_i \tag{2.14}

macroF1=2×macroP×macroRmacroP+macroR(2.15) macro-F1 = \frac{2 \times macro-P \times macro-R}{macro-P + macro-R} \tag{2.15}

還可以先將各混餚矩陣的對應元素進行平均,得到TPTPFPFPTNTNFNFN 的平均值,分別記爲 TP\overline{TP}FP\overline{FP}TN\overline{TN}FN\overline{FN} ,再基於這些平均值計算出"微查準率"(micro-P)、“微查全率(micro-P)” 和 "微 F1F1"(micro-F1):
microP=TPTP+FP(2.16) micro-P = \frac {\overline{TP}}{\overline{TP} + \overline{FP}} \tag{2.16}

microR=TPTP+FN(2.17) micro-R = \frac{\overline{TP}}{\overline{TP} + \overline{FN}} \tag{2.17}

microF1=2×microR×microRmicroP+microR(2.18) micro-F1 = \frac{2 \times micro-R \times micro-R}{micro-P + micro-R} \tag{2.18}

2.3.3 ROC 與 AUC

很多學習器是爲了測試樣本產生一個實值或概率預測,然後將這個預測值與一個分類閾值(thresh)進行比較,若大於閾值則分爲正類,否則爲反類。

ROC 全稱是"受試者工作特徵"(Receiver Operating Characteristic) 曲線,它源於"二戰"中用於敵機檢測的雷達信號分析技術,二十世紀六七十年代開始被用於一些心理學、醫學檢測應用中,此後被引入機器學習領域。

ROC 曲線的縱軸是"真正例率"(True Positive Rate,簡稱 TPR),橫軸是"假正例率"(False Positive Rate,簡稱 FPR),兩者的定義爲:
TPR=TPTP+FN(2.19) TPR = \frac{TP}{TP + FN} \tag{2.19}

FPR=FPTN+FP(2.20) FPR = \frac{FP}{TN + FP} \tag{2.20}

在這裏插入圖片描述

ROC 曲線與 AUC

若一個學習器 ROC 曲線被另一個學習器的曲線完全"包住",則可斷言後者的性能優於前者;若兩個學習器的 ROC 曲線發生交叉,則難以一般性地斷言兩者孰優孰劣。此時如果一定要進行比較,則較爲合理的判據是比較 ROC 曲線下的面積,即AUC(Area Under ROC Curve)。

從定義可知,AUC 可通過對 ROC 曲線下各部分的面積求和而得,假定ROC曲線是由座標爲{(x1,y1),(x2,y2),,(xm,ym)}\lbrace (x_1, y_1), (x_2, y_2), \cdots,(x_m, y_m) \rbrace 的點按序連接而形成(x1=0,xm=1)(x_1=0, x_m=1),則 AUC 可估算爲
AUC=12i=1m1(xi+1xi)(yi+yi+1)(2.21) AUC = \frac{1}{2} \sum_{i=1}^{m-1}(x_{i+1}-x_i)\cdot(y_i + y_{i+1}) \tag{2.21}
形式化地看,AUC考慮的是樣本預測的排序質量,因此它與排序誤差有緊密聯繫。給定m+m^+ 個正例和 mm^- 個反例,令D+D^+DD^- 分別表示正、反例集合,則排序"損失"(loss)定義爲
lrank=1m++mx+D+xD((IIf(x+)<f(x))+12IIf(x+)=f(x)) l_{rank} = \frac{1}{m^+ + m^-}\sum_{x^+\in D^+}\sum_{x^- \in D^-}\left( \left(\mathrm{II}f(x^+)<f(x^-) \right) + \frac{1}{2}\mathrm{II}f(x^+)=f(x^-) \right)
即考慮每一個對正、反例,若正例的預測值小於反例,則記一個"罰分",若相等,則記 0.5 個"罰分"。容易看出,lrankl_{rank} 對應是 ROC 曲線之上的面積:若一個正例在 ROC 曲線上對應標記點的座標爲 (x,y)(x, y),則 xx 恰是排序在其之前的反例佔的比例,即假正例率。因此有
AUC=1lrank(2.23) AUC = 1 - l_{rank} \tag{2.23}

2.4 比較檢驗

機器學習中性能比較這件事要比大家想像的複雜的多,這裏面涉及到幾個重要方面:

  1. 首先,我們希望比較的是泛化性能,然而通過實驗評估方法我們獲得的是測試集上的性能,兩者的對比結果可能未必相同;
  2. 測試集上的性能與測試集本身的選擇有很大關係,且不論使用不同大小的測試集會得到不同的結果,即使是使用相同大小的測試集,若包含的測試樣例不同,測試結果也會有不同;
  3. 很多機器學習算法本身有一定的隨機性,即便用相同的參數設置在同一個測試集上很多次運行,其結果也會有不同。

統計假設檢驗爲我們進行學習器性能比較提供了重要依據。常用的幾種機器學習性能比較方法有:

  • 假設檢驗
  • 交叉驗證 tt 驗證
  • McNemar 檢驗
  • Friedman 檢驗與 Nemenyi 後續檢驗

2.5 偏差與方差

對學習算法除了通過實驗估計其泛化性能,人們往往還希望瞭解它"爲什麼"具有這樣的性能。“偏差—方差分解”(biase-variance decomposition)是解釋學習算法泛化性能的一種重要工具。

對測試樣本 xx, 令 yDy_Dxx 在數據集中的標記,yyxx 的真實標記,f(x;D)f(x; D) 爲訓練集 DD 上學得模型 ffxx 上的預測輸出。以迴歸任務爲例,學習算法的期望預測爲
f(x)=ED[f(x;D)](2.24) \overline{f}(x) = \mathbb{E}_D[f(x; D)] \tag{2.24}
使用樣本數相同的不同訓練集產生的方差爲
var(x)=ED[(f(x;D)f(x)2)](2.25) var(x) = \mathbb{E}_D\left[\left(f(x; D) - \overline{f}(x)^2 \right)\right] \tag{2.25}
噪聲爲
ε2=ED[(yDy)2](2.26) \varepsilon^2 = \mathbb{E}_D\left[\left(y_D - y \right)^2 \right] \tag{2.26}
期望輸出與真實標記的差別稱爲偏差(bias),即
bias2(x)=(f(x)y)2(2.27) bias^2(x) = \left( \overline{f}(x) - y \right)^2 \tag{2.27}
爲了便於討論,假定噪聲期望爲零,即 ED[yDy]=0\mathbb{E}_D[y_D - y] = 0。通過簡單的多項式展開合併,可對算法的期望泛化誤差進行分解:
E(f;D)=bias2(x)+var(x)+ε2(2.28) E(f; D) = bias^2(x) + var(x) + \varepsilon^2 \tag{2.28}
也就是說,泛化誤差可分解爲偏差、方差與噪聲之和。

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