SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
第34回R勉強会@東京(#TokyoR)

決定木

@gepuro
自己紹介
●

電気通信大学大学院修士一年

●

早川 敦士(@gepuro)

●

専攻:信頼性工学、品質管理

●

興味:マーケティング、生存時間解析、テキストマイニング

●

著作物:データサイエンティスト養成読本(技術評論社)

●

好きな物:ラーメン、りんごジュース、花火
ブログをやってます

http://blog.gepuro.net
おなじみのirisデータを使います

setosa

versicolor

verginica

Sepal Length: がく片の長さ
Sepal Width: がく片の幅
Petal Length: 花びらの長さ
Petal Width: 花びらの幅
Species: 品種

品種毎に50レコードで、計150レコードの
データセットを利用します。
画像データ:http://en.wikipedia.org/wiki/Iris_flower_data_set より
決定木って?
決定節点:変数の値をチェックする
根節点:決定節点のうち最初の決定節点
葉節点:ラベルが割りあてられる。

根節点
節点にある条件を満たすと、
左側へ行く。
決定節点

葉節点

Pepal.Length<2.45は、
setosa,versicolor,virginic
aがそれぞれ50,0,0となる。
Pepal.Length>2.45かつ
Petal.Width>=1.75は、
setosa,versicolor,virginica
がそれぞれ0,1,45となる。
教師あり学習の一つで、目的変数と説明変数を設定する必要がある。
木構造で表現される事から、決定木と呼ばれている。
決定木の説明は以上です。
折角なので、もう少し詳しく勉強します。
まずは、描き方を
rpart()を利用します。
rpart(目的変数~説明変数)

グラフを描く時に、par(xpd=NA)を忘れずに

各ラベルのn数も表示しよう

これだけ簡単ならば、目をつぶっても出来る?
どうやって、決定節点を求めるの?
ジニ係数を用います。
決定節点

節点tにおける誤り率

誤り率が最小になるように、
決定節点を求める。
決定木の大きさは?

小さすぎる決定木では、
正しく分類できない。

小さい決定木

決定木が大きすぎると過学習
を起こす。
(訓練データに適応しすぎる)
剪定しよう
決定木の大きさ

(10

交
差
検
証
法

)

セ
ッ
ト
に
よ
る
誤
り
率

誤りの最小値とその点
の標準偏差を加えた値

決定木の複雑度

棒線を越えない最大の
CPが良いとされている。
(1標準偏差ルール)

prune.rpart(model, cp=0.5)
で剪定できる。
予測しよう
カテゴリデータの予測は、
type=”class”を
忘れずに

真値と予測結果

訓練データと検証データは同一で
あるが、そこそこの精度で分類出来
ていることが分かる。
決定木で回帰分析
●

決定木の回帰バージョンは、回帰木と呼ばれる。
サンプルデータ: スポーツテストデータ
説明: 中学生104人の運動能力テスト6種と体力測定5種の計測のデータ
データ数:104レコード
http://mo161.soci.ous.ac.jp/@d/DoDStat/sports/sports_dataJ.xml
でデータをダウンロード出来ます。
50m走のタイムを予測する

分岐後の50m走の
タイムの平均

走り幅跳びの成績の良さが50m走のタイム
に好影響を与えている。
枝きりタイム

大きな木を見て、剪定する。
残差のヒストグラム
hist(sports$X50mRun - predict(model, sports))

真の値と予測結果がどれほどズレているか。
決定木に親しもう
決定木の使い所は、予測だけじゃない!!
●

どの変数に注目すれば良いか?

●

目的変数と関係が深そうな変数は?

●

層別解析のヒントを得る。

予測モデルとしては精度が低い時もあるが、
分析のヒントを得られるかも!
分析のヒントとは?

疑問:50m走が早い人は、どんな人だろうか?
答え:走り幅跳びが得意な人
時間に余裕が出来たので、
●

Rでデータを加工する時の方法を紹介します。

●

独断と偏見のランキング形式で。
第十位
●

cumsum
累積和を求める

cumsum(iris$Sepal.Length)
第九位
●

colMeans,colSums, rowMeans, rowSums
列毎、行毎に平均や合計を求める

> colMeans(iris[,1:4])
Sepal.Length Sepal.Width Petal.Length Petal.Width
5.843333 3.057333 3.758000 1.199333
第八位
●

reshape
データを横に展開する
> iris$ID <- 1:150
> reshape(iris[,c(1,5,6)], idvar="ID", timevar="Species",
direction="wide")
ID Sepal.Length.setosa Sepal.Length.versicolor Sepal.Length.virginica
1 1
5.1
NA
NA
2 2
4.9
NA
NA
3 3
4.7
NA
NA
4 4
4.6
NA
NA
5 5
5.0
NA
NA
6 6
5.4
NA
NA
第七位
●

aggregate
集計を行う
> aggregate(iris[,1:4], by=list(iris$Species), mean)
Group.1 Sepal.Length Sepal.Width Petal.Length Petal.Width
1 setosa
5.006
3.428
1.462
0.246
2 versicolor
5.936
2.770
4.260
1.326
3 virginica
6.588
2.974
5.552
2.026
第六位
●

apply
慣れれば便利。for文でも代用可
apply(iris[,1:4], 1, sum) # 行毎に合計を求める
apply(iris[,1:4], 2, sum) # 列毎に合計を求める
第五位
●

ifelse
条件分岐を一行で書く

ifelse(条件, 条件が真の時返す値, 偽の時返す値)
> ifelse(sports$X50mRun < 8, "1", "0")
第四位
●

rbind
テーブルを縦に結合する
> df3 <- data.frame(a=1:3, b=2:4)
> df4 <- data.frame(a=4:6, b=5:7)
> rbind(df3, df4)
ab
112
223
334
445
556
667
第三位
●

merge
テーブルを横に結合する。

> df1 <- data.frame(a=1:5, b=2:6)
> df2 <- data.frame(a=c(1,2,4,6), c=c(2,3,4,5))
> merge(df1, df2, by=c("a")) # df1とdf2のaが共通
> merge(df1, df2, all.x=T, by=c("a")) # df1のaを残す

abc
1122
2233
3454

> merge(df1, df2, all=T, by=c("a")) # 全てのaを残す
a b c
11 2 2
22 3 3
3 3 4 NA
44 5 4
5 5 6 NA
6 6 NA 5

ab c
112 2
223 3
3 3 4 NA
445 4
5 5 6 NA
第二位
●

table
クロス集計を作成する。
> table(iris$Species)
setosa versicolor virginica
50
50
50
> table(iris$Species, iris$Petal.Width)
0.1 0.2 0.3 0.4 0.5 0.6 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8
setosa
5 29 7 7 1 1 0 0 0 0 0 0 0 0 0
versicolor 0 0 0 0 0 0 7 3 5 13 7 10 3 1 1
virginica 0 0 0 0 0 0 0 0 0 0 1 2 1 1 11
1.9 2 2.1 2.2 2.3 2.4 2.5
setosa
0 0 0 0 0 0 0
versicolor 0 0 0 0 0 0 0
virginica 5 6 6 3 8 3 3
第一位
●

subset
条件に一致するデータを抽出する

# 50m走が8秒未満のレコードを抽出
subset(sports, X50mRun < 8)
# setosaもしくはversicolorのレコードを抽出
subset(iris, Species %in% c("setosa", "versicolor"))
●

●

気分を盛り上げるために、ランキングで紹介しまし
たが、深く考えた結果では無いです。
あまり気にしないでください。
参考
●

R-tips,http://cse.naro.affrc.go.jp/takezawa/r-tips/
r.html

●

はじめてのパターン認識,森北出版

●

入門 自然言語処理,オライリー
ご清聴ありがとう
ございました。

Mais conteúdo relacionado

Destaque

R+pythonでKAGGLEの2値予測に挑戦!
R+pythonでKAGGLEの2値予測に挑戦! R+pythonでKAGGLEの2値予測に挑戦!
R+pythonでKAGGLEの2値予測に挑戦! Yurie Oka
 
Tokyor35 人工データの発生
Tokyor35 人工データの発生Tokyor35 人工データの発生
Tokyor35 人工データの発生Yohei Sato
 
相関係数と決定係数~回帰係数とその不偏性も
相関係数と決定係数~回帰係数とその不偏性も相関係数と決定係数~回帰係数とその不偏性も
相関係数と決定係数~回帰係数とその不偏性もT T
 
10分で分かるr言語入門ver2.5
10分で分かるr言語入門ver2.510分で分かるr言語入門ver2.5
10分で分かるr言語入門ver2.5Nobuaki Oshiro
 
ドリコムの分析環境とデータサイエンス活用事例
ドリコムの分析環境とデータサイエンス活用事例ドリコムの分析環境とデータサイエンス活用事例
ドリコムの分析環境とデータサイエンス活用事例Yohei Sato
 
21世紀の手法対決 (MIC vs HSIC)
21世紀の手法対決 (MIC vs HSIC)21世紀の手法対決 (MIC vs HSIC)
21世紀の手法対決 (MIC vs HSIC)Toru Imai
 
とある金融屋の統計技師が時系列解析してみた
とある金融屋の統計技師が時系列解析してみたとある金融屋の統計技師が時系列解析してみた
とある金融屋の統計技師が時系列解析してみたNagi Teramo
 
Rで計量時系列分析~CRANパッケージ総ざらい~
Rで計量時系列分析~CRANパッケージ総ざらい~ Rで計量時系列分析~CRANパッケージ総ざらい~
Rで計量時系列分析~CRANパッケージ総ざらい~ Takashi J OZAKI
 
RcppEigen and SVD
RcppEigen and SVDRcppEigen and SVD
RcppEigen and SVDXiangze
 
機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話Ryota Kamoshida
 
第1008回 ドキッ!分析屋だらけの、大ザーユー会 - ブログの類似記事を表示させてみる
第1008回 ドキッ!分析屋だらけの、大ザーユー会 - ブログの類似記事を表示させてみる第1008回 ドキッ!分析屋だらけの、大ザーユー会 - ブログの類似記事を表示させてみる
第1008回 ドキッ!分析屋だらけの、大ザーユー会 - ブログの類似記事を表示させてみるAtsushi Hayakawa
 
Rデモ03_データ分析編2016
Rデモ03_データ分析編2016Rデモ03_データ分析編2016
Rデモ03_データ分析編2016wada, kazumi
 
Intoroduction of Bad Data Handbook
Intoroduction of Bad Data HandbookIntoroduction of Bad Data Handbook
Intoroduction of Bad Data HandbookAtsushi Hayakawa
 
10分で分かるr言語入門ver2.4
10分で分かるr言語入門ver2.410分で分かるr言語入門ver2.4
10分で分かるr言語入門ver2.4Nobuaki Oshiro
 
Tokyo.R女子部#2「RMeCabを使おう」
Tokyo.R女子部#2「RMeCabを使おう」Tokyo.R女子部#2「RMeCabを使おう」
Tokyo.R女子部#2「RMeCabを使おう」Sachiko Hirata
 
Google's r style guideのすゝめ
Google's r style guideのすゝめGoogle's r style guideのすゝめ
Google's r style guideのすゝめTakashi Kitano
 

Destaque (20)

R+pythonでKAGGLEの2値予測に挑戦!
R+pythonでKAGGLEの2値予測に挑戦! R+pythonでKAGGLEの2値予測に挑戦!
R+pythonでKAGGLEの2値予測に挑戦!
 
Tokyor35 人工データの発生
Tokyor35 人工データの発生Tokyor35 人工データの発生
Tokyor35 人工データの発生
 
Julia入門
Julia入門Julia入門
Julia入門
 
相関係数と決定係数~回帰係数とその不偏性も
相関係数と決定係数~回帰係数とその不偏性も相関係数と決定係数~回帰係数とその不偏性も
相関係数と決定係数~回帰係数とその不偏性も
 
因子分析
因子分析因子分析
因子分析
 
Tokyo r33 beginner
Tokyo r33 beginnerTokyo r33 beginner
Tokyo r33 beginner
 
10分で分かるr言語入門ver2.5
10分で分かるr言語入門ver2.510分で分かるr言語入門ver2.5
10分で分かるr言語入門ver2.5
 
ドリコムの分析環境とデータサイエンス活用事例
ドリコムの分析環境とデータサイエンス活用事例ドリコムの分析環境とデータサイエンス活用事例
ドリコムの分析環境とデータサイエンス活用事例
 
21世紀の手法対決 (MIC vs HSIC)
21世紀の手法対決 (MIC vs HSIC)21世紀の手法対決 (MIC vs HSIC)
21世紀の手法対決 (MIC vs HSIC)
 
とある金融屋の統計技師が時系列解析してみた
とある金融屋の統計技師が時系列解析してみたとある金融屋の統計技師が時系列解析してみた
とある金融屋の統計技師が時系列解析してみた
 
Rで計量時系列分析~CRANパッケージ総ざらい~
Rで計量時系列分析~CRANパッケージ総ざらい~ Rで計量時系列分析~CRANパッケージ総ざらい~
Rで計量時系列分析~CRANパッケージ総ざらい~
 
RcppEigen and SVD
RcppEigen and SVDRcppEigen and SVD
RcppEigen and SVD
 
機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話
 
第1008回 ドキッ!分析屋だらけの、大ザーユー会 - ブログの類似記事を表示させてみる
第1008回 ドキッ!分析屋だらけの、大ザーユー会 - ブログの類似記事を表示させてみる第1008回 ドキッ!分析屋だらけの、大ザーユー会 - ブログの類似記事を表示させてみる
第1008回 ドキッ!分析屋だらけの、大ザーユー会 - ブログの類似記事を表示させてみる
 
Rデモ03_データ分析編2016
Rデモ03_データ分析編2016Rデモ03_データ分析編2016
Rデモ03_データ分析編2016
 
Intoroduction of Bad Data Handbook
Intoroduction of Bad Data HandbookIntoroduction of Bad Data Handbook
Intoroduction of Bad Data Handbook
 
10分で分かるr言語入門ver2.4
10分で分かるr言語入門ver2.410分で分かるr言語入門ver2.4
10分で分かるr言語入門ver2.4
 
Tokyo.R女子部#2「RMeCabを使おう」
Tokyo.R女子部#2「RMeCabを使おう」Tokyo.R女子部#2「RMeCabを使おう」
Tokyo.R女子部#2「RMeCabを使おう」
 
Google's r style guideのすゝめ
Google's r style guideのすゝめGoogle's r style guideのすゝめ
Google's r style guideのすゝめ
 
統計解析ソフトMinitab 17によるクラスタリング
統計解析ソフトMinitab 17によるクラスタリング統計解析ソフトMinitab 17によるクラスタリング
統計解析ソフトMinitab 17によるクラスタリング
 

Mais de Atsushi Hayakawa

Zepp play soccerで測ってみた
Zepp play soccerで測ってみたZepp play soccerで測ってみた
Zepp play soccerで測ってみたAtsushi Hayakawa
 
dataclassとtypehintを使ってますか?
dataclassとtypehintを使ってますか?dataclassとtypehintを使ってますか?
dataclassとtypehintを使ってますか?Atsushi Hayakawa
 
トライアスロンとgepuro task views V2.0 Japan.R 2018
トライアスロンとgepuro task views V2.0 Japan.R 2018トライアスロンとgepuro task views V2.0 Japan.R 2018
トライアスロンとgepuro task views V2.0 Japan.R 2018Atsushi Hayakawa
 
バンクーバー旅行記
バンクーバー旅行記バンクーバー旅行記
バンクーバー旅行記Atsushi Hayakawa
 
Analyze The Community Of Tokyo.R
Analyze The Community Of Tokyo.RAnalyze The Community Of Tokyo.R
Analyze The Community Of Tokyo.RAtsushi Hayakawa
 
Visual Studio CodeでRを使う
Visual Studio CodeでRを使うVisual Studio CodeでRを使う
Visual Studio CodeでRを使うAtsushi Hayakawa
 
トライアスロンと僕 - Japan.R 2017
トライアスロンと僕 - Japan.R 2017トライアスロンと僕 - Japan.R 2017
トライアスロンと僕 - Japan.R 2017Atsushi Hayakawa
 
simputatoinで欠損値補完 - Tokyo.R #65
simputatoinで欠損値補完 - Tokyo.R #65simputatoinで欠損値補完 - Tokyo.R #65
simputatoinで欠損値補完 - Tokyo.R #65Atsushi Hayakawa
 
Rstudio上でのパッケージインストールを便利にするaddin4githubinstall
Rstudio上でのパッケージインストールを便利にするaddin4githubinstallRstudio上でのパッケージインストールを便利にするaddin4githubinstall
Rstudio上でのパッケージインストールを便利にするaddin4githubinstallAtsushi Hayakawa
 
統計的学習の基礎 4.4~
統計的学習の基礎 4.4~統計的学習の基礎 4.4~
統計的学習の基礎 4.4~Atsushi Hayakawa
 
Splatoon界での壮絶な戦い&Japan.Rの宣伝
Splatoon界での壮絶な戦い&Japan.Rの宣伝Splatoon界での壮絶な戦い&Japan.Rの宣伝
Splatoon界での壮絶な戦い&Japan.Rの宣伝Atsushi Hayakawa
 
最近のクラウドストレージの事情と私情
最近のクラウドストレージの事情と私情最近のクラウドストレージの事情と私情
最近のクラウドストレージの事情と私情Atsushi Hayakawa
 
nginxのログを非スケーラブルに省メモリな方法で蓄積する
nginxのログを非スケーラブルに省メモリな方法で蓄積するnginxのログを非スケーラブルに省メモリな方法で蓄積する
nginxのログを非スケーラブルに省メモリな方法で蓄積するAtsushi Hayakawa
 
implyを用いたアクセスログの可視化
implyを用いたアクセスログの可視化implyを用いたアクセスログの可視化
implyを用いたアクセスログの可視化Atsushi Hayakawa
 
イケてる分析基盤をつくる
イケてる分析基盤をつくるイケてる分析基盤をつくる
イケてる分析基盤をつくるAtsushi Hayakawa
 

Mais de Atsushi Hayakawa (20)

tidyverse.orgの翻訳
tidyverse.orgの翻訳tidyverse.orgの翻訳
tidyverse.orgの翻訳
 
Zepp play soccerで測ってみた
Zepp play soccerで測ってみたZepp play soccerで測ってみた
Zepp play soccerで測ってみた
 
dataclassとtypehintを使ってますか?
dataclassとtypehintを使ってますか?dataclassとtypehintを使ってますか?
dataclassとtypehintを使ってますか?
 
トライアスロンとgepuro task views V2.0 Japan.R 2018
トライアスロンとgepuro task views V2.0 Japan.R 2018トライアスロンとgepuro task views V2.0 Japan.R 2018
トライアスロンとgepuro task views V2.0 Japan.R 2018
 
バンクーバー旅行記
バンクーバー旅行記バンクーバー旅行記
バンクーバー旅行記
 
Analyze The Community Of Tokyo.R
Analyze The Community Of Tokyo.RAnalyze The Community Of Tokyo.R
Analyze The Community Of Tokyo.R
 
Visual Studio CodeでRを使う
Visual Studio CodeでRを使うVisual Studio CodeでRを使う
Visual Studio CodeでRを使う
 
トライアスロンと僕 - Japan.R 2017
トライアスロンと僕 - Japan.R 2017トライアスロンと僕 - Japan.R 2017
トライアスロンと僕 - Japan.R 2017
 
simputatoinで欠損値補完 - Tokyo.R #65
simputatoinで欠損値補完 - Tokyo.R #65simputatoinで欠損値補完 - Tokyo.R #65
simputatoinで欠損値補完 - Tokyo.R #65
 
useR!2017 in Brussels
useR!2017 in BrusselsuseR!2017 in Brussels
useR!2017 in Brussels
 
Japan.R 2016の運営
Japan.R 2016の運営Japan.R 2016の運営
Japan.R 2016の運営
 
Rstudio上でのパッケージインストールを便利にするaddin4githubinstall
Rstudio上でのパッケージインストールを便利にするaddin4githubinstallRstudio上でのパッケージインストールを便利にするaddin4githubinstall
Rstudio上でのパッケージインストールを便利にするaddin4githubinstall
 
統計的学習の基礎 4.4~
統計的学習の基礎 4.4~統計的学習の基礎 4.4~
統計的学習の基礎 4.4~
 
Splatoon界での壮絶な戦い&Japan.Rの宣伝
Splatoon界での壮絶な戦い&Japan.Rの宣伝Splatoon界での壮絶な戦い&Japan.Rの宣伝
Splatoon界での壮絶な戦い&Japan.Rの宣伝
 
最近のクラウドストレージの事情と私情
最近のクラウドストレージの事情と私情最近のクラウドストレージの事情と私情
最近のクラウドストレージの事情と私情
 
gepuro task views
gepuro task viewsgepuro task views
gepuro task views
 
nginxのログを非スケーラブルに省メモリな方法で蓄積する
nginxのログを非スケーラブルに省メモリな方法で蓄積するnginxのログを非スケーラブルに省メモリな方法で蓄積する
nginxのログを非スケーラブルに省メモリな方法で蓄積する
 
implyを用いたアクセスログの可視化
implyを用いたアクセスログの可視化implyを用いたアクセスログの可視化
implyを用いたアクセスログの可視化
 
イケてる分析基盤をつくる
イケてる分析基盤をつくるイケてる分析基盤をつくる
イケてる分析基盤をつくる
 
らずぱいラジコン
らずぱいラジコンらずぱいラジコン
らずぱいラジコン
 

Decision tree