1. HOME
  2. ブログ
  3. IT技術
  4. 【機械学習】単純なアルゴリズムで迷惑メールを分類してみた
【機械学習】単純なアルゴリズムで迷惑メールを分類してみた

【機械学習】単純なアルゴリズムで迷惑メールを分類してみた

迷惑メールを分類してみた

今回は、「単純なアルゴリズムで迷惑メールを分類する」というテーマで、紹介していきます。

具体的には、

  1. ナイーブベイズ
  2. ロジスティック回帰
  3. パーセプトロン

を使って、それぞれでどのぐらいの精度が出るのかを、調査してみたいと思います。

わかりやすくまとめていきますので、ぜひチャレンジしてみてくださいね!

こちらの記事もオススメ!


ナイーブベイズ

このナイーブベイズについて説明するには、「ベイズの定理」について知る必要があります。

「ベイズの定理」とは、以下で表される、条件付き確率に関する式です。

$$P(B|A)=\frac{P(A|B)P(B)}{P(A)}$$

「\(P(B)\) 」は、事象 A が起きるかどうかに関わらず、事象 B が起こる確率です。

「\(P(B|A)\) 」は、事象 A が起きた場合に、事象 B が起きる確率です。

基本的には、事象 A が実際に起こったことやデータ、事象 B が求めたい情報や分類したいものになります。

たとえば、ある土地では、雨が降る確率が「 \(P(rain)=0.1\)」になりますね!

ナイーブベイズとは

「ナイーブベイズアルゴリズム」とは、ベイズの定理を元に与えられたデータから、最も確からしいものはどれかを検証するアルゴリズムです。

わかりやすく、文書の分類で考えてみましょう。

与えられた文書を、「経済・スポーツ・芸能」などのカテゴリに分けるとします。

これら各カテゴリの文書に、あらかじめ、出現する単語の頻度を学習させておくのです。

たとえば経済カテゴリなら、「金融・日経平均・ビジネス」などの単語が、出現しやすくなります。

スポーツカテゴリなら、「野球・応援・監督」などの単語が、文書に出現しやすくなりますね。

与えられた文書に出現する単語を解析し、このデータを元に、どのカテゴリの文書に最もふさわしいかを出力していくわけです。

ナイーブベイズアルゴリズムには課題も

ただし、ナイーブベイズアルゴリズムは、現実世界の問題へは応用しにくいです…。

というのも、「それぞれのデータは独立である」という、仮定に基づいているため。

しかし、比較的簡単なアルゴリズムで、計算リソースも少なく済むので、条件を満たすようなデータに対しては十分に使えます。

迷惑メール分類

では実際に、迷惑メールの分類を行います。

今回学習させるデータは、kaggle の「sms-spam-collection-dataset.zip」。

【 kaggle:学習データ】
https://www.kaggle.com/uciml/sms-spam-collection-dataset

以下にコードを載せます。

まずは与えられたデータで、「スパムメール」と「通常メール」に含まれる、単語の頻度を数えます。

それを元に、単語のベクトル化を行います。

単語の出現頻度に関するデータをベクトル化させることで、実際に学習をして、分類器を作成していくのです。

作成した分類器に、あらかじめ分離しておいた、予測用のデータを渡します。

結果は、「5/5」で正解となりました。

パーセプトロン

「パーセプトロン」とは、現在のディープラーニング分野の大元となるアルゴリズムです。

このアルゴリズムでは、複数の入力に対し、重みをつけて学習させておいたバイアスを加算します。

「0」か「1」を出力する、単層ニューラルネットワークです。

式で表すと、以下のようになります。

$$(出力)=b+x_1w_1+x_1w_1+x_1w_1+……$$

それぞれの意味は、次の通り。

  1. b:バイアス
  2. x_n:入力
  3. w_n:x_nにかかる重み

迷惑メール分類

では、パーセプトロンを使って、迷惑メールの分類をしていきましょう!

以下にコードを載せます。

今回は、ナイーブベイズの時に整えたデータを、そのまま流用しました。

上で説明した通り、ベクトル化した単語を入力として重みを学習し、分類器を作成します。

こちらも、「5/5」で正解でした。

ロジスティック回帰

ロジスティック回帰は、一般化線形モデルのひとつです。

基本的には、パーセプトロンと同じモデルを利用します。

入力に対して、重みをつけバイアスを加えて、出力を決定するのです。

具体的に、パーセプトロンとの違いは、次のとおり。

  1. パーセプトロン:「確率的勾配降下法」を利用
  2. ロジスティック回帰:「座標降下法」や「準ニュートン法」を利用

迷惑メール分類

では、ロジスティック回帰を使って、迷惑メール分類をしていきましょう!

データは、上2つと同じものを使っています。

やってることもほとんど同じで、

  1. 単語をベクトル化
  2. それを学習させて重みを決定
  3. 予測テスト

という流れです。

こちらは正解率が「4/5」で、1問だけスパムメールを、通常のメールと間違えていました…。

さいごに

今回は、「ナイーブベイズ」「パーセプトロン」「ロジスティック回帰」という3つの単純なアルゴリズムで、迷惑メールの分類(文書分類)を行いました!

どれも簡単で扱いやすく、理解もしやすいアルゴリズムだったかと思います。

精度も良かったので、2種類の文書分類程度なら、このぐらい簡単なものを使ってもいいかもしれませんね。

ぜひ、皆さんもお試しあれ!

記事を書いた人

\ 3度のメシより技術が好き /
(株)ライトコードは、WEB・アプリ・ゲーム開発に強い「好きを仕事にするエンジニア集団」です。
システム開発依頼・お見積もりはこちらまでお願いします。
また、WEB・スマホ系エンジニアを積極採用中です!
※現在、多数のお問合せを頂いており、返信に、多少お時間を頂く場合がございます。

こちらの記事もオススメ!


ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

書いた人はこんな人

ライトコードメディア編集部
ライトコードメディア編集部
「好きなことを仕事にするエンジニア集団」の(株)ライトコードのメディア編集部が書いている記事です。

関連記事

初心者が3ヶ月でどれくらいプログラミングができるようになるのか

採用情報

\ あの有名サービスに参画!? /

バックエンドエンジニア

\ クリエイティブの最前線 /

フロントエンドエンジニア

\ 世界はお前の手の中に・・・ /

モバイルエンジニア

\ サービスの守り神! /

インフラエンジニア

初心者が3ヶ月でどれくらいプログラミングができるようになるのか

初心者が3ヶ月でどれくらいプログラミングができるようになるのか