今回のお題
- 前回の課題で行った3種類の学習機械(線形,加法,ロジスティック加法)の比較に,決定木も加えて,比較し直す.(レポートは前回の課題と同じ部分は,前回の内容をそのまま用いてよい)
- レポートの送付先 mailto:data.mining.finale@gmail.com
- レポートファイルの名前の先頭に,半角で学籍番号を付けること.例:0000000_データマイニング_2.doc
- 期限は1月16日(月)の1限
前提
今回の演習を行うパソコンでは,前回の演習が実行済みであることを前提とする. 前回とは別のパソコンで行う場合には,Rのプロクシの設定やデータの読み込みなどを実行しておくこと.
Rの準備
今回はrpartパッケージを使うので,以下の1行を実行して,インストールしておく. これは,1台のパソコンでは1度だけ実行すれば良い.
install.packages(c("tree", "rpart"), dependencies=TRUE)
rpartパッケージの読み込みは,Rを起動する度に毎回,実行する必要がある.
library(rpart)
データの準備
tic.sub中の変数V86を,0と1の2値から,「契約あり(contract)」と「契約なし(no contract)」という文字列に変換しておく.
tic.sub.2 <- tic.sub tic.sub.2$V86 <- as.character(tic.sub$V86) tic.sub.2$V86[tic.sub$V86==0] <- "no contract" tic.sub.2$V86[tic.sub$V86==1] <- "contract" tic.sub.2$V86 <- as.factor(tic.sub.2$V86)
決定木分析
決定木分析の実施にはrpart()という関数を用いる.
tic.rpart <- rpart(V86~., data=tic.sub.2)
結果を表示すると,
tic.rpart
次のように,何も分割されないはずである.
n= 5822 node), split, n, loss, yval, (yprob) * denotes terminal node 1) root 5822 348 no contract (0.05977327 0.94022673) *
このデータは,
table(tic.sub.2$V86)
により“contract”と“no contract”を数えさせると,
contract no contract 348 5474
と,契約数が6%弱である.そのため,デフォルトの決定木分析の設定では,これ以上は分割しない. そこで,rpartの制御変数を,幾つか変更して,更に分割させることを試みる.
tic.rpart <- rpart(V86~., data=tic.sub.2, control=c(cp=0.002)) summary(tic.rpart) par(cex=0.8) plot(tic.rpart, uniform=T, branch=0.6, margin=0.05) text(tic.rpart, all=T, use.n=T) par(cex=1.0)
これは,cpという複雑さを指定する制御変数をデフォルトの0.05から,0.002まで小さくしてみた場合である.
この描き方では,ノードには囲みはないが,分割点に左右の条件が示され,分割の下には契約あり(contract)と契約なし(no contract)のヒストグラムと, 数字(contract/no contract)が記されている.それぞれのノードの「契約成功率」もしくは「契約成功のオッズ」は,各自で検討すること.
途中の行のcex=0.8は,プロットの中の文字の大きさを変更している. cex=1.0がデフォルトで,0.8は少し小さめ,という指定になる. グラフを作成し終えたら,1.0に戻しておく.
分割を決める制御変数には
rpart.controlの引数 | 意味 | デフォルト値 |
---|---|---|
minsplit | ノードの分割を試みる最小のレコード数 | 20 |
minbucket | 終端ノードのレコード数の最小値 | round(minsplit/3) |
cp | 決定木の複雑さを調整するパラメータ | 0.05 |
maxdepth | 決定木の最大の深さ | 30 |
などがある.他にも,
rpart.controlの引数 | 意味 | デフォルト値 |
---|---|---|
maxcompete | the number of competitor splits retained in the output | 4 |
maxsurrogate | the number of surrogate splits retained in the output | 5 |
usesurrrogate | how to use surrogates in the splitting process | 2 |
xval | number of cross-validations | 10 |
surrogatestyle | controls the selection of a best surrogate | 0 |
などがあるが,このデータの分析では使わない.
さて複雑度を0.001に小さくすると,より複雑な木が得られる. ノード数が増えるので,字が小さくなる.
tic.rpart <- rpart(V86~., data=tic.sub.2, control=c(minsplit=5, cp=0.001)) summary(tic.rpart) par(cex=0.5) plot(tic.rpart, uniform=T, branch=0.6, margin=0.05) text(tic.rpart, all=T, use.n=T) par(cex=1.0)
など.