Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
による分類木 入門
による分類木 入門
※いろいろなサイト・本を
 自分なりにまとめてみました。
What’s classification tree?
•  結果を分類するためにそのほかの値を見比べ、
最もきれいに2分割できる条件を探していく手
法
•  分岐の過程を図示することができるため,  
分析結果の可読性が高い
•  分類木と回...
生成・生長 剪定
枝を伸ばす いらない枝を切り落とす
What’s classification tree?
生成・生長 剪定
枝を伸ばす いらない枝を切り落とす
What’s classification tree?
Example…
商品を サイズ 色 見た回数
買った M 普通 10
買った L 好き 5
買わない M 嫌い 3
買った M 好き 6
買わない L 好き 3
買わない M 普通 10
買わない M 嫌い 4
買った L 好き 6
目的変数...
Example…
生成・生長
7
・今回はCART(Classification And Regression Trees)という
 目的変数を2つの集合に分岐させる方法を紹介する
・具体的にはジニ係数(GI : Gini index)やエントロピー(entropy)
    ...
Example…
商品を サイズ 色 見た回数
買った M 普通 10
買った L 好き 5
買わない M 嫌い 3
買った M 好き 6
買わない L 好き 3
買わない M 普通 10
買わない M 嫌い 4
買った L 好き 6
目的変数...
ex.)
M L 好き 普通・嫌い
色
4.5 <4.5
見た回数
ジニ係数(不純度)の一番低い分岐点を採用
データ
  買った
  買わない
説明変数
サイズ
ジニ係数
0.48 0.375 0.375 0.32 0.00.44
0.465 ...
生成・生長 剪定
枝を伸ばす いらない枝を切り落とす
What’s classification tree?
つまり
っていう枝を探すってこと
交差検証法(cross validation)
How to prune?
⑴データをテストデータと	
  
  トレーニングデータに分ける	
  
⑵トレーニングデータだけで	
  
  モデルをつくる	
  
⑶できたモデルとテストデータを...
交差検証法(cross validation)
How to prune?
⑴データをテストデータと	
  
  トレーニングデータに分ける	
  
⑵トレーニングデータだけで	
  
  モデルをつくる	
  
⑶できたモデルとテストデータを...
Demonstration
with
16
①
③②
⑥ ⑦
⑫ ⑬
>	
  library(mvpart)	
  
>	
  #	
  決定木のplot	
  
>	
  iris.rp	
  <-­‐	
  rpart(Species~.,	
  data=iris)	
  
>	...
もう少しシンプルにきれいにしたかったら・・・
>	
  library(partykit)	
  
>	
  plot(as.party(iris.rp),uniform=T,branch=0.6,margin=0.5)
18
過学習してないか調べる
>	
  printcp(iris.rp)	
  
	
  
Classification	
  tree:	
  
rpart(formula	
  =	
  Species	
  ~	
  .,	
  data	
 ...
過学習してないか調べる
>	
  printcp(iris.rp)	
  
	
  
Classification	
  tree:	
  
rpart(formula	
  =	
  Species	
  ~	
  .,	
  data	
 ...
 CP	
  nsplit	
  rel	
  error	
  xerror	
  	
  	
  	
  	
  xstd	
  
1	
  0.50	
  	
  	
  	
  	
  	
  0	
  	
  	
  	
  	
  ...
 CP	
  nsplit	
  rel	
  error	
  xerror	
  	
  	
  	
  	
  xstd	
  
1	
  0.50	
  	
  	
  	
  	
  	
  0	
  	
  	
  	
  	
  ...
 CP	
  nsplit	
  rel	
  error	
  xerror	
  	
  	
  	
  	
  xstd	
  
1	
  0.50	
  	
  	
  	
  	
  	
  0	
  	
  	
  	
  	
  ...
 CP	
  nsplit	
  rel	
  error	
  xerror	
  	
  	
  	
  	
  xstd	
  
1	
  0.50	
  	
  	
  	
  	
  	
  0	
  	
  	
  	
  	
  ...
①
③②
⑥ ⑦>	
  iris.rp2_1	
  <-­‐	
  prune(iris.rp,cp=0.02)	
  
>	
  iris.rp2_1	
  
n=	
  150	
  	
  
	
  
node),	
  split,	...
①
③②
⑥ ⑦>	
  iris.rp2_2	
  <-­‐	
  prune(iris.rp,cp=0.094)	
  
>	
  iris.rp2_2	
  
n=	
  150	
  	
  
	
  
node),	
  split,...
上と下の剪定基準値の間に両方あるから
結局、結果は同じ・・・
27※詳細はよくわかりません m(_ _)m
分類木の精度を測りたいなら・・・
28
最後に
>	
  iris.tre	
  <-­‐	
  iris[2*(1:75)-­‐1,]	
  #	
  奇数行	
  
>	
  iris.test	
  <-­‐	
  iris[-­‐(2*...
Rによる分類木 入門
Upcoming SlideShare
Loading in …5
×

Rによる分類木 入門

9,734 views

Published on

アウトライン雑です

  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Rによる分類木 入門

  1. 1. による分類木 入門
  2. 2. による分類木 入門 ※いろいろなサイト・本を  自分なりにまとめてみました。
  3. 3. What’s classification tree? •  結果を分類するためにそのほかの値を見比べ、 最もきれいに2分割できる条件を探していく手 法 •  分岐の過程を図示することができるため,   分析結果の可読性が高い •  分類木と回帰木がある 3
  4. 4. 生成・生長 剪定 枝を伸ばす いらない枝を切り落とす What’s classification tree?
  5. 5. 生成・生長 剪定 枝を伸ばす いらない枝を切り落とす What’s classification tree?
  6. 6. Example… 商品を サイズ 色 見た回数 買った M 普通 10 買った L 好き 5 買わない M 嫌い 3 買った M 好き 6 買わない L 好き 3 買わない M 普通 10 買わない M 嫌い 4 買った L 好き 6 目的変数がカテゴリカル(質的)な場合 6
  7. 7. Example… 生成・生長 7
  8. 8. ・今回はCART(Classification And Regression Trees)という  目的変数を2つの集合に分岐させる方法を紹介する ・具体的にはジニ係数(GI : Gini index)やエントロピー(entropy)                という分類の不純度を計算する How to classify. 8
  9. 9. Example… 商品を サイズ 色 見た回数 買った M 普通 10 買った L 好き 5 買わない M 嫌い 3 買った M 好き 6 買わない L 好き 3 買わない M 普通 10 買わない M 嫌い 4 買った L 好き 6 目的変数がカテゴリカル(質的)な場合 10
  10. 10. ex.) M L 好き 普通・嫌い 色 4.5 <4.5 見た回数 ジニ係数(不純度)の一番低い分岐点を採用 データ   買った   買わない 説明変数 サイズ ジニ係数 0.48 0.375 0.375 0.32 0.00.44 0.465 0.375 0.2 加重平均 加重平均 加重平均 11
  11. 11. 生成・生長 剪定 枝を伸ばす いらない枝を切り落とす What’s classification tree?
  12. 12. つまり っていう枝を探すってこと
  13. 13. 交差検証法(cross validation) How to prune? ⑴データをテストデータと     トレーニングデータに分ける   ⑵トレーニングデータだけで     モデルをつくる   ⑶できたモデルとテストデータを比較し、 答え合わせをして、精度を求める   ⑷⑴〜⑶をn回繰り返し、平均する   14
  14. 14. 交差検証法(cross validation) How to prune? ⑴データをテストデータと     トレーニングデータに分ける   ⑵トレーニングデータだけで     モデルをつくる   ⑶できたモデルとテストデータを比較し、 答え合わせをして、精度を求める   ⑷⑴〜⑶をn回繰り返し、平均する   これを各ノードで行い、 制度の低いところを剪定する 15
  15. 15. Demonstration with 16
  16. 16. ① ③② ⑥ ⑦ ⑫ ⑬ >  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
  17. 17. もう少しシンプルにきれいにしたかったら・・・ >  library(partykit)   >  plot(as.party(iris.rp),uniform=T,branch=0.6,margin=0.5) 18
  18. 18. 過学習してないか調べる >  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
  19. 19. 過学習してないか調べる >  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
  20. 20.  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
  21. 21.  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
  22. 22.  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
  23. 23.  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
  24. 24. ① ③② ⑥ ⑦>  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
  25. 25. ① ③② ⑥ ⑦>  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
  26. 26. 上と下の剪定基準値の間に両方あるから 結局、結果は同じ・・・ 27※詳細はよくわかりません m(_ _)m
  27. 27. 分類木の精度を測りたいなら・・・ 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  

×