osakar_5: r言語による決定木入門

20
R言語による決定木入門 @langstat Osaka.R#5 2011年4月23日(土)、ロックオン大阪本社 1

Upload: yuichiro-kobayashi

Post on 31-May-2015

14.005 views

Category:

Business


1 download

TRANSCRIPT

Page 1: OsakaR_5: R言語による決定木入門

R言語による決定木入門

@langstat

Osaka.R #5

2011年4月23日(土)、ロックオン大阪本社

1

Page 2: OsakaR_5: R言語による決定木入門

自己紹介

• 小林 雄一郎 (こばやし ゆういちろう)

– 大阪大学大学院言語文化研究科/日本学術振興会

– 関心領域(「専門領域」ではない):

コーパス言語学・統計的テキストマイニング

2

Page 3: OsakaR_5: R言語による決定木入門

• Rコミュニティーとの関わり

– 2010/04/09 「R言語による検定入門」 Osaka.R#2

– 2010/06/19 「R言語によるプロット入門」 Nagoya.R#3

– 2010/06/19 「R言語による判別分析入門」 Nagoya.R#3

– 2010/06/26 「R言語によるテキストマイニング入門」–

Osaka.R#3

– 2010/12/02 「R言語によるコーパス分析入門」 Osaka.R#4

– 2011/03/26 「R言語による『機動戦士ガンダム』分析」

Nagoya.R#5

– (その他、Tokyo.RやShiga.Rにも参加)

3

Page 4: OsakaR_5: R言語による決定木入門

決定木とは

• 回帰分析のような明示的な関数を用いずに、一連

の手続きに沿ってデータを分けていくことによって、

予測や判別を行うことを決定木(あるいは回帰木)と

いう

• 様々な分野で応用性が高く、予測や判別のための

有効な手法であることに加えて、分析イメージが容

易に理解でき、さらにその出力も大変理解しやすい

ため、様々な分野での実務に使われることの多い

ルール

4

Page 5: OsakaR_5: R言語による決定木入門

木とは何か:ノードと分岐

データ全体データ全体

ルートノード

(根ノード)

データをどんどん

分けていくと木がで

きていくんだにゃ~

5

リーフノード(葉ノード)

または、ターミナルノード

Page 6: OsakaR_5: R言語による決定木入門

木をどうやって作るか:クラスの分類

• 分岐を行うには、説明変数(手がかり)が必要

• ここでは、XとYという2つの説明変数を使って、二次元

空間上にプロット

• それぞれのデータは、○、△、□というクラス(特徴)

を持っている 1回目のを持っている

6

2クラスの分類を

繰り返していくん

だにゃ~

Y

X

1回目の

分岐

2回目の

分岐

10

5

Page 7: OsakaR_5: R言語による決定木入門

決定木のイメージ

分岐に使う値は、

さっきの散布図と

対応してるんだ

データ全体データ全体

Xで分岐

X≦10X >10

7

対応してるんだ

にゃ~

Yで分岐

Y>5 Y≦5

Page 8: OsakaR_5: R言語による決定木入門

どうやって分岐のルールを決めるのか

• 連続変数の場合

ある値を分岐点とする

8

株価

100円25円 250円0円

Page 9: OsakaR_5: R言語による決定木入門

• カテゴリー変数の場合

・・・

・・・

9

・・・

・・・

・・・

・・・組み合わせの数だけ

分岐点が存在する

Page 10: OsakaR_5: R言語による決定木入門

主な決定木・回帰木の手法

• C5.0

– エントロピーに基づくゲイン比という基準で分割

• CHAID

– 統計検定(連続変数のときはF検定、カテゴリー変数のと

きはカイ2乗検定)の有意確率を基準に分割

• CART

– 不純度を表すGINI係数を基準に分割

– ノードを分岐させることによって、不純度が減少する(=分

岐後のそれぞれのノードの純度が増す)ような分岐点を

探す

– 「純度が増す」=「バラツキが少なくなる」

10

Rではこの手法!

Page 11: OsakaR_5: R言語による決定木入門

RでCARTをやってみよう

• CART (Classification And Regression Tree)

– mvpartパッケージをCRANからダウンロード

• Fisherのirisデータを使用

– R

# mvpartパッケージのインストール

> install.packages(“mvpart”)

– Rにもともと格納されている

– がく (Sepal) の長さと幅、花びら (Petal) の長さと幅から、ア

ヤメ (iris) の種類を分類

– http://en.wikipedia.org/wiki/Iris_flower_data_set

11

Page 12: OsakaR_5: R言語による決定木入門

# irisデータを表示

> iris

Sepal.Length Sepal.Width Petal.Length Petal.Width Species

1 5.1 3.5 1.4 0.2 setosa

2 4.9 3.0 1.4 0.2 setosa

3 4.7 3.2 1.3 0.2 setosa

4 4.6 3.1 1.5 0.2 setosa

5 5.0 3.6 1.4 0.2 setosa

12

5 5.0 3.6 1.4 0.2 setosa

6 5.4 3.9 1.7 0.4 setosa

7 4.6 3.4 1.4 0.3 setosa

8 5.0 3.4 1.5 0.2 setosa

9 4.4 2.9 1.4 0.2 setosa

10 4.9 3.1 1.5 0.1 setosa

(中略)

150 5.9 3.0 5.1 1.8 virginica

# setosa, versicolor, verginicaが50サンプルずつ(計150サンプル)

Page 13: OsakaR_5: R言語による決定木入門

# irisデータを奇数行(学習データ)と偶数行(評価データ)に分割

> n<-2*(1:75)-1

> iris.train<-iris[n,]

> iris.test<-iris[-n,]

奇数行データ

学習

13

全データ

(n=150)

奇数行データ

(n=75)

偶数行データ

(n=75)

分割

評価

Page 14: OsakaR_5: R言語による決定木入門

# 分類モデルの構築

> library (mvpart)

# 同じ結果を出すために

> set.seed(20)

# エントロピーを用いる場合は、引数でsplit=“information”

> model<-rpart(Species~., iris.train)

# モデルの表示

> print(model, digit=1)

14

> print(model, digit=1)

n= 75

node), split, n, loss, yval, (yprob)

* denotes terminal node

1) root 75 50 setosa (0.33 0.33 0.33)

2) Petal.Length< 2 25 0 setosa (1.00 0.00 0.00) *

3) Petal.Length>=2 50 20 versicolor (0.00 0.50 0.50)

6) Petal.Width< 2 25 1 versicolor (0.00 0.96 0.04) *

7) Petal.Width>=2 25 1 virginica (0.00 0.04 0.96) *

数字だけじゃ

よく分からないにゃ~

Page 15: OsakaR_5: R言語による決定木入門

# 視覚化

> plot(model, uniform=T, branch=0.6, margin=0.5)

> text(model, use.n=T, all=T)

15

【引数】

uniform(ノードの間隔)

branch(枝の角度)

margin(図の外側の余白)

use.n(各ノードに含まれる

個体の数)

Page 16: OsakaR_5: R言語による決定木入門

# 木の剪定

> plotcp(model)

【図の見方】

下の横軸がcpの値、上の横軸が木

のサイズ(リーフノードの数)、縦軸

が予測変数の相対誤差

16

が予測変数の相対誤差

Min+1SEは、交差確認の結果から

求められるリスクの最小値に標準

偏差を足した値

とりあえず、オレンジの点(直線

Min+1SEの下方で、最もその直線に

近い点)のある位置あたりにcpを設

定し直せばよい

Page 17: OsakaR_5: R言語による決定木入門

# 剪定した木の視覚化

> model.prune<-prune(model, cp=0.02)

> plot(model.prune, uniform=T, branch=0.6, margin=0.5)

> text(model.prune, use.n=T)

cpのデフォルトが0.01だ

から、あまり結果が変わ

17

から、あまり結果が変わ

らなかったのかにゃ~

Page 18: OsakaR_5: R言語による決定木入門

# 評価

> model.predict<-predict(model.prune, iris.test[,-5], type="class")

> table(iris.test[,5], model.predict)

model.predict

setosa versicolor virginica

setosa 25 0 0

versicolor 0 24 1

virginica 0 3 22

18

virginica 0 3 22

75サンプルのうち、

4サンプルを誤分類しているから、

正判別率は94.67%だにゃ~

Page 19: OsakaR_5: R言語による決定木入門

参考文献

19

金明哲 (2007). 『Rによる

データサイエンス―デー

タ解析の基礎から最新

手法まで』 森北出版.

豊田秀樹 (2008). 『デー

タマイニング入門―Rで

学ぶ最新データ解析』

東京図書.

山口和範ほか (2004).

『図解入門よくわかる多

変量解析の基本と仕組

み』 秀和システム.

Page 20: OsakaR_5: R言語による決定木入門

ご清聴ありがとうございました。

@langstat

[email protected]

20