Pythonで作る単純ベイズ分類器

Pythonで作る単純ベイズ分類器



データの用意


分類対象のデータはスパムのテストデータです。
以下のサイトからデータを取得できるようです。
https://spamassassin.apache.org/old/publiccorpus/

圧縮された状態で置かれていますがこの中に数百〜数千のメールを記載したファイルが格納されています。
このファイルから分類のために使う情報を抽出します。
ファイルの内容はだいたい以下の形式になっています。


今回は件名を分類に使うので「Subject:」の部分を抽出します。

実装

前処理


get_dataメソッドで必要なデータを取得します。

  • 引数… [スパムアサシンから取得したディレクトリ名,スパムかどうか(0or1)]
  • 戻り値… [単語のリスト,スパムかどうか(0or1)]


具体的には以下の形式のデータです。


そして抽出したデータを使い、前処理に渡しスパムと非スパムがそれぞれの単語を含む確率を計算します。
preprocessメソッドに先ほど抽出したデータを渡すと、以下の形式の情報を含んだリストを生成します。

予測


予測はpredictメソッドが行います。
このメソッドにメールから抽出した件名をリストにしてを渡します。
最終的に
[スパムが単語を含む確率] / ( [スパムが単語を含む確率]+[非スパムが単語を含む確率] )=スパムである確率
を計算します。

動作確認


実装したクラスを以下のように使い動かしてみます。


実行結果は以下のようになりました。
ある程度は予測できているのかと思います。


今回はスパムの判定を行うプログラムを実装しましたが、文章の分類に関して他にもいろいろできそうです。

コメントする