一顆決策樹包含乙個根結點、若干個內部結點和若干個葉結點;葉結點對應於決策結果,其他每個結點則對應於乙個屬性測試;每個結點包含的樣本集合根據屬性測試的結果被劃分到子結點中;根結點包含樣本全集。從根結點到葉結點的路徑對應於了乙個判定測試序列。
目的:為了產生一顆泛化能力強,即處理未見示例能力強的據決策樹。
特別注意幾點:
1)通常所說的屬性是離散,若屬性是連續,則要把屬性離散化,最簡單的是是採用二分法(找劃分點)
2)缺失值處理
決策樹是乙個遞迴過程,以下三種情形會導致遞迴返回:
1)當前結點包含的樣本屬於同一類別,無需劃分;
2)當前屬性集為空,或是所有樣本在所有屬性上取值相同,無法劃分;
3)當前結點包含的樣本集合為空,不能劃分。
資訊增益:一般而言,資訊增益越大,則意味著使用屬性a來劃分所獲得的「純度提公升」越大
增益率:與資訊增益的原理一樣,但增益率可以校正存在偏向於選擇取值較多的特徵的問題
剪枝處理
1)預剪枝
在決策樹生成過程中,對每個結點在劃分前先進行估計,若當前結點的劃分不能帶來決策樹泛化效能提公升,則停止劃分並將當前結點標記為葉結點。
2)後剪枝
先從訓練集生成一顆完整的決策樹,然後自底向上地對非葉結點進行考察,若將該結點對應的子樹替換為葉結點能帶來決策樹泛化效能提公升,則將該子樹替換為葉結點。
r語言實現
library(c50); library(rpart); library(party); library(rpart.plot)
library(caret)
# 載入資料
car <- read.table('./data/car.data', sep = ',')
colnames(car) <- c('buy', 'main', 'doors', 'capacity', 'lug_boot', 'safety', 'accept')
# 資料集分為測試和訓練
ind <- createdatapartition(car$accept, times = 1, p = 0.75, list = false)
cartr <- car[ind, ]
carte <- car[-ind, ]
# 建立模型
# 決策樹
# rpart包
# 在rpart包中有函式rpart.control預剪枝,prune後剪枝
# # 預剪枝:
# rpart.control對樹進行一些設定
# minsplit是最小分支節點數,這裡指大於等於20,那麼該節點會繼續分劃下去,否則停止
# minbucket:樹中葉節點包含的最小樣本數
# maxdepth:決策樹最大深度
# xval:交叉驗證的次數
# cp全稱為complexity parameter,指某個點的複雜度,對每一步拆分,模型的擬合優度必須提高的程度
# # 後剪枝:
# 主要是調節引數是cp
# prune函式可以實現最小代價複雜度剪枝法,對於cart的結果,每個節點均輸出乙個對應的cp
# prune函式通過設定cp引數來對決策樹進行修剪,cp為複雜度係數
tc <- rpart.control(minsplit = 20, minbucket = 20, maxdepth = 10, xval = 5, cp = 0.005) # 預剪枝
rpart.model <- rpart(accept ~ ., data = cartr, control = tc)
rpart.model <- prune(rpart.model,
cp = rpart.model$cptable[which.min(rpart.model$cptable[,"xerror"]),"cp"]) # 後剪枝
rpart.plot(rpart.model, under = true, faclen = 0, cex = 0.5, main = "決策樹") # 畫圖
# c5.0
# c5.0包
c5.0.model <- c5.0(accept ~ ., data = cartr) # c5.0
plot(c5.0.model)
# 使用ctree函式實現條件推理決策樹演算法
# party包
ctree.model <- ctree(accept ~ ., data = cartr)
# **結果,並構建混淆矩陣,檢視準確率
# 構建result,存放**結果
result <- data.frame(arithmetic = c('c5.0', 'cart', 'ctree'), errtr = rep(0, 3),errte = rep(0, 3))
for (i in 1:3)
#檢視誤差率
> result
arithmetic errtr errte
1 c5.0 1.16 % 3.25 %
2 cart 5.94 % 7.89 %
3 ctree 4.47 % 5.8 %
r語言決策樹
決策樹演算法 決策樹的建立 建立決策樹的問題可以用遞迴的形式表示 1 首先選擇乙個屬性放置在根節點,為每乙個可能的屬性值產生乙個分支 將樣本拆分為多個子集,乙個子集對應一種屬性值 2 在每乙個分支上遞迴地重複這個過程,選出真正達到這個分支的例項 3 如果在乙個節點上的所有例項擁有相同的類別,停止該部...
分類演算法 決策樹演算法及其R實現
以鳶尾花為例子來說明 觀察上圖,判決鳶尾花的思考過程可以這麼來描述 花瓣的長度小於2.4cm的是setosa 圖中綠色的分類 長度大於2.4cm的呢?可以通過寬度來判別,寬度小於1.8cm的是versicolor 圖中紅色的分類 其餘的就是virginica 圖中黑色的分類 用圖形來形象的展示上述思...
決策樹與R語言 RPART
關於決策樹理論方面的介紹,李航的 統計機器學習 第五章有很好的講解。傳統的id3和c4.5一般用於分類問題,其中id3使用資訊增益進行特徵選擇,即遞迴的選擇分類能力最強的特徵對資料進行分割,c4.5唯一不同的是使用資訊增益比進行特徵選擇。特徵a對訓練資料d的資訊增益g d,a 集合d的經驗熵h d ...