osakar_6: r言語によるナイーブベイズ入門
TRANSCRIPT
R言語によるナイーブベイズ入門
@langstat
Osaka.R #6
2011年7月2日(土)、立命館大学大阪キャンパス
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
– 2011/04/23 「R言語による決定木入門」 Osaka.R#5
– (その他、Tokyo.RやShiga.Rにも参加)3
ベイズ統計
• 最近、「ベイズ統計」が流行っている?
• そもそもベイズって何? 米酢?
• これを知らないと、もしかして時代遅れ?
↓
• ベイズ統計を使いこなせるようになりたい!• ベイズ統計を使いこなせるようになりたい!
(手段ではなく、目的として)
• ベイズ統計に関する情報をいろいろと
探してみたところ。。。
4
• ベイズ柄のTシャツを見つけた
5
• ベイズ柄のマグカップやよだれかけも見つけた
6
http://www.cafepress.com/BayesBazaar
• そして、いろいろと本を見てはみたものの。。。
– 古谷知之 (2008). 『ベイズ統計データ分析―R & WinBUGS』朝倉書店.
– 照井伸彦 (2010). 『Rによるベイズ統計分析』朝倉書店.
– 姜興起 (2010). 『ベイズ統計データ解析』共立出版.
– J. アルバート (2010). 『Rで学ぶベイズ統計学入門』シュプリ– J. アルバート (2010). 『Rで学ぶベイズ統計学入門』シュプリンガージャパン.
• 自分の研究にどう活かせばいいのか、まだよく分らな
い (T^T)
• とりあえず、テキスト分類手法を使った研究をしてい
るので、ナイーブベイズでも。。。
7
ナイーブベイズとは
• 条件付き独立を仮定した単純な分類器
• Webページの自動カテゴリー分類(はてなブックマー
ク)、スパムフィルタなどに利用されている
• 近頃、ベイズ分類問題の注意深い解析によって、ナ
イーブベイズ分類器の効率性に理論的理由がある
ことが示された(らしい)
8
• ナイーブベイズの特徴
– 語順を全く考慮しない
– 単語間の相関関係も全く考慮しない
↓
– つまり、文書を単なる単語の集合 (bag of words) として–
扱っている
– この大胆な近似こそ、ナイーブベイズが「ナイーブ(単
純)」と呼ばれる所以
↓
– 「そんなアバウトでいいのか?」と不安になるかも知れな
いが、学習が非常に高速で、実用的な精度が出るところ
が利点
9
– ナイーブベイズにおいては、与えられた入力値に対してど
んなラベルを割り当てるかを決める際に、全ての素性が
影響力を持つ
↓
– まず、訓練データ中の各ラベルの出現頻度を調べて、そ
れぞれのラベルの事前確率を計算するれぞれのラベルの事前確率を計算する
↓
– この事前確率に、それぞれの素性のラベル付けへの貢
献度が組み合わされて、それぞれのラベルの尤度が計
算される
↓
– そして、最も高い尤度と推定されたラベルが入力値に割り
当てられる
10
• 文書のトピック選択の例 (NLTK Book)
– 訓練データにおいて、殆どの文書が“Automotive”というラベ
ルが付けられていた場合、分類器は最初に“Automotive”ラ
ベルのそばの位置から尤度の計算を開始し、それぞれの
素性の影響を計算
↓↓
– そして、darkという語を含んでいる場合、それは“Murder
Mystery”を表す弱い指標となる
↓
– しかし、その文書がfootballという語を
含んでいる場合、それが“Sports”を表
す強い指標となる
(以下、同様の手順を繰り返す)
11
– 最終的に、それぞれの素性は、その素性が頻繁に用いら
れないラベルに対する「反対票」を投じる形で影響する
– それぞれのラベルの尤度スコアは、それぞれの素性がそ
のラベルがつけられている文書に表れる確率を掛け合わ
せたものによって、小さくなる
– 例えば、runという語が“Sports”の文書に12%、“Murder – 例えば、runという語が“Sports”の文書に12%、“Murder
Mystery”の文書に10%、“Automotive”に関する文書
に2%存在した場合、
Sports”には0.12がかけ
られ、“Murder Mystery”
には0.10がかけられ、
“Automotive”には0.02
がかけられる
12
数式や細かいテクニックは。。。
SKIP
13Wikipedia
SKIP
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”)
# 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
全データ
学習データ
評価データ
分割
学習
評価
• なぜ、データを分割するのか
– あるデータから分類ルールを作成し、それと同じデータを
使って検証を行うと、不当に高い精度が出てしまう(過学
習)
– そのデータに適合するようにルールを作ったのだから、同
じデータをうまく説明できるのは当然
16
じデータをうまく説明できるのは当然
– 別のデータで検証して初めて、作成したルールの本当の
精度が分かる
# 分類モデルの構築
> 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
(以下、省略)
# 評価データを用いた予測
> 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
参考文献
– 「単純ベイズ分類器」 (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
– 「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
宣伝
• 外国語教育メディア学会(LET)関西支部メソドロジー
研究部会
– 7月16日(土)、関西大学
– http://atnd.org/events/15867
21
• 外国語教育メディア学会(LET)第51回全国研究大会
– 8月6日(土)、名古屋学院大学
– http://let.lang.nagoya-u.ac.jp/modules/xpwiki2011/
22