收到一封邮件,假定它是 正常邮件 和 垃圾邮件的概率各是50%,
P(正常)= P(垃圾)=50%
P(垃圾|发票)=P(发票|垃圾)⋅P(垃圾) / P(发票)
根据全概率公式:
P(发票)=P(发票|垃圾)⋅P(垃圾)+P(发票|正常)⋅P(正常)
P(垃圾|发票)=P(发票|垃圾)⋅P(垃圾) / P(发票|垃圾)⋅P(垃圾)+P(发票|正常)⋅P(正常)
其中,P(发票|垃圾) 表示所有垃圾邮件中出现“发票”的概率,我们假设100封垃圾邮件中有5封包含“发票”这个词,那么这个概率是5%。P(发票|正常) 表示所有正常邮件中出现“发票”的概率,我们假设1000封正常邮件中有1封包含“发票”这个词,那么这个概率是0.1%。于是:
P(垃圾|发票)=(5%×50%) / (5%×50% + 0.1%×50%)=98%
代码: import os import re import string import math DATA_DIR = 'enron' target_names = ['ham', 'spam'] def get_data(DATA_DIR): subfolders = ['enron%d' % i for i in range(1, 7)] data = [] target = [] for subfolder in subfolders: # spam spam_files = os.listdir(os.path.join(DATA_DIR, subfolder, 'spam')) for spam_file in spam_files: with open(os.path.join(DATA_DIR, subfolder, 'spam', spam_file), encoding="latin-1") as f: data.append(f.read()) target.append(1) # ham ham_files = os.listdir(os.path.join(DATA_DIR, subfolder, 'ham')) for ham_file in ham_files: with open(os.path.join(DATA_DIR, subfolder, 'ham', ham_file), encoding&