Pythonとsklearnによる電子メールスパム分類の実装を自作する方法

スポンサーリンク

学習者のこの記事では、Pythonプログラミング言語のscikit-learnを使用して読み込まれるデータセットを使って、スパムメールの分類を達成する方法について説明します。

スポンサーリンク

迷惑メール入門

毎日何十億通ものスパムメールがユーザーのメールアカウントに送信され、そのうちの90%以上が悪意のあるもので、ユーザーに大きな損害を与えていることは周知のとおりです。

皆さんも迷惑メールに悩まされたことはありませんか?確かに私はかなり迷惑しています。

時には重要なメールもスパムメールに転送されてしまい、その結果、スパムメールによる被害を恐れて重要な情報が未読のまま放置されてしまうこともあるのです。

そして、1,000通に1通の割合でマルウェアが仕込まれていることをご存知でしょうか?そのため、私たち自身が電子メールを安全なものと安全でないものに分類する方法を学ぶことが重要です。

Pythonによるメールスパム分類器の実装

さっそく、Pythonを使ってメールスパム分類アルゴリズムを実装する手順を説明します。

これは、非常に基本的なスパム分類器のバックエンドの動作を理解するのに役立ちます。

実世界で使われているアルゴリズムは、以下で説明するアルゴリズムよりもずっと高度なものです。

しかし、あなたの旅の出発点として、これを利用することができるのは確かです。

1. モジュールのインポートとデータのロード

まず、必要なモジュールをすべてプログラムにインポートします。

そのためのコードは以下の通りです。

1
2
3
4
5
6
7
8
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
 
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB, GaussianNB
from sklearn import svm
from sklearn.model_selection import GridSearchCV

numpy、pandas、matplotlibなどの基本的な機械学習モジュールが必要です。

これらに加えて、いくつかの sklearn モデルと特徴が必要です。

次のステップでは、先にインポートしたpandasモジュールを使って、データセットをロードします。

使用するデータセットは spam.csv というデータファイルで、こちらから入手できます。

1
data = pd.read_csv('./spam.csv')

このデータセットには5572のメールサンプルがあり、spamhamという2つのユニークなラベルが付与されています。

2. トレーニングデータとテストデータ

ロード後、データをトレーニングデータとテストデータに分離する必要がある。

トレーニングデータとテストデータに分けるには、2つのステップがある。

    1. x と y のデータをそれぞれ email text と labels として分離します。
  1. xとyのデータを80:20ルールに基づいて、x_train, y_train, x_test, y_testという4つのデータセットに分割します。

xデータとyデータへの分離は以下のコードで行う。

1
2
3
4
5
6
7
8
x_data=data['EmailText']
y_data=data['Label']
 
split =(int)(0.8*data.shape[0])
x_train=x_data[:split]
x_test=x_data[split:]
y_train=y_data[:split]
y_test=y_data[split:]

3. 重要な特徴の抽出

次のステップは、データセット全体から重要な単語や特徴のみを抽出することです。

そのために、学習データセットに含まれる単語をベクトル化する関数 CountVectorizer を利用します。

1
2
count_vector = CountVectorizer() 
extracted_features = count_vector.fit_transform(x_train)

4. モデルの構築と学習

最も重要なステップは、先に作成したデータセットに対してモデルを構築し、学習させることです。

そのためのコードは以下の通りです。

1
2
3
4
5
tuned_parameters = {'kernel': ['rbf','linear'], 'gamma': [1e-3, 1e-4],'C': [1, 10, 100, 1000]}
model = GridSearchCV(svm.SVC(), tuned_parameters)
model.fit(extracted_features,y_train)
 
print("Model Trained Successfully!")

最後のステップは、テストデータセットに対するモデルの全体的な精度を計算することです。

1
print("Accuracy of the model is: ",model.score(count_vector.transform(x_test),y_test)*100)

最終的に98.744%の精度を達成し、素晴らしい結果を得ることができました。

まとめ

メール分類システムを導入することは、技術を発展させ、メールをより安全にするための素晴らしい次のステップとなります。

チュートリアルを気に入っていただけたでしょうか?それでは、Happy Learning!

Also Read:

  1. Pythonによる手書き文字認識
  2. Python 画像セグメンテーション
  3. Pythonによるスペルチェッカー
  4. Pythonでゼロから作るK-Nearest Neighbors
タイトルとURLをコピーしました