決定木分析をRで行う方法を紹介。
難しいプログラムが組めなくてもすぐに使える。
決定木分析のRパッケージの準備
決定木分析のパッケージrpartときれいな決定木の描画パッケージpartykitをインストールする。
インストールは初めの一回だけでOK。
install.packages("rpart")
install.packages("partykit")
library()で呼び出しておく。
library(rpart)
library(partykit)
決定木分析をRで行う実例
rpartパッケージのkyphosis(脊柱後弯症)データを使う。
脊柱後弯症Kyphosisをきたすことを予測しようとする分析で、月齢のAgeと、いくつの椎体が関係しているかのNumberと、手術をしたもっとも上のレベルの椎体の番号Startで予測する。
fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)
plot(as.party())できれいな決定木を描くことができる。
plot(as.party(fit))
作成された決定木を記述すると以下のようになる。
最初の分岐は、Start(手術をしたもっとも上のレベルの椎体の番号)が8.5以上かどうか。
Startが8.5未満だったら、Present(脊柱後弯症あり)の可能性が高い。
Startが8.5以上で、かつ、14.5以上であれば、全員がAbsent(脊柱後弯症なし)。
さらに、Startが14.5未満でも月齢55か月未満だと全員Absent。
月齢が55か月以上で、月齢111か月以上もほとんどAbsent。
月齢が55か月以上で、111か月未満であれば、Presentが半分を超えている。
決定木分析をRで行う場合のComplex parameter
printcp()で実測と決定木の予測のずれ(エラー)がどこで収束するかを見ている。
printcp()は、エラーが収束している分岐を見出す。
エラーが収束した分岐をcomplex parameter (CP)として採用する。
今回はこの場合、0.019608でエラーが収束していると読む。
エラーが小さく、決定木の大きさはそこそこ大きいことがCPの条件。
CP=0.0196808のときに、エラー(rel error)が収束している感じが見て取れる。
rel errorが大きく減少しなくなる点を指している。
> printcp(fit)
Classification tree:
rpart(formula = Kyphosis ~ Age + Number + Start, data = kyphosis)
Variables actually used in tree construction:
[1] Age Start
Root node error: 17/81 = 0.20988
n= 81
CP nsplit rel error xerror xstd
1 0.176471 0 1.00000 1.0000 0.21559
2 0.019608 1 0.82353 1.0588 0.22010
3 0.010000 4 0.76471 1.0588 0.22010
Complex parameterを使って決定木を剪定する方法
rpart関数の中に、CP=0.019608を代入して、剪定した決定木を作成する。
partykitで描いてみる。
fit1 <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis, cp=0.019608)
plot(as.party(fit1))
最初の分岐、Startが8.5以上かどうかだけで、かなり分けられるのが見て取れる。
Complex parameterによる剪定が行われるとこんなにざっくりした決定木になる。
まとめ
統計ソフトRのrprarパッケージとpartykitパッケージを使うと、簡単に決定木分析ときれいな決定木を描くことができる。
Complex parameterによって剪定を行って、より汎用性の高い決定木を作成することも簡単にできる。
コメント