朴素贝叶斯导论
本节介绍朴素贝叶斯算法 ------一种广泛应用于分类任务的算法,其中垃圾邮件过滤是典型应用场景。其核心思想是通过构建概率模型,根据邮件包含的词汇将其分类为"垃圾邮件"或"非垃圾邮件"。
朴素贝叶斯算法回顾与特征表示
朴素贝叶斯是一种生成模型,通过贝叶斯定理计算给定特征(邮件中的词汇)时类别(如垃圾邮件)的概率:
<math xmlns="http://www.w3.org/1998/Math/MathML"> P ( y ∣ x ) = P ( x ∣ y ) P ( y ) P ( x ) P(y|x) = \frac{P(x|y)P(y)}{P(x)} </math>P(y∣x)=P(x)P(x∣y)P(y)
- <math xmlns="http://www.w3.org/1998/Math/MathML"> P ( y ∣ x ) P(y|x) </math>P(y∣x) 为后验概率:在已知邮件词汇条件下属于垃圾邮件的概率
- <math xmlns="http://www.w3.org/1998/Math/MathML"> P ( x ∣ y ) P(x|y) </math>P(x∣y) 为似然:当邮件为垃圾邮件时出现这些词汇的概率
- <math xmlns="http://www.w3.org/1998/Math/MathML"> P ( y ) P(y) </math>P(y) 为先验概率:邮件属于垃圾邮件的总体概率
- <math xmlns="http://www.w3.org/1998/Math/MathML"> P ( x ) P(x) </math>P(x) 为边际概率:观察到这些词汇的概率
算法的"朴素"性体现在条件独立性假设 :在已知邮件类别时,每个词汇出现的概率独立于其他词汇。这使似然计算简化为:
<math xmlns="http://www.w3.org/1998/Math/MathML"> P ( x ∣ y ) = ∏ i = 1 d P ( x i ∣ y ) P(x|y) = \prod_{i=1}^{d} P(x_i|y) </math>P(x∣y)=∏i=1dP(xi∣y)
其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> x i x_i </math>xi 表示特征向量中的第 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i 个词汇。
模型参数通过最大似然估计(MLE)确定:
- <math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ j ∣ y = 1 = P ( x j = 1 ∣ y = 1 ) \phi_{j|y=1} = P(x_j=1|y=1) </math>ϕj∣y=1=P(xj=1∣y=1):垃圾邮件中出现第 <math xmlns="http://www.w3.org/1998/Math/MathML"> j j </math>j 个词汇的概率
- <math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ j ∣ y = 0 = P ( x j = 1 ∣ y = 0 ) \phi_{j|y=0} = P(x_j=1|y=0) </math>ϕj∣y=0=P(xj=1∣y=0):非垃圾邮件中出现第 <math xmlns="http://www.w3.org/1998/Math/MathML"> j j </math>j 个词汇的概率
- <math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ y = P ( y = 1 ) \phi_y = P(y=1) </math>ϕy=P(y=1):邮件属于垃圾邮件的总体概率
朴素贝叶斯的核心问题:零概率现象
当测试邮件中出现训练集某类别未出现的词汇时,MLE方法会产生严重问题。例如,若"machine"一词未在训练集的垃圾邮件中出现:
<math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ machine ∣ y = 1 = 0 \phi_{\text{machine}|y=1} = 0 </math>ϕmachine∣y=1=0
计算后验概率时,该零值会使整个概率乘积归零:
<math xmlns="http://www.w3.org/1998/Math/MathML"> P ( y = 1 ∣ x ) ∝ ( ∏ i = 1 d P ( x i ∣ y = 1 ) ) P ( y = 1 ) = 0 P(y=1|x) \propto \left( \prod_{i=1}^{d} P(x_i|y=1) \right) P(y=1) = 0 </math>P(y=1∣x)∝(∏i=1dP(xi∣y=1))P(y=1)=0
这将错误判定邮件不可能是垃圾邮件。该问题需通过平滑技术解决。
拉普拉斯平滑法
拉普拉斯平滑通过为每个词汇计数添加微小正值,确保概率永不归零。
推导过程:
对于参数 <math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ = P ( z = 1 ) \phi = P(z=1) </math>ϕ=P(z=1) 的二值随机变量(如词汇是否出现),MLE估计为:
<math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ = 出现 z = 1 的次数 总试验次数 \phi = \frac{\text{出现 } z=1 \text{ 的次数}}{\text{总试验次数}} </math>ϕ=总试验次数出现 z=1 的次数
采用拉普拉斯平滑时,为每种结果计数加1。对二值变量而言,相当于为"成功"( <math xmlns="http://www.w3.org/1998/Math/MathML"> z = 1 z=1 </math>z=1)和"失败"( <math xmlns="http://www.w3.org/1998/Math/MathML"> z = 0 z=0 </math>z=0)各加1,等同于总试验次数增加2。
词汇 <math xmlns="http://www.w3.org/1998/Math/MathML"> j j </math>j 在垃圾邮件中的平滑概率估计为:
<math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ j ∣ y = 1 = ( 含 j 的垃圾邮件数 ) + 1 ( 垃圾邮件总数 ) + 2 \phi_{j|y=1} = \frac{(\text{含 } j \text{ 的垃圾邮件数}) + 1}{(\text{垃圾邮件总数}) + 2} </math>ϕj∣y=1=(垃圾邮件总数)+2(含 j 的垃圾邮件数)+1
示例演示:
假设训练集有10封垃圾邮件,其中"buy"出现3次:
- MLE : <math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ buy ∣ y = 1 = 3 / 10 = 0.3 \phi_{\text{buy}|y=1} = 3/10 = 0.3 </math>ϕbuy∣y=1=3/10=0.3
- 平滑法 : <math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ buy ∣ y = 1 = ( 3 + 1 ) / ( 10 + 2 ) = 4 / 12 ≈ 0.33 \phi_{\text{buy}|y=1} = (3+1)/(10+2) = 4/12 \approx 0.33 </math>ϕbuy∣y=1=(3+1)/(10+2)=4/12≈0.33
若"learning"未在垃圾邮件中出现:
- MLE : <math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ learning ∣ y = 1 = 0 / 10 = 0 \phi_{\text{learning}|y=1} = 0/10 = 0 </math>ϕlearning∣y=1=0/10=0
- 平滑法 : <math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ learning ∣ y = 1 = ( 0 + 1 ) / ( 10 + 2 ) = 1 / 12 ≈ 0.083 \phi_{\text{learning}|y=1} = (0+1)/(10+2) = 1/12 \approx 0.083 </math>ϕlearning∣y=1=(0+1)/(10+2)=1/12≈0.083
此时微小非零概率可避免后验概率整体归零。
多项式随机变量的拉普拉斯平滑推广
当处理具有 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k 种可能结果的多项式随机变量时,拉普拉斯平滑推广为:为每个结果计数加1,即总试验次数增加 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k。
设 <math xmlns="http://www.w3.org/1998/Math/MathML"> z z </math>z 为具有 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k 种结果的随机变量, <math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ j = P ( z = j ) \phi_j = P(z=j) </math>ϕj=P(z=j)。其MLE估计为:
<math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ j = 结果 j 出现次数 总试验次数 \phi_j = \frac{\text{结果 } j \text{ 出现次数}}{\text{总试验次数}} </math>ϕj=总试验次数结果 j 出现次数
推广的拉普拉斯平滑估计公式为:
<math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ j = ( 结果 j 出现次数 ) + 1 ( 总试验次数 ) + k \phi_j = \frac{(\text{结果 } j \text{ 出现次数}) + 1}{(\text{总试验次数}) + k} </math>ϕj=(总试验次数)+k(结果 j 出现次数)+1
在文本分类的朴素贝叶斯应用中,若词汇表包含 <math xmlns="http://www.w3.org/1998/Math/MathML"> d d </math>d 个词汇(即单词选择有 <math xmlns="http://www.w3.org/1998/Math/MathML"> d d </math>d 种可能结果),则给定类别 <math xmlns="http://www.w3.org/1998/Math/MathML"> y y </math>y 时词汇 <math xmlns="http://www.w3.org/1998/Math/MathML"> j j </math>j 的概率公式为:
<math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ j ∣ y = ( 类别 y 中词汇 j 出现次数 ) + 1 ( 类别 y 的总词汇量 ) + d \phi_{j|y} = \frac{(\text{类别 } y \text{ 中词汇 } j \text{ 出现次数}) + 1}{(\text{类别 } y \text{ 的总词汇量}) + d} </math>ϕj∣y=(类别 y 的总词汇量)+d(类别 y 中词汇 j 出现次数)+1
以下是您指定章节的详细课程笔记,包含完整的公式推导过程:
朴素贝叶斯变体:多项式事件模型
不同于仅考虑词汇是否出现的多元伯努利事件模型 ,多项式事件模型 将词汇频率纳入考量。该模型中,特征 <math xmlns="http://www.w3.org/1998/Math/MathML"> x i x_i </math>xi 表示邮件中的第 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i 个词汇,其值为词汇表(大小为 <math xmlns="http://www.w3.org/1998/Math/MathML"> d d </math>d)中的索引序号。
模型参数定义如下:
- <math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ k ∣ y = 1 \phi_{k|y=1} </math>ϕk∣y=1 :当邮件为垃圾邮件( <math xmlns="http://www.w3.org/1998/Math/MathML"> y = 1 y=1 </math>y=1)时,词汇表第 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k 个词汇出现的概率
- <math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ k ∣ y = 0 \phi_{k|y=0} </math>ϕk∣y=0 :当邮件为非垃圾邮件( <math xmlns="http://www.w3.org/1998/Math/MathML"> y = 0 y=0 </math>y=0)时,词汇表第 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k 个词汇出现的概率
- <math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ y \phi_y </math>ϕy:邮件属于垃圾邮件的先验概率
参数的最大似然估计(MLE)推导如下:
<math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ k ∣ y = 1 = ∑ i = 1 m ∑ j = 1 n i 1 { x j ( i ) = k ∧ y ( i ) = 1 } ∑ i = 1 m 1 { y ( i ) = 1 } n i \phi_{k|y=1} = \frac{\sum_{i=1}^{m} \sum_{j=1}^{n_i} 1\{x_j^{(i)} = k \land y^{(i)} = 1\}}{\sum_{i=1}^{m} 1\{y^{(i)} = 1\}n_i} </math>ϕk∣y=1=∑i=1m1{y(i)=1}ni∑i=1m∑j=1ni1{xj(i)=k∧y(i)=1}
此公式计算所有垃圾邮件中第 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k 个词汇的出现总次数,并除以所有垃圾邮件的词汇总量。非垃圾邮件的参数 <math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ k ∣ y = 0 \phi_{k|y=0} </math>ϕk∣y=0 计算原理相同。
模型对比:多元伯努利 vs 多项式事件模型
两种模型的本质差异在于文本表示方式与信息利用维度:
特征 | 多元伯努利事件模型 | 多项式事件模型 |
---|---|---|
数据表示 | 二元向量(标记词汇是否出现) | 词汇索引序列(保留词频信息) |
信息利用 | 仅考虑词汇是否在邮件中出现 | 统计每个词汇的出现频次 |
性能表现 | 总体表现良好,但对短文本效果较弱 | 通常在文本分类任务中优于伯努利模型 |
值得注意的是,当不确定模型选择时,可通过交叉验证集用朴素贝叶斯同时测试两种模型性能------这是机器学习实践中的常用策略。
多项式事件模型的拉普拉斯平滑
与伯努利模型类似,多项式模型同样面临零概率问题。采用拉普拉斯平滑 后的 <math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ k ∣ y = 1 \phi_{k|y=1} </math>ϕk∣y=1 计算公式为:
<math xmlns="http://www.w3.org/1998/Math/MathML"> ϕ k ∣ y = 1 = ( ∑ i = 1 m ∑ j = 1 n i 1 { x j ( i ) = k ∧ y ( i ) = 1 } ) + 1 ( ∑ i = 1 m 1 { y ( i ) = 1 } n i ) + d \phi_{k|y=1} = \frac{\left( \sum_{i=1}^{m} \sum_{j=1}^{n_i} 1\{x_j^{(i)} = k \land y^{(i)} = 1\} \right) + 1}{\left( \sum_{i=1}^{m} 1\{y^{(i)} = 1\}n_i \right) + d} </math>ϕk∣y=1=(∑i=1m1{y(i)=1}ni)+d(∑i=1m∑j=1ni1{xj(i)=k∧y(i)=1})+1
该方法为每个词汇的计数增加1(分子),同时将词汇表大小 <math xmlns="http://www.w3.org/1998/Math/MathML"> d d </math>d 加入分母。即使某词汇在特定类别的训练集中从未出现,仍会获得微小非零概率。
机器学习算法实践建议
解决机器学习问题时,建议首先采用简单高效的算法 建立基准结果。朴素贝叶斯因其实现简易、计算高效的特点成为理想选择。这种方法能以最小时间成本快速验证机器学习方案在特定问题上的可行性。
朴素贝叶斯与高斯判别分析(GDA)的优势
朴素贝叶斯与高斯判别分析具有两大核心优势:
- 计算成本低:算法时间复杂度低,适合海量数据场景
- 实现简易性:模型结构简单,易于快速部署
虽然逻辑回归等复杂算法可能在某些场景表现更优,但朴素贝叶斯与GDA凭借其速度优势与简洁性,始终是机器学习实践者的重要工具。