決策樹與R語言 RPART

2021-06-27 03:17:52 字數 2249 閱讀 7241

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

傳統的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生成演算法),使用基尼指數選擇最優特徵。

參考自部落格,乙個使用rpart完成決策樹分類的例子如下:

[plain]view plain

copy

library(rpart);  

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

## xval是10折交叉驗證  

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

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

## maxdepth:樹的深度  

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

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

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

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

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

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

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

fit 

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 

rpart.plot(fit2, 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決策樹");  

效果圖如下:

這是一篇相關的**。

r語言決策樹

決策樹演算法 決策樹的建立 建立決策樹的問題可以用遞迴的形式表示 1 首先選擇乙個屬性放置在根節點,為每乙個可能的屬性值產生乙個分支 將樣本拆分為多個子集,乙個子集對應一種屬性值 2 在每乙個分支上遞迴地重複這個過程,選出真正達到這個分支的例項 3 如果在乙個節點上的所有例項擁有相同的類別,停止該部...

R語言 決策樹 party包

1 首先解釋下熵和吉尼係數在決策樹的功用 決策樹學習的關鍵是如何選擇最優的劃分屬性。通常,隨著劃分過程的不斷進行,我們希望決策樹的內部分支節點所包含的樣本盡可能屬於同一類別,即節點的 純度 越來越高。熵 是衡量樣本資料集純度最常用的一種指標。熵值越小,則樣本的純度越高,或者說樣本的雜亂程度越小。吉尼...

R語言 決策樹及其實現

一顆決策樹包含乙個根結點 若干個內部結點和若干個葉結點 葉結點對應於決策結果,其他每個結點則對應於乙個屬性測試 每個結點包含的樣本集合根據屬性測試的結果被劃分到子結點中 根結點包含樣本全集。從根結點到葉結點的路徑對應於了乙個判定測試序列。目的 為了產生一顆泛化能力強,即處理未見示例能力強的據決策樹。...