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

More Related Content

What's hot

詳説word2vec
詳説word2vec詳説word2vec
詳説word2vec
Haruka Oikawa
 
密度比推定による時系列データの異常検知
密度比推定による時系列データの異常検知密度比推定による時系列データの異常検知
密度比推定による時系列データの異常検知
- Core Concept Technologies
 
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
Yahoo!デベロッパーネットワーク
 
相関と因果について考える:統計的因果推論、その(不)可能性の中心
相関と因果について考える:統計的因果推論、その(不)可能性の中心相関と因果について考える:統計的因果推論、その(不)可能性の中心
相関と因果について考える:統計的因果推論、その(不)可能性の中心takehikoihayashi
 
深層学習の数理:カーネル法, スパース推定との接点
深層学習の数理:カーネル法, スパース推定との接点深層学習の数理:カーネル法, スパース推定との接点
深層学習の数理:カーネル法, スパース推定との接点
Taiji Suzuki
 
はじめてのパターン認識 第5章 k最近傍法(k_nn法)
はじめてのパターン認識 第5章 k最近傍法(k_nn法)はじめてのパターン認識 第5章 k最近傍法(k_nn法)
はじめてのパターン認識 第5章 k最近傍法(k_nn法)Motoya Wakiyama
 
研究分野をサーベイする
研究分野をサーベイする研究分野をサーベイする
研究分野をサーベイする
Takayuki Itoh
 
最近のディープラーニングのトレンド紹介_20200925
最近のディープラーニングのトレンド紹介_20200925最近のディープラーニングのトレンド紹介_20200925
最近のディープラーニングのトレンド紹介_20200925
小川 雄太郎
 
Random Forests
Random ForestsRandom Forests
Random Forests
Hironobu Fujiyoshi
 
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
narumikanno0918
 
【論文調査】XAI技術の効能を ユーザ実験で評価する研究
【論文調査】XAI技術の効能を ユーザ実験で評価する研究【論文調査】XAI技術の効能を ユーザ実験で評価する研究
【論文調査】XAI技術の効能を ユーザ実験で評価する研究
Satoshi Hara
 
オープンワールド認識 (第34回全脳アーキテクチャ若手の会 勉強会)
オープンワールド認識 (第34回全脳アーキテクチャ若手の会 勉強会)オープンワールド認識 (第34回全脳アーキテクチャ若手の会 勉強会)
オープンワールド認識 (第34回全脳アーキテクチャ若手の会 勉強会)
Takuma Yagi
 
Attentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門までAttentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門まで
AGIRobots
 
数式からみるWord2Vec
数式からみるWord2Vec数式からみるWord2Vec
マハラノビス距離とユークリッド距離の違い
マハラノビス距離とユークリッド距離の違いマハラノビス距離とユークリッド距離の違い
マハラノビス距離とユークリッド距離の違い
wada, kazumi
 
畳み込みニューラルネットワークの高精度化と高速化
畳み込みニューラルネットワークの高精度化と高速化畳み込みニューラルネットワークの高精度化と高速化
畳み込みニューラルネットワークの高精度化と高速化
Yusuke Uchida
 
Word2vecの理論背景
Word2vecの理論背景Word2vecの理論背景
Word2vecの理論背景
Masato Nakai
 
単語・句の分散表現の学習
単語・句の分散表現の学習単語・句の分散表現の学習
単語・句の分散表現の学習
Naoaki Okazaki
 
サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会
サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会
サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会
Kenyu Uehara
 

What's hot (20)

詳説word2vec
詳説word2vec詳説word2vec
詳説word2vec
 
密度比推定による時系列データの異常検知
密度比推定による時系列データの異常検知密度比推定による時系列データの異常検知
密度比推定による時系列データの異常検知
 
Chapter2.3.6
Chapter2.3.6Chapter2.3.6
Chapter2.3.6
 
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
 
相関と因果について考える:統計的因果推論、その(不)可能性の中心
相関と因果について考える:統計的因果推論、その(不)可能性の中心相関と因果について考える:統計的因果推論、その(不)可能性の中心
相関と因果について考える:統計的因果推論、その(不)可能性の中心
 
深層学習の数理:カーネル法, スパース推定との接点
深層学習の数理:カーネル法, スパース推定との接点深層学習の数理:カーネル法, スパース推定との接点
深層学習の数理:カーネル法, スパース推定との接点
 
はじめてのパターン認識 第5章 k最近傍法(k_nn法)
はじめてのパターン認識 第5章 k最近傍法(k_nn法)はじめてのパターン認識 第5章 k最近傍法(k_nn法)
はじめてのパターン認識 第5章 k最近傍法(k_nn法)
 
研究分野をサーベイする
研究分野をサーベイする研究分野をサーベイする
研究分野をサーベイする
 
最近のディープラーニングのトレンド紹介_20200925
最近のディープラーニングのトレンド紹介_20200925最近のディープラーニングのトレンド紹介_20200925
最近のディープラーニングのトレンド紹介_20200925
 
Random Forests
Random ForestsRandom Forests
Random Forests
 
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
 
【論文調査】XAI技術の効能を ユーザ実験で評価する研究
【論文調査】XAI技術の効能を ユーザ実験で評価する研究【論文調査】XAI技術の効能を ユーザ実験で評価する研究
【論文調査】XAI技術の効能を ユーザ実験で評価する研究
 
オープンワールド認識 (第34回全脳アーキテクチャ若手の会 勉強会)
オープンワールド認識 (第34回全脳アーキテクチャ若手の会 勉強会)オープンワールド認識 (第34回全脳アーキテクチャ若手の会 勉強会)
オープンワールド認識 (第34回全脳アーキテクチャ若手の会 勉強会)
 
Attentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門までAttentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門まで
 
数式からみるWord2Vec
数式からみるWord2Vec数式からみるWord2Vec
数式からみるWord2Vec
 
マハラノビス距離とユークリッド距離の違い
マハラノビス距離とユークリッド距離の違いマハラノビス距離とユークリッド距離の違い
マハラノビス距離とユークリッド距離の違い
 
畳み込みニューラルネットワークの高精度化と高速化
畳み込みニューラルネットワークの高精度化と高速化畳み込みニューラルネットワークの高精度化と高速化
畳み込みニューラルネットワークの高精度化と高速化
 
Word2vecの理論背景
Word2vecの理論背景Word2vecの理論背景
Word2vecの理論背景
 
単語・句の分散表現の学習
単語・句の分散表現の学習単語・句の分散表現の学習
単語・句の分散表現の学習
 
サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会
サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会
サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会
 

Similar to Rによる分類木 入門

【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しよう【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しよう
Unity Technologies Japan K.K.
 
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
de:code 2017
 
20140920 tokyo r43
20140920 tokyo r4320140920 tokyo r43
20140920 tokyo r43
Takashi Kitano
 
東京都市大学 データ解析入門 2 行列分解 1
東京都市大学 データ解析入門 2 行列分解 1東京都市大学 データ解析入門 2 行列分解 1
東京都市大学 データ解析入門 2 行列分解 1
hirokazutanaka
 
CRC-32
CRC-32CRC-32
CRC-32
7shi
 
一般化線形混合モデル isseing333
一般化線形混合モデル isseing333一般化線形混合モデル isseing333
一般化線形混合モデル isseing333Issei Kurahashi
 
R_note_02_ver1.0
R_note_02_ver1.0R_note_02_ver1.0
R_note_02_ver1.0
Satoshi Kume
 
K060 中心極限定理clt
K060 中心極限定理cltK060 中心極限定理clt
K060 中心極限定理cltt2tarumi
 
Bee Style:vol.039
Bee Style:vol.039Bee Style:vol.039
Bee Style:vol.039
Tsuyoshi Horigome
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxpsMITSUNARI Shigeo
 
LLVM最適化のこつ
LLVM最適化のこつLLVM最適化のこつ
LLVM最適化のこつ
MITSUNARI Shigeo
 
Casual learning machine learning with_excel_no5
Casual learning machine learning with_excel_no5Casual learning machine learning with_excel_no5
Casual learning machine learning with_excel_no5
KazuhiroSato8
 
CheckMATE 実習
CheckMATE 実習CheckMATE 実習
CheckMATE 実習
Yoshitaro Takaesu
 
Rで学ぶ逆変換(逆関数)法
Rで学ぶ逆変換(逆関数)法Rで学ぶ逆変換(逆関数)法
Rで学ぶ逆変換(逆関数)法
Nagi Teramo
 
「ランダムフォレスト回帰」のハイパーパラメーター
「ランダムフォレスト回帰」のハイパーパラメーター「ランダムフォレスト回帰」のハイパーパラメーター
「ランダムフォレスト回帰」のハイパーパラメーター
Jun Umezawa
 
Lotus DEvCon 2000 - LotusScript Tips and Techniques
Lotus DEvCon 2000 - LotusScript Tips and TechniquesLotus DEvCon 2000 - LotusScript Tips and Techniques
Lotus DEvCon 2000 - LotusScript Tips and Techniques
Hiroaki Komine
 
入門機械学習読書会9章
入門機械学習読書会9章入門機械学習読書会9章
入門機械学習読書会9章
Kazufumi Ohkawa
 
テーマ「最適化」
テーマ「最適化」テーマ「最適化」
テーマ「最適化」
technocat
 

Similar to Rによる分類木 入門 (20)

Listを串刺し
Listを串刺しListを串刺し
Listを串刺し
 
【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しよう【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しよう
 
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
 
20140920 tokyo r43
20140920 tokyo r4320140920 tokyo r43
20140920 tokyo r43
 
東京都市大学 データ解析入門 2 行列分解 1
東京都市大学 データ解析入門 2 行列分解 1東京都市大学 データ解析入門 2 行列分解 1
東京都市大学 データ解析入門 2 行列分解 1
 
CRC-32
CRC-32CRC-32
CRC-32
 
一般化線形混合モデル isseing333
一般化線形混合モデル isseing333一般化線形混合モデル isseing333
一般化線形混合モデル isseing333
 
Rで学ぶロバスト推定
Rで学ぶロバスト推定Rで学ぶロバスト推定
Rで学ぶロバスト推定
 
R_note_02_ver1.0
R_note_02_ver1.0R_note_02_ver1.0
R_note_02_ver1.0
 
K060 中心極限定理clt
K060 中心極限定理cltK060 中心極限定理clt
K060 中心極限定理clt
 
Bee Style:vol.039
Bee Style:vol.039Bee Style:vol.039
Bee Style:vol.039
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
 
LLVM最適化のこつ
LLVM最適化のこつLLVM最適化のこつ
LLVM最適化のこつ
 
Casual learning machine learning with_excel_no5
Casual learning machine learning with_excel_no5Casual learning machine learning with_excel_no5
Casual learning machine learning with_excel_no5
 
CheckMATE 実習
CheckMATE 実習CheckMATE 実習
CheckMATE 実習
 
Rで学ぶ逆変換(逆関数)法
Rで学ぶ逆変換(逆関数)法Rで学ぶ逆変換(逆関数)法
Rで学ぶ逆変換(逆関数)法
 
「ランダムフォレスト回帰」のハイパーパラメーター
「ランダムフォレスト回帰」のハイパーパラメーター「ランダムフォレスト回帰」のハイパーパラメーター
「ランダムフォレスト回帰」のハイパーパラメーター
 
Lotus DEvCon 2000 - LotusScript Tips and Techniques
Lotus DEvCon 2000 - LotusScript Tips and TechniquesLotus DEvCon 2000 - LotusScript Tips and Techniques
Lotus DEvCon 2000 - LotusScript Tips and Techniques
 
入門機械学習読書会9章
入門機械学習読書会9章入門機械学習読書会9章
入門機械学習読書会9章
 
テーマ「最適化」
テーマ「最適化」テーマ「最適化」
テーマ「最適化」
 

Rによる分類木 入門

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