osakar_6: r言語によるナイーブベイズ入門

23
R言語によるナイーブベイズ入門 @langstat Osaka.R#6 2011年7月2日(土)、立命館大学大阪キャンパス 1

Upload: yuichiro-kobayashi

Post on 28-May-2015

6.162 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: OsakaR_6: R言語によるナイーブベイズ入門

R言語によるナイーブベイズ入門

@langstat

Osaka.R #6

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

1

Page 2: OsakaR_6: R言語によるナイーブベイズ入門

自己紹介

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

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

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

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

2

Page 3: OsakaR_6: 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

– 2011/04/23 「R言語による決定木入門」 Osaka.R#5

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

Page 4: OsakaR_6: R言語によるナイーブベイズ入門

ベイズ統計

• 最近、「ベイズ統計」が流行っている?

• そもそもベイズって何? 米酢?

• これを知らないと、もしかして時代遅れ?

• ベイズ統計を使いこなせるようになりたい!• ベイズ統計を使いこなせるようになりたい!

(手段ではなく、目的として)

• ベイズ統計に関する情報をいろいろと

探してみたところ。。。

4

Page 5: OsakaR_6: R言語によるナイーブベイズ入門

• ベイズ柄のTシャツを見つけた

5

Page 6: OsakaR_6: R言語によるナイーブベイズ入門

• ベイズ柄のマグカップやよだれかけも見つけた

6

http://www.cafepress.com/BayesBazaar

Page 7: OsakaR_6: R言語によるナイーブベイズ入門

• そして、いろいろと本を見てはみたものの。。。

– 古谷知之 (2008). 『ベイズ統計データ分析―R & WinBUGS』朝倉書店.

– 照井伸彦 (2010). 『Rによるベイズ統計分析』朝倉書店.

– 姜興起 (2010). 『ベイズ統計データ解析』共立出版.

– J. アルバート (2010). 『Rで学ぶベイズ統計学入門』シュプリ– J. アルバート (2010). 『Rで学ぶベイズ統計学入門』シュプリンガージャパン.

• 自分の研究にどう活かせばいいのか、まだよく分らな

い (T^T)

• とりあえず、テキスト分類手法を使った研究をしてい

るので、ナイーブベイズでも。。。

7

Page 8: OsakaR_6: R言語によるナイーブベイズ入門

ナイーブベイズとは

• 条件付き独立を仮定した単純な分類器

• Webページの自動カテゴリー分類(はてなブックマー

ク)、スパムフィルタなどに利用されている

• 近頃、ベイズ分類問題の注意深い解析によって、ナ

イーブベイズ分類器の効率性に理論的理由がある

ことが示された(らしい)

8

Page 9: OsakaR_6: R言語によるナイーブベイズ入門

• ナイーブベイズの特徴

– 語順を全く考慮しない

– 単語間の相関関係も全く考慮しない

– つまり、文書を単なる単語の集合 (bag of words) として–

扱っている

– この大胆な近似こそ、ナイーブベイズが「ナイーブ(単

純)」と呼ばれる所以

– 「そんなアバウトでいいのか?」と不安になるかも知れな

いが、学習が非常に高速で、実用的な精度が出るところ

が利点

9

Page 10: OsakaR_6: R言語によるナイーブベイズ入門

– ナイーブベイズにおいては、与えられた入力値に対してど

んなラベルを割り当てるかを決める際に、全ての素性が

影響力を持つ

– まず、訓練データ中の各ラベルの出現頻度を調べて、そ

れぞれのラベルの事前確率を計算するれぞれのラベルの事前確率を計算する

– この事前確率に、それぞれの素性のラベル付けへの貢

献度が組み合わされて、それぞれのラベルの尤度が計

算される

– そして、最も高い尤度と推定されたラベルが入力値に割り

当てられる

10

Page 11: OsakaR_6: R言語によるナイーブベイズ入門

• 文書のトピック選択の例 (NLTK Book)

– 訓練データにおいて、殆どの文書が“Automotive”というラベ

ルが付けられていた場合、分類器は最初に“Automotive”ラ

ベルのそばの位置から尤度の計算を開始し、それぞれの

素性の影響を計算

↓↓

– そして、darkという語を含んでいる場合、それは“Murder

Mystery”を表す弱い指標となる

– しかし、その文書がfootballという語を

含んでいる場合、それが“Sports”を表

す強い指標となる

(以下、同様の手順を繰り返す)

11

Page 12: OsakaR_6: R言語によるナイーブベイズ入門

– 最終的に、それぞれの素性は、その素性が頻繁に用いら

れないラベルに対する「反対票」を投じる形で影響する

– それぞれのラベルの尤度スコアは、それぞれの素性がそ

のラベルがつけられている文書に表れる確率を掛け合わ

せたものによって、小さくなる

– 例えば、runという語が“Sports”の文書に12%、“Murder – 例えば、runという語が“Sports”の文書に12%、“Murder

Mystery”の文書に10%、“Automotive”に関する文書

に2%存在した場合、

Sports”には0.12がかけ

られ、“Murder Mystery”

には0.10がかけられ、

“Automotive”には0.02

がかけられる

12

Page 13: OsakaR_6: R言語によるナイーブベイズ入門

数式や細かいテクニックは。。。

SKIP

13Wikipedia

SKIP

Page 14: OsakaR_6: R言語によるナイーブベイズ入門

Rでナイーブベイズをやってみよう!

• Naive Bayes– e1071パッケージをCRANからダウンロード

• サンプルデータとして、spamを使用– kernlabパッケージをCRANからダウンロード

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

> install.packages(“e1071”)

14

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

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

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

– 【58列目】spamであるかnonspamであるか(ラベル)、列名はtype

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

> install.packages(“kernlab”)

Page 15: OsakaR_6: R言語によるナイーブベイズ入門

# 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, ]

15

全データ

学習データ

評価データ

分割

学習

評価

Page 16: OsakaR_6: R言語によるナイーブベイズ入門

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

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

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

習)

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

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

16

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

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

精度が分かる

Page 17: OsakaR_6: R言語によるナイーブベイズ入門

# 分類モデルの構築

> library (e1071)

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

# モデルの表示

> model

Naive Bayes Classifier for Discrete Predictors

Call:

naiveBayes.default(x = X, y = Y, laplace = laplace)

17

naiveBayes.default(x = X, y = Y, laplace = laplace)

A-priori probabilities:

Y

nonspam spam

0.6104348 0.3895652

Conditional probabilities:

make

Y [,1] [,2]

nonspam 0.0696510 0.2978867

spam 0.1526116 0.3230907

(以下、省略)

Page 18: OsakaR_6: R言語によるナイーブベイズ入門

# 評価データを用いた予測

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

# 予測結果の表示

> pr.model

[1] spam spam spam spam spam spam spam spam

[9] spam spam spam spam spam spam spam spam

[17] spam nonspam spam spam spam spam spam spam

(省略)

18

(省略)

Levels: nonspam spam

>

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

pr.model

nonspam spam

nonspam 742 642

spam 57 860

>

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

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

[1] 0.7110376

Page 19: OsakaR_6: R言語によるナイーブベイズ入門

参考文献

– 「単純ベイズ分類器」 (Wikipedia)

http://ja.wikipedia.org/wiki/%E5%8D%98%E7%B4%94%E3

%83%99%E3%82%A4%E3%82%BA%E5%88%86%E9%A1%9

E%E5%99%A8

– 「ナイーブベイズを用いたブログ記事の自動分類」 (人工

知能に関する断想録)知能に関する断想録)

http://d.hatena.ne.jp/aidiary/20100703/1278163879

– 「新はてなブックマークでも使われてるComplement Naive

Bayesを解説するよ」(射撃しつつ前転)

http://d.hatena.ne.jp/tkng/20081217/1229475900

– 「 10行でナイーブベイズ~Rって便利だね!~ 」(あらび

き日記)

http://d.hatena.ne.jp/a_bicky/20110130/1296379953

19

Page 20: OsakaR_6: R言語によるナイーブベイズ入門

– 「Learning to Classify Text」(NLTK Book)

http://nltk.googlecode.com/svn/trunk/doc/book/ch06.ht

ml

– 「USTREAM: Tsukuba.R #7 Vol.10」 (@y_benjo)

http://www.ustream.tv/recorded/6791826

20

Page 21: OsakaR_6: R言語によるナイーブベイズ入門

宣伝

• 外国語教育メディア学会(LET)関西支部メソドロジー

研究部会

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

– http://atnd.org/events/15867

21

Page 22: OsakaR_6: R言語によるナイーブベイズ入門

• 外国語教育メディア学会(LET)第51回全国研究大会

– 8月6日(土)、名古屋学院大学

– http://let.lang.nagoya-u.ac.jp/modules/xpwiki2011/

22

Page 23: OsakaR_6: R言語によるナイーブベイズ入門

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

@langstat

[email protected]

23