百面機器學習03-經典演算法
01 支援向量機
支援向量機 (Support Vector Machine, SVM)是眾多監督學習萬法中十分出色的一種,幾乎所有講述經典機器學習萬窪的教材都會介紹 。 關於 SVM,流傳著一個關於天使與魔鬼的故事 。
傳說魔鬼和天使玩了一個遊戲 , 魔鬼在桌上放了兩種顏色的球,如圖 3.1 所示 。 魔鬼讓天使用一根木棍將它們分開 。 這對天使來說,似乎太容易了 。 天使不假思索地一擺,便完成了任務 2 如圖 3.2 所示。魔鬼又加入了更多的球 。 隨著球的增多,似乎奇的球不能再被原來的木棍正確分開 , 如圖 3.3 所示 。
SVM 實際上是在為天使找到木棒的最佳放置位置 , 使得兩邊的球都離分隔它們的木棒足夠遠 3 如圖 3.4 所示 。 依照 SVM 為天使選擇的木棒位置,魔鬼即使按剛才的方式繼續加入新球 ,木棒也能很好地將兩類不同的球分開,如圖 3. 5 所示
看到天使已經很好地解決了用木棒線性分球的問題, 魔鬼又給了天使一個新的挑戰,如圖 3.6 所示 。 按照這種球的擺法,世界上貌似沒有一根木棒可以將它們完美分開 。 但天使畢竟有法力, 他一拍桌子 ,便讓這些球飛到了空中,然後憑藉念力抓起一張紙片,插在了兩類球的中間,如圖 3.7 所示 。 從魔鬼的角度看這些球,則像是被一條曲線完美的切開了,如圖 3 . 8 所示
後來’ “無聊”的科學家們把這些球稱為“資料”,把木棍稱為“分類面",找到最大間隔的木棒位置的過程稱為 “優化”,拍桌子讓球飛到空中的念力叫“核對映”,在空中分隔球的紙片稱為“分類超平面’’ 。這便是 SVM 的童話故事。
在現實世界的機器學習領域, SVM 涵蓋了各個方面的知識,也是面試題目中常見的基礎模型 。 本節的第 1 個問題考察 SVM 模型推導的基礎知識;第 2 題~第 4 題則會側重對核函式( Kernel Function )的理解。
知識點:SVM 模型推導,核函式 , SMO (Sequential Minimal Optimization )演算法
問題1:在空閱上線性可分的兩類點,分別向 SVM 分類的超平面上做投影,這些點在超平面上的投影仍然是線性可分的嗎?
首先明確下題目中的概念,線性可分的兩類點,即通過一個超平面可以將兩類點完全分開 , 如圖 3 . 9 所示。假設綠色的超平面(對於二維空間來說,分類超平面退化為一維直線):為 SVM 演算法計算得出的分類面,那麼兩類點就被完全分開 。 我們想探討的是:將這兩類點向綠色平上做投影,在分類直線上得到的黃棕兩類投影點是否仍然線性可分 ,
如圖 3.10所示
顯然一眼望去,這些點在臺類超平面(綠色直線)上相互間隔,並不是線性可分的 。 考慮一個更簡單的反例,設想、三維空間中只有兩個樣本點,每個點各屬於一類的分類任務,此時 SVM 的分類超平面(直線)就是兩個樣本點連線的中垂線,兩個點在臺類面(直線)上的投影會落到這條直線上的同一個點,自然不是線性可分的。
但實際上,對於任意線性可分的兩組點,它們在 SVM 分類的超平面上的投影都是線性不可分的 。 這聽上去有些不可思議,我們不妨從二維情況進行討論,再推廣到高維空間中。
由於 SVM 的分類超平面僅由支援向量決定(之後會證明這結論),我們可以考慮一個只含支援向量 SVM 模型場景 。 使用反證法來證明 。 假設存在一個 SVM 分類超平面使所有支援向量在該超平面上的投影依然線性可分,如圖 3.11 所示 。 根據簡單的初等幾何知識不難發現,圖中 AB兩點連線的中垂線所組成的超平面(綠色虛線);是相較於綠色實線超平面更優的解,這與之前假設綠色實線超平面為最優的解相矛盾 。 考慮最優解對應的綠色虛線。兩組點經過投影后,並不是線性可分的。
我們的證明目前還有不嚴謹之處,即我們假設了僅有支援向量的情況,會不會在超平面的變換過程中支援向量發生了改變,原先的非支援向量和支援向量發生了轉化呢? 下面我們證明 SVM 的分類結果僅依賴於支援向量。考慮 SVM 推導中的 KKT 條件要求
∇
ω
L
(
ω
∗
,
β
∗
,
α
∗
)
=
ω
∗
−
∑
i
=
1
N
α
i
∗
y
i
x
i
=
0
∇
β
L
(
ω
∗
,
β
∗
,
α
∗
)
=
−
∑
i
=
1
N
α
i
∗
y
i
=
0
α
i
∗
g
i
(
ω
∗
)
=
0
,
i
=
1
,
…
,
N
g
i
(
ω
∗
)
⩽
0
,
i
=
1
,
…
,
N
α
i
∗
⩾
0
,
i
=
1
,
…
,
N
\begin{array}{c} \nabla_{\omega} L\left(\omega^{*}, \beta^{*}, \alpha^{*}\right)=\omega^{*}-\sum_{i=1}^{N} \alpha_{i}^{*} y_{i} x_{i}=0 \\ \nabla_{\beta} L\left(\omega^{*}, \beta^{*}, \alpha^{*}\right)=-\sum_{i=1}^{N} \alpha_{i}^{*} y_{i}=0 \\ \alpha_{i}^{*} g_{i}\left(\omega^{*}\right)=0, \quad i=1, \ldots, N \\ g_{i}\left(\omega^{*}\right) \leqslant 0, i=1, \ldots, N \\ \alpha_{i}^{*} \geqslant 0, \quad i=1, \ldots, N \end{array}
∇ωL(ω∗,β∗,α∗)=ω∗−∑i=1Nαi∗yixi=0∇βL(ω∗,β∗,α∗)=−∑i=1Nαi∗yi=0αi∗gi(ω∗)=0,i=1,…,Ngi(ω∗)⩽0,i=1,…,Nαi∗⩾0,i=1,…,N
結合式 (3.3) 和式 (3.4) 兩個條件不難發現,當
g
i
(
ω
∗
)
<
0
g_{i}\left(\omega^{*}\right)<0
gi(ω∗)<0 時
,
,
,必有
α
i
∗
=
0
,
\alpha_{i}^{*}=0,
αi∗=0, 將這一結果與拉格朗日對偶優化問題的公式相比較
L
(
ω
∗
,
α
∗
,
β
∗
)
=
1
2
ω
∗
2
+
∑
i
=
1
N
α
i
∗
g
i
(
ω
∗
)
L\left(\omega^{*}, \alpha^{*}, \beta^{*}\right)=\frac{1}{2} \omega^{* 2}+\sum_{i=1}^{N} \alpha_{i}^{*} g_{i}\left(\omega^{*}\right)
L(ω∗,α∗,β∗)=21ω∗2+i=1∑Nαi∗gi(ω∗)
其中,
g
i
(
ω
∗
)
=
−
y
i
(
ω
∗
⋅
x
i
+
β
∗
)
+
1
g_{i}\left(\omega^{*}\right)=-y_{i}\left(\omega^{*} \cdot x_{i}+\beta^{*}\right)+1
gi(ω∗)=−yi(ω∗⋅xi+β∗)+1
可以看到,除支援向量外,其他係數均為
0
,
0,
0, 因此 SVM 的分類結果與僅使用支援向量的分大結果一致,說明 SVM 的分類結果僅依賴於支援向量,這也是 SVM 擁有極高執行效率的關鍵之一。於是,我們證明了對於任意線性可分的兩組點,它們在 SVM 分類的超平面上的投影都是線性不可分的。
實際上,該問題也可以通過凸優化理論中的超平面分離定理( Separating Hyperplane Theorem, SHT ) 更加輕巧地解決。該定理描述的是,對於不相交的兩個凸集,存在一個超平面,將兩個凸集分離。對於二維的情況,兩個凸集間距離最短兩點連線的中垂線就是一個將它們分離的超平面。
藉助這個定理,我們可以先對線性可分的這兩組點求各自的凸包。不難發現,SVM 求得的超平面就是兩個凸包上距離最短的兩點連線的中垂線,也就是 SHT 定理二維情況中所闡釋的分類超平面。根據凸包的性質容易知道,凸包上的點要麼是樣本點,要麼處於兩個樣本點的連線上。因此,兩個凸包間距離最短的兩個點可以分為三種情況:兩邊的點均為樣本點,如圖 3.12 ( a ) 所示; 兩邊的點均在樣本點的連線上,如圖 3.12 ( b ) 3.12(\mathrm{b}) 3.12(b) 所示; 一邊的點為樣本點, 另一邊的點在樣本點的連線上,如圖 3.12 ( c \mathrm{c} c ) 所示。從幾何上分析即可知道,無論哪種情況兩類點的投影均是線性不可分的。
至此,我們從 SVM 直觀推導和凸優化理論兩個角度揭示了題目的真相。其實,在機器學習中還有很多這樣看上去顯而易見,細究起來卻不可思議的結論。
問題2:是否存一組引數使 SVM 訓練誤差為0?
一個使用高斯核 ( K ( x , z ) = e − ∣ x − z ∣ 2 / γ 2 ) \left(K(x, z)=\mathrm{e}^{-|x-z|^{2} / \gamma^{2}}\right) (K(x,z)=e−∣x−z∣2/γ2) 訓練的 SVM 中,試證明若給定訓練集中不存在兩個點在同一位置,則存在一組引數 { α 1 , … , α m , b } \left\{\alpha_{1}, \ldots, \alpha_{m}, b\right\} {α1,…,αm,b} 以及引數 γ \gamma γ 使得該 SVM 的訓練誤差為 0 。
分析與解答
根據 SVM 的原理,我們可以將 SVM 的預測公式可寫為
f
(
x
)
=
∑
i
=
1
m
α
i
y
(
i
)
K
(
x
(
i
)
,
x
)
+
b
f(x)=\sum_{i=1}^{m} \alpha_{i} y^{(i)} K\left(x^{(i)}, x\right)+b
f(x)=i=1∑mαiy(i)K(x(i),x)+b
其中
{
(
x
(
1
)
,
y
(
1
)
)
,
…
,
(
x
(
m
)
,
y
(
m
)
)
}
\left\{\left(x^{(1)}, y^{(1)}\right), \ldots,\left(x^{(m)}, y^{(m)}\right)\right\}
{(x(1),y(1)),…,(x(m),y(m))} 為訓練樣本,而
{
α
1
,
…
,
α
m
,
b
}
\left\{\alpha_{1}, \ldots, \alpha_{m}, b\right\}
{α1,…,αm,b} 以及高斯核引數
γ
\gamma
γ 為訓練樣本的引數。由於不存在兩個點在同一位置,因此對於任意的
i
≠
j
,
i \neq j,
i=j, 有
∥
x
(
n
)
−
x
(
j
)
∥
⩾
ε
∘
\left\|x^{(n)}-x^{(j)}\right\| \geqslant \varepsilon_{\circ}
∥∥x(n)−x(j)∥∥⩾ε∘ 我們可以對任意
i
,
i,
i, 固定
α
i
=
1
\alpha_{i}=1
αi=1 以及
b
=
0
,
b=0,
b=0, 只保留引數
γ
,
\gamma,
γ, 則有
f
(
x
)
=
∑
i
=
1
m
α
i
y
(
i
)
K
(
x
(
i
)
,
x
)
+
b
=
∑
i
=
1
m
y
(
i
)
K
(
x
(
i
)
,
x
)
=
∑
i
=
1
m
y
(
i
)
e
−
∥
x
−
x
(
i
)
r
2
/
γ
2
\begin{aligned} f(x) &=\sum_{i=1}^{m} \alpha_{i} y^{(i)} K\left(x^{(i)}, x\right)+b \\ &=\sum_{i=1}^{m} y^{(i)} K\left(x^{(i)}, x\right) \\ &=\sum_{i=1}^{m} y^{(i)} \mathrm{e}^{-\| x-x^{(i)} \mathrm{r}^{2} / \gamma^{2}} \end{aligned}
f(x)=i=1∑mαiy(i)K(x(i),x)+b=i=1∑my(i)K(x(i),x)=i=1∑my(i)e−∥x−x(i)r2/γ2
將任意
x
(
i
)
x^{(i)}
x(i) 代入式 (3.9)
f
(
x
(
j
)
)
=
∑
i
=
1
m
y
(
i
)
e
−
∥
x
(
j
)
−
x
(
i
)
∥
2
/
γ
2
f\left(x^{(j)}\right)=\sum_{i=1}^{m} y^{(i)} \mathrm{e}^{-\left\|x^{(j)}-x^{(i)}\right\|^{2} / \gamma^{2}}
f(x(j))=∑i=1my(i)e−∥x(j)−x(i)∥2/γ2
f
(
x
(
j
)
)
−
y
(
j
)
=
∑
i
=
1
,
i
≠
j
m
y
(
i
)
e
−
∥
x
(
j
)
−
x
(
i
)
∥
2
/
γ
2
f\left(x^{(j)}\right)-y^{(j)}=\sum_{i=1, i \neq j}^{m} y^{(i)} \mathrm{e}^{-\left\|x^{(j)}-x^{(i)}\right\|^{2} / \gamma^{2}}
f(x(j))−y(j)=∑i=1,i=jmy(i)e−∥x(j)−x(i)∥2/γ2
∥
f
(
x
(
j
)
)
−
y
(
j
)
∥
⩽
∑
i
=
1
,
i
≠
j
m
e
−
∥
x
(
j
)
−
x
(
i
)
∥
2
/
γ
2
\left\|f\left(x^{(j)}\right)-y^{(j)}\right\| \leqslant \sum_{i=1, i \neq j}^{m} \mathrm{e}^{-\left\|x^{(j)}-x^{(i)}\right\|^{2} / \gamma^{2}}
∥∥f(x(j))−y(j)∥∥⩽∑i=1,i=jme−∥x(j)−x(i)∥2/γ2
則有由題意知
∥
x
(
i
)
−
x
(
j
)
∥
⩾
ε
,
\left\|x^{(i)}-x^{(j)}\right\| \geqslant \varepsilon,
∥∥x(i)−x(j)∥∥⩾ε, 取
γ
=
ε
/
log
m
,
\gamma=\varepsilon / \sqrt{\log m},
γ=ε/logm
, 可將式 (3.12) 重
寫為
∥
f
(
x
(
j
)
)
−
y
(
j
)
∥
⩽
∥
∑
i
=
1
,
i
∗
j
m
e
−
∥
x
(
j
)
−
x
(
i
)
∥
2
/
y
2
∥
⩽
∥
∑
i
=
1
,
i
∗
j
m
e
−
log
m
∥
=
m
−
1
m
<
1
\begin{aligned} \left\|f\left(x^{(j)}\right)-y^{(j)}\right\| & \leqslant\left\|\sum_{i=1, i * j}^{m} \mathrm{e}^{-\left\|x^{(j)}-x^{(i)}\right\|^{2} / y^{2}}\right\| \\ & \leqslant\left\|\sum_{i=1, i * j}^{m} \mathrm{e}^{-\log m}\right\|=\frac{m-1}{m}<1 \end{aligned}
∥∥∥f(x(j))−y(j)∥∥∥⩽∥∥∥∥∥i=1,i∗j∑me−∥x(j)−x(i)∥2/y2∥∥∥∥∥⩽∥∥∥∥∥i=1,i∗j∑me−logm∥∥∥∥∥=mm−1<1
所以,對於任意
x
(
j
)
,
x^{(j)},
x(j), 預測結果
f
(
x
(
j
)
)
f\left(x^{(j)}\right)
f(x(j)) 與樣本真實標籤
y
(
j
)
y^{(j)}
y(j) 的距離小於 1 。注意到,
y
(
j
)
∈
{
1
,
−
1
}
,
y^{(j)} \in\{1,-1\},
y(j)∈{1,−1}, 當訓練樣本為正例,即
y
(
j
)
=
1
y^{(j)}=1
y(j)=1 時,預測結果
f
(
x
(
j
)
)
>
0
,
f\left(x^{(j)}\right)>0,
f(x(j))>0, 樣本被預測為正例; 而當訓練樣本為負例,即
y
(
j
)
=
−
1
y^{(j)}=-1
y(j)=−1 時,預測結果
f
(
x
(
j
)
)
<
0
,
f\left(x^{(j)}\right)<0,
f(x(j))<0, 樣本被預測為負例。因此所有樣本的類別都被正確預測,訓練誤差為 0 。
問題3:訓練誤差為 0 的 SVM 分類器一定存在嗎?
雖然在問題 2 中我們找到了一組引數 { α 1 , … , α m , b } \left\{\alpha_{1}, \ldots, \alpha_{m}, b\right\} {α1,…,αm,b} 以及 γ \gamma γ 使得SVM 的訓練誤差為 0 , 0, 0, 但這組引數不一定是滿足 SVM 條件的一個解。
在實際訓一個不加入鬆弛變數的 SVM 模型時,是否能保證得到的SVM 分類器滿足訓練誤差為 0 呢?
問題 2 找到了一組引數使得 SVM 分類器的訓練誤差為 0 。本問旨在找到一組引數滿足訓練誤差為 0 , 0, 0, 且是 SVM 模型的一個解。
考慮 SVM 模型中解的限制條件
y
(
j
)
f
(
x
(
j
)
)
⩾
1
y^{(j)} f\left(x^{(j)}\right) \geqslant 1
y(j)f(x(j))⩾1 。我們已經得到了
一組引數使得當
y
(
j
)
=
1
y^{(j)}=1
y(j)=1 時
,
f
(
x
(
j
)
)
>
0
;
, f\left(x^{(j)}\right)>0 ;
,f(x(j))>0; 而當
y
(
j
)
=
−
1
y^{(j)}=-1
y(j)=−1 時
,
f
(
x
(
j
)
)
<
0
,
,f\left(x^{(j)}\right)<0,
,f(x(j))<0,因此
y
(
j
)
⋅
f
(
x
(
j
)
)
>
0
y^{(j)} \cdot f\left(x^{(j)}\right)>0
y(j)⋅f(x(j))>0 。現在需要找到一組引數滿足更強的條件,即
y
(
j
)
⋅
f
(
x
(
j
)
)
⩾
1
y^{(j)} \cdot f\left(x^{(j)}\right) \geqslant 1
y(j)⋅f(x(j))⩾1
仍 然 固 定
b
=
0
,
b=0, \quad
b=0, 於 是 預 測 公 式
f
(
x
)
=
∑
i
=
1
m
α
i
y
(
i
)
K
(
x
(
i
)
,
x
)
,
f(x)=\sum_{i=1}^{m} \alpha_{i} y^{(i)} K\left(x^{(i)}, x\right),
f(x)=∑i=1mαiy(i)K(x(i),x), 將
y
(
j
)
f
(
x
(
j
)
)
y^{(j)} f\left(x^{(j)}\right)
y(j)f(x(j)) 展開,有
y
(
j
)
f
(
x
(
j
)
)
=
y
(
j
)
∑
i
=
1
m
α
i
y
(
i
)
K
(
x
(
i
)
,
x
(
j
)
)
=
α
j
y
(
j
)
y
(
j
)
K
(
x
(
j
)
,
x
(
j
)
)
+
∑
i
=
1
,
i
≠
j
m
α
i
y
(
i
)
y
(
j
)
K
(
x
(
i
)
,
x
(
j
)
)
=
α
j
+
∑
i
=
1
,
i
≠
j
m
α
i
y
(
i
)
y
(
j
)
K
(
x
(
i
)
,
x
(
j
)
)
\begin{aligned} y^{(j)} f\left(x^{(j)}\right) &=y^{(j)} \sum_{i=1}^{m} \alpha_{i} y^{(i)} K\left(x^{(i)}, x^{(j)}\right) \\ &=\alpha_{j} y^{(j)} y^{(j)} K\left(x^{(j)}, x^{(j)}\right)+\sum_{i=1, i \neq j}^{m} \alpha_{i} y^{(i)} y^{(j)} K\left(x^{(i)}, x^{(j)}\right) \\ &=\alpha_{j}+\sum_{i=1, i \neq j}^{m} \alpha_{i} y^{(i)} y^{(j)} K\left(x^{(i)}, x^{(j)}\right) \end{aligned}
y(j)f(x(j))=y(j)i=1∑mαiy(i)K(x(i),x(j))=αjy(j)y(j)K(x(j),x(j))+i=1,i=j∑mαiy(i)y(j)K(x(i),x(j))=αj+i=1,i=j∑mαiy(i)y(j)K(x(i),x(j))
觀察式上式,$ 可以把每個
α
j
\alpha_{j}
αj 都選擇一個很大的值,同時取一個非常小的
γ
,
\gamma,
γ, 使得核對映項
K
(
x
(
i
)
,
x
(
j
)
)
K\left(x^{(i)}, x^{(j)}\right)
K(x(i),x(j)) 非常小,於是
α
j
\alpha_{j}
αj 在上式中佔據絕對主導地位。這樣就保證對任意
j
j
j 有
y
(
j
)
f
(
x
(
j
)
)
>
1
,
y^{(j)} f\left(x^{(j)}\right)>1,
y(j)f(x(j))>1, 滿足 SVM 解的條件。因此 SVM 最優解也滿足上述條件,同時一定使模型分類誤差為 0 。
問題4:加入鬆弛變數SVM的訓練誤差可以為 0 嗎?
在實際應用中,如果使用 SMO 演算法來訓練一個加入鬆弛變數的線性SVM 模型,並且懲罰因子 C 為任一未知常數 ,我們是否能得到訓練誤差為 0 的模型呢?
使用 SMO 演算法訓練的線性分類器並不一定能得到訓練誤差為 0 的模型。這是由於我們的優化目標改變了,並不再是使訓練誤差最小。考慮帶鬆他變數的 S V M \mathrm{SVM} SVM 模型優化的目標函式所包含的兩項: C ∑ i = 1 m ξ i C \sum_{i=1}^{m} \xi_{i} C∑i=1mξi和 1 2 ∥ w ∥ 2 , \frac{1}{2}\|w\|^{2}, 21∥w∥2, 當我們的引數 C C C 選取較小的值時,後一項 ( ( ( 正則項 ) ) ) 將佔據優化的較大比重。這樣, 一個帶有訓練誤差,但是引數較小的點將成為更優的結果。一個簡單的特例是, 當 C C C 取 0 時, w w w 也取 0 即可達到優化目標 , , ,但是顯然此時我們的訓練誤差不一定能達到 0 。
02: 邏輯迴歸
邏輯迴歸( Logistic Regression )可以說是機器學習領域最基礎也是最常用的模型,邏輯迴歸的原理推導以及擴充套件應用幾乎是演算法工程師的必備技能 。 醫生病理診斷、銀行個人信用評估、郵箱分類I主極郵件等,無不體現邏輯迴歸精巧而廣泛的應用 。 本小節將從模型與原理出發,涵蓋擴充套件與應用,一探邏輯迴歸的真諦。
知識點:邏輯迴歸,線性迴歸,多標籤分類, Softmax
問題1:邏輯迴歸相比於線性迴歸,有何異同?
邏輯迴歸,乍一聽名字似乎和數學中的線性迴歸問題異派同源,但其本質卻是大相徑庭 。
首先,邏輯迴歸處理的是分類問題,線性迴歸處理的是迴歸問題,這是兩者的最本質的區別。邏輯迴歸中因變數取值是一個二元分佈,模型學習得出的是 E [ y ∣ x ; θ ] , E[y \mid x ; \theta], E[y∣x;θ], 即給定自變數和超引數後,得到因變數的期望,並基於此期望來處理預測分類問題。而線性迴歸中實際上求解的是 y ′ = θ T x , y^{\prime}=\theta^{\mathrm{T}} x, y′=θTx, 是對我們假設的真實關係 y = θ T x + ϵ y=\theta^{\mathrm{T}} x+\epsilon y=θTx+ϵ 的一個近似,其中 ϵ \epsilon ϵ 代表誤差項,我們使用這個近似項來處理迴歸問題。分類和迴歸是如今機器學習中兩個不同的任務,而屬於分類演算法的邏輯迴歸,其命名有一定的歷史原因。這個方法最早由統計學家 David Cox 在他 1958 年的論文 《二元序列中的迴歸分析 》 ( 》( 》( The regression analysis of binary sequences ) ) ) 中提山,當時人們對於迴歸與分類的定義與今天有一定區別,只是將“迴歸"這一名字沿用了。實際上,將邏輯迴歸的公式進行整理, 我們可以得到log p 1 − p = θ T x , \frac{p}{1-p}=\theta^{\mathrm{T}} x, 1−pp=θTx, 其中 p = P ( y = 1 ∣ x ) p=P(y=1 \mid x) p=P(y=1∣x) 也就是將給定輸入 x x x 預測為正樣本的概率。如果把一個事件的機率(odds ) ) )定義為該事件發生的概率與該事件不發生的概率的比值 p 1 − p , \frac{p}{1-p}, 1−pp, 那麼邏輯 迴歸可以車作是對於 “ y = 1 ∣ x " y=1 \mid x " y=1∣x" 這一事件的對數機率的線性迴歸,於是邏輯迴歸" 這一稱謂也就延續了下來。
在關於邏輯迴歸的討論中,我們均認為 y y y 是因變數,而非 p 1 − p \frac{p}{1-p} 1−pp, 這便引出邏輯迴歸與線性迴歸最大的區別,即邏輯迴歸中的因變數為離散的,而線性迴歸中的因變數是連續的。並且在自變數 x x x 與超引數 θ \theta θ 確定的情況下,邏輯迴歸可以看作廣義線性模型(Generalized Linear Models ) ) ) 在因變數 y y y 服從二元分佈時的一個特殊情況; 而使用最小二乘法求解線性迴歸時,我們認為因變數 y y y 服從正態分佈。
當然邏輯迴歸和線性迴歸也不之相同之處,首先我們可以認為二者都使用了極大似然估計來對訓練樣本進行建模。線性迴歸使用最小二乘法,實際上就是在自變數
x
x
x 與超引數
θ
\theta
θ 確定,因變數
y
y
y 服從正態分佈的假設下,使用極大似然估計的一個化簡; 而邏輯迴歸中通過對似然函式
L
(
θ
)
=
∏
i
=
1
N
P
(
y
i
∣
x
i
θ
)
=
∏
i
=
1
N
(
π
(
x
i
)
)
y
i
(
1
−
π
(
x
i
)
)
1
−
y
i
L(\theta)=\prod_{i=1}^{N} P\left(y_{i} \mid x_{i}\theta\right)=\prod_{i=1}^{N}\left(\pi\left(x_{i}\right)\right)^{y_{i}}\left(1-\pi\left(x_{i}\right)\right)^{1-y_{i}}
L(θ)=∏i=1NP(yi∣xiθ)=∏i=1N(π(xi))yi(1−π(xi))1−yi 的學習
,
,
, 得到最佳引數
θ
∘
\theta_{\circ}
θ∘
另外,二者在求解超引數的過程中,都可以使用梯度下降的方法,這也是監督學習中一個常見的相似之處。
問題2:當使用邏輯迴歸處理多標籤的分類問題時,有哪些常見做法,分別應用於哪些場景,它們之間又有怎樣的關係?
使用哪一種辦法來處理多分類的問題取決於具體問題的是義 。 首先,如果一個樣本只對應於一個標籤,我們可以假設每個樣本屬於不同標籤的概率服從於幾何分佈,使用多項邏輯迴歸( Softmax Regression )來進行分類
h
θ
(
x
)
=
[
p
(
y
=
1
∣
x
;
θ
)
p
(
y
=
2
∣
x
;
θ
)
⋮
p
(
y
=
k
∣
x
;
θ
)
]
=
1
∑
j
=
1
k
e
θ
j
T
x
[
e
θ
1
T
x
e
θ
2
T
x
⋮
e
θ
k
T
x
]
h_{\theta}(x)=\left[\begin{array}{c} p(y=1 \mid x ; \theta) \\ p(y=2 \mid x ; \theta) \\ \vdots \\ p(y=k \mid x ; \theta) \end{array}\right]=\frac{1}{\sum_{j=1}^{k} \mathrm{e}^{\theta_{j}^{\mathrm{T}} x}}\left[\begin{array}{c} \mathrm{e}^{\theta_{1}^{\mathrm{T}} x} \\ \mathrm{e}^{\theta_{2}^{\mathrm{T}} x} \\ \vdots \\ \mathrm{e}^{\theta_{k}^{\mathrm{T}} x} \end{array}\right]
hθ(x)=⎣⎢⎢⎢⎡p(y=1∣x;θ)p(y=2∣x;θ)⋮p(y=k∣x;θ)⎦⎥⎥⎥⎤=∑j=1keθjTx1⎣⎢⎢⎢⎢⎡eθ1Txeθ2Tx⋮eθkTx⎦⎥⎥⎥⎥⎤
其中
θ
1
,
θ
2
,
…
,
θ
k
∈
R
n
\theta_{1}, \theta_{2}, \ldots, \theta_{k} \in \mathbb{R}^{n}
θ1,θ2,…,θk∈Rn 為模型的引數
,
,
, 而辛
1
∑
j
=
1
k
e
θ
j
T
x
\frac{1}{\sum_{j=1}^{k} \mathrm{e}^{\theta_{j}^{\mathrm{T} x}}}
∑j=1keθjTx1 可以看作是對概率的歸一化。為了方便起見,我們將
{
θ
1
,
θ
2
,
…
,
θ
k
}
\left\{\theta_{1}, \theta_{2}, \ldots, \theta_{k}\right\}
{θ1,θ2,…,θk} 這
k
k
k 個列向量按順序排列形成
n
×
k
n \times k
n×k 維矩陣,寫作
θ
,
\theta,
θ, 表示整個引數集。一般來說,多項邏輯迴歸具有引數冗餘的特點,即將
θ
1
,
θ
2
,
…
,
θ
k
\theta_{1}, \theta_{2}, \ldots, \theta_{k}
θ1,θ2,…,θk 同時加減一個向量後預測結果不變。特別地,當類別數為 2 時,
h
θ
(
x
)
=
1
e
e
T
x
+
e
θ
2
⊤
x
[
e
θ
1
⊤
x
e
θ
2
⊤
x
]
h_{\theta}(x)=\frac{1}{\mathrm{e}^{\mathrm{e}^{\mathrm{T}} x}+\mathrm{e}^{\theta_{2}^{\top} x}}\left[\begin{array}{c} \mathrm{e}^{\theta_{1}^{\top} x} \\ \mathrm{e}^{\theta_{2}^{\top} x} \end{array}\right]
hθ(x)=eeTx+eθ2⊤x1[eθ1⊤xeθ2⊤x]
利用引數冗餘的特點,我們將所有引數減去
θ
1
,
\theta_{1},
θ1, 式 (3.16) 變為
h
θ
(
x
)
=
1
e
0
⋅
x
+
e
(
θ
2
T
−
θ
1
T
)
x
[
e
0
⋅
x
e
(
θ
2
⊤
−
θ
1
⊤
)
x
]
=
[
1
1
+
e
T
T
x
1
−
1
1
+
e
θ
T
x
]
\begin{aligned} h_{\theta}(x) &=\frac{1}{\mathrm{e}^{0 \cdot x}+\mathrm{e}^{\left(\theta_{2}^{\mathrm{T}}-\theta_{1}^{\mathrm{T}}\right) x}}\left[\begin{array}{c} \mathrm{e}^{0 \cdot x} \\ \mathrm{e}^{\left(\theta_{2}^{\top}-\theta_{1}^{\top}\right) x} \end{array}\right] \\ &=\left[\begin{array}{c} \frac{1}{1+\mathrm{e}^{\mathrm{T}^{\mathrm{T}} x}} \\ 1-\frac{1}{1+\mathrm{e}^{\theta^{\mathrm{T} x}}} \end{array}\right] \end{aligned}
hθ(x)=e0⋅x+e(θ2T−θ1T)x1[e0⋅xe(θ2⊤−θ1⊤)x]=[1+eTTx11−1+eθTx1]
其中
θ
=
θ
2
−
θ
1
∘
\theta=\theta_{2}-\theta_{1} \circ
θ=θ2−θ1∘ 而整理後的式子與邏輯迴歸一致。因此,多項邏輯迴歸實際上是二分類邏輯迴歸在多標籤分類下的一種拓展。
當存在樣本可能居於多個標籤的情況時,我們可以訓練 k 個二分類的邏輯迴歸分類器 。第 i 個分類器用以區分每個樣本是否可以歸為第 i 類,訓練該分類器時,需要把標籤重新整理為“第 i 類標籤 ” 與“ 非第 i 類標籤”兩類。通過這樣辦法, 我們就解決了每個樣本可能擁有多個標籤的情況。
03:決策樹
時間旱上八點,地點.婚介所 。
“閨女,我又給你找了個合適的物件,今天要不要見一面?”
“多大?” 26 歲。”
“長得帥嗎?” “還可以,不算太帥 。”
“工資高麼?” “略高於平均水平。"
“會寫程式碼嗎? " “人家是程式設計師, 程式碼寫得很棒呢!
“好,那把他聯絡方式發來吧, 我抽空見一面。”
這便是中國特色相親故事,故事中的女孩做決定的過程就是一個典型的決策樹分類,如圖 3 . 13 所示 。通過年齡、長相、工資、是否會程式設計等屬性對男生進行了兩個類別的分類:見或不見。
決策樹是一種自上而下,對樣本資料進行樹形分類的過程,由結點和有向邊組成 。 結點分為內部結點和葉結點,其中每個內部結點表示一個特徵或屬性,葉結點表示類別。從頂部根結點開始,所有樣本聚在起。經過根結點的劃分,樣本被分到不同的子結點中 。再根據子結點的特徵進一步劃分,直至所有樣本都被歸到某一個類別(即葉結點)中 。
決策樹作為最基礎、最常見的有監督學習模型,常被用於分類問題和迴歸問題,在市場營銷和生物醫藥等領域尤真受歡迎,主要因為樹形結構與銷售 、診斷等場景下的決策過程十分相似 。 將決策樹應用整合學習的思想可以得到隨機森林、梯度提升決策樹等模型,這些將在第 12 章中詳細介紹 。 完全生長的決策樹模型具有簡單直觀、解釋性強的特點,值得讀者認真理解,這也是為融會貫通整合學習相關內容所做的鋪墊 。
一般而言 ,決策樹的生成包含了特徵選擇、樹的構造、樹的剪枝三個過程,本節將在第一個問題中對幾種常用的決策樹進行對比,在第二個問題中探討決策樹不同剪枝方法之間的區別與聯絡。
知識點:資訊理論,樹形資料結構,優化理論
問題1:決策樹有哪些常用的啟發函式?
我們知道,決策樹的目標是從一組樣本資料中, 根據不同的特徵和屬性,建立一棵樹形的分類結構。我們既希望它能擬合訓練資料,達到好的分類效果,同時又希望控制真複雜度,使得模型真奇一定的泛化能力 。 對於 個特定的問題,決策樹的選擇可能高很多種。比如,在場景描述中,如果女孩把會寫程式碼這一屬性放在根結點考慮,可能只需要很簡單的一個樹結構就能完成分類,如圖 3.14 所示 。
從若干不同的決策樹中選取最優的決策樹是一個 NP 完全問題,在實際中我們通常會採用啟發式學習的方法去構建一棵滿足啟發式條件的決策樹。常用的決策樹演算法有 ID3, C4.5, CART ,它們構建樹所使用的啟發式函式各是什麼?除了構建準則之外,它們之間的區別與聯絡是什麼?
首先,我們回顧一下這幾種決策樹構造時使用的準則 。
- ID3一一最大資訊增益
對於樣本集合 D , D, D, 類別數為 K , K, K, 資料集 D D D 的經驗嫡表示為
H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ log 2 ∣ C k ∣ ∣ D ∣ H(D)=-\sum_{k=1}^{K} \frac{\left|C_{k}\right|}{|D|} \log _{2} \frac{\left|C_{k}\right|}{|D|} H(D)=−k=1∑K∣D∣∣Ck∣log2∣D∣∣Ck∣
其中 C k C_{k} Ck 是樣本集合 D D D 中屬於第 k k k 類的樣本子集, ∣ C k ∣ \left|C_{k}\right| ∣Ck∣ 表示該子集的元素個數, ∣ D ∣ |D| ∣D∣ 表示樣本集合的元素個數。
然後計算某個特徵
A
A
A 對於資料集
D
D
D 的經驗條件嫡
H
(
D
∣
A
)
H(D \mid A)
H(D∣A) 為
H
(
D
∣
A
)
=
∑
i
=
1
n
∣
D
i
∣
∣
D
∣
H
(
D
i
)
=
∑
i
=
1
n
∣
D
i
∣
∣
D
∣
(
−
∑
k
=
1
k
∣
D
i
k
∣
∣
D
i
∣
log
2
∣
D
i
k
∣
∣
D
i
∣
)
H(D \mid A)=\sum_{i=1}^{n} \frac{\left|D_{i}\right|}{|D|} H\left(D_{i}\right)=\sum_{i=1}^{n} \frac{\left|D_{i}\right|}{|D|}\left(-\sum_{k=1}^{k} \frac{\left|D_{i k}\right|}{\left|D_{i}\right|} \log _{2} \frac{\left|D_{i k}\right|}{\left|D_{i}\right|}\right)
H(D∣A)=i=1∑n∣D∣∣Di∣H(Di)=i=1∑n∣D∣∣Di∣(−k=1∑k∣Di∣∣Dik∣log2∣Di∣∣Dik∣)
其中,
D
i
D_{i}
Di 表示
D
D
D 中特徵
A
A
A 取第
i
i
i 個值的樣本子集
,
D
i
k
, D_{i k}
,Dik 表示
D
i
D_{i}
Di 中屬於第
k
k
k 類的樣本子集。
於是資訊增益
g
(
D
,
A
)
g(D, A)
g(D,A) 可以表示為二者之差,可得
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
g(D, A)=H(D)-H(D \mid A)
g(D,A)=H(D)−H(D∣A)
這些定義聽起來有點像繞口令,不妨我們用一個例子來簡單說明下計算過程。假設共有 5 個人追求場景中的女孩,年齡有兩個屬性(老,年輕
)
,
),
), 長相有三個屬性
(
(
( 帥
,
,
, 一般, 醜
)
,
),
), 工資有三個屬性
(
(
( 高
,
,
, 中等
,
,
,低
)
,
),
), 會寫程式碼有兩個屬性 ( 會,不會
)
,
),
), 最終分類結果有兩類(見,不見 )。我們根據女孩有監督的主觀意願可以得到表 3.1。
在這個問題中,
H
(
D
)
=
−
3
5
log
2
3
5
−
2
5
log
2
2
5
=
0.971
H(D)=-\frac{3}{5} \log _{2} \frac{3}{5}-\frac{2}{5} \log _{2} \frac{2}{5}=0.971
H(D)=−53log253−52log252=0.971
根據式 (3.19) 可計算出 4 個分支結點的資訊嫡為
H
(
D
∣
年嶺
)
=
1
5
H
(
老
)
+
4
5
H
(
年輕
)
=
1
5
(
−
0
)
+
4
5
(
−
2
4
log
2
2
4
−
2
4
log
2
2
4
)
=
0.8
H
(
D
∣
長相
)
=
1
5
H
(
帥
)
+
3
5
H
(
−
般
)
+
1
5
H
(
為
)
=
0
+
3
5
(
−
2
3
log
2
2
3
−
1
3
log
2
1
3
)
+
0
=
0.551
\begin{aligned} H(D \mid \text { 年嶺 }) &=\frac{1}{5} H(\text { 老 })+\frac{4}{5} H(\text { 年輕 }) \\ &=\frac{1}{5}(-0)+\frac{4}{5}\left(-\frac{2}{4} \log _{2} \frac{2}{4}-\frac{2}{4} \log _{2} \frac{2}{4}\right)=0.8 \\ H(D \mid \text { 長相 }) &=\frac{1}{5} H(\text { 帥 })+\frac{3}{5} H(-\text { 般 })+\frac{1}{5} H(\text { 為 }) \\ &=0+\frac{3}{5}\left(-\frac{2}{3} \log _{2} \frac{2}{3}-\frac{1}{3} \log _{2} \frac{1}{3}\right)+0=0.551 \end{aligned}
H(D∣年嶺)H(D∣長相)=51H(老)+54H(年輕)=51(−0)+54(−42log242−42log242)=0.8=51H(帥)+53H(−般)+51H(為)=0+53(−32log232−31log231)+0=0.551
H ( D ∣ 工資 ) = 3 5 H ( 高 ) + 1 5 H ( 中等 ) + 1 5 H ( 低 ) = 3 5 ( − 2 3 log 2 2 3 − 1 3 log 2 1 3 ) + 0 + 0 = 0.551 H ( D ∣ 寫程式碼 ) = 3 5 H ( 不會 ) + 2 5 H ( 會 ) = 3 5 ( 0 ) + 2 5 ( 0 ) = 0 \begin{aligned} H(D \mid \text { 工資 })=& \frac{3}{5} H(\text { 高 })+\frac{1}{5} H(\text { 中等 })+\frac{1}{5} H(\text { 低 }) \\ &=\frac{3}{5}\left(-\frac{2}{3} \log _{2} \frac{2}{3}-\frac{1}{3} \log _{2} \frac{1}{3}\right)+0+0=0.551 \\ H(D \mid \text { 寫程式碼 }) &=\frac{3}{5} H(\text { 不會 })+\frac{2}{5} H(\text { 會 }) \\ &=\frac{3}{5}(0)+\frac{2}{5}(0)=0 \end{aligned} H(D∣工資)=H(D∣寫程式碼)53H(高)+51H(中等)+51H(低)=53(−32log232−31log231)+0+0=0.551=53H(不會)+52H(會)=53(0)+52(0)=0
於是,根據式 (3.20) 可計算出各個特徵的資訊增益為
g
(
D
,
年齡
)
=
0.171
,
g
(
D
,
長相
)
=
0.42
g
(
D
,
工資
)
=
0.42
,
g
(
D
,
寫程式碼
)
=
0.971.
\begin{array}{l} g(D, \text { 年齡 })=0.171, g(D, \text { 長相 })=0.42 \\ g(D, \text { 工資 })=0.42, \quad g(D, \text { 寫程式碼 })=0.971 . \end{array}
g(D,年齡)=0.171,g(D,長相)=0.42g(D,工資)=0.42,g(D,寫程式碼)=0.971.
顯然,特徵“寫程式碼" 的資訊增益最大,所有的樣本根據此特徵,可以直接被分到葉結點(即見或不見 ) 中,完成決策樹生長。當然,在實際應用中,決策樹往往不能通過一個特徵就完成構建,需要在經驗嫡非 0 的類別中繼續生長。
- C4.5一一最大資訊蹭益比
特徵 A A A 對於資料集 D D D 的資訊增益比定義為
g R ( D , A ) = g ( D , A ) H A ( D ) g_{R}(D, A)=\frac{g(D, A)}{H_{A}(D)} gR(D,A)=HA(D)g(D,A)
其中
H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ log 2 ∣ D i ∣ ∣ D ∣ H_{A}(D)=-\sum_{i=1}^{n} \frac{\left|D_{i}\right|}{|D|} \log _{2} \frac{\left|D_{i}\right|}{|D|} HA(D)=−i=1∑n∣D∣∣Di∣log2∣D∣∣Di∣
稱為資料集 D D D 關於 A A A 的取值嫡。針對上述問題, 我們可以根據式 (3.22)
求出資料集關於每個特徵的取值嫡為
H 年齡 ( D ) = − 1 5 log 2 1 5 − 4 5 log 2 4 5 = 0.722 , H_{\text {年齡 }}(D)=-\frac{1}{5} \log _{2} \frac{1}{5}-\frac{4}{5} \log _{2} \frac{4}{5}=0.722, H年齡(D)=−51log251−54log254=0.722,
H 長相 ( D ) = − 1 5 log 2 1 5 − 3 5 log 2 3 5 − 1 5 log 2 1 5 = 1.371 H 工資 ( D ) = − 3 5 log 2 3 5 − 1 5 log 2 1 5 − 1 5 log 2 1 5 = 1.371 H 寫程式碼 ( D ) = − 3 5 log 2 3 5 − 2 5 log 2 2 5 = 0.971 \begin{array}{l} H_{\text {長相 }}(D)=-\frac{1}{5} \log _{2} \frac{1}{5}-\frac{3}{5} \log _{2} \frac{3}{5}-\frac{1}{5} \log _{2} \frac{1}{5}=1.371 \\ H_{\text {工資 }}(D)=-\frac{3}{5} \log _{2} \frac{3}{5}-\frac{1}{5} \log _{2} \frac{1}{5}-\frac{1}{5} \log _{2} \frac{1}{5}=1.371 \\ \quad H_{\text {寫程式碼 }}(D)=-\frac{3}{5} \log _{2} \frac{3}{5}-\frac{2}{5} \log _{2} \frac{2}{5}=0.971 \end{array} H長相(D)=−51log251−53log253−51log251=1.371H工資(D)=−53log253−51log251−51log251=1.371H寫程式碼(D)=−53log253−52log252=0.971
於是,根據式 (3.21) 可計算出各個特徵的資訊增益比為
g
R
(
D
,
年齡
)
=
0.236
,
g
R
(
D
,
長相
)
=
0.402
,
g_{R}(D, \text { 年齡 })=0.236, g_{R}(D, \text { 長相 })=0.402,
gR(D,年齡)=0.236,gR(D,長相)=0.402,
g
R
(
D
,
工資
)
=
0.402
,
g
R
(
D
,
寫程式碼
)
=
1.
g_{R}(D, \text { 工資 })=0.402, g_{R}(D, \text { 寫程式碼 })=1 .
gR(D,工資)=0.402,gR(D,寫程式碼)=1.
資訊增益比最大的仍是特徵“寫程式碼”, 但通過資訊增益比, 特徵“年齡" 對應的指標上開了,而特徵“長相" 和特徵“工資" 卻有所下降。
- CART-最大基尼指數(Gini)
Gini 描述的是資料的純度,與資訊嫡含義類似。
Gini ( D ) = 1 − ∑ k = 1 n ( ∣ C k ∣ ∣ D ∣ ) 2 \operatorname{Gini}(D)=1-\sum_{k=1}^{n}\left(\frac{\left|C_{k}\right|}{|D|}\right)^{2} Gini(D)=1−k=1∑n(∣D∣∣Ck∣)2
CART 在每一次迭代中選擇基尼指數最小的特徵及其對應的切分點進行分類。但與 ID3、C4.5 不同的是, KART 是一顆二叉樹,採用二元切割法, 每一步將資料按特徵 A A A 的取值切成兩份, 分別進入左右子樹。特徵 A A A 的 Gini 指數定義為
Gini ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ Gini ( D i ) \operatorname{Gini}(D \mid A)=\sum_{i=1}^{n} \frac{\left|D_{i}\right|}{|D|} \operatorname{Gini}\left(D_{i}\right) Gini(D∣A)=i=1∑n∣D∣∣Di∣Gini(Di)
還是考慮上述的例子,應用 CART 分類準則,根據式(3.24 ) 可
計算出各個特徵的 Gini 指數為
Gini ( D ∣ 年齡 = 老 ) = 0.4 , Gini ( D ∣ 年齡 = 年輕 ) = 0.4 Gini ( D ∣ 長相 = 帥 ) = 0.4 , Gini ( D ∣ 長相 = 醜 ) = 0.4 Gini ( D ∣ 寫程式碼 = 會 ) = 0 , Gini ( D ∣ 寫程式碼 = 不會 ) = 0 Gini ( D ∣ 工資 = 高 ) = 0.47 , Gini ( D ∣ 工資 = 中等 ) = 0.3 Gini ( D ∣ 工資 = 低 ) = 0.4 \begin{array}{ll} \operatorname{Gini}(D \mid \text { 年齡 }=\text { 老 })=0.4, & \operatorname{Gini}(D \mid \text { 年齡 }=\text { 年輕 })=0.4 \\ \operatorname{Gini}(D \mid \text { 長相 }=\text { 帥 })=0.4, & \operatorname{Gini}(D \mid \text { 長相 }=\text { 醜 })=0.4 \\ \operatorname{Gini}(D \mid \text { 寫程式碼 }=\text { 會 })=0, & \operatorname{Gini}(D \mid \text { 寫程式碼 }=\text { 不會 })=0 \\ \operatorname{Gini}(D \mid \text { 工資 }=\text { 高 })=0.47, \operatorname{Gini}(D \mid \text { 工資 }=\text { 中等 })=0.3 \\ \operatorname{Gini}(D \mid \text { 工資 }=\text { 低 })=0.4 \end{array} Gini(D∣年齡=老)=0.4,Gini(D∣長相=帥)=0.4,Gini(D∣寫程式碼=會)=0,Gini(D∣工資=高)=0.47,Gini(D∣工資=中等)=0.3Gini(D∣工資=低)=0.4Gini(D∣年齡=年輕)=0.4Gini(D∣長相=醜)=0.4Gini(D∣寫程式碼=不會)=0
在“年齡” “長相” “工資” “寫程式碼”四個特徵中,我們可以很快地發現特徵“寫程式碼”的 Gini 指數最小為 0 ,因此選擇特徵“寫程式碼”作為最優特徵, “寫程式碼=會”為最優切分點 。 按照這種切分,從根結點會直接產生兩個日十結點 3 墓尼指數降為0 ,完成決策樹生長 。
通過對比三種決策樹的構造準則,以及在同一例子上的不同表現,我們不難總結三者之間的差異 。
首先, ID3 是採用資訊增益作為評價標準,除了“會寫程式碼”這一逆天特徵外,會傾向於取僵較多的特徵 。 因為,資訊增益反映的是給定條件以後不確定性減少的程度 1 特徵取值越多就意昧著確定性更高,也就是條件熵越小,資訊增益越大 。 這在實際應用中是一個缺陷 。 比如,我們引入特徵 “ DNA”,每個人的DNA都不同,如果ID3按照“DNA”特徵進行劃分一定是最優的 ( 條件熵為 0 ) ’ 但這種分類的泛化能力是非常弱的。因此,C4.5 實際上是對 ID3 進行優化 3 通過引入資訊增益比,一定程度上對取值比較多的特徵進行懲罰,避免 ID3 出現過擬臺的特性,提升決策樹的泛化能力。
其次,從樣本型別的角度,ID3 只能處理菌散型變數, 而 C4.5 和CART 都可以處理連續型變數。 C4.5 處理連續型變數時,通過對資料排序之後找到類別不罔的分割線作為切分點 3 根據切分點把連續屬性轉為布林型,從而將連續型變數轉換多個取值區間的離散型變數。 而對於 CART,由於真構建時每次都會對特徵進行二值劃分,因此可以很好地適用於連續性變數。
從應用角度,ID3 和 C4.5 只能用於分類任務, 而CART (Classfication and Regression Tree ,分類迴歸樹)從名字就可以看出真不僅可以用於分類,也可以應用於迴歸任務(迴歸樹使用最小平方誤差準則)。
此外,從實現細節、優化過程等角度,這三種決策樹還有一些不同 。比如,ID3 對樣本特徵缺失值比較敏感,而 C4.5 和 CART 可以對缺失值進行不同方式的處理; ID3 和 C4. 5 可以在每個結點上產生出多叉分支,且每個特徵在層級之間不會複用,而 CART 每個結點只會產生兩個分支,因此最後會形成一顆二叉樹,且每個特徵可以被重複使用;ID3 和 C4.5 通過剪枝來權衡樹的準確性與泛化能力,而 CART 直接利用全部資料發現所有可能的樹結構進行對比。
至此,我們從構造、 應用 、 實現等角度對比了 ID3 , C4.5 、 CART這三種經典的決策樹模型 。 這些區別與聯絡總結起來容易,但在實際應用中還需要讀者慢慢體會, 針對不同場景靈活變通。
問題2:如何對決策樹避行剪枝?
一棵完全生長的決策樹會面臨一個很嚴重的問題,即過擬合。假設我們真的需要考慮 DNA 特徵,由於每個人的 DNA 都不同 , 完全生長的決策樹所對應的每個葉結點中只會包含一個樣本,這就導致決策樹是過擬臺的 。 用它進行預測時,在測試集上的效果將會很差。因此我們需要對決策樹進行剪枝,剪掉一些枝葉,提升模型的泛化能力。
決策樹的剪枝通常高兩種方法,預剪枝( Pre -Prun i ng )和 後剪枝( Post - Pruning )那麼這兩種萬法是如何進行的呢? 它們又各有什麼優缺點?
預剪枝,即在生成決策樹的過程中提前停止樹的增長 。 而後剪枝 ,是在它生成的過擬合決策樹上進行剪枝, 得到簡化版的剪枝決策樹。
- 預剪枝
預剪枝的核心思想是在樹中結點進行擴充套件之前,先計算當前的劃分是否能帶來模型泛化能力的提升,如果不能,則不再繼續生長子樹 。此時可能存在不同類別的樣本同時存於結點中,按照多數投票的原則判斷該結點所屬類別。預剪枝對於何時停止決策樹的生長有以下幾種方法 。
( 1 )當樹到達一定深度的時候,停止樹的主長 。
( 2 )當到達當前結點的樣本數量小於某個閾值的時候,停止樹的生長 。
( 3 )計算每次分裂對測試集的準確度提升,當小於某個閾值的時候 ,不再繼續擴充套件 。
預剪枝具有思想直接、演算法簡單、效率高等特點,適合解決大規模問題 。 但如何準確地估計何時停止樹的生長(即上述方法中的深度或閾值),針對不同問題會有很大差別,需要一定經驗判斷。且預剪枝存在一定侷限性,有欠擬合的風險,雖然當前的劃分會導致測試集準確率降低,但在之後的劃分中,準確率可能會高顯著上升 。
- 後剪枝
後剪枝的核心思想是讓演算法生成一棵完全生長的決策樹,然後從最底層向上計算是否剪枝。剪枝過程將子樹刪除,用一個葉子結點替代,該結點的類別同樣按照多數投票的原則進行判斷。 同樣地,後剪枝也可以通過在測試集上的準確率進行判斷,如果剪枝過後準確率有所提升,則進行剪枝。相比於預剪枝,後剪枝方法通常可以得到泛化能力更強的決策樹,但時間開銷會更大。
常見的後剪枝方法包括錯誤率降低剪枝( Reduced Error Pruning,REP )、悲觀剪枝( Pessimistic Error Pruning, PEP )、代價複雜度剪枝( Cost Complexity Pruning , CCP )、最小誤差剪枝( MinimumError Pruning , MEP )、 CVP ( Critical Value Pruning )、 OPP ( Optimal Pruning )等方法,這些剪枝萬法各有利弊,關注不同的優化角度,本文選取著名的 CART 剪枝方法 CCP 進行介紹 。
代價複雜剪枝主要包含以下兩個步驟。
( 1 ) 從完整決策樹
T
0
T_{0}
T0 開始,生成一個子樹序列
{
T
0
,
T
1
,
T
2
,
…
,
T
n
}
\left\{T_{0}, T_{1}, T_{2}, \ldots, T_{n}\right\}
{T0,T1,T2,…,Tn},
其中
T
i
+
1
T_{i+1}
Ti+1 由
T
i
T_{i}
Ti 生成
,
T
n
, T_{n}
,Tn 為樹的根結點。
(2) 在子樹序列中,根據真實誤差選擇最佳的決策樹。步驟(1)從
T
0
T_{0}
T0 開始,裁剪
T
i
T_{i}
Ti 中關於訓練資料集合誤差增加最小的分支以得到
T
i
+
1
T_{i+1}
Ti+1 。具體地,當一棵樹
T
T
T 在結點
t
t
t 處剪枝時,它的誤差增加可以用
R
(
t
)
−
R
(
T
i
)
R(t)-R\left(T_{i}\right)
R(t)−R(Ti) 表示,其中
R
(
t
)
R(t)
R(t) 表示進行剪枝之後的該結點誤差,
R
(
T
t
)
R\left(T_{t}\right)
R(Tt)表示未進行剪枝時子樹
T
t
T_{t}
Tt 的誤差。考慮到樹的複雜性因素,我們用
∣
L
(
T
t
)
∣
\left|L\left(T_{t}\right)\right|
∣L(Tt)∣表示子樹
T
t
T_{t}
Tt 的葉子結點個數,則樹在結點
t
t
t 處剪枝後的誤差增加率為
α
=
R
(
t
)
−
R
(
T
t
)
∣
L
(
T
t
)
∣
−
1
\alpha=\frac{R(t)-R\left(T_{t}\right)}{\left|L\left(T_{t}\right)\right|-1}
α=∣L(Tt)∣−1R(t)−R(Tt)
在得到
T
i
T_{i}
Ti 後,我們每步選擇
α
\alpha
α 最小的結點進行相應剪枝。
用一個例子簡單地介紹生成子樹序列的方法。假設把場景中的問題進行一定擴充套件,女孩需要對 80 個人進行見或不見的分類。假設根據某種規則,已經得到了一棵 CART 決策樹
T
0
,
T_{0},
T0, 如圖 3.15 所示。此時共 5 個內部結點可供考慮,其中
α
(
t
0
)
=
25
−
5
6
−
1
=
4
α
(
t
1
)
=
10
−
(
1
+
2
+
0
+
0
)
4
−
1
=
2.33
α
(
t
2
)
=
5
−
(
1
+
1
)
2
−
1
=
3
α
(
t
3
)
=
4
−
(
1
+
2
)
2
−
1
=
1
α
(
t
4
)
=
4
−
0
2
−
1
=
4
\begin{array}{c} \alpha\left(t_{0}\right)=\frac{25-5}{6-1}=4 \\ \alpha\left(t_{1}\right)=\frac{10-(1+2+0+0)}{4-1}=2.33 \\ \alpha\left(t_{2}\right)=\frac{5-(1+1)}{2-1}=3 \\ \alpha\left(t_{3}\right)=\frac{4-(1+2)}{2-1}=1 \\ \alpha\left(t_{4}\right)=\frac{4-0}{2-1}=4 \end{array}
α(t0)=6−125−5=4α(t1)=4−110−(1+2+0+0)=2.33α(t2)=2−15−(1+1)=3α(t3)=2−14−(1+2)=1α(t4)=2−14−0=4
可見
α
(
t
3
)
\alpha\left(t_{3}\right)
α(t3) 最小
,
,
, 因此對
t
3
t_{3}
t3 進行剪枝, 得到新的子樹
T
1
,
T_{1},
T1, 如圖 3.16 所示。
而後繼續計算所有結點對應的誤差增加率,分別為 α ( t 1 ) = 3 \alpha\left(t_{1}\right)=3 α(t1)=3, α ( t 2 ) = 3 , α ( t 4 ) = 4 \alpha\left(t_{2}\right)=3, \alpha\left(t_{4}\right)=4 α(t2)=3,α(t4)=4 。因此對 t 1 t_{1} t1 進行前枝,得到 T 2 , T_{2}, T2, 如圖 3.17 所示。此時 α ( t 0 ) = 6.5 , α ( t 2 ) = 3 , \alpha\left(t_{0}\right)=6.5, \alpha\left(t_{2}\right)=3, α(t0)=6.5,α(t2)=3, 選擇 t 2 t_{2} t2 進行剪枝,得到 T 3 ∘ T_{3 \circ} T3∘ 於是只剩下一個內部結點,即根結點,得到 T 4 T_{4} T4 。
在步驟( 2 )中, 我們需要從子樹序列中選出真實誤差最小的決策樹。CCP 給出了兩種常用的方法:一種是基於獨立剪枝資料集,該方法與REP類似,但由於其只能從子樹序列 { T 0 , T 1 , T 2 , … , T n } \left\{T_{0}, T_{1}, T_{2}, \ldots, T_{n}\right\} {T0,T1,T2,…,Tn} 中選擇最佳決策樹,而非像 REP 能在所有可能的子樹中尋找最優解,因此效能上會有一定不足。另一種是基於 k k k 折交叉驗證,將資料集分成 k k k 份,前 k − 1 k-1 k−1 份用於生成決策樹,最後一份用於選擇最優的剪枝樹。重複進行 N N N 次,再從這 N N N 個子樹中選擇最優的子樹。
代價複雜度剪枝使用交叉驗證策略時,不需要測試資料集,精度與REP 差不多,但形成的樹複雜度小 。 而從演算法複雜度角度,由於生成子樹序列的時間複雜度與原始決策樹的非葉結點個數呈二次關係,導致演算法相比 REP 、 PEP 、 MEP 等線性複雜度的後剪枝萬法,執行時間開銷更大。
剪枝過程在決策樹模型中佔據著極真重要的地位。有很多研究表明剪枝比樹的生成過程更為關鍵。對於不同劃分標準生成的過擬合決策樹。在經過剪枝之後都能保留最重要的屬性劃分,因此最終的效能差距並不大。理解剪枝方法的理論,在實際應用中根據不同的資料型別、規模,決定使用何種決策樹以及對應的剪枝策略,靈活變通,找到最優選擇,是本節想要傳達給讀者的思想 。
參考
參考內容:《百面機器學習》