26
樹木モデルによる言語データ解析 ~RのmvpartとrandomForestを用いて~ 小林雄一郎 (大阪大学大学院/日本学術振興会) LETメソドロジー研究部会2011年度第1回研究会 2011年7月16日(土)、関西大学 1

MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

Embed Size (px)

Citation preview

Page 1: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

樹木モデルによる言語データ解析

~RのmvpartとrandomForestを用いて~

小林雄一郎

(大阪大学大学院/日本学術振興会)

LETメソドロジー研究部会 2011年度第1回研究会

2011年7月16日(土)、関西大学

1

Page 2: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

自己紹介

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

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

– 関心領域:

• コーパス言語学• コーパス言語学

• 自然言語処理

• 統計(多変量解析・パターン認識)

– 共著書:

• 『言語研究のための統計入門』

(くろしお出版、2010年)

etc.

2

Page 3: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

• Twitter、slideshare、はてな、ブクログなど、オンラインでは

langstatという名前で活動

3

Page 4: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

宣伝

• LET2011年大会ワークショップ

「R言語による教育データ分析入門」

– 大量の成績データを瞬時に処理したい先生方向け

• 数十クラス、数百人の成績データから、クラスごとの傾向、学部ご

との傾向、男女ごとの傾向、教員ごとの傾向などの有益な情報をとの傾向、男女ごとの傾向、教員ごとの傾向などの有益な情報を

1分以内で取り出して、視覚化!

– 事前知識は、(ほぼ)必要なし

• Excelデータの読み込み

• 視覚化(ヒストグラム、箱ひげ図、散布図)

• 統計処理(相関係数、単回帰、t検定)

4

Page 5: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

• Osaka.R

– #1 2010年3月4日(土)、大阪大学吹田キャンパス

– #2 2010年4月9日(土)、大阪大学吹田キャンパス

– #3 2010年6月26日(土)、大阪大学吹田キャンパス

– #4 2010年12月2日(金)、大阪大学豊中キャンパス–

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

– #6 2011年7月2日(土)、立命館大学大阪キャンパス

– 参加者・発表者・運営委員、絶賛募集中

– https://sites.google.com/site/osakarwiki/

5

Page 6: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

本発表の流れ

• はじめに

– 「分ける」ことは「分かる」こと

• Rによる樹木モデル

– 決定木 (mvpartパッケージ)– 決定木 (mvpartパッケージ)

– ランダムフォレスト(randomForestパッケージ)

– Spamデータ(kernlabパッケージ)

• 分類手法の応用可能性

6

Page 7: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

はじめに

• 統計的な分類手法

– 言語データ(e.g. 書き手、テキスト)を複数のグループに分

ける場合、判別の基準を決めるのは容易ではない

– また、何百・何千というデータを手作業で分類するのも難

しい

↓↓

– 機械学習・パターン認識(e.g. 判別分析、決定木、SVM)

• 「分ける」ことは「分かる」こと

– 統計的にデータを分類することで、何が分類に寄与して

いるのかという情報も得られる

7

Page 8: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

• 樹木モデル

– 非線形回帰分析、非線形判別分析の1つ

– 回帰問題では回帰木、分類問題では分類木あるいは決

定木とも呼ばれる

– 単語の頻度のような手がかり(説明変数)を何らかの基準

に基づき分岐し、判別・予測のモデルを構築するに基づき分岐し、判別・予測のモデルを構築する

– 分岐の過程は木構造で視覚化することができ、IF-THEN

のような簡潔なルールで表すこともできる

– 結果の解釈がしやすいため、マーケティングなどの分野

でも幅広く活用されている

8

Page 9: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

決定木とは

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

きに沿ってデータを分けていくことによって、予測や判別

を行うことを決定木(あるいは回帰木)という

Whole

data set

First

division

9

data set

First branching (X)

X≦10X>10

Y>5 Y≦5

Y

X

Second

division

10

5Second branching (Y)

Imp

ort

an

ce

Page 10: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

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

• C5.0

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

• CHAID

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

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

10

• CART

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

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

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

探す

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

Rでは

主にこの手法!

Page 11: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

Rで決定木(CART)を実行

• CART (Classification And Regression Tree)

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

• サンプルデータとして、spamを使用

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

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

> install.packages(“mvpart”)

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

– Spam e-mail database(4601通のメール)

– 【1~57列目】スパムメールに特徴的な57種類の単語・記

号など(説明変数)

– 【58列目】spamであるかnonspamであるかのラベル(従属

変数)、列名はtype

11

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

> install.packages(“kernlab”)

Page 12: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

# spamデータを学習データと評価データに2分割

> library(kernlab)

> data(spam)

> tr.index<-sample(nrow(spam), as.integer(nrow(spam)*0.5))

> spam.train<-spam[tr.index, ]

> spam.test<-spam[-tr.index, ]

12

全データ

学習データ

評価データ

分割

学習

評価

Page 13: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

• なぜ、データを分割するのか

– あるデータから分類ルールを作成し、それと同じデータを

使って検証を行うと、不当に高い精度が出てしまう(過学

習)

– そのデータに適合するようにルールを作ったのだから、同

じデータをうまく説明できるのは当然じデータをうまく説明できるのは当然

– 別のデータで検証して初めて、作成したルールの本当の

精度が分かる

13

Page 14: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

# 分類モデルの構築

> library (mvpart)

# 同じ結果を出すために

> set.seed(100)

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

> model<-rpart(type~., spam.train)

# モデルの表示

> print(model, digit=1)

14

> print(model, digit=1)

n= 2300

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

* denotes terminal node

1) root 2300 900 nonspam (0.60 0.40)

2) charExclamation< 0.08 1295 200 nonspam (0.85 0.15)

4) remove< 0.04 1200 100 nonspam (0.90 0.10)

8) charDollar< 0.1 1148 90 nonspam (0.93 0.07) *

(以下、省略)

Page 15: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

# 視覚化

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

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

15

【引数】

uniform(ノードの間隔)

branch(枝の角度)

margin(図の外側の余白)

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

個体の数)

Page 16: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

# モデルの評価

> pr.model<-predict(model, spam.test[,-58], type="class")

> table(spam.test[,58], pr.model)

pr.model

nonspam spam

nonspam 1324 91

spam 152 734

>

16

>

> result<-table(spam.test$type, pr.model)

> 2*result[2, 2]/(2*result[2, 2]+result[1, 2]+result[2, 1])

[1] 0.8579778

– 決定木については、以下にも詳しい

– 「R言語による決定木入門」(@langstat) Osaka.R #5

http://www.slideshare.net/langstat/osakar5

Page 17: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

ランダムフォレストとは

– 1) 与えられたデータセットから、N組のブートストラップサ

ンプルを作成

– 2) 各々のブートストラップサンプルデータを用いて、未剪

定の最大の決定・回帰木を生成(但し、分岐のノードは、

ランダムサンプリングされた変数のうち最善のものを使ランダムサンプリングされた変数のうち最善のものを使

用)

– 3) 全ての結果を統合し(回帰問題では平均、分類問題で

は多数決)、新しい予測・分類器を構築

• ランダムフォレスト=決定木+アンサンブル学習

17

Page 18: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

• アンサンブル学習とは

– 必ずしも精度の高くない分類器を複数組み合わせること

で、分類精度を向上させる手法

– つまりは、こういうこと

「三人寄れば文殊の知恵」(日本語)

「三個臭皮匠、賽過一個諸葛亮」(中国語)

"Two heads are better than one"(英語)

18

Page 19: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

Tree 1 Tree 2 … Tree N

Forest

Sample 1 Sample 2 … Sample N

and we or our a lso but then may ・・・ CLASS

1 1.67 1.70 0.19 0.15 0.22 0.37 0.07 0.32 ・・・ jp

2 2.61 1.63 0.26 0.26 0.33 0.00 0.00 0.07 ・・・ jp

3 2.92 0.52 0.73 0.24 0.10 0.14 0.49 0.17 ・・・ jp

4 3.45 0.78 0.33 0.62 0.21 0.08 0.08 0.12 ・・・ jp

5 1.99 0.19 0.56 0.00 0.08 0.04 0.08 0.15 ・・・ jp

6 2.51 1.12 0.37 0.34 0.16 0.08 0.08 0.23 ・・・ jp・・・ ・・・ ・・・ ・・・ ・・・ ・・・ ・・・ ・・・ ・・・ ・・・ ・・・301 2.49 1.03 0.23 0.33 0.05 0.14 0.56 0.09 ・・・ us

302 1.94 1.25 0.34 0.28 0.19 0.06 0.09 0.06 ・・・ us

303 3.00 0.45 0.39 0.22 0.15 0.13 0.05 0.10 ・・・ us

304 2.66 1.18 0.63 0.54 0.16 0.39 0.15 0.18 ・・・ us

305 2.25 0.64 0.25 0.24 0.21 0.11 0.24 0.07 ・・・ us

306 2.53 0.82 0.66 0.18 0.22 0.13 0.19 0.10 ・・・ us

Training data

Random Forest(s) Bootstrap

19

Tree 1 Tree 2 … Tree N

Result 1 Result 2 … Result N

Ensemble learning

Regression / classification

Page 20: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

• ランダムフォレストの利点

– 1) 精度が高い

– 2) 大きいデータに効率的に作用し、何百・何千の変数を扱う

ことができる

– 3) 分類に用いる変数の重要度を推定する

– 4) 欠損値の推測、多くの欠損値を持つデータの正確さの維

20

– 4) 欠損値の推測、多くの欠損値を持つデータの正確さの維

持に有効である

– 5) 分類問題における各クラスの個体数がアンバランスである

データにおいてもエラーのバランスが保たれる

– 6) 分類と変数の関係に関する情報を計算する

– 7) クラス間の近似の度合が計算できる

– 8) 外的基準がないデータにも適用できる(個体の類似度の

計算など) etc. etc.

Page 21: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

Rでランダムフォレストを実行

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

> install.packages(“randomForest”)

# 分類モデルの構築

> library(randomForest)

> rf.model<-randomForest(type ~ ., data=spam.train)

# 分類モデルの表示(注:ランダムフォレストは、実行するたびに若干結果が変わる)

> rf.model

21

Call:

randomForest(formula = type ~ ., data = spam.train)

Type of random forest: classification

Number of trees: 500

No. of variables tried at each split: 7

OOB estimate of error rate: 5.09%

Confusion matrix:

nonspam spam class.error

nonspam 1364 39 0.02779758

spam 78 819 0.08695652

Page 22: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

#重要度の高い説明変数を視覚化(上位30表現)

> varImpPlot(rf.model, main=NULL)

22

Imp

ort

an

ce

Page 23: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

# モデルの評価

> rf.predict<-predict(rf.model, spam.test)

> result<-table(spam.test$type, rf.predict)

> 2*result[2, 2]/(2*result[2, 2]+result[1, 2]+result[2, 1])

[1] 0.929169

• 決定木 vs. ランダムフォレスト

23

決定木決定木決定木決定木決定木決定木決定木決定木 ランダムフォレストランダムフォレストランダムフォレストランダムフォレストランダムフォレストランダムフォレストランダムフォレストランダムフォレスト

分類精度 ○ ◎

実行速度 ○ △

大量の変数の扱い △ ◎

解 一定 不定

視覚化 ◎ △

• 決定木 vs. ランダムフォレスト

Page 24: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

分類手法の応用可能性

• 著者推定

– 例)書き手(従属変数)をキーワード(説明変数)で分類

• ジャンル判別

– 例)ジャンル(従属変数)を品詞率(説明変数)で分類– 例)ジャンル(従属変数)を品詞率(説明変数)で分類

• 意味分類

– 例)単語の意味(従属変数)を共起語(説明変数)で分類

• 習熟度判定

– 例)習熟度(従属変数)を文法項目(説明変数)で分類

etc. etc. 24

Page 25: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

参考文献

25

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

データサイエンス―デー

タ解析の基礎から最新

手法まで』 森北出版.

岡田昌史ほか (2011).

『Rパッケージガイドブッ

ク』 東京図書.

樋口千洋 (2011). 『Rに

よるバイオインフォマ

ティックスデータ解析

第2版』 共立出版.

Page 26: MethokenR: 樹木モデルによる言語データ解析―RのmvpartとrandomForestを用いて

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

[email protected]

http://www.geocities.jp/langstat/

26