「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。目下、データ分析・語学に力点を置いています。今月(2022年10月)からは多忙につき、日々の投稿数を減らします。

MENU

Rによるデータサイエンス(14/21)

 Rについて

をベースに学んでいく。
 今回はツリーモデル(PP.179-196)を扱う。

15. ツリーモデル

 回帰分析、判別分析の一種として、回帰問題では回帰木、分類問題では分類木または決定木と呼ぶ。ツリーモデルでは説明変数の値を何らかの基準を基に分岐させ、判別・予測のモデルを構築する。

15.1 決定木モデルの基礎

 ツリーモデルに関しては今日、\mathrm{CHAID},\ \mathrm{C4.5/C5.0},\ \mathrm{CART}をベースとしたアルゴリズムが広く用いられている。これらのアルゴリズムの種類ごとに大きく異なるのは木の成長と木の剪定のアルゴリズムである。
 \mathrm{CART}ではエントロピージニ係数



\begin{aligned}
\mathrm{entropy}&=\displaystyle{-\sum_{i=1}^{c}p(i|t)\log_2{p(i|t)}}\\
GI&=1-\displaystyle{\sum_{i=1}^{c}\{p(i|t)\}^2}
\end{aligned}


を用いて分岐点を計算する。

15.2 パッケージrpartの例


引数\mathrm{method}のオプション

  
応答変数y
引数の書式
   一般の量的変数 \mathrm{method="anova"}
   ポアソン分布 \mathrm{method="poisson"}
   質的変数 \mathrm{method="class"}
   行列 \mathrm{method="mrt"}
   距離 \mathrm{method="dist"}
   生存データオブジェクト \mathrm{method="exp"}



\mathrm{rpart}クラスの主な関数

   \mathrm{plot.rpart} \mathrm{plot} ツリーの図示
   \mathrm{text.rpart} \mathrm{text} 文字列の操作
   \mathrm{plotcp} \mathrm{plotcp} 交差確認の結果の図示
   \mathrm{predict} \mathrm{predict} モデルによる当てはめ
   \mathrm{parint.rpart} \mathrm{print} ツリーの出力
   \mathrm{printcp} \mathrm{printcp} 複雑さのパラメータ出力
   \mathrm{prune.part} \mathrm{prune} ツリーの剪定
   \mathrm{residual.rpart} \mathrm{residuals} 残差を返す
   \mathrm{rpart.control} \mathrm{control} ツリーをコントロール
   \mathrm{summary.rpart} \mathrm{summary} 要約を返す

15.3 シミュレーション例

##############
### 分類木 ### 
##############

library("rpart")

iris_rp <- rpart(Species~., data = iris)

str(iris_rp)

print(iris_rp, digits = 2)

# 分類木をVisualise
plot(iris_rp, uniform = T, branch = 0.6, margin = 0.05)
text(iris_rp, use.n = T, all = T)

### 木の剪定とコントロール
## CVの結果
# CP:複雑さのパラメータ
# nsplit : 分岐の階数
# rel error:実際のエラー率
# xerror:交差確認のエラー率
# xstd: 交差確認のエラー率の標準偏差
printcp(iris_rp)

## 木の剪定:
# 最小エラー率を基準とする方法
# 最小エラー率+1倍の標準偏差 Min+1SE

set.seed(0)
iris_rp2 <- rpart(Species~., data = iris, minsplit = 3, cp = 0.001)
printcp(iris_rp2)

plotcp(iris_rp2)

iris_rp3 <- prune(iris_rp2, cp = 0.094)


### 判別
even_n <- seq(2,150,2)
iris_train <- iris[even_n,]
iris_test <- iris[-even_n,]

set.seed(20)

iris_rp2 <- rpart(Species~., iris_train)

plotcp(iris_rp2)

iris_rp3 <- predict(iris_rp2, iris_test[,-5],type = "class")
table(iris_test[,5], iris_rp3)


### 回帰木
set.seed(0)
cars_rp <- rpart(dist~speed, data = cars, minsplit = 3)
printcp(cars_rp)

plotcp(cars_rp)

cars_rp1 <- prune(cars_rp, cp = 0.044)

plot(cars_rp1, uniform = T, margin = 0.05)
text(cars_rp1, use.n = T)

補足 スペック情報

エディション Windows 10 Home
バージョン 20H2
プロセッサ Intel(R) Core(TM) i5-1035G4 CPU @ 1.10GHz 1.50 GHz
実装 RAM 8.00 GB
システムの種類 64 ビット オペレーティング システム、x64 ベース プロセッサ
R バージョン 4.1.3 (March, 2022)
RStudio バージョン 2022.02.2 Build 485
プライバシーポリシー お問い合わせ