はじめてでもわかるベイズ分類器 -基礎からmahout実装まで-
TRANSCRIPT
はじめてでもわかる(単純)ベイズ分類器-基礎からMahout実装まで-
2010/09/26(日) #TokyoWebmining 7
naoki yanai@yanaoki
2010年9月26日日曜日
本日の内容
自己紹介
基礎理論:単純ベイズ分類器
実装例:
LLによる簡易実装(Ruby)
Mahout実装の使い方(Java/Hadoop)
2010年9月26日日曜日
自己紹介名前:yanaoki
職業:Web系エンジニア、Ruby、Java
データマイニング歴:約半年
実務でのマイニング経験もあまりない
今はこの勉強会と発表がモチベーション
#TokyoWebminingと共に育つ
事務局、雑用やってます
個人的ミッション:初心者にもやさしい勉強会
2010年9月26日日曜日
単純ベイズ分類器の基礎
2010年9月26日日曜日
ベイズの定理P(B) = 事象Bが発生する確率(事前確率)P(B|A) = 事象Aが起きた後での事象Bの確率(事後確率)
ベイズの定理によれば、P(A) > 0 の条件のもと、
2010年9月26日日曜日
ベイズの定理より、
単純ベイズ分類器
分母: C に依存しないので、ここでは分母を考慮しない
条件付き独立性を仮定すると、分子は、
分子:乗法定理から次のように変形
特徴変数F1,...,Fnが与えたられた時のカテゴリCの確率
カテゴリの決定は、事後確率が最大となるcを選択
2010年9月26日日曜日
分類器の活用1.入力準備
(a)フォーマット、ノイズ除去、など2.学習
(a)モデルを作成3.評価
(a)モデルを評価(b)「1.入力→2.学習→3.評価」を繰り返す(c)良いモデルを作り、メンテすることが重要
4.実践・推測(a)作成したモデルを用いて未知のモノを分類
2010年9月26日日曜日
単純ベイズ分類器の実装
2010年9月26日日曜日
LLによる簡易実装集合知プログラミング
6章ドキュメントフィルタリング
豊富なサンプルコード
ベイズの定理も解説
RSSフィード分類まで実装
協調フィルタリング、クラスタリングなど、他のアルゴリズムも豊富
2010年9月26日日曜日
LLによる簡易実装
参考書を見ながら実装
Rubyで実装
数十行程度
ソースは何処かに載せておきます
実行例を見ると分かり易いかも(後の資料)
2010年9月26日日曜日
【再掲】分類器の活用1.入力準備
(a)フォーマット、ノイズ除去、など2.学習
(a)モデルを作成3.評価
(a)モデルを評価(b)「1.入力→2.学習→3.評価」を繰り返す(c)良いモデルを作り、メンテすることが重要
4.実践・推測(a)作成したモデルを用いて未知のモノを分類
2010年9月26日日曜日
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日日曜日
MahoutJava/Hadoop上での計算処理
アルゴリズムによってはローカルでも実行可能
大規模データのデータマイニング
複数のアルゴリズムをサポート
Classifier
CF
Clustering
Pattern Mining
2010年9月26日日曜日
Mahoutの単純ベイズ分類器
Mahout in Action
MEAP版(PDF)
執筆途中のものを発売日前に購入
更新されるたびにダウンロード可能
電子書籍ならでは
2010年9月26日日曜日
現在
2010年9月26日日曜日
執筆を待とう
2010年9月26日日曜日
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日日曜日
【再掲】分類器の活用1.入力準備
(a)フォーマット、ノイズ除去、など2.学習
(a)モデルを作成3.評価
(a)モデルを評価(b)「1.入力→2.学習→3.評価」を繰り返す(c)良いモデルを作り、メンテすることが重要
4.実践・推測(a)作成したモデルを用いて未知のモノを分類
2010年9月26日日曜日
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日日曜日
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日日曜日
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日日曜日
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日日曜日
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日日曜日
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日日曜日
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日日曜日
Mahoutの単純ベイズ分類器
生成モデルを用い未知のドキュメントを分類Classifierクラス(Mahoutが用意している)2つの方式モデルをインメモリにロードして利用始めからHBaseを利用
現在はバグがあって動作しないorzバグは明確なので修正して数行で書けそう
2.実践/分類
2010年9月26日日曜日
まとめ今後やりたいこと
Hadoopを使わないでローカルで試せるオプションもあるので、手軽なデータ量でたくさん試したい
Mahoutが実装した論文をしっかり読みたい
分類器タイプ、N-gram、alpha値のパラメータを変えて試したい
Mahout in Actionの続きが読みたい
2010年9月26日日曜日
ありがとうございました
2010年9月26日日曜日