计算每个词在垃圾邮件和正常频率的概率代码
时间: 2024-03-17 22:47:29 浏览: 14
好的,以下是一个简单的代码例子,假设我们已经有了垃圾邮件和正常邮件的数据集:
```
# 垃圾邮件和正常邮件的词频统计
spam_word_counts = {}
ham_word_counts = {}
# 统计垃圾邮件中每个词的出现次数
for email in spam_emails:
for word in email.split():
if word not in spam_word_counts:
spam_word_counts[word] = 1
else:
spam_word_counts[word] += 1
# 统计正常邮件中每个词的出现次数
for email in ham_emails:
for word in email.split():
if word not in ham_word_counts:
ham_word_counts[word] = 1
else:
ham_word_counts[word] += 1
# 计算每个词在垃圾邮件和正常频率的概率
word_probabilities = {}
for word in set(list(spam_word_counts.keys()) + list(ham_word_counts.keys())):
spam_frequency = spam_word_counts.get(word, 0) / len(spam_emails)
ham_frequency = ham_word_counts.get(word, 0) / len(ham_emails)
word_probabilities[word] = {
'spam_probability': spam_frequency / (spam_frequency + ham_frequency),
'ham_probability': ham_frequency / (spam_frequency + ham_frequency)
}
```
这段代码中,我们首先定义了两个空字典`spam_word_counts`和`ham_word_counts`,用于统计垃圾邮件和正常邮件中每个词的出现次数。然后,我们分别遍历垃圾邮件和正常邮件的数据集,对于每个邮件中出现的每个词,我们在相应的字典中增加对应的计数。
接着,我们定义了一个新的字典`word_probabilities`,用于存储每个词在垃圾邮件和正常邮件中出现的概率。我们遍历了所有出现过的词,计算它在垃圾邮件和正常邮件中的频率,并将它们归一化后得到对应的概率。
最终,我们得到了一个字典`word_probabilities`,它的每个键值对表示一个词在垃圾邮件和正常邮件中出现的概率。我们可以通过查询这个字典来判断一个邮件是垃圾邮件还是正常邮件。