朴素贝叶斯分类算法的原理与计算过程
题目描述
假设我们有一个垃圾邮件分类任务,数据集包含邮件的文本内容及其标签(垃圾邮件/非垃圾邮件)。请使用朴素贝叶斯算法构建分类器,并逐步说明如何计算一封新邮件属于垃圾邮件的概率。要求详细解释条件独立假设、先验概率与后验概率的计算方法。
解题过程
1. 算法核心思想
朴素贝叶斯基于贝叶斯定理:
\[P(Y|X) = \frac{P(X|Y)P(Y)}{P(X)} \]
其中:
- \(Y\) 是类别(如垃圾邮件/非垃圾邮件)
- \(X\) 是特征向量(如邮件中的单词组合)
- 朴素假设:所有特征在给定类别下条件独立,即 \(P(X|Y) = \prod_{i=1}^n P(x_i|Y)\)。
2. 数据预处理与特征提取
- 对训练集中的所有邮件进行分词,构建词汇表 \(V\)(例如包含 10,000 个单词)。
- 将每封邮件表示为词袋模型(Bag-of-Words),即一个长度为 \(|V|\) 的向量,每个位置表示对应单词是否出现(或出现次数)。
3. 计算先验概率 \(P(Y)\)
假设训练集中有 100 封邮件,其中 60 封是垃圾邮件(\(Y=1\)),40 封是非垃圾邮件(\(Y=0\)):
\[P(Y=1) = \frac{60}{100} = 0.6, \quad P(Y=0) = 0.4 \]
4. 计算条件概率 \(P(x_i|Y)\)
以单词“优惠”为例:
- 在垃圾邮件中,“优惠”出现在 30 封邮件中,垃圾邮件总词频数为 5,000(所有垃圾邮件的单词总数)。
- 使用拉普拉斯平滑(避免概率为 0),设置平滑参数 \(\alpha=1\):
\[P(\text{“优惠”}|Y=1) = \frac{30 + 1}{5000 + |V|} = \frac{31}{5000 + 10000} = \frac{31}{15000} \approx 0.00207 \]
同理计算非垃圾邮件下的条件概率。
5. 对新邮件进行分类
假设新邮件内容为:“点击获取优惠”,分词后得到特征向量 \(X = \{\text{点击}, \text{获取}, \text{优惠}\}\)。
- 计算后验概率(忽略分母 \(P(X)\) ,仅比较分子):
\[\begin{aligned} P(Y=1|X) &\propto P(Y=1) \cdot P(\text{点击}|Y=1) \cdot P(\text{获取}|Y=1) \cdot P(\text{优惠}|Y=1) \\ P(Y=0|X) &\propto P(Y=0) \cdot P(\text{点击}|Y=0) \cdot P(\text{获取}|Y=0) \cdot P(\text{优惠}|Y=0) \end{aligned} \]
- 代入条件概率值(需提前基于训练集计算所有单词的条件概率)。
- 比较两个概率值,将邮件分到概率更大的类别。
6. 处理数值下溢问题
由于多个概率相乘可能导致结果过小,实际计算时对等式取对数:
\[\log P(Y|X) \propto \log P(Y) + \sum_{i=1}^n \log P(x_i|Y) \]
将乘法转为加法,避免浮点数下溢。
关键点总结
- 条件独立假设简化了计算,但可能忽略单词间的关联。
- 拉普拉斯平滑处理未出现单词的问题。
- 对数变换提升数值稳定性。