1. 程式人生 > 其它 >r語言 C4.5 剪枝是用什麼演算法_決策樹分類演算法的原理介紹及應用

r語言 C4.5 剪枝是用什麼演算法_決策樹分類演算法的原理介紹及應用

技術標籤:r語言 C4.5 剪枝是用什麼演算法輸入廣義表表示建立二叉樹的演算法c++

一、概述

決策樹演算法是一種被廣泛使用的分類演算法,它藉助於樹的分支結構實現分類(可以是二叉樹或非二叉樹),樹中的每一個節點表示物件屬性的判斷條件,其分支表示符合節點條件的物件,葉子節點表示物件所屬的預測結果。使用決策樹進行決策的過程就是從根節點開始,測試待分類項中相應的特徵屬性,並按照其值選擇輸出分支,直到到達葉子節點,將葉子節點存放的類別作為決策結果。

二、決策樹ID3演算法

(一)特徵選擇方法

資訊理論中的熵,度量了事物的不確定性,熵值越大,表明事物越不確定。隨機變數X的熵的表示式為:

2dd50deec218b1f7bc70f46e3fdd5641.png

其中n代表X的n種不同的離散取值,代表X取值為i的概率,log為以2或者e為底的對數。例如,X有2個可能的取值,且這兩個取值的概率都為1/2,則X的熵值為:

750ec79089efc53e04c05d4d414c60e5.png

變數X和Y的聯合熵表示式為:

8577f7ec897fb0cbdd1dbf1827a0d342.png

條件熵的表示式為:

542322bc47917f7111e707cf574f30f2.png

含義為在X已知的情況下,Y的不確定性的減少程度,在決策樹的ID3演算法中被稱作資訊增益,ID3演算法就是用資訊增益來判斷節點應該用什麼特徵來構建決策樹,資訊增益越大,表明該特徵越適合用來分類。

(二)不足之處

(1)ID3演算法沒有考慮連續特徵;

(2)ID3演算法採用資訊增益大的特徵優先建立決策樹的節點;在相同條件下,取值比較多的特徵比取值少的特徵資訊增益大,在這種情況下,易出現錯誤建立節點的情況;

(3)ID3演算法沒有考慮有缺失值的情況;

(4)ID3演算法沒有考慮過擬合的問題。

三、決策樹C4.5演算法的改進

對於ID3演算法不能處理連續特徵的問題,C4.5的思路是將連續的特徵離散化。比如m個樣本的連續特徵A有m個,將其從小到大進行排列,C4.5取相鄰兩樣本值的平均數,一共取得m-1個劃分點,對於這m-1個點,分別計算以該點作為二元分類點時的資訊增益。選擇資訊增益最大的點作為該連續特徵的二元離散分類點。

對於第二個問題——將資訊增益作為選擇節點的標準偏向於取值較多的特徵。引入了一個變數,叫做資訊增益比,它是資訊增益和特徵熵的比值,表示式為:

5394692f894f56ef52a21929369dac68.png

D為樣本特徵輸出的集合,A為樣本特徵,對於特徵熵,表示式為:

fc153286e93ee832f9e04335f3c56650.png

其中,n為特徵A的類別數,Di為特徵A的第i個取值對應的樣本個數,|D|為樣本個數。

特證數越多的特徵對應的特徵熵越大,將它放在分母的位置,可以校正資訊增益容易偏向於取值較多的特徵的問題。

對於第三個缺失值處理的問題,主要需要解決兩個子問題,一是在樣本某些特徵缺失的情況下選擇劃分的屬性,二是選定了劃分屬性,對於在該屬性下缺失特徵的樣本的處理。

對於第一個子問題,對於某一個有缺失特徵值的特徵A。C4.5的思路如下:首先,對每個樣本設定一個權重,將資料劃分成兩部分,一部分是有特徵A的資料集D1,另一部分是沒有特徵A的資料集D2;然後,資料集D1和對應特徵A的各個特徵值一起計算加權後的資訊增益比;最後,再乘上係數,該係數是無特徵A缺失的樣本加權後所佔加權總樣本的比例。

對於第二個子問題,按各個子節點樣本的數量比例將缺失特徵的樣本分配到所有的子節點。

四、CART分類樹演算法的簡單介紹

(一)CART分類樹演算法的最優特徵選擇方法

ID3演算法和C4.5演算法都是基於資訊理論的熵模型,涉及了大量的對數運算和排序問題,模型複雜,運算強度大。CART分類樹演算法使用基尼係數來代替資訊增益比,基尼係數代表了模型的不純度,基尼係數越小,不純度越低,特徵越好,這與資訊增益以及資訊增益比是相反的。

具體的,在分類問題中,假設有K個類別,第k個類別的概率為Pk, 則基尼係數的表示式為:

e60cb1e94632990db21111de01c4b2ed.png

特別的,對於樣本D,如果根據特徵A的某個值a,把D分成D1和D2兩部分,則在特徵A的條件下,D的基尼係數表示式為:

32aeb3ae458187fae3dcc05b58d8f68e.png

對於二類分類,基尼係數和熵之半的曲線如圖1:

b1856aa2f19c916263cb57b093d8676b.png

圖1 基尼係數和熵之半的曲線

從圖1可以看出,基尼係數和熵之半的曲線非常接近,僅僅在45度角附近誤差稍大。因此,基尼係數可以做為熵模型的一個近似替代,而CART分類樹演算法就是使用的基尼係數來選擇決策樹的特徵。同時,為了進一步簡化,CART分類樹演算法每次僅僅對某個特徵的值進行二分,而不是多分,這樣CART分類樹演算法建立起來的是二叉樹,而不是多叉樹。這樣不僅可以進一步簡化基尼係數的計算,還可以建立一個更加優美的二叉樹模型。

五、ID3、C4.5和CART的比較總結

表1 ID3、C4.5和CART的對比總結 64cc6693f401b8d75cc7a03beef31cf1.png

六、實證分析

使用CART分類樹演算法對資料進行處理

R語言程式碼(僅供參考)setwd("C:\\Users\\宋迎曉\\Desktop")rm(list=ls())accepts"accepts.csv")str(accepts)accepts$bad_indas.factor(accepts$bad_ind)names(accepts)accepts=accepts[,c(3,7:24)]set.seed(10)select1:nrow(accepts),length(accepts$bad_ind)*train=accepts[select,]#將資料分為訓練集test=accepts[-select,]#將資料分為測試集summary(train$bad_ind)trainlibrary(rpart)tc 20,minbucket=rpart.mod=rpart(bad_ind ~.,data=train,ethod="class",                parms = list(prior = c(0.65,0.35),split = "gini"),                control=tc)summary(rpart.mod)rpart.mod$variable.importance#看變數重要性rpart.mod$cp#cp是每次分割對應的複雜度係數plotcp(rpart.mod)library(rpart.plot)rpart.plot(rpart.mod,branch=1, extra=106, under=TRUE, faclen=0,           cex=0.8, main="決策樹")#畫樹狀圖rpart.mod.pru"xerror"]),rpart.plot(rpart.mod.pru,branch=1, extra=106, under=TRUE, faclen=0,           cex=0.8, main="決策樹")#繪製剪枝後的樹狀圖 rpart.pred#預測pre2]>