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

Post on 31-May-2015

14.005 Views

Category:

Business

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

R言語による決定木入門

@langstat

Osaka.R #5

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

1

自己紹介

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

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

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

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

2

• 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

決定木とは

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

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

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

いう

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

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

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

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

ルール

4

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

データ全体データ全体

ルートノード

(根ノード)

データをどんどん

分けていくと木がで

きていくんだにゃ~

5

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

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

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

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

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

空間上にプロット

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

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

6

2クラスの分類を

繰り返していくん

だにゃ~

Y

X

1回目の

分岐

2回目の

分岐

10

5

決定木のイメージ

分岐に使う値は、

さっきの散布図と

対応してるんだ

データ全体データ全体

Xで分岐

X≦10X >10

7

対応してるんだ

にゃ~

Yで分岐

Y>5 Y≦5

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

• 連続変数の場合

ある値を分岐点とする

8

株価

100円25円 250円0円

• カテゴリー変数の場合

・・・

・・・

9

・・・

・・・

・・・

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

分岐点が存在する

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

• C5.0

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

• CHAID

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

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

• CART

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

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

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

探す

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

10

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

# 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サンプル)

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

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

> iris.train<-iris[n,]

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

奇数行データ

学習

13

全データ

(n=150)

奇数行データ

(n=75)

偶数行データ

(n=75)

分割

評価

# 分類モデルの構築

> 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) *

数字だけじゃ

よく分からないにゃ~

# 視覚化

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

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

15

【引数】

uniform(ノードの間隔)

branch(枝の角度)

margin(図の外側の余白)

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

個体の数)

# 木の剪定

> plotcp(model)

【図の見方】

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

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

が予測変数の相対誤差

16

が予測変数の相対誤差

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

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

偏差を足した値

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

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

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

定し直せばよい

# 剪定した木の視覚化

> 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

から、あまり結果が変わ

らなかったのかにゃ~

# 評価

> 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%だにゃ~

参考文献

19

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

データサイエンス―デー

タ解析の基礎から最新

手法まで』 森北出版.

豊田秀樹 (2008). 『デー

タマイニング入門―Rで

学ぶ最新データ解析』

東京図書.

山口和範ほか (2004).

『図解入門よくわかる多

変量解析の基本と仕組

み』 秀和システム.

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

@langstat

kobayashi0721@gmail.com

20

top related