r语言c5.0决策树算法参数,决策树算法CART、C5.0的R语言实现——(三)
當前瀏覽器不支持播放音樂或語音,請在微信或其他瀏覽器中播放
說實話,前面的決策樹理論介紹的我自己都累,尤其是第一節各種公式的編輯;當然了,我深知數學理論對一切結論的支撐重要性,數學是這個世界上最美的語言。有了前面的鋪墊,這里我們廢話不多說,直接進入最終目標,基于R語言的兩種經典決策樹模型的實現。
這里用的數據集是R自帶的應該是專門用來做決策樹的訓練數據集"Pima.tr"和測試數據集"Pima.te",因為這樣可以保證人人都可以做模型實驗。我本人覺得在這一點上R語言做的還是比較好的。
先看一下這兩份訓練與測試集的基本情況:
> head(Pima.tr)
npreg glu bp skin? bmi?? ped age type
1???? 5? 86 68?? 28 30.2 0.364? 24?? No
2???? 7 195 70?? 33 25.1 0.163? 55? Yes
3???? 5? 77 82?? 41 35.8 0.156? 35?? No
4???? 0 165 76?? 43 47.9 0.259? 26?? No
5???? 0 107 60?? 25 26.4 0.133? 23?? No
6???? 5? 97 76?? 27 35.6 0.378? 52? Yes
> dim(Pima.tr)
[1] 200?? 8
> head(Pima.te)
npreg glu bp skin? bmi?? ped age type
1???? 6 148 72?? 35 33.6 0.627? 50? Yes
2???? 1? 85 66?? 29 26.6 0.351? 31?? No
3???? 1? 89 66?? 23 28.1 0.167? 21?? No
4???? 3? 78 50?? 32 31.0 0.248? 26? Yes
5???? 2 197 70?? 45 30.5 0.158? 53? Yes
6???? 5 166 72?? 19 25.8 0.587? 51? Yes
> dim(Pima.te)
[1] 332?? 8
這兩份數據,確實分別是訓練集與測試集,下面分別介紹R語言的幾種決策樹構建與剪枝、樹的可視化與預測過程,并分析其預測準確率!
01
CART
構建模型主要用函數rpart包的基本函數rpart(formula,data = ,control = rpart.control(cp = )),其中formula就是模型表達式,比如type~.,表示type對其它所有變量的決策樹,"data ="指定作用的數據集, "control = rpart.control(cp = )"表示是否引入復雜系數進行剪枝。當然,這是幾個基本模型參數。
(1)、未剪枝
rm(list = ls())
library(MASS)
library(rpart)
#綁定數據集,便于操作
attach(Pima.tr)
summary(Pima.tr)
#CART決策樹分析
cart
summary(cart)
par(xpd = TRUE)
plot(cart,main = '未剪枝')
text(cart)
CART算法未剪枝決策樹
(2)剪枝
#剪枝這里cp值為復雜系數
#cp = 0.1葉節點為3,留三個枝
cart1
#cp = 0.03葉節點為5,留五個枝
cart2
par(mfrow = c(1,2),xpd = TRUE)
plot(cart1,main = '留3個葉節點')
text(cart1)
plot(cart2,main = '留5個葉節點')
text(cart2)
剪枝結果決策樹
(3)、測試數據集準確率檢驗
用訓練好的模型進行預測的函數是predict(model,data,type = 'class'),第一個參數是訓練好的決策樹模型,第二個參數是用于測試的數據集,第三個參數type = "class"表示進行分類。
#測試數據集檢驗
#未剪枝
pre
#建立預測交叉矩陣
m
#預測正確率,diag(m)函數用于求矩陣對角線和,這里用于計算預測準確的數據數量之和。
sum(diag(m))/sum(m)
#葉節點為3
pre1
#建立預測交叉矩陣
m1
#預測正確率
sum(diag(m1))/sum(m1)
#葉節點為5
pre2
#建立預測交叉矩陣
m2
#預測正確率
sum(diag(m2))/sum(m2)
預測交叉矩陣是這樣的形狀
> m
predict
type?? No Yes
No? 182? 41
Yes? 48? 61
> m1
predict
type?? No Yes
No? 184? 39
Yes? 51? 58
> m2
predict
type?? No Yes
No? 193? 30
Yes? 51? 58
未剪枝、留3個葉節點、留5個葉節點的預測分類正確率分別為
[1] 0.7319277
[1] 0.7289157
[1] 0.7560241
可見,不僅要剪枝,并且留5個葉節點的預測分類正確率是最好的。
02
C5.0
#===C5.0決策樹分析===#
#noGlobalPruning值設為T表示不進行修剪
library(C50)
tr5.0
tr5.01
par(xpd = TRUE)
#--種類畫圖不需要text()--#
plot(tr5.0)
plot(tr5.01)
#預測
pre
pre1
##建立預測交叉矩陣
m
m1
#預測正確率
sum(diag(m))/sum(m)
#預測正確率
sum(diag(m1))/sum(m1)
畫出的決策樹如下:
未剪枝決策樹
剪枝的決策樹
預測交叉矩陣是這樣的形狀
> m
predict
type?? No Yes
No? 193? 30
Yes? 58? 51
> m1
predict
type?? No Yes
No? 195? 28
Yes? 60? 49
C5.0未剪枝、剪枝的預測分類正確率分別為:
[1] 0.7349398
[1] 0.7349398
預測分類正確率是一樣的,雖然預測交叉矩陣不一樣,因為它們的對角線之和是一樣的。
03
兩種算法的比較
經過實驗我們得出的結果分別是這樣的,如下所示:
比較內容
CART
C5.0
訓練數據正確率
0.835
0.815
測試數據正確率
0.756
0.735
葉節點數
5
4
深度
3
3
對于實驗數據,CART算法正確率好像好一些,但它的葉節點數大一些!總的來看,兩種算法效能好像差不多!關于決策樹到這里總算落下帷幕了,好不容易!
歡迎留言、提建議、意見,覺得不錯,記得【點贊、分享】!
終于等到你了!
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的r语言c5.0决策树算法参数,决策树算法CART、C5.0的R语言实现——(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php判断绝对路径文件是否存在,php
- 下一篇: oracle用户登录报错,oracle用