機器學習經典模型


朴素貝葉斯(分類)

\[P(C|F)=\frac{P(F|C)P(C)}{\sum_iF_i}=\frac{\prod_iP(F_i|C)P(C)}{\sum_iF_i} \]

  • \(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)\)的大小

  1. 事件的信息量和事件發生的概率有關。\(H(x)\Leftrightarrow \frac{1}{P(x)}\)
  2. 多個事件的信息總量是信息量的加和。\(H(x_1,x_2)\Leftrightarrow H(x_1)+H(x_2)\)
  3. \(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 作為純度的度量,算每一個特征的信息增益,選擇使得信息增益最大的特征進行划分。

決策樹划分

特征類型:

  1. ordinal 離散而有序
  2. numerical (discrete nominal) 離散而無序
  3. continuous 連續

貝葉斯分類模型適用離散無序類型(discrete)的特征

划分方法:

  1. 多路划分
    • 獨立值
  2. 二分法
    • 組合

Discretization 連續數據離散化:

  1. 有序離散化
    • 靜態划分 一開始就離散化
    • 動態划分 均勻間隔、均勻頻次、聚類
  2. 二分法
    • 類似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 最大

QQ截圖20190920164010.png

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樹來最小化損失函數

\[Loss = min_{j,s}[min_{C_1}L(y^i,C_1)+min_{C_2}L(y^i,C_2)] \\where \quad C_m=ave(y_i|x_i \in R_m) \]

  • \(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. 初始化

\[w=(w^{(1)},w^{(2)},...,w^{(N)})\\ w^{(i)}=\frac{1}{N},\quad i=1,2,...,N \]

  • 初始化時每一個數據 \(x^{(i)}\) 的權重相等

  • 機器學習第一步基本上都是初始化

2. for \(k=1,2,...,K\)迭代( Boosting 和 Bagging 不一樣的地方。Boosting 每采樣一次就要學習出一個弱分類器,每一次學習出的結果會對數據權重產生影響,必須順序處理)

a. 計算第 \(k\) 個弱分類器的錯分率

\[e_k=P(G_k(x^{(i)})\ne y^{(i)})\\ =\sum_iw^{(i)}I (G_k(x^{(i)}\ne y^{(i)} ) \]

  • \(I(condition)\):Indicator 指示函數,邏輯變量,括號內等式成立等於1,不成立等於0。這里表示被分類錯誤的樣本數量。
  • \(G_k(x)\)是一個弱分類器(朴素貝葉斯、決策樹)
  • \(e_k\):第 \(k\) 個分類器的誤差

b. 計算第 \(k\) 個弱分類器的權重

\[ \alpha_k = \frac{1}{2}ln(\frac{1-e_k}{e_k}) \]

  • 如果一個分類器的誤差比較大, 不希望該分類器的權重較大、
  • 分類器的權重決定最后結果中這個分類器的話語權有多重
  • 集成分類是各個分類器結果累加的形式

c. 更新訓練數據權重 \(w_k\)

\[w_{k+1}^{(i)}=\frac{exp(-\alpha_ky^{(i)}G_k(x^{(i)})}{z_k}w_k^{(i)}\quad \propto \quad exp(-\alpha_ky^{(i)}G_k(x^{(i)})w_k^{(i)} \]

  • \(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.得到結果

\[f(x^{(i)})=\sum_{k=1}^k\alpha_kG_k(x^{(i)})\\F(x^{(i)})=sign(f(x^{(i)}) \quad最終分類結果 \]

  • 對所有 \(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)})}\),我們要讓殘差適應之前的弱分類器

\[F_{m+1}(x) = F_{m}(x)+h(x) \]

  • 上一輪訓練中有誤差\(h(x)\)

  • 我們的目標是學習一個\(h(x^{(i)})\),讓\(h(x^{(i)})\)盡量小, 使得這一輪的分類結果盡可能與真實結果 \(y^{(i)}\) 逼近:

\[F_{m+1}(x^{(i)})=F_{m}(x^{(i)})+h(x^{(i)})=y^{(i)} \]

b. 訓練目的

目的是通過優化 \(loss function\),找到一個對於$ F(x) $ 的逼近函數 $ \widehat F(x) $

\[\widehat F(x)=argminE_{x,y}[L(y,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. 學習殘差

\[r_m^{(i)}=-[\frac{\partial L(y^{(i)},F(x^{(i)}))}{\partial F(x^{(i)})}]_{F(x)=F_{m-1}(x)} \]

  • 損失函數對於 \(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樹:

\[C_{m,j}=argmin_C \sum_{x \in R(m,j)} L(y^{(i)}, F_{m-1}(x^{(i)})+C) \]

  • 新的分類器變為:

    \[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)\)

\[F_m(x)=F_{m-1}(x)+\theta\sum_{j=1}^JC_{m,j}I(x\in R(m,j)) \]

一般地,\(\theta \in [0.001,0.01]\) 來減慢擬合速度,更好地逼近結果。

決策樹與GDBT對比

決策樹分類

4.png

GDBT分類

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

3.png


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM