rによる分類木 入門
DESCRIPTION
アウトライン雑ですTRANSCRIPT
![Page 1: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/1.jpg)
による分類木 入門
![Page 2: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/2.jpg)
による分類木 入門
※いろいろなサイト・本を 自分なりにまとめてみました。
![Page 3: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/3.jpg)
What’s classification tree? • 結果を分類するためにそのほかの値を見比べ、最もきれいに2分割できる条件を探していく手法
• 分岐の過程を図示することができるため, 分析結果の可読性が高い
• 分類木と回帰木がある
3
![Page 4: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/4.jpg)
生成・生長 剪定
枝を伸ばす いらない枝を切り落とす
What’s classification tree?
![Page 5: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/5.jpg)
生成・生長 剪定
枝を伸ばす いらない枝を切り落とす
What’s classification tree?
![Page 6: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/6.jpg)
Example…
商品を サイズ 色 見た回数
買った M 普通 10
買った L 好き 5
買わない M 嫌い 3
買った M 好き 6
買わない L 好き 3
買わない M 普通 10
買わない M 嫌い 4
買った L 好き 6
目的変数がカテゴリカル(質的)な場合
6
![Page 7: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/7.jpg)
Example…
生成・生長
7
![Page 8: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/8.jpg)
・今回はCART(Classification And Regression Trees)という 目的変数を2つの集合に分岐させる方法を紹介する ・具体的にはジニ係数(GI : Gini index)やエントロピー(entropy) という分類の不純度を計算する
How to classify.
8
![Page 9: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/9.jpg)
![Page 10: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/10.jpg)
Example…
商品を サイズ 色 見た回数
買った M 普通 10
買った L 好き 5
買わない M 嫌い 3
買った M 好き 6
買わない L 好き 3
買わない M 普通 10
買わない M 嫌い 4
買った L 好き 6
目的変数がカテゴリカル(質的)な場合
10
![Page 11: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/11.jpg)
ex.)
M L 好き 普通・嫌い
色
≧4.5 <4.5
見た回数
ジニ係数(不純度)の一番低い分岐点を採用
データ 買った 買わない
説明変数
サイズ
ジニ係数
0.48 0.375 0.375 0.32 0.0 0.44
0.465 0.375 0.2
加重平均 加重平均 加重平均
11
![Page 12: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/12.jpg)
生成・生長 剪定
枝を伸ばす いらない枝を切り落とす
What’s classification tree?
![Page 13: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/13.jpg)
つまり
っていう枝を探すってこと
![Page 14: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/14.jpg)
交差検証法(cross validation) How to prune?
⑴データをテストデータと トレーニングデータに分ける
⑵トレーニングデータだけで モデルをつくる
⑶できたモデルとテストデータを比較し、答え合わせをして、精度を求める
⑷⑴〜⑶をn回繰り返し、平均する
14
![Page 15: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/15.jpg)
交差検証法(cross validation) How to prune?
⑴データをテストデータと トレーニングデータに分ける
⑵トレーニングデータだけで モデルをつくる
⑶できたモデルとテストデータを比較し、答え合わせをして、精度を求める
⑷⑴〜⑶をn回繰り返し、平均する
これを各ノードで行い、 制度の低いところを剪定する
15
![Page 16: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/16.jpg)
Demonstration with
16
![Page 17: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/17.jpg)
①
③ ②
⑥ ⑦
⑫ ⑬
> library(mvpart) > # 決定木のplot > iris.rp <-‐ rpart(Species~., data=iris) > iris.rp n= 150 node), split, n, loss, yval, (yprob) * denotes terminal node 1) root 150 100 setosa (0.33333333 0.33333333 0.33333333) 2) Petal.Length< 2.45 50 0 setosa (1.00000000 0.00000000 0.00000000) * 3) Petal.Length>=2.45 100 50 versicolor (0.00000000 0.50000000 0.50000000) 6) Petal.Width< 1.75 54 5 versicolor (0.00000000 0.90740741 0.09259259) 12) Petal.Length< 4.95 48 1 versicolor (0.00000000 0.97916667 0.02083333) * 13) Petal.Length>=4.95 6 2 virginica (0.00000000 0.33333333 0.66666667) * 7) Petal.Width>=1.75 46 1 virginica (0.00000000 0.02173913 0.97826087) * > plot(iris.rp,uniform=T,branch=0.6,margin=0) > text(iris.rp,uniform=T,use.n=T,all=T)
剪定前
17
![Page 18: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/18.jpg)
もう少しシンプルにきれいにしたかったら・・・ > library(partykit) > plot(as.party(iris.rp),uniform=T,branch=0.6,margin=0.5)
18
![Page 19: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/19.jpg)
過学習してないか調べる > printcp(iris.rp) Classification tree: rpart(formula = Species ~ ., data = iris) Variables actually used in tree construction: [1] Petal.Length Petal.Width Root node error: 100/150 = 0.66667 n= 150 CP nsplit rel error xerror xstd 1 0.50 0 1.00 1.21 0.048367 2 0.44 1 0.50 0.74 0.061232 3 0.02 2 0.06 0.11 0.031927 4 0.01 3 0.04 0.11 0.031927
> plotcp(iris.rp)
19
![Page 20: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/20.jpg)
過学習してないか調べる > printcp(iris.rp) Classification tree: rpart(formula = Species ~ ., data = iris) Variables actually used in tree construction: [1] Petal.Length Petal.Width Root node error: 100/150 = 0.66667 n= 150 CP nsplit rel error xerror xstd 1 0.50 0 1.00 1.21 0.048367 2 0.44 1 0.50 0.74 0.061232 3 0.02 2 0.06 0.11 0.031927 4 0.01 3 0.04 0.11 0.031927
> plotcp(iris.rp)
20
![Page 21: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/21.jpg)
CP nsplit rel error xerror xstd 1 0.50 0 1.00 1.21 0.048367 2 0.44 1 0.50 0.74 0.061232 3 0.02 2 0.06 0.11 0.031927 4 0.01 3 0.04 0.11 0.031927
21
![Page 22: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/22.jpg)
CP nsplit rel error xerror xstd 1 0.50 0 1.00 1.21 0.048367 2 0.44 1 0.50 0.74 0.061232 3 0.02 2 0.06 0.11 0.031927 4 0.01 3 0.04 0.11 0.031927
22
![Page 23: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/23.jpg)
CP nsplit rel error xerror xstd 1 0.50 0 1.00 1.21 0.048367 2 0.44 1 0.50 0.74 0.061232 3 0.02 2 0.06 0.11 0.031927 4 0.01 3 0.04 0.11 0.031927
23
![Page 24: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/24.jpg)
CP nsplit rel error xerror xstd 1 0.50 0 1.00 1.21 0.048367 2 0.44 1 0.50 0.74 0.061232 3 0.02 2 0.06 0.11 0.031927 4 0.01 3 0.04 0.11 0.031927
どちらかの値で剪定
24
![Page 25: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/25.jpg)
①
③ ②
⑥ ⑦ > iris.rp2_1 <-‐ prune(iris.rp,cp=0.02) > iris.rp2_1 n= 150 node), split, n, loss, yval, (yprob) * denotes terminal node 1) root 150 100 setosa (0.33333333 0.33333333 0.33333333) 2) Petal.Length< 2.45 50 0 setosa (1.00000000 0.00000000 0.00000000) * 3) Petal.Length>=2.45 100 50 versicolor (0.00000000 0.50000000 0.50000000) 6) Petal.Width< 1.75 54 5 versicolor (0.00000000 0.90740741 0.09259259) * 7) Petal.Width>=1.75 46 1 virginica (0.00000000 0.02173913 0.97826087) * > plot(iris.rp2_1,uniform=T,branch=0.6,margin=0) > text(iris.rp2_1,uniform=T,use.n=T,all=T)
剪定後
25
![Page 26: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/26.jpg)
①
③ ②
⑥ ⑦ > iris.rp2_2 <-‐ prune(iris.rp,cp=0.094) > iris.rp2_2 n= 150 node), split, n, loss, yval, (yprob) * denotes terminal node 1) root 150 100 setosa (0.33333333 0.33333333 0.33333333) 2) Petal.Length< 2.45 50 0 setosa (1.00000000 0.00000000 0.00000000) * 3) Petal.Length>=2.45 100 50 versicolor (0.00000000 0.50000000 0.50000000) 6) Petal.Width< 1.75 54 5 versicolor (0.00000000 0.90740741 0.09259259) * 7) Petal.Width>=1.75 46 1 virginica (0.00000000 0.02173913 0.97826087) * > plot(iris.rp2_2,uniform=T,branch=0.6,margin=0) > text(iris.rp2_2,uniform=T,use.n=T,all=T)
剪定後
26
![Page 27: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/27.jpg)
上と下の剪定基準値の間に両方あるから
結局、結果は同じ・・・
27 ※詳細はよくわかりません m(_ _)m
![Page 28: Rによる分類木 入門](https://reader034.vdocuments.net/reader034/viewer/2022052411/556a2a6cd8b42a2f3f8b505e/html5/thumbnails/28.jpg)
分類木の精度を測りたいなら・・・
28
最後に
> iris.tre <-‐ iris[2*(1:75)-‐1,] # 奇数行 > iris.test <-‐ iris[-‐(2*(1:75)-‐1),] # 偶数行 # 奇数行だけで分類木の生成 > iris.tre <-‐ rpart(Species~., data=iris.tre,method="class") > pred <-‐ predict(iris.tre, iris.test, type="class") # 偶数行でテストしてみる > table(pred, iris.test$Species) pred setosa versicolor virginica setosa 25 0 0 versicolor 0 24 3 virginica 0 1 22