Python 实现朴素贝叶斯垃圾邮件分类器
下面是一个完整的贝叶斯学习模型的示例代码,用于判断一封邮件是垃圾邮件还是正常邮件,基于邮件中是否包含'technology'单词:
from collections import defaultdict
class NaiveBayesClassifier:
def __init__(self):
self.classes = defaultdict(int)
self.word_counts = defaultdict(lambda: defaultdict(int))
self.class_word_counts = defaultdict(int)
self.total_emails = 0
def train(self, emails, labels):
for email, label in zip(emails, labels):
self.classes[label] += 1
self.total_emails += 1
for word in email:
self.word_counts[word][label] += 1
self.class_word_counts[label] += 1
def predict(self, email):
spam_prob = self.classes['spam'] / self.total_emails
ham_prob = self.classes['ham'] / self.total_emails
for word in email:
spam_prob *= (self.word_counts[word]['spam'] + 1) / (self.class_word_counts['spam'] + len(self.word_counts))
ham_prob *= (self.word_counts[word]['ham'] + 1) / (self.class_word_counts['ham'] + len(self.word_counts))
return 'spam' if spam_prob > ham_prob else 'ham'
# 示例用法
emails = [
['technology', 'spam'],
['technology', 'ham'],
['spam'],
['ham'],
['technology', 'ham'],
['spam', 'spam']
]
labels = ['ham', 'spam', 'spam', 'ham', 'ham', 'spam']
classifier = NaiveBayesClassifier()
classifier.train(emails, labels)
test_email = ['technology']
prediction = classifier.predict(test_email)
print('预测结果:', prediction)
在这个示例代码中,我们使用朴素贝叶斯分类器进行训练和预测。训练过程中,我们统计每个类别的数量、每个单词在各个类别中的数量以及每个类别的总单词数量。预测过程中,我们计算给定邮件的垃圾邮件概率和正常邮件概率,并返回概率更高的类别作为预测结果。
请注意,这个示例代码还比较简化,只考虑了单个单词的影响,实际应用中可能需要更复杂的特征处理和模型改进。
原文地址: https://www.cveoy.top/t/topic/bOMY 著作权归作者所有。请勿转载和采集!