吃瓜教程|Datawhale-10月(3)
吃瓜教程|Datawhale-10月(3)
決策樹
基本流程
基於樹結構來進行決策。
一般一顆決策樹只包含一個根結點、若干個內部結點和若干個葉結點。
其中葉結點對應決策結果,其他的每個結點對應一個屬性測試,從根結點到每個葉結點的路徑對應了一個判定測試序列。
決策樹學習的目的是為了產生一顆泛化能力強,即處理未見例項能力強的決策樹。
邏輯角度:一堆 if else 語句的組合
幾何角度:根據某種準則劃分特徵空間
最終目的:將樣本越分越“純”
#輸入:訓練集D = {(x_1,y_1),(x_1,y_1),...,(x_m,y_m)}; # 屬性集A = {a_1,a_2,...,a_d}. #過程:(遞迴過程) ''' TreeGenerate(D,A): 生成結點node if D中樣本全屬於C: node標記為C類葉結點 return if A = NULL or D在A上取值相同: node標記為葉結點,類別為D中樣本最多的類 return else: 從A中選擇最優劃分屬性a_* for a_*的每一個值a_*_v: 為node生成一個分支 令Dv表示在a_*上取值為a_*_v的樣本子集 if Dv = NULL: 將分支結點記為葉結點,類別為D中樣本最多的類 return else: 以TreeGenerate(Dv,A/{a_*})為分支結點 return '''
劃分選擇
自資訊:
\[I(X)=-\log_{b}{p(x)} \]當 b = 2 時單位為 bit ,當 b = e 時單位為 nat
配合下邊的式子,也可寫成:
\[I(D)=-\log_{b}{p_{k}} \]資訊熵(自資訊的期望):度量樣本集合純度最常用的一種指標。
假設當前樣本 D 中的第 k 類樣本所佔比例為 \(p_{k}(k=1,2,...,|\mathcal{Y}|)\) ,則 D 的資訊熵定義為:
\[H(D)=E[I(D)]=\operatorname{Ent}(D)=-\sum_{k=1}^{|\mathcal{Y}|} p_{k} \log _{2} p_{k} \]\(\operatorname{Ent}(D)\)
計算資訊樀時約定:若 \(p_{k}=0\) ,則 \(p_{k} \log _{b} p_{k}=0\) 。當 \(X\) 的某個取值的概率為 1 時資訊熵最小(最確定,樣本集合純度最高),其值為 0 ;當 \(X\) 的各個取值的概率均等時資訊樀最大(最不確定),其值為 \(\log _{b}|D|\) , 其中 \(|D|\) 表示 \(D\) 可能取值的個數。
條件熵: Y 的資訊熵關於概率分佈 X 的期望
在已知 X 後 Y 的不確定性
\[H(Y|X)=\sum_{x}p(x)H(Y|X=x) \]從單個屬性(特徵) a 的角度來看,假設其可能取值為 \(\{a^{1},a^{2},...,a^{V}\}\)
資訊增益:在已知屬性(特徵)a 的取值後 y 的不確定性減少的量, 也即純度的提升(資訊熵 - 條件熵)
\[\operatorname{Gain}(D, a)=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right) \]ID3決策樹
以資訊增益為準則來選擇劃分屬性的決策樹(以資訊增益最大的屬性作為劃分屬性)
\[a_{*}=\underset{a \in A}{\arg \max } \operatorname{Gain}(D, a) \]C4.5決策樹
資訊增益準則對可能取值數目過多的屬性有所偏好(如標號,但是這個是因為每個取值所包含的樣本太少),為了減少這種偏好帶來的不利影響,C4.5決策樹使用增益率代替資訊增益。
增益率
\[\operatorname{Gain_{-}\operatorname{ratio}}(D, a)=\frac{\operatorname{Gain}(D, a)}{\operatorname{IV}(a)} \]其中
\[\operatorname{IV}(a)=-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \log _{2} \frac{\left|D^{v}\right|}{|D|} \]稱為屬性 \(a\) 的”固有值”, \(a\) 的可能取值個數 \(V\) 越大,通常其固有值 \(\operatorname{IV}(a)\) 也越大。但是, 增益率對可能取值數目較少的屬性有所偏好。
因此,C4.5並未完全使用增益率代替資訊增益,而是先選出資訊增益高於平均水平的屬性,在從中選擇增益率最高的。
CART決策樹
基尼值
從樣本集合 \(D\) 中隨機抽取兩個樣本, 其類別標記不一致的概率。因此, 基尼值越小,碰到異類的概率就越小, 純度自然就越高。
\[\begin{aligned} \operatorname{Gini}(D) &=\sum_{k=1}^{|\mathcal{Y}|} \sum_{k^{\prime} \neq k} p_{k} p_{k^{\prime}} \\ &=\sum_{k=1}^{|\mathcal{Y}|} p_{k}\left(1-p_{k}\right) \\ &=1-\sum_{k=1}^{|\mathcal{Y}|} p_{k}^{2} \end{aligned} \]基尼指數
屬性 a 的基尼指數:
\[\operatorname{Gini_{-}\operatorname{index}}(D, a)=\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Gini}\left(D^{v}\right) \]CART決策樹選擇基尼指數最小的屬性作為最優化分屬性
\[a_{*}=\underset{a \in A}{\arg \text { min }} \operatorname{Gini_{-}\operatorname{index}}(D, a) \]CART決策樹的實際構造演算法如下:
-
首先,對每個屬性 \(a\) 的每個可能取值 \(v\) ,將資料集 \(D\) 分為 \(a=v\) 和 \(a \neq v\) 兩部分來計算基尼指數,即
\[\operatorname{Gini_{-}\operatorname{index}}(D, a)=\frac{\left|D^{a=v}\right|}{|D|} \operatorname{Gini}\left(D^{a=v}\right)+\frac{\left|D^{a \neq v}\right|}{|D|} \operatorname{Gini}\left(D^{a \neq v}\right) \] -
然後,選擇基尼指數最小的屬性及其對應取值作為最優劃分屬性和最優劃分點
-
最後,重複以上兩步,直至滿足停止條件
剪枝處理
為了防止過擬合,主要有預剪枝和後剪枝。
- 預剪枝:在決策樹生成過程中,對每個結點在劃分前進行估計,若當前結點的劃分不能帶來決策樹泛化效能提升,則停止劃分並將當前結點標記為葉結點。
- 後剪枝:先生成一棵完整的決策樹,再自底向上地對葉結點進行考察,若將該結點對應的子樹替換為葉結點能帶來泛化效能提升,則替換。
判斷泛化效能提升地方法:留出法。即預留一部分資料作為驗證集進行評估。
後剪枝欠擬合風險很小,泛化性一般優於預剪枝,但是時間開銷大。
連續與缺失值
連續值處理
目前我們在討論的都是離散型屬性,當遇到連續屬性時,可對其進行離散化處理。
最簡單的是使用二分法。就是以每兩個相鄰取值的中點作為劃分點
例子參見南瓜書
缺失值處理
第一種情況,屬性值缺失。
給定訓練集 \(D\) 和屬性 a ,令 \(\tilde{D}\) 表示 \(D\) 中屬性 a 上沒有缺失值的樣本子集。
假設屬性 a 有 V 個可取值 \(\{a^{1},a^{2},...,a^{V}\}\) ,令 \(\tilde{D}^{v}\) 表示 \(\tilde{D}\) 中在屬性 a 上取值為 \(a^{v}\) 地樣本子集, \(\tilde{D}_{k}\) 表示 \(\tilde{D}\) 中屬於第 k 類的樣本子集。假定我們為每個樣本 x 賦予一個權重 \(w_{x}\) ,並定義:
\[\rho=\frac{\sum_{x \in \tilde{D}} w_{x}}{\sum_{x \in D} w_{x}} \]\[\tilde{p}_{k}=\frac{\sum_{x \in \tilde{D}_{k}} w_{x}}{\sum_{x \in \widetilde{D}} w_{x}} \quad(1 \leq \mathrm{k} \leq|y|) \\ \]\[\tilde{r}_{v}=\frac{\sum_{x \in \tilde{D}}^{v} w_{x}}{\sum_{x \in \widetilde{D}} w_{x}} \quad(1 \leq \mathrm{v} \leq \mathrm{V}) \]對於屬性 a, \(\rho\) 表示無缺失值樣本所佔的比例, \(\tilde{p}_{k}\) 表示無缺失值樣本中第 k 類所佔的比例, \(\tilde{r}_{v}\) 則表示無缺失值樣本中在屬性 a 上取值為 \(a^{v}\) 的樣本所佔的比例。
因此,我們將資訊增益計算式推廣為:
\[\begin{array}{l} \operatorname{Gain}(D, a)=\rho \times \operatorname{Gain}(\tilde{D}, a)=\rho \times\left(\operatorname{Ent}(\tilde{D})-\sum_{v=1}^{V} \tilde{r}_{v} \operatorname{Ent}\left(\tilde{D}^{v}\right)\right) \\ \operatorname{Ent}(\tilde{D})=-\sum_{k=1}^{|y|} \tilde{p}_{k} \log _{2} \tilde{p}_{k} \end{array} \]第二種情況,給定劃分屬性,樣本在該屬性上的值缺失。
- 若樣本 \(\boldsymbol{x}\) 在劃分屬性 \(a\) 上的取值已知, 則將 \(\boldsymbol{x}\) 劃入與其取值對應的子結 點, 且樣本權值在子結點中保持為 \(w_{x}\)
- 若樣本 \(\boldsymbol{x}\) 在劃分屬性 \(a\) 上的取值末知, 則將 \(\boldsymbol{x}\) 同時劃入所有子結點, 且樣本權值在與屬性值 \(a^{v}\) 對應的子結點中調整為 \(\tilde{r}_{v} \cdot w_{x}\) (直觀來看, 相 當於讓同一個樣本以不同概率劃入不同的子結點中去)
多變數決策樹
決策樹生成的分類邊界有一個明顯的特點:軸平行,即它的分類邊界由若干個與座標軸平行的分段組成。但在學習任務的真實分類邊界比較複雜時,必須使用很多段劃分才能獲得更好的近似。
有很多時候,斜著劃分能讓模型更加簡化,多變數決策樹便是如此。
在多變數決策樹中非葉結點不再是僅對某個屬性,而是對屬性的線性組合進行測試。這使得在學習過程中不是為每個非葉結點尋找一個最優劃分屬性,二是試圖建立一個合適的線性分類器。