朴素貝葉斯(分類)
- \(C\): Class, 類別
- \(F\): Feature,特征
- \(P(C)\): 先驗概率
- \(P(F|C)\):似然值
- \(\sum_iF_i\):歸一化用的,對所有類別都相同,可忽略
- 假設“所有特征彼此獨立”,問題轉化為:
\begin{aligned}
P(C|F)\propto\prod_iP(F_i|C)P(C)
\end{aligned}
其中\(P(F_i|C)\)和\(P(C)\)可從統計資料中得到,由此可計算出每個類別對應的概率,從而找出最大概率的類。 - “所有特征彼此獨立”是很強的假設,現實中不太可能成立,但是可以大大簡化計算,且有研究表明對分類結果准確性影響不大。
決策樹(分類)
算法核心
選擇最優的划分特征。每次划分后的分支節點所包含的樣本盡可能的屬於同一類別,也就是節點中所包含的樣本純度越來越高。
如何評判純度?
信息熵
信息量化
如何衡量\(H(x)\)的大小
- 事件的信息量和事件發生的概率有關。\(H(x)\Leftrightarrow \frac{1}{P(x)}\)
- 多個事件的信息總量是信息量的加和。\(H(x_1,x_2)\Leftrightarrow H(x_1)+H(x_2)\)
- \(H(x)\ge0\)
需要構造一個關於\(H(x)\)的函數滿足上述關系:\(H(x)=log \frac{1}{P(x)}=-logP(x)\)
熵
熵求的是\(H(x)\)在\(P(x)\)分布下的數學期望,代表一個系統的不確定性,信息熵越大,不確定性越大。
\begin{aligned}
Entropy(x) = E_x[H(x)]=-\sum_xP(x)logP(x)
\end{aligned}
- 全為一種元素,熵最小,\(Entropy(x)=0\)
- 系統內元素均勻分布,熵最大,\(Entropy(x)=1\)
- 想在系統內對元素划分,使得同一類元素在一起,每次划分就希望 minimize 系統的信息熵
信息增益
Information Gain(IG)
\begin{aligned}
IG=OriginalEntropy - \sum_i \frac{A_i}{|A|}Entropy(A_i)
\end{aligned}
信息熵是系統的不確定度,信息增益代表划分后系統的不確定度減少的程度。
每次划分希望信息增益越大越好。
ID3算法
采用 Information Gain 作為純度的度量,算每一個特征的信息增益,選擇使得信息增益最大的特征進行划分。
決策樹划分
特征類型:
- ordinal 離散而有序
- numerical (discrete nominal) 離散而無序
- continuous 連續
貝葉斯分類模型適用離散無序類型(discrete)的特征
划分方法:
- 多路划分
- 獨立值
- 二分法
- 組合
Discretization 連續數據離散化:
- 有序離散化
- 靜態划分 一開始就離散化
- 動態划分 均勻間隔、均勻頻次、聚類
- 二分法
- 類似IG3算法划分,找IG最大的划分
- 計算更密集
Gini Index
除了熵,還有其他方式來指導決策樹划分。
\begin{aligned}
GINI(t)=1-\sum_jP(j|t)^2
\end{aligned}
\(P(j|t)\):每個狀態\(t\)里每個class\(j\)的頻率
- 若均勻分布(對應熵 = 1的情況),GINI Index = 0.5 最大
- 若某一類元素占比為1 (對應熵 = 0的情況),GINI Index = 0 最小
比較容易算,不用計算log。
Gini Split
划分\(k\)個分區,計算各個分區的加權 GINI 指數
對應信息增益
\begin{aligned}
GINI_{split}=\sum_{i=1}^k\frac{n_i}{n}GINI(i)
\end{aligned}
- \(n_i\):當前分區內元素個數
- \(n\): 系統內總的元素個數
GINI划分越小越好
Misclassification Error
錯分率
\begin{aligned}
Error(t)=1-max_iP(i|t)
\end{aligned}
- \(P(i|t)\):每個狀態\(t\)里每個class\(i\)的頻率
- 若某一類元素占比為1 (對應熵 = 0,GINI Index = 0的情況),Error = 0 最小
- 若均勻分布(對應熵 = 1,GINI Index = 0.5的情況),Error = 0.5 最大

Traning and Test Errors
訓練決策樹時什么時候該停止,停止過早,沒有很好學習數據性能,停止過晚,過擬合現象。
Tree Ensemble 集成學習
numbers of nodes: complexity of model
CART回歸樹(預測)
決策樹做預測和做分類有相同的地方,都是將數據分成很多塊,如果是做預測,將數據在某維度 \(x^i\) 分成幾塊,取塊中 \(y\) 值的均值或加權均值作為這塊區域數據的估計值;如果是分類,估計的值是 {0,1}
給定訓練數據 \(D={(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(N)},y^{(N)})}\),希望學習一個CART樹來最小化損失函數
- \(x^i\) 是高維向量,\(y^i\) 是連續變量
- 如果 \(y^i\) 是離散的 \(\{0,1\}\),那是分類問題
- 如果 \(y^i\) 是連續的,就是回歸預測問題
- \(Loss\) : 每一個區間的均值和真實數據 \(y\) 之間的距離
- \(R_m\):被划分的輸入區間
- \(C_m\):區間\(R_m\)對應的輸出值,區域的均值
- \(j\):第幾個特征維度
- \(s\): 分割點,cut point
- \(L\): \(y\) 和 \(C\) 之間的距離,計算距離一般常用\(L_2\)歐式距離
- 具體計算公式:$$Loss = min_{j,s}[min_{C_1}\sum_{x \in R_1(j,s)} (y^{(i)}-C_1)^2+min_{C_2} \sum_{x \in R_2(j,s)} (y^{(i)}-C_2)^2]\where\quad R_1(j,s)={x|x_j \le s},\quad R_2(j,s)={x|x_j > s}\\quad \quad \quad \quad C_m=\frac{1}{N_m}\sum_{x\in R_m(j,s)}y^{(i)},m={1,2}$$
- 遍歷特征變量\(j\),在每一個特征變量上選擇合適分割點,使得距離相加和最小,最后選擇最好的結果對應的\(j\)和\(s\)
- CART樹一般就分2塊區域,\(R_1\)和\(R_2\),因為是遞歸分割的
集成學習
Bagging (Bootstrap Aggregating,引導聚集算法,裝袋算法)
Bootstrap 是統計學里一種采樣方法。自身有放回式采樣。給定大小為\(n\)的訓練集\(D\),從中均勻、有放回地選出\(m\)個大小為\(n'\)的子集\(D_i\)作為新的訓練集。在這\(m\)個訓練集上使用分類、回歸等算法,則得到\(m\)個模型,再通過取平均值、取多數票等方法,即可得到 Bagging 結果。
- 采好后每一個定形處理
- 很好做並行,每一個采樣都可以放到不同機器上處理
- Bagging 算法可與其他分類、回歸算法結合,提高准確率、穩定性的同時,通過降低結果的方差,避免過擬合的發生。
- Random Forest:對CART樹使用 Bagging 算法,生成的許多樹組成隨機森林。
Boosting(增強算法):給采樣增加權重
AdaBoost (Adapting Boosting,自適應的boosting算法)
給出訓練數據\(D={(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(N)},y^{(N)})}\),\(x^{(i)}\in R^n\),\(y \in \left\{ +1,-1 \right\}\)。對每一個\(x^{(i)}\),有一個相應的權重\(w^{(i)} \in R\)(標量)
1. 初始化
-
初始化時每一個數據 \(x^{(i)}\) 的權重相等
-
機器學習第一步基本上都是初始化
2. for \(k=1,2,...,K\)迭代( Boosting 和 Bagging 不一樣的地方。Boosting 每采樣一次就要學習出一個弱分類器,每一次學習出的結果會對數據權重產生影響,必須順序處理)
a. 計算第 \(k\) 個弱分類器的錯分率
- \(I(condition)\):Indicator 指示函數,邏輯變量,括號內等式成立等於1,不成立等於0。這里表示被分類錯誤的樣本數量。
- \(G_k(x)\)是一個弱分類器(朴素貝葉斯、決策樹)
- \(e_k\):第 \(k\) 個分類器的誤差
b. 計算第 \(k\) 個弱分類器的權重
- 如果一個分類器的誤差比較大, 不希望該分類器的權重較大、
- 分類器的權重決定最后結果中這個分類器的話語權有多重
- 集成分類是各個分類器結果累加的形式
c. 更新訓練數據權重 \(w_k\)
-
\(exp(f(x))\):表示 \(e\) 的 \(f(x)\) 次方
\[if\quad y^{(i)}=G_k(x^{(i)}),則y^{(i)}G_k(x^{(i)})=1\\exp(-\alpha_ky^{(i)}G_k(x^{(i)})=exp(-\alpha_k)=\frac{1}{e^{\alpha_k}} \quad \uparrow \]\[if\quad y^{(i)}\ne G_k(x^{(i)}),則y^{(i)}G_k(x^{(i)})=-1\\exp(-\alpha_ky^{(i)}G_k(x^{(i)})=exp(\alpha_k)=e^{\alpha_k} \quad \downarrow \] -
分錯的數據賦予更大權重,更好的學習
-
\({z_k}\):歸一化系數,使得\(w_k^{(i)}\)加和為1。
\[{z_k}=\sum_{i=1}^N w_k^{(i)}exp(-\alpha_kG_k(x^{(i)}) \]
3.得到結果
- 對所有 \(k\) 個分類器賦予權重,計算得最后的強分類器
- sign()函數,大於0輸出1,小於0輸出-1
Boosting需要逐個訓練弱分類器,1)數據權重初始化 。2)根據每一個弱分類器的誤差來計算弱分類器的權重,並更新數據的權重,分錯了權重增加,分對了權重減少。3)將要分類的數據輸入到每一個弱分類器,由每一個弱分類器的加權結果得出最終結果。
Gradient Boosting( 梯度的boosting算法)
boosting的思想:分類器對分對了的保留,分錯了的在下一個分類器加強學習。每次都在調整殘差 (實際值與擬合值之間的差)。
Gradient Boosting: 每一次建立分類器都是在減少上一輪分類器產生的殘差,每一次建立模型是在之前建立模型損失函數的梯度下降方向.
a. 模型要求
給定訓練數據 \(D={(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(N)},y^{(N)})}\),我們要讓殘差適應之前的弱分類器
-
上一輪訓練中有誤差\(h(x)\)
-
我們的目標是學習一個\(h(x^{(i)})\),讓\(h(x^{(i)})\)盡量小, 使得這一輪的分類結果盡可能與真實結果 \(y^{(i)}\) 逼近:
b. 訓練目的
目的是通過優化 \(loss function\),找到一個對於$ F(x) $ 的逼近函數 $ \widehat F(x) $
-
\(argmin\): 求最優化的寫法,使后面的式子達到最小值時的變量的取值
-
\(F(x)\) 是對以往的 \(h(x)\) 的一個加權和
\[F(x)=\sum_{i=1}^M \alpha_ih_i(x) \] -
\(F_0(x)\):以CART樹舉例,來說就是初始情況,沒有學習任何分類器,學習一個常數 \(C\) 即可,大概在均值的地方
\[F_0(x)=argmin_C\sum_{i=1}^NL(y^{(i)},C) \] -
有了\(F_0(x)\),下一個分類器就是上一個分類器加上誤差函數,再加上調整誤差的函數 \(h(x)\)
\[F_m(x)=F_{m-1}(x)+argmin\sum_{i=1}^N[L(y^{(i)},F_{m-1}(x^{(i)})+h_m(x^{(i)})) \]
c. 學習殘差
- 損失函數對於 \(F(x)\) 求導,負導數就是改進梯度方向
- 類比變量空間的梯度下降求極值方法,只不過自變量 \(x\) 對應函數 \(F(x)\) ,因變量 \(f(x)\) 對應損失函數 \(L(y,F(x))\)
d. (例)GDBT擬合殘差
如何求損失函數 \(L(y,F(x))\)對函數 \(F(x)\) 的導數,針對決策樹模型,可以學習一個CART樹來擬合殘差。
- 就好像根據訓練數據 \(D={(x^{(1)},r_m^{(1)}),(x^{(2)},r_m^{(2)}),...,(x^{(N)},r_m^{(N)})}\) ,學習CART樹:
-
新的分類器變為:
\[F_m(x)=F_{m-1}(x)+\sum_{j=1}^JC_{m,j}I(x\in R(m,j)) \]\[\Rightarrow F_m(x)=\sum_{m=1}^M\sum_{j=1}^JC_{m,j}I(x\in R(m,j)) \]
e. (補)Shrinkage 收縮
增加學習速率 \(\theta(\theta>0)\)
一般地,\(\theta \in [0.001,0.01]\) 來減慢擬合速度,更好地逼近結果。
決策樹與GDBT對比
決策樹分類

GDBT分類
- 先用一個弱分類器分類
- 根據殘差,對殘差再用一個弱分類器分類。例子中殘差為0
- 最終分類結果=第一次弱分類器的結果+第二次殘差分類器的結果

