Hatena::ブログ(Diary)

アイアナ:データ分析や人工知能(AI)などの技術雑記

2009 | 11 |
2010 | 02 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 03 | 04 | 05 | 10 | 12 |
2013 | 01 | 02 | 04 |
2014 | 03 | 12 |
2016 | 03 |
2017 | 10 |

2011-08-25

決定木のRパッケージについて

教科書

Classification and Regression Trees (Wadsworth Statistics/Probability)

Classification and Regression Trees (Wadsworth Statistics/Probability)



決定木のアルゴリズムはこれらが代表的です。

  • CART(かーと、classification and regression tree、ほとんどこれ)
  • ID3→C4.5→C5.0(ID3からバージョンアップ
  • J4.8



Rのどのパッケージで何が出来るかを紹介します。


それぞれのパッケージの実行例です。

library(mboost)	# bodyfatデータ用

#------rpart
library(rpart)
bodyfat_rpart <- rpart(DEXfat ~ age + waistcirc + hipcirc + elbowbreadth + 
kneebreadth, data = bodyfat, control = rpart.control(minsplit = 10))
#---普通のプロット
plot(bodyfat_rpart)
text(bodyfat_rpart, use.n=T)

#---partykitのプロット
library(partykit)
plot(as.party(bodyfat_rpart), tp_args = list(id = FALSE))	#tp_argsでnode idの表示

#------ランダムフォレスト、caretで並列計算
(vignettも良い http://cran.r-project.org/web/packages/caret/index.html)
library(randomForest)
bodyfat_rf <-randomForest(DEXfat ~ age + waistcirc + hipcirc + elbowbreadth + 
kneebreadth, data = bodyfat, importance=TRUE)
varImpPlot(bodyfat_rf)

#------mvpart
library(mvpart)


#------partyの条件付き分割
bodyfat_ctree <- ctree(DEXfat ~ age + waistcirc + hipcirc + elbowbreadth + kneebreadth, data = bodyfat)
plot(bodyfat_ctree)


#------mboost
bodyfat.gb <- blackboost(DEXfat ~ age + waistcirc + hipcirc + elbowbreadth + 
kneebreadth, data = bodyfat, control = boost_control(mstop = 50))
plot(bodyfat.gb)


#------CHAID(結構時間がかかる、699obs 11varで30秒程度、カイD)
library(CHAID)
library(mlbench)
data("BreastCancer", package = "mlbench")
b_chaid <- chaid(Class ~ Cl.thickness + Cell.size + Cell.shape + Marg.adhesion + 
Epith.c.size + Bare.nuclei + Bl.cromatin + Normal.nucleoli + Mitoses, data = 
BreastCancer)
plot(b_chaid)


#------TWIX
library(TWIX)
TM <- TWIX(Class ~ Cl.thickness + Cell.size + Cell.shape + Marg.adhesion + 
Epith.c.size + Bare.nuclei + Bl.cromatin + Normal.nucleoli + Mitoses, data = 
BreastCancer, topN=c(9,9), method="local")
plot(TM)