28
はじめてでもわかる (単純)ベイズ分類器 -基礎からMahout実装まで- 2010/09/26(日) #TokyoWebmining 7 naoki yanai @yanaoki 2010926日日曜日

はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

Embed Size (px)

Citation preview

Page 1: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

はじめてでもわかる(単純)ベイズ分類器-基礎からMahout実装まで-

2010/09/26(日) #TokyoWebmining 7

naoki yanai@yanaoki

2010年9月26日日曜日

Page 2: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

本日の内容

自己紹介

基礎理論:単純ベイズ分類器

実装例:

LLによる簡易実装(Ruby)

Mahout実装の使い方(Java/Hadoop)

2010年9月26日日曜日

Page 3: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

自己紹介名前:yanaoki

職業:Web系エンジニア、Ruby、Java

データマイニング歴:約半年

実務でのマイニング経験もあまりない

今はこの勉強会と発表がモチベーション

#TokyoWebminingと共に育つ

事務局、雑用やってます

個人的ミッション:初心者にもやさしい勉強会

2010年9月26日日曜日

Page 4: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

単純ベイズ分類器の基礎

2010年9月26日日曜日

Page 5: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

ベイズの定理P(B) = 事象Bが発生する確率(事前確率)P(B|A) = 事象Aが起きた後での事象Bの確率(事後確率)

ベイズの定理によれば、P(A) > 0 の条件のもと、

2010年9月26日日曜日

Page 6: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

ベイズの定理より、

単純ベイズ分類器

分母: C に依存しないので、ここでは分母を考慮しない

条件付き独立性を仮定すると、分子は、

分子:乗法定理から次のように変形

特徴変数F1,...,Fnが与えたられた時のカテゴリCの確率

カテゴリの決定は、事後確率が最大となるcを選択

2010年9月26日日曜日

Page 7: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

分類器の活用1.入力準備

(a)フォーマット、ノイズ除去、など2.学習

(a)モデルを作成3.評価

(a)モデルを評価(b)「1.入力→2.学習→3.評価」を繰り返す(c)良いモデルを作り、メンテすることが重要

4.実践・推測(a)作成したモデルを用いて未知のモノを分類

2010年9月26日日曜日

Page 8: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

単純ベイズ分類器の実装

2010年9月26日日曜日

Page 9: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

LLによる簡易実装集合知プログラミング

6章ドキュメントフィルタリング

豊富なサンプルコード

ベイズの定理も解説

RSSフィード分類まで実装

協調フィルタリング、クラスタリングなど、他のアルゴリズムも豊富

2010年9月26日日曜日

Page 10: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

LLによる簡易実装

参考書を見ながら実装

Rubyで実装

数十行程度

ソースは何処かに載せておきます

実行例を見ると分かり易いかも(後の資料)

2010年9月26日日曜日

Page 11: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

【再掲】分類器の活用1.入力準備

(a)フォーマット、ノイズ除去、など2.学習

(a)モデルを作成3.評価

(a)モデルを評価(b)「1.入力→2.学習→3.評価」を繰り返す(c)良いモデルを作り、メンテすることが重要

4.実践・推測(a)作成したモデルを用いて未知のモノを分類

2010年9月26日日曜日

Page 12: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

LLによる簡易実装# 空の分類器を生成c = NaiveBayes.new

# 学習(カテゴリは ‘good’,‘bad’、の2つ)c.train('Nobody owns the water.','good')c.train('the quick rabbit jumps fences','good')c.train('buy pharmaceuticals now','bad')c.train('make quick money at the online casino','bad')c.train('the quick brown fox jumps','good')

# 実践(分類)c.classify("quick rabbit",default="unknown") #=> goodc.classify("quick money",default="unknown") #=> bad

# チューニングc.setthreshold('bad',3.0) # badを選択するためには、他カテゴリの確率の3倍必要c.classify("quick money",default="unknown") #=> unknown

2010年9月26日日曜日

Page 13: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

MahoutJava/Hadoop上での計算処理

アルゴリズムによってはローカルでも実行可能

大規模データのデータマイニング

複数のアルゴリズムをサポート

Classifier

CF

Clustering

Pattern Mining

2010年9月26日日曜日

Page 14: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

Mahoutの単純ベイズ分類器

Mahout in Action

MEAP版(PDF)

執筆途中のものを発売日前に購入

更新されるたびにダウンロード可能

電子書籍ならでは

2010年9月26日日曜日

Page 15: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

現在

2010年9月26日日曜日

Page 16: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

執筆を待とう

2010年9月26日日曜日

Page 17: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

Mahoutの単純ベイズ分類器2種類の分類器の実装

Naive BayesComplementary Naive Bayes

Tackling the Poor Assumptions of Naive Bayes Text Classifiers

http://people.csail.mit.edu/jrennie/papers/icml03-nb.pdf

入力準備・学習・評価フェーズにHadoop利用Hadoopを使わないオプションあり今回はElastic MapReduce使うので、コマンドは置き換えてください

Wikipediaと20NewsGroupsのExample

2010年9月26日日曜日

Page 18: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

【再掲】分類器の活用1.入力準備

(a)フォーマット、ノイズ除去、など2.学習

(a)モデルを作成3.評価

(a)モデルを評価(b)「1.入力→2.学習→3.評価」を繰り返す(c)良いモデルを作り、メンテすることが重要

4.実践・推測(a)作成したモデルを用いて未知のモノを分類

2010年9月26日日曜日

Page 19: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

Mahoutの単純ベイズ分類器

Wikipedia(en)データをダウンロード(xml.bz2)

付属ツールでデータを分割(xml→*.xml)

64MB/396ファイル/合計25GB、中規模

1.入力準備・その1・データのダウンロード

$ java -Xmx2048m org.apache.mahout.classifier.bayes.WikipediaXmlSplitter \-d $WORK_DIR/enwiki-20100130-pages-articles.xml.bz2 \-o $WORK_DIR/chunks/ \-c 64

2010年9月26日日曜日

Page 20: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

Mahoutの単純ベイズ分類器文書を必要な分だけS3(MapReduceのinput)にアップロード

先ほど分割したファイルから、学習用・評価用に、適当に選んでおく今回は学習用に5ファイル、評価用に1ファイル

カテゴリを準備

今回は2個だけ「Sports・Game」

1.入力準備・その2・カテゴリの準備

$ elastic-mapreduce \--create \--name "wikipedia classifier" \--alive \--log-uri s3://yanaokimrsample/classifier/wikipedia/logs \--num-instances 3 \--instance-type m1.small \--availability-zone us-west-1a

Hadoopクラスタ起動(small,maste1/slave2ノード)

2010年9月26日日曜日

Page 21: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

Mahoutの単純ベイズ分類器

付属のツールを用いて学習用データ生成指定カテゴリとWikipediaカテゴリを比較して抽出サブストリングなカテゴリもマッチ

1カテゴリ→1ファイル、1文書→1行出来上がった入力ファイルのフォーマット↓

1.入力準備・その3・学習用データ作成$ elastic-mapreduce -j j-24EIFIRXBO39M \--jar s3n://yanaokimrsample/jars/mahout-examples-0.3.job \--main-class org.apache.mahout.classifier.bayes.WikipediaDatasetCreatorDriver \--arg --input --arg s3n://yanaokimrsample/classifier/wikipedia/chunks \--arg --output --arg s3n://yanaokimrsample/classifier/wikipedia/input \--arg --categories --arg /home/hadoop/cat.txt \--step-name "wikipedia train dataset creator driver"

カテゴリ名<¥t>単語<space>単語<spache>単語<spane>...

2010年9月26日日曜日

Page 22: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

Mahoutの単純ベイズ分類器

学習用データと同ツールを用いて生成別データを用い、別の場所に生成

1.入力準備・その4・評価用データ作成$ elastic-mapreduce -j j-24EIFIRXBO39M \--jar s3n://yanaokimrsample/jars/mahout-examples-0.3.job \--main-class org.apache.mahout.classifier.bayes.WikipediaDatasetCreatorDriver \--arg --input --arg s3n://yanaokimrsample/classifier/wikipedia/chunks2 \--arg --output --arg s3n://yanaokimrsample/classifier/wikipedia/input2 \--arg --categories --arg /home/hadoop/cat.txt \--step-name "wikipedia test dataset creator driver"

2010年9月26日日曜日

Page 23: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

Mahoutの単純ベイズ分類器

分類器タイプ、N-gram(単語N-gram)、alpha(スムージング)を指定10分程度で完了内部では、論文にそったBayes/CBayesの処理を4回のMapReduceで実行

2.学習・実行

$ elastic-mapreduce -j j-24EIFIRXBO39M \--jar s3n://yanaokimrsample/jars/mahout-core-0.3.job \--main-class org.apache.mahout.classifier.bayes.TrainClassifier \--arg --input --arg s3n://yanaokimrsample/classifier/wikipedia/input \--arg --output --arg s3n://yanaokimrsample/classifier/wikipedia/model \--arg --gramSize --arg 2 \--arg --classifierType --arg bayes \--arg --alpha --arg 0.5 \--arg --dataSource --arg hdfs \--step-name "train classifier"

2010年9月26日日曜日

Page 24: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

Mahoutの単純ベイズ分類器

学習時と同じN-gramとalphaを指定2.評価・その1・実行

elastic-mapreduce -j j-24EIFIRXBO39M \--jar s3n://yanaokimrsample/jars/mahout-core-0.3.job \--main-class org.apache.mahout.classifier.bayes.TestClassifier \--arg --model --arg s3n://yanaokimrsample/classifier/wikipedia/model \--arg --testDir --arg s3n://yanaokimrsample/classifier/wikipedia/input2 \--arg --gramSize --arg 2 \--arg --classifierType --arg bayes \--arg --alpha --arg 0.5 \--arg --method --arg mapreduce \--arg --dataSource --arg hdfs \--arg --encoding --arg UTF-8 \--step-name "test classifier"

2010年9月26日日曜日

Page 25: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

Mahoutの単純ベイズ分類器

標準出力に、混同行列形式で結果表示2.評価・その2・結果の評価

・・・=======================================================Confusion Matrix-------------------------------------------------------a b <--Classified as464 2 | 466 a = game 159 169 | 328 b = sports Default Category: unknown: 2

→sportsカテゴリの正解率が低い。モデルの再生成が必要。。。

2010年9月26日日曜日

Page 26: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

Mahoutの単純ベイズ分類器

生成モデルを用い未知のドキュメントを分類Classifierクラス(Mahoutが用意している)2つの方式モデルをインメモリにロードして利用始めからHBaseを利用

現在はバグがあって動作しないorzバグは明確なので修正して数行で書けそう

2.実践/分類

2010年9月26日日曜日

Page 27: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

まとめ今後やりたいこと

Hadoopを使わないでローカルで試せるオプションもあるので、手軽なデータ量でたくさん試したい

Mahoutが実装した論文をしっかり読みたい

分類器タイプ、N-gram、alpha値のパラメータを変えて試したい

Mahout in Actionの続きが読みたい

2010年9月26日日曜日

Page 28: はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-

ありがとうございました

2010年9月26日日曜日