PART (recursive partitioning and regression trees、再帰分割回帰木)
PARTは決定木の代表的な方法。
閾値を決めて直線で分けていくので予測性能はSVM等の機械学習よりは良くないが、結果を解釈しやすいのが利点。
機械学習を全体的に勉強したい場合はHastieの本がお勧め。

- 作者: Trevor Hastie,Robert Tibshirani,Jerome Friedman
- 出版社/メーカー: Springer
- 発売日: 2008/12/01
- メディア: ハードカバー
- 購入: 1人 クリック: 222回
- この商品を含むブログ (16件) を見る
決定木は基本的に回帰をやっていると思うので、標準化などの線形変換を行っても結果は変わらない。
またrpartとmvpartでは木の大きさを決めるパラメータが異なっていて、cpとsizeで指定するみたい。
sizeで指定出来た方が結果を制御出来ている感じがする。
出る結果はこんな感じ。
Rでのサンプルコードは以下に。
library(mvpart)
#------3クラスに関連する変数(var1)と関連しない変数(var2)の作成
class <- as.character(rep(1:3, 100))
set.seed(1)
norm <- rnorm(600)
Data <- data.frame(class, var1=round( (norm[1:300]+as.numeric(class))*100, digits=0), var2=round(norm[301:600]*100, digits=0))
DataR <- rpart(class~var1 + var2, data=Data, cp=0.01)
plot(DataR, margin=0.1)
text(DataR, use.n=T)
#---他のパッケージでも同じ結果
DataMV <- mvpart(class~var1 + var2, data=Data, size=5)
library(maptree)
draw.tree (clip.rpart (DataR, best=5),
nodeinfo=T, units="species", cases="n", digits=0)
#---分類結果を確認
library(pinktoe)
splits.rpart(DataMV)
library(ggplot2)
p <- ggplot(Data, aes(var1, var2, col=class)) + geom_point()
p + geom_vline(xintercept=121, col=2, lty=2) + geom_vline(xintercept=253, col=3, lty=2)
#------Dataを標準化して決定木
DataScale <- data.frame(apply(Data[, 2:3], 2, scale))
DataScale <- data.frame(class, DataScale)
DataScaleR <- rpart(as.character(class)~var1 + var2, data=DataScale, cp=0.01)
plot(DataScaleR, margin=0.05)
text(DataScaleR, use.n=T) #maptreeを読み込んだ後だとエラーが出る

