天天看點

使用R完成決策樹分類

關于決策樹理論方面的介紹,李航的《統計機器學習》第五章有很好的講解。

傳統的id3和c4.5一般用于分類問題,其中id3使用資訊增益進行特征選擇,即遞歸的選擇分類能力最強的特征對資料進行分割,c4.5唯一不同的是使用資訊增益比進行特征選擇。

特征a對訓練資料d的資訊增益g(d, a) = 集合d的經驗熵h(d) – 特征a給定情況下d的經驗條件熵h(d|a)

特征a對訓練資料d的資訊增益比r(d, a) = g(d, a) / h(d)

而cart(分類與回歸)模型既可以用于分類、也可以用于回歸,對于回歸樹(最小二乘回歸樹生成算法),需要尋找最優切分變量和最優切分點,對于分類樹(cart生成算法),使用基尼指數選擇最優特征。

使用R完成決策樹分類

library(rpart);  

## rpart.control對樹進行一些設定  

## xval是10折交叉驗證  

## minsplit是最小分支節點數,這裡指大于等于20,那麼該節點會繼續分劃下去,否則停止  

## minbucket:葉子節點最小樣本數  

## maxdepth:樹的深度  

## cp全稱為complexity parameter,指某個點的複雜度,對每一步拆分,模型的拟合優度必須提高的程度  

ct <- rpart.control(xval=10, minsplit=20, cp=0.1)  

## kyphosis是rpart這個包自帶的資料集  

## na.action:缺失資料的處理辦法,預設為删除因變量缺失的觀測而保留自變量缺失的觀測。           

## method:樹的末端資料類型選擇相應的變量分割方法:  

## 連續性method=“anova”,離散型method=“class”,計數型method=“poisson”,生存分析型method=“exp”  

## parms用來設定三個參數:先驗機率、損失矩陣、分類純度的度量方法(gini和information)  

## cost我覺得是損失矩陣,在剪枝的時候,葉子節點的權重誤差與父節點的誤差進行比較,考慮損失矩陣的時候,從将“減少-誤差”調整為“減少-損失”  

fit <- rpart(kyphosis~age + number + start,  

    data=kyphosis, method=”class”,control=ct,  

    parms = list(prior = c(0.65,0.35), split = “information”));  

## 第一種  

par(mfrow=c(1,3));  

plot(fit);  

text(fit,use.n=t,all=t,cex=0.9);  

## 第二種,這種會更漂亮一些  

library(rpart.plot);  

rpart.plot(fit, branch=1, branch.type=2, type=1, extra=102,  

           shadow.col=”gray”, box.col=”green”,  

           border.col=”blue”, split.col=”red”,  

           split.cex=1.2, main=”kyphosis決策樹”);  

## rpart包提供了複雜度損失修剪的修剪方法,printcp會告訴分裂到每一層,cp是多少,平均相對誤差是多少  

## 交叉驗證的估計誤差(“xerror”列),以及标準誤差(“xstd”列),平均相對誤差=xerror±xstd  

printcp(fit);  

## 通過上面的分析來确定cp的值  

## 我們可以用下面的辦法選擇具有最小xerror的cp的辦法:  

## prune(fit, cp= fit$cptable[which.min(fit$cptable[,"xerror"]),”cp”])  

fit2 <- prune(fit, cp=0.01);  

rpart.plot(fit2, branch=1, branch.type=2, type=1, extra=102,  

效果圖如下:

使用R完成決策樹分類

<a target="_blank" href="http://wenku.baidu.com/view/7b01d69c51e79b8968022679.html">這是一篇相關的論文。</a>

繼續閱讀