从决策树到xgboost(一)
文章目錄
- 1 決策樹
- 1.1決策樹定義
- 1.2信息增益
- 1.3 信息增益的算法
- 1.4 信息增益比
- 2 決策樹ID3
- 2.1 ID3樹的構建
- 2.2 決策樹的剪枝
- 2.2.1 損失函數定義與計算
- 2.2.2 剪枝過程
- 2.3 CART樹
- 2.3.1 CART回歸樹
- 2.3.2 CART分類樹
- 2.3.3 CART樹剪枝
1 決策樹
1.1決策樹定義
決策樹的基本組成:決策節點、分支、葉子。
決策樹表示給定特征條件下的概率分布。
條件概率分布定義在特征空間的一個劃分上。將特征空間劃分為互不相交的單元。并在每個單元上定義一個類的概率分布,就構成了一個條件概率分布。
決策樹的一條路徑對應于劃分中的一個單元。
決策樹的本質是在特征空間上的切割。
1.2信息增益
熵:設X是一個取有限個值的離散隨機變量,其概率分布為:P(X=xi)=pi,i=1,2,3...nP(X=x_i)=p_i,i=1,2,3...nP(X=xi?)=pi?,i=1,2,3...n
那么X的熵為:H(X)=?∑i=1npilogpiH(X)=-\sum_{i=1}^np_ilogp_iH(X)=?∑i=1n?pi?logpi?
對數以2為底或者以e為底,這時熵的單位稱為比特或者納特。熵只依賴于X的分布,而與X的具體取值無關。
熵的理論解釋:熵越大,隨機變量的不確定性越大。0<=H(X)<=logn0<=H(X)<=logn0<=H(X)<=logn.
例如,一個骰子6個面全是1,那么H(X)=?1?log1=0H(X)=-1*log1=0H(X)=?1?log1=0。因為結果是確定的。
如果6個面分別為1,2,3,4,5,6,并且每個面的概率相同,都是16\dfrac{1}{6}61?。那么H(X)=?(16log(16)+16log(16)+16log(16)+16log(16)+16log(16)+16log(16))=?(0.17?(?2.58)?6)=2.58H(X)=-(\dfrac{1}{6}log(\dfrac{1}{6})+\dfrac{1}{6}log(\dfrac{1}{6})+\dfrac{1}{6}log(\dfrac{1}{6})+\dfrac{1}{6}log(\dfrac{1}{6})+\dfrac{1}{6}log(\dfrac{1}{6})+\dfrac{1}{6}log(\dfrac{1}{6}))=-(0.17*(-2.58)*6)=2.58H(X)=?(61?log(61?)+61?log(61?)+61?log(61?)+61?log(61?)+61?log(61?)+61?log(61?))=?(0.17?(?2.58)?6)=2.58,這個時候的不確定性就比剛才要高。
設有隨機變量(X,Y),其聯合概率分布為P(X=xi,Y=yi)=pi,j,i=1,2,3...n;j=1,2,3...mP(X=x_i,Y=y_i)=p_{i,j},i=1,2,3...n; j=1,2,3...mP(X=xi?,Y=yi?)=pi,j?,i=1,2,3...n;j=1,2,3...m
條件熵H(Y|X):表示在已知隨機變量X的條件下,Y的不確定性。定義為X給定條件下Y的條件概率分布的熵對X的數學期望:H(Y∣X)=∑i=1npiH(Y∣X=xi)H(Y|X)=\sum_{i=1}^np_iH(Y|X=x_i)H(Y∣X)=∑i=1n?pi?H(Y∣X=xi?)
當熵和條件熵,由數據估計得到時,分別稱為經驗熵與經驗條件熵。
信息增益:特征A對訓練數據集D的信息增益g(D,A)定義為:集合D的經驗熵H(D)與特征A給定條件下D的經驗條件熵H(D|A)之差:g(D,A)=H(D)?H(D∣A)g(D,A)=H(D)-H(D|A)g(D,A)=H(D)?H(D∣A)
這表示了特征X的引入,使得分類Y的不確定性減少的程度。
互信息=信息熵H(Y)-條件熵H(Y|X)
1.3 信息增益的算法
設訓練數據集為D
|D|表示其樣本容量,即樣本個數
設有K個類CkC_kCk?,k=1,2,3…K
∣Ck∣|C_k|∣Ck?∣表示屬于類CkC_kCk?的樣本數
特征A有n個不同的取值{a1,a2,...ana_1,a_2,...a_na1?,a2?,...an?}。根據特征A的取值,將D劃分為n個子集D1,D2...DnD_1,D_2...D_nD1?,D2?...Dn?。
∣Di∣|D_i|∣Di?∣為子集DiD_iDi?的樣本個數
子集DiD_iDi?中屬于類CkC_kCk?的樣本集合為DikD_{ik}Dik?
∣Dik∣|D_{ik}|∣Dik?∣為集合DikD_{ik}Dik?的樣本數
輸入:數據集D,以及特征A
輸出:特征A對數據集的信息增益g(D,A)
1 計算數據集D的經驗熵H(D):H(D)=?∑k=1K∣Ck∣∣D∣log2∣Ck∣∣D∣H(D)=-\sum_{k=1}^K\dfrac{|C_k|}{|D|}log_2\dfrac{|C_k|}{|D|}H(D)=?∑k=1K?∣D∣∣Ck?∣?log2?∣D∣∣Ck?∣?
2 計算特征A對數據集D的經驗條件熵H(D|A):H(D∣A)=∑i=1n∣Di∣∣D∣H(Di)=∑i=1n∣Di∣∣D∣∑k=1K∣Dik∣∣Di∣log2∣Dik∣∣Di∣H(D|A)=\sum_{i=1}^n\dfrac{|D_i|}{|D|}H(D_i)=\sum_{i=1}^n\dfrac{|D_i|}{|D|}\sum_{k=1}^K\dfrac{|D_{ik}|}{|D_i|}log_2\dfrac{|D_{ik}|}{|D_i|}H(D∣A)=∑i=1n?∣D∣∣Di?∣?H(Di?)=∑i=1n?∣D∣∣Di?∣?∑k=1K?∣Di?∣∣Dik?∣?log2?∣Di?∣∣Dik?∣?
3 計算信息增益g(D,A):g(D,A)=H(D)?H(D∣A)g(D,A)=H(D)-H(D|A)g(D,A)=H(D)?H(D∣A)
1.4 信息增益比
以信息增益來選擇特征,會傾向于選擇特征取值多的特征。可以使用信息增益比來解決這個問題。
特征A對數據集D的信息增益比定義為信息增益與訓練數據集D關于特征A的值的熵的比:gR(D,A)=g(D,A)HA(D)g_R(D,A)=\dfrac{g(D,A)}{H_A(D)}gR?(D,A)=HA?(D)g(D,A)?
HA(D)=?∑i=1n∣Di∣∣D∣log2∣Di∣∣D∣H_A(D)=-\sum_{i=1}^n\dfrac{|D_i|}{|D|}log_2\dfrac{|D_i|}{|D|}HA?(D)=?∑i=1n?∣D∣∣Di?∣?log2?∣D∣∣Di?∣?,n為特征A的取值個數
2 決策樹ID3
2.1 ID3樹的構建
按照信息增益選擇特征,形成的決策樹稱為ID3樹。
輸入:訓練數據集D、特征集合A、閾值?\epsilon?
輸出:決策樹T
1 若D中所有實例屬于同一類CkC_kCk?,則T為單節點樹,并將類CkC_kCk?作為該節點的類標簽,返回T;
2 若A=?A=\emptyA=?,則T為單節點樹,并選擇D中實例數最大的類CkC_kCk?作為該節點的類標簽,返回T;
3 按照信息增益的算法,計算特征集合A中每個特征對D的信息增益,選擇信息增益最大的特征AgA_gAg?;
4 如果AgA_gAg?的信息增益小于閾值?\epsilon?,則T為單節點樹,并選擇D中實例數最大的類CkC_kCk?作為該節點的類標簽,返回T;
5 否則,對AgA_gAg?的每一個可能的值aia_iai?,依Ag=aiA_g=a_iAg?=ai?將D分割為若干非空子集DiD_iDi?,將DiD_iDi?中實例數最大的類作為節點標記,構建子節點。由節點及其子節點構成樹T,返回T;
6 對第i個子節點,以數據集DiD_iDi?作為訓練集,以A-{AgA_gAg?}為特征集,遞歸地調用步驟1-5,得到子樹TiT_iTi?,返回TiT_iTi?。
2.2 決策樹的剪枝
2.2.1 損失函數定義與計算
通過極小化 決策樹整體的損失函數 來實現。
設樹|T|的葉子節點個數為|T|,t是樹T的葉子節點,該葉子節點有NtN_tNt?個樣本。其中k類的樣本量為NtkN_{tk}Ntk?,k=1,2,3…K。
說明:一棵樹T的葉子節點不一定只包含一類數據。例如在上述步驟2和5,就可能一個節點中實際存在多個類別的數據。只是因為再細分特征的信息增益太小了,不再劃分。
Ht(T)H_t(T)Ht?(T)為葉子節點t上的經驗熵,α>=0\alpha>=0α>=0為參數,
損失函數:Cα(T)=∑i=1∣T∣NtHt(T)+α∣T∣C_{\alpha}(T)=\sum_{i=1}^{|T|}N_tH_t(T)+\alpha|T|Cα?(T)=∑i=1∣T∣?Nt?Ht?(T)+α∣T∣
說明:樹的損失函數對所有葉子節點的遍歷。每一個葉子節點計算:當前葉子節點個數NtN_tNt?,以及葉子節點的熵Ht(T)H_t(T)Ht?(T)。它們的乘積表示當前葉子節點不確定的度量,也就是損失。對所有葉子節點不確定性的度量,就稱為樹的損失。
α∣T∣\alpha|T|α∣T∣是為了防止樹過擬合。
∑i=1∣T∣NtHt(T)\sum_{i=1}^{|T|}N_tH_t(T)∑i=1∣T∣?Nt?Ht?(T)熵越小,說明葉子節點越來越多,這一部分會使得模型越來越復雜。α∣T∣\alpha|T|α∣T∣是為了對抗模型過渡復雜。
經驗熵:Ht(T)=?∑kNtkNtlogNtkNtH_t(T)=-\sum_k\dfrac{N_{tk}}{N_t}log\dfrac{N_{tk}}{N_t}Ht?(T)=?∑k?Nt?Ntk??logNt?Ntk??
C(T)=∑i=1∣T∣NtHt(T)=?∑i=1∣T∣∑k=1KNtklogNtkNtC(T)= \sum_{i=1}^{|T|}N_tH_t(T)=-\sum_{i=1}^{|T|}\sum_{k=1}^KN_{tk}log\dfrac{N_{tk}}{N_t}C(T)=∑i=1∣T∣?Nt?Ht?(T)=?∑i=1∣T∣?∑k=1K?Ntk?logNt?Ntk??
那么 Cα(T)=C(T)+α∣T∣C_{\alpha}(T)=C(T)+\alpha|T|Cα?(T)=C(T)+α∣T∣
2.2.2 剪枝過程
輸入:決策樹T,參數α\alphaα
輸出:剪枝后的子樹TαT_{\alpha}Tα?
1 計算每個節點的經驗熵
2 遞歸地從樹的葉子結點向上縮
設一組葉子節點回縮到其父節點之前與之后的損失函數分別為:Cα(TB)C_{\alpha}(T_B)Cα?(TB?),Cα(TA)C_{\alpha}(T_A)Cα?(TA?)
如果:Cα(TA)C_{\alpha}(T_A)Cα?(TA?)<=Cα(TB)C_{\alpha}(T_B)Cα?(TB?),則進行剪枝。
3 返回2,直至不能繼續為止,得到損失最小的子樹TaT_aTa?。
以上過程將信息增益,換成信息增益比,那么得到的樹就是C4.5。
2.3 CART樹
CART是在給定輸入隨機變量X條件下輸出隨機變量Y的條件概率分布的學習方法。
CART樹是一棵二叉樹。左分支的取值為是,右分支的取值為否。
這樣的決策樹等價于遞歸地二分每個特征,將輸入空間劃分為有限個單元,并在這些單元上確定預測的概率分布。
CART算法=決策樹生成 + 決策樹剪枝
2.3.1 CART回歸樹
- 樹的定義
設Y是連續變量,給定訓練數據集:D={(x1,y1),(x2,y2),...(xn,yn)}D=\{(x_1,y_1),(x_2,y_2),...(x_n,y_n)\}D={(x1?,y1?),(x2?,y2?),...(xn?,yn?)},yi∈Ry_i \in Ryi?∈R 。假設已經將輸入空間劃分為M個單元R1,R2…Rm,每個單元上RmR_mRm?上有一個固定的輸出CmC_mCm?,則回歸樹表示為:f(x)=∑m=1MCmI(x∈Rm)f(x)=\sum_{m=1}^MC_mI(x\in R_m)f(x)=∑m=1M?Cm?I(x∈Rm?)
備注:遍歷所有分割的子空間,數據屬于某個子空間,函數值就是該空間的輸出值。
- 求解每個單元上的最優輸出值
平方誤差來表示預測誤差,用平方誤差最小準則求解每個單元上的最優輸出值:∑xi∈Rm(yi?f(x))2\sum_{x_i \in R_m}(y_i-f(x))^2∑xi?∈Rm??(yi??f(x))2
那么RmR_mRm?上的CmC_mCm?的最優值怎么計算呢?cm^=ave(yi∣xi∈Rm)\hat{c_m} = ave(y_i|x_i \in R_m)cm?^?=ave(yi?∣xi?∈Rm?) 使用落在RmR_mRm?空間內所有點的y值求平均得到。
- 如何對輸入空間進行劃分
使用啟發式選擇的方法。
選擇第j個變量x(j)x^{(j)}x(j)和它的取值s,作為切分變量和切分點,定義兩個區域,一個是比s小的,一個是比s大的:R1={x∣x(j)<=s}R_1=\{x|x^{(j)}<=s\}R1?={x∣x(j)<=s},R2={x∣x(j)>s}R_2=\{x|x^{(j)}>s\}R2?={x∣x(j)>s}
尋找最優切分變量和切分點:
minj,s[mine1∑xi∈R1(yi?c1)2+mine2∑xi∈R2(yi?c2)2]min_{j,s}[min_{e_1}\sum_{x_i \in R_1}(y_i-c_1)^2+min_{e2}\sum_{x_i\in R_2}(y_i-c_2)^2]minj,s?[mine1??∑xi?∈R1??(yi??c1?)2+mine2?∑xi?∈R2??(yi??c2?)2]
c1^=ave(yi∣xi∈R1)\hat{c_1}=ave(y_i|x_i\in R_1)c1?^?=ave(yi?∣xi?∈R1?)
c2^=ave(yi∣xi∈R2)\hat{c_2}=ave(y_i|x_i\in R_2)c2?^?=ave(yi?∣xi?∈R2?)
使得兩部分誤差和最小的變量j和切分點s
需要對所有變量和所有切分點遍歷。(這是NP問題吧)
再對兩個區域重復上述劃分,直到滿足停止條件。
總結成算法是這樣的:最小二乘回歸樹生成算法。
輸入:訓練數據集D
輸出:回歸樹f(x)
在訓練數據集所在的輸入空間中,遞歸地將每個區域劃分為2個子區域,并決定每個子區域上的輸出值,構建二叉決策樹。
1 選擇最優切分變量j和切分點s,求解
minj,s[mine1∑xi∈R1(yi?c1)2+mine2∑xi∈R2(yi?c2)2]min_{j,s}[min_{e_1}\sum_{x_i \in R_1}(y_i-c_1)^2+min_{e2}\sum_{x_i\in R_2}(y_i-c_2)^2]minj,s?[mine1??∑xi?∈R1??(yi??c1?)2+mine2?∑xi?∈R2??(yi??c2?)2]
遍歷變量j,對固定的切分變量j掃描切分點s,選擇使得上式達到最小值的對(j,s)
2 用選定的對(j,s)劃分區域,并決定相應的輸出值:
R1={x∣x(j)<=s}R_1=\{x|x^{(j)}<=s\}R1?={x∣x(j)<=s}
R2={x∣x(j)>s}R_2=\{x|x^{(j)}>s\}R2?={x∣x(j)>s}
cm^=1Nm∑xi∈Rm(j,s)yi\hat{c_m}=\dfrac{1}{N_m}\sum_{x_i\in R_m(j,s)}y_icm?^?=Nm?1?∑xi?∈Rm?(j,s)?yi?,x∈Rm,m=1,2x\in R_m,m=1,2x∈Rm?,m=1,2
每個子空間數據的y的平均值作為空間的輸出。
3 繼續對2個子區域調用步驟1,2,直到滿足停止條件
4 將輸入空間劃分為M個區域R1,R2,...RMR_1,R_2,...R_MR1?,R2?,...RM?,生成決策樹:f(x)=∑m=1MCmI(x∈Rm)f(x)=\sum_{m=1}^MC_mI(x\in R_m)f(x)=∑m=1M?Cm?I(x∈Rm?)
2.3.2 CART分類樹
選擇依據基尼指數
假設有K個分類,每個樣本點屬于分類k的概率是PkP_kPk?。則概率分布的基尼指數:Gini(p)=∑k=1Kpk(1?pk)=1?∑k=1Kpk2Gini(p)=\sum_{k=1}^K p_k(1-p_k)=1-\sum_{k=1}^Kp_k^2Gini(p)=∑k=1K?pk?(1?pk?)=1?∑k=1K?pk2?
對于二分類Gini(p)=2p(1?p)Gini(p)=2p(1-p)Gini(p)=2p(1?p)
對于給定數據集的基尼指數:Gini(D)=1?∑k=1K(∣Ck∣∣D∣)2Gini(D)=1-\sum_{k=1}^K(\dfrac{|C_k|}{|D|})^2Gini(D)=1?∑k=1K?(∣D∣∣Ck?∣?)2
如果樣本集合D根據特征A是否為a,劃分為數據集D1,和數據集D2。
D1={(x,y)∈D∣A(x)=a}D_1=\{(x,y)\in D|A(x)=a\}D1?={(x,y)∈D∣A(x)=a}
D2=D?D1D_2=D-D_1D2?=D?D1?
在特征A下,集合D的基尼指數為:Gini(D)=∣D1∣∣D∣Gini(D1)+∣D2∣∣D∣Gini(D2)Gini(D)=\dfrac{|D_1|}{|D|}Gini(D_1)+\dfrac{|D_2|}{|D|}Gini(D_2)Gini(D)=∣D∣∣D1?∣?Gini(D1?)+∣D∣∣D2?∣?Gini(D2?)
CART分類樹生成算法
輸入:訓練數據集D,停止計算條件
輸出:CART分類樹
從根節點開始,遞歸對每個結點操作。
1、設結點數據集為D,對每個特征A,對其每個值a,根據樣本點對A=a的測試為是或否,將D分為D1,D2,計算A=a的基尼指數
2、在所有的特征A以及所有可能的切分點a中,選擇基尼指數最小的特征和切分點,將數據集分配到兩個子結點中。
3、對兩個子結點遞歸調用1,2步驟
算法停止的條件是:節點中的樣本個數小于閾值,或者樣本集的基尼指數小于閾值。
2.3.3 CART樹剪枝
計算子樹的損失函數:Cα(T)=C(T)+α∣T∣C_{\alpha}(T)=C(T)+\alpha|T|Cα?(T)=C(T)+α∣T∣
當α\alphaα很大的時候,這樣得到的會是一棵偏小的決策樹。也就是葉子節點少的決策樹。
α\alphaα從0到一個較大的值的過程中可以生成很多顆樹。選擇最優的子樹TαT_{\alpha}Tα?
總結
以上是生活随笔為你收集整理的从决策树到xgboost(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Amesim学习——气体混合室仿真
- 下一篇: 239. Sliding Window