1. 程式人生 > >機器學習 —— 決策樹及其整合演算法(Bagging、隨機森林、Boosting)

機器學習 —— 決策樹及其整合演算法(Bagging、隨機森林、Boosting)

決策樹
---------------------------------------------------------------------
1.描述:
以樹為基礎的方法可以用於迴歸和分類。
樹的節點將要預測的空間劃分為一系列簡單域
劃分預測空間的規則可以被建模為一棵樹,所以這種方法也叫決策樹方法
bagging,隨機森林,boosting 是多棵決策樹組合起來採用投票方式產生一個預測結果的方法
機制來產生預測結果


2.如何選特徵:
迴歸樹:RMSE(Root Mean Square Error)
分類樹:資訊增益、基尼係數

3.迴歸樹:
RMSE :
假設一個集合被劃分為 M 部分,c

 m  cm 表示第 m 部分的值,則預測值為

f(x)= m=1 Mc m I(xR m ) f(x)=∑m=1McmI(x∈Rm)
y ^  m  y^mR m  Rm子集的平均值
RMSE= j=1 J  iR j  (y i y ^  R j  ) 2  RMSE=∑j=1J∑i∈Rj(yi−y^Rj)2
其中 y ^  R j   y^Rj是落入 R j  Rj的樣本的平均值
建樹的過程是一種自頂向下的貪心的遞迴二分劃分方法。
自頂向下:從樹的根開始不斷地將預測空間劃分為兩個子空間
貪心:每次劃分都選擇當前最優的方法,而不選擇那些可能在將來會導致更好劃分的方法
建樹的過程:
1).選擇最優切分變數 j 與切分點 s。遍歷變數 j,對固定的切分變數 j 掃描切分點 s ,
選擇使 RMSE 達到最小值的對(j, s)
2).用選定的對(j, s) 切分割槽域 R1 和 R2 並決定相應的輸出值 c1 和 c2
R
 
1 
(j,s)={X|X j s},R 2 (j,s)={X|X j >s}
 
R1(j,s)={X|Xj≤s},R2(j,s)={X|Xj>s}

c 1 =ave(y i |x i R 1 (j,s)),c 2 =ave(y i |x i R 2 (j,s)) c1=ave(yi|xi∈R1(j,s)),c2=ave(yi|xi∈R2(j,s))
3).繼續對兩個子區域呼叫步驟1)、2),直到滿足停止條件

4.分類樹:

4.1資訊增益:
X的熵 H(X)=p 1 logp 1 p 2 logp 2 p n logp n = n i=1 p i logp 

i  H(X)=−p1log⁡p1−p2log⁡p2−⋯−pnlog⁡pn=−∑i=1npilog⁡pi
熵表示了資訊的不確定性(也即混亂性),熵越大,資訊越混亂,越難預測。
比如,
如果變數 X 服從統一分佈的,由於 X 的各個值出現的概率一樣,很難預測 X 的值,所以 X 的熵很大
如果變數 X 的概率分佈圖是類似山峰形狀的,在某幾個點的概率很大,那麼預測 X 的值為那幾個點中的某一個命中的概率就很大,所以 X 的熵很小
某一具體條件熵-->在 X 的值為 v 的條件下,Y 的資訊熵

H(Y|X=v) H(Y|X=v)
條件熵
H(Y|X)= i p(X=v i )H(Y|X=v i ) H(Y|X)=∑ip(X=vi)H(Y|X=vi)
資訊增益-->如果按照某個特徵劃分資料,那麼資訊不確定性能減少多少
IG(Y|X)=H(Y)H(Y|X) IG(Y|X)=H(Y)−H(Y|X)
選擇資訊增益最大的特徵來劃分資料

示例:

解釋左圖的計算方法,右圖類似
-(9/14 * log(9/14) + 5/14 * log(5/14)) = 0.940
-(3/7 * log(3/7) + 4/7 * log(4/7)) = 0.985
-(6/7 * log(6/7) + 1/7 * log(1/7)) = 0.592
I(S|Income) --> 表示資料集合 S 按照 Income 特徵劃分為子集後資訊不確定性減少量
= 0.940 - (7/14)*0.985 - (7/14)*0.592
= 0.151
上面的示例中因為選擇特徵 Income 來劃分集合的資訊增益最大,所以應該選擇 Income


4.2基尼係數:
假充集合 T 包含 N 個類別,第 j 個類別的概率是 P j  Pj,則這個集合的基尼係數為

Gini(T)= i=1 n p i logp i  Gini(T)=−∑i=1npilog⁡pi
按某個特徵劃分為 m 個子集,第 i 個子集的大小為 N i  Ni,則劃分後子集的基尼係數為
Gini split (T)=N 1 NGini(T 1 )++N m N Ginisplit(T)=N1NGini(T1)+⋯+NmN
選擇能使劃分後基尼係數最小的特徵來劃分當前集合

建樹的過程:
1).選擇一個"最好"的特徵A來劃分節點
2).對於特徵A的每一個值,創建出一個分支來劃分樣本
3).重複步驟1),2)直到資訊增益或基尼係數足夠小

5.剪枝
todo

Bagging
------------------------------------------------------------------
演算法過程:
1).從訓練集中取樣得到新的訓練集
2).重複步驟1 B次得到B個新的訓練集,針對B個不同的訓練集分別訓練一棵樹
3).平均每一棵樹的預測值或採用少數服從多數得到分類結果

f ^  bag =1B b=1 B f ^  b (x) f^bag=1B∑b=1Bf^b(x)

Out-of-Bag Error Estimation:
可以採用步驟1過程中沒有采樣到的資料作為對應訓練集生成的樹的測試集評估訓練結果

Random Forests
-------------------------------------------------------------------
演算法過程:
1).從訓練集中取樣得到新的訓練集
2).重複步驟1 B次得到B個新的訓練集,針對B個不同的訓練集分別訓練一棵樹
3).訓練樹的過程中,先從所有特徵中隨機選擇 m 個特徵作為候選,然後再從
這 m 個特徵中選擇最優的一個來劃分預測空間

比較:
Bagging : m = p
Random Forests : m = p   ⌊p⌋ (分類) , m = p/3 ⌊p/3⌋ (迴歸)
p 為所有特徵數

Boosting
------------------------------------------------------------------
迴歸問題演算法過程:
1).設初值,設預測值 f ^ (x)=0 f^(x)=0, 對於訓練集裡的每一個樣本,設殘差 r i =y i  ri=yi
2). 對於 b = 1,2,...,B,重複以下步驟:
2.1) 對於訓練集(X, r),分裂 d 次生成一棵樹 f ^  b  f^b --> (注意是訓練集(X,r),不是(X,y))
2.2) 用一個收縮系統 λ λ 更新 f ^  f^f ^ =f ^ +λf ^  b (x) f^=f^+λf^b(x)
2.3) 更新殘差: r i =r i λf ^  b (x i ) ri=ri−λf^b(xi)
3).輸出 boosted 了的模型: f ^ (x) f^(x)

調節引數:
1).樹的數量 B。如果 B 太大容易 overfitting
2).收縮引數 λ λ。這個引數控制 boosting 的學習率
3).每棵樹分裂的次數 d。 這個引數控制 boosted 整合模型的複雜度。一般 d 選擇 1,即生成的決策樹是樹樁

分類問題演算法過程: