قسمت پنجم: تشخیص ایمیل اسپم و غیر اسپم با استفاده از قاعده بیز

قسمت پنجم: تشخیص ایمیل اسپم و غیر اسپم با استفاده از قاعده بیز

در این قسمت سعی داریم با استفاده از قضیه بیز تشخیص دهیم یک محتوای ایمیل اسپم است یا غیر اسپم. برای اینکار لازم است تا برای آموزش مدل از ایمیل های اسپم و غیر اسپم استفاده کنیم. این مجموعه ایمیل ها را که به صورت فایل فشرده در آمده از این لینک دانلود کنید.

مثلا ایمیل هایی شامل کلمه Free هستند معمولا اسپم هستند، حال به این صورت از قاعده بیز استفاده می کنیم تا احتمال اسپم بودن ایمیل در صورتی که حاوی کلمه Free است بدست آید:

P(Spam|Free) = P(Free|Spam)P(Spam)/P(Free)

اما مسئله ای که اینجاست تمام کلمات در ایمیل باید در نظر گرفته شوند و کلماتی که از احتمال بالاتری برای اسپم بودن دارند شناسایی شوند. برای اینکار از قاعده بیز برای تک تک کلمات استفاده می شود و احتمال نهایی از ضریب احتمال تک تک کلمات محاسبه می شود.

روشی تحت عنوان Naive Bayes با فرض مستقل بودن احتمالات عمل طبقه بندی را انجام می دهد. خوشبختانه ماژول Scikit-learn کار را آسان کرده و دستورات لازم را در خود گنجانده است.

بنابراین لازم است تا قبل از شروع برنامه نویسی ماژول Scikit-learn را از سایت اصلی دریافت و نصب کنید یا از طریق دستور pip install scikit-learn از طریق خط فرمان اقدام کنید.

 

در برنامه زیر تنها محتوای ایمیل ها خوانده شده و به صورت یک دیتافریم در می آید، که شامل دو ستون حاوی محتوای ایمیل ها و نوع ایمیل (اسپم یا غیراسپم) مشخص شده است. در برنامه زیر لازم است تا به جای آدرس موجود در دستور data.append آدرس محل قرار گیری ایمیل هایی که در بالا دانلود کردید را قرار دهید.

** محتوای اسپم با spam و محتوای غیراسپم با ham نشان داده شده است.

 

 

حال لازم است کلمات و تعداد دفعات تکرار آن ها را از دیتافریم data که شامل محتوای ایمیل هاست استخراج کنیم که این کار با دستوارت زیر صورت می گیرد:

 

آرایه counts یک ماتریس دو بعدی است که سطرها تک تک ایمیل ها و ستون ها کلمات هستند، به صورتی که مقدار تکرار کلمات در هر ایمیل به صورت سطری نوشته شده است.

در نهایت کلمات تکرار شده در هر ایمیل را به کلاسیفایر Naïve Bayes می دهیم تا براساس نوع ایمیل که اسپم است یا خیر، مدلسازی را انجام دهد:

 

حال می توانیم از این مدل برای تشخیص اینکه محتوای یک ایمیل اسپم است یا نه استفاده کنیم. در مثال زیر محتوای چهار ایمیل در یک لیست ریخته شده و کلاسیفایر تشخیص می دهد که اسپم است یا نه.

 

در نهایت خروجی این می شود:

[‘spam’ ‘ham’ ‘spam’ ‘ham’]

تقریبا  می توان گفت که کلاسیفایر به خوبی محتوای اسپم و غیر اسپم را تشخیص داده است.

 

 

در صورت استفاده از مطالب این سایت لطفا به سایت ارجاع دهید

دیدگاه شما

( الزامي )

(الزامي)