エンジニア・クリエイター採用

エンジニア・クリエイター採用

ナイーブベイーズ分類器の開発

#MEDIA

ベイーズ定理を利用し、モデルを構築する

最近文章とキーワードを自動的にカテゴリーに分類するプログラムの開発をさせていただきました。

カテゴリーの自動分類はk近傍法(KNN)や決定木やロジスティック回帰などいくつかやり方がありますが、今回の要望に応じて、ナイーブベイーズにしました。

ナイーブベイーズはベイーズ定理の基で開発された分類の技術で根本はベイーズ定理の下記の式となります。

P(cat|document) = P(document|cat)*p(cat)/p(document)

基本の考え方はある文章documentが与えられた上、それぞれの既定のカテゴリーcatに当てはまる確率(事後確率)を計算し、一番確率が高いカテゴリーに分類すれば大丈夫です。

また、文章はそもそも単語の塊と考えられ、ある文章となる確率はそれぞれの単語が発生する確率の積だと考えられます。そうすると、式は下記となります。

P(cat|document)=p(word1|cat)*p(word2|cat)*...p(wordn|cat)*p(cat)/(p(word1)*p(word2)*p(word2)*...*p(wordn))

また、確率の桁数はかなり大きいので、logをとって、表示することにしました。

log(P(cat|document)) = Σ log(p(wordi|cat)) + log(p(wordi|cat) - Σ log(p(wordi))

学習データの収集とモデルのプログラミング化

学習データを下記のように収集できました。
⓵BeautifulSoupを利用し、当該キーワードの検索結果をスクレイピングする。
②スクレイピングされた文章に対して、janomeを使って形態素解析を行い、全部単語の塊にする。(辞書にする)
③データを文章ごとにデータベースに保存する。

モデルのプログラミング化
⓵必要な情報をデータベースから引っ張って、新しい記事を分類する際のp(wordi|cat)、p(wordi|cat)とp(wordi)のそれぞれの確率を計算するプログラミングを組む。(新しいワードも対応できるようにラプラススムージング を適用する)
②上記を踏まえて、log(P(cat|document))を算出し、記事のカテゴリーを予測するプログラムを組む。

上記で組んだプログラミングでちゃんと分類ができました。

まとめ

今回は簡単な単純ベイーズ分類器を作成致しました。

いろいろの原因でscikit-learnを利用せずに、べたでプログラミングするようにしました。

今後、機械学習の領域でもっと挑戦できればと思います。

この記事を書いた人

他のブログを見る