引言
贝叶斯算法是一类以贝叶斯定理为核心的概率建模方法,其本质是利用先验知识和观测数据来动态更新对事件发生概率的估计。与传统方法不同,它不仅仅是一个单一的公式,更是一种将“经验”融入模型的学习框架:我们从一个初始的信念(先验概率)开始,当获得新的证据(数据)后,便使用贝叶斯定理将这个初始信念更新为更接近现实的信念(后验概率)。
这种“在实践中持续学习、不断进化”的思想,使得贝叶斯算法在处理不确定性问题上表现出色。目前,这一算法家族已被广泛应用于现实世界的各个角落,从我们熟悉的垃圾邮件过滤、新闻与社交媒体上的情感分析,到医疗诊断中的疾病预测、推荐系统的商品推荐,甚至在金融风控领域都能见到其身影,成为了机器学习中不可或缺的强大工具。
1. 算法理论基础
1.1. 贝叶斯定理
1.1.1. 示例引入
让我们从一个生活中的例子开始。假设你是一位医生,正在诊断一位病人是否患有一种罕见的疾病(假设人群中患病率为1%)。你有一项检测手段,如果病人确实患病,检测呈阳性的概率为99%(这被称为灵敏度);如果病人没有患病,检测呈阴性的概率为95%(这意味着有5%的误报率)。现在,最关键的问题是:如果一位病人的检测结果呈阳性,他真正患病的概率是多少?
很多人会直觉地认为概率很高,比如90%以上。但贝叶斯定理会告诉我们一个反直觉的答案。这个思维过程就是贝叶斯推理的核心:
- 先验概率:在得到任何检测结果之前,你对该病人患病率的初始估计,即1%(0.01)。这是基于历史数据的“既有认知”。
- 证据:新的数据出现了——检测结果呈阳性。
- 后验概率:在得到“检测呈阳性”这个新证据后,你需要更新你对患病率的估计。这个更新后的概率,就是贝叶斯定理要计算的目标。
贝叶斯算法的精髓就在于,它提供了一个严谨的数学框架,将先验认知 和新证据 结合起来,得到更接近真相的更新后认知。
1.1.2. 理论公式
1.1.2.1. 条件概率
理解贝叶斯定理的起点是条件概率。它表示在事件B已经发生的条件下,事件A发生的概率。其公式为:
P(A∣B)=P(B)P(A∩B)(1)
其中:
- P(A∣B):是条件概率,表示在B发生的条件下A发生的概率。
- P(A∩B):是联合概率,表示事件A和事件B同时发生的概率。
- P(B):是边缘概率,表示事件B发生的总概率。
1.1.2.2. 贝叶斯定理公式
通过条件概率的定义,我们可以推导出贝叶斯定理的标准形式:
P(A∣B)=P(B)P(B∣A)⋅P(A)(2)
其中:
- P(A∣B):后验概率。这是我们最终想求的,即在观察到证据B之后,对假设A成立概率的更新信念。在上述例子中,就是“在检测呈阳性的条件下,真正患病的概率”。
- P(A):先验概率。这是在观察到任何证据B之前,我们对假设A成立概率的初始信念。在例子中,就是疾病的总体患病率(1%)。
- P(B∣A):似然度。这是在假设A成立(即事件为真)的条件下,观察到证据B的概率。在例子中,就是“如果确实患病,检测呈阳性的概率”(99%)。它衡量了证据对假设的支持程度。
- P(B):证据概率或标准化常量。这是在任何假设下,观察到证据B的总概率。它确保后验概率是一个有效的概率值(在0到1之间),通常通过全概率公式计算。
1.1.2.3. 全概率公式与证据P(B)的计算
在实际应用中,证据 P(B) 通常不是直接给出的,而是需要通过全概率公式来计算。全概率公式将复杂事件B的概率分解为在不同场景下的条件概率之和:
P(B)=P(B∣A)⋅P(A)+P(B∣¬A)⋅P(¬A)
其中:
- ¬A表示事件A的相反事件(即“A不发生”)。
- P(¬A)是A不发生的概率,
P(¬A) = 1 - P(A)。
- P(B∣¬A)是在A不发生的条件下,B发生的概率。
因此,贝叶斯定理的完整、最常用的形式是:
P(A∣B)=P(B∣A)⋅P(A)+P(B∣¬A)⋅P(¬A)P(B∣A)⋅P(A)
1.1.3. 示例计算
现在,让我们用上述完整的公式来解决1.1.1.中的问题。
-
定义事件:
-
已知概率
- 先验概率P(A)=0.01(患病率)
- P(¬A)=1−0.01=0.99(未患病类率99%)
- 似然度P(B∣A)=0.99(真阳性率,灵敏率)
- P(B∣¬A)=0.05(假阳性率,1-真阴性率)
-
计算证据P(B)
P(B)=P(B∣A)⋅P(A)+P(B∣¬A)⋅P(¬A)=(0.99×0.01)+(0.05×0.99)=0.0099+0.0495=0.0594
P(A∣B)=(0.99∗0.01)/0.0594=0.1667
结论:即使检测结果呈阳性,这位病人真正患病的概率也只有大约16.67% 。这个结果远低于大多数人的直觉判断,因为它同时考虑了疾病的低患病率(先验概率)和检测手段的误报率。
1.2. “朴素”贝叶斯
通过上述医疗诊断的例子,我们见证了贝叶斯定理在融合先验知识与新证据方面的强大力量。然而,这个例子只涉及一个证据(单项检测结果)。在真实的机器学习任务中,例如垃圾邮件识别或新闻分类,我们面对的是成百上千个特征(即“证据”):邮件中的每一个词、文档中的每一个短语都可以被视为一个特征。
如果我们想直接将贝叶斯定理应用于这样的多特征分类问题,假设我们要判断一封邮件是否为垃圾邮件(类别C),它包含单词“优惠”(特征F1)、“发票”(特征F2)......“点击”(特征Fn)。那么我们需要计算的后验概率是:
P(C∣F1,F2,...,Fn)=P(F1,F2,...,Fn)P(F1,F2,...Fn∣C)⋅P(C)
这里,我们立刻遇到了一个棘手的问题:联合条件概率P(F1,F2,...Fn∣C)。它表示在已知邮件类别的情况下,所有特征同时以特定组合出现的概率。要准确地估计这个概率,我们需要近乎无限的数据来覆盖所有可能的特征组合,这在现实中是根本不可能的。
朴素贝叶斯分类器给出了一个巧妙且实用的解决方案:它做出了一个强有力的 “条件独立性”假设。这个假设认为,在给定邮件类别(例如,“是垃圾邮件”或“不是垃圾邮件”)的条件下,每个特征(单词)的出现与否是相互独立的。这意味着,“优惠”这个词的出现概率不会影响“发票”的出现概率,只要我们已经知道了这封邮件的类别。
这个假设在现实中显然很少完全成立(单词之间往往有关联),但正是这种“天真”的简化,使得计算变得可行。在这个假设下,复杂的联合概率被分解为单个概率的乘积:
P(F1,F2,...Fn∣C)≈P(F1∣C)⋅P(F2∣C)⋅...⋅P(Fn∣C)
于是,贝叶斯公式从难以计算的复杂问题,转化为了一个可以高效求解的简单问题。正是因为这个假设在现实世界中显得有些“天真”或“朴素”,这个算法才得名“朴素贝叶斯”。尽管“朴素”,但它在许多真实场景中,尤其是文本分类上,表现出了惊人且强大的效果。
2. 朴素贝叶斯分类器
理解了"朴素"假设的必要性后,让我们深入探讨朴素贝叶斯分类器的数学原理。这一节将从三个关键部分展开:公式的推导、决策规则的确立,以及最终分类函数的形成。
2.1. 基于特征条件独立假设的贝叶斯公式展开
现在,我们正式进入朴素贝叶斯的核心数学推导。考虑一个多分类问题,设有 K 个可能的类别 C1,C2,...,CK,每个样本有 n 个特征 F1,F2,...,Fn。
对于一个给定的样本 x=(f1,f2,...,fn),我们希望找到它属于哪个类别,即求最大的后验概率 P(Ck∣x)。
根据贝叶斯定理,我们有:
P(Ck∣x)=P(x)P(x∣Ck)⋅P(Ck)=P(x)P(f1,f2,...,fn∣Ck)⋅P(Ck)
这里的关键难点在于计算联合条件概率 P(f1,f2,...,fn∣Ck)。朴素贝叶斯的"条件独立性假设"在此处发挥威力:它假设在给定类别 Ck 的条件下,所有特征都是相互独立的。这意味着:
P(f1,f2,...,fn∣Ck)=P(f1∣Ck)⋅P(f2∣Ck)⋅...⋅P(fn∣Ck)=i=1∏nP(fi∣Ck)
将这个简化代入原公式,我们得到朴素贝叶斯的核心表达式:
P(Ck∣x)=P(x)P(Ck)⋅∏i=1nP(fi∣Ck)(3)
其中:
- P(Ck) 是类别 Ck 的先验概率,可以通过训练集中该类样本的比例来估计
- P(fi∣Ck) 是条件概率,表示在类别 Ck 下特征 Fi 取值为 fi 的概率
- P(x) 是证据因子,对于同一个样本,它是一个常数
2.2. 最大后验概率决策规则
在分类任务中,我们需要为样本 x 分配一个最可能的类别。朴素贝叶斯采用最大后验概率决策规则:将样本分配给后验概率最大的那个类别。
用数学表达式表示为:
y^=k∈{1,2,...,K}argmaxP(Ck∣x)
根据公式(3),可以将后验概率展开:
y^=k∈{1,2,...,K}argmaxP(x)P(Ck)⋅∏i=1nP(fi∣Ck)
由于分母 P(x) 对于所有类别都是相同的常数,它不会影响最大值的位置,因此可以简化决策规则为:
y^=k∈{1,2,...,K}argmaxP(Ck)⋅i=1∏nP(fi∣Ck)
这个简化大大降低了计算复杂度,我们只需要比较分子部分的大小即可做出分类决策。
2.3. 分类决策函数的数学表达
为了数值计算的稳定性(避免多个小数连乘导致的下溢问题),通常会对上述公式取对数,将连乘转换为连加:
y^=k∈{1,2,...,K}argmax[logP(Ck)+i=1∑nlogP(fi∣Ck)]
这就是朴素贝叶斯分类器的最终决策函数。
在实际应用中:
- 训练阶段:从训练数据中估计所有参数:
- 先验概率:P(Ck)=总样本数类别Ck的样本数
- 条件概率:根据特征类型选择不同的概率分布(如高斯分布、多项式分布等)
- 预测阶段:对于新样本 x,计算每个类别的对数概率得分:
score(Ck)=logP(Ck)+i=1∑nlogP(fi∣Ck)
然后选择得分最高的类别作为预测结果。
3. 四种常见的朴素贝叶斯变种
朴素贝叶斯的强大之处在于其框架的灵活性,能够适应不同类型的数据特征。根据特征数据的分布特性,发展出了多种变种算法。了解这些变种的适用场景和原理,对于在实际问题中选择合适的模型至关重要。
3.1. 高斯朴素贝叶斯
适用场景与数据特征
高斯朴素贝叶斯是处理连续特征最常用的变种。它假设每个特征在给定类别下服从高斯分布(正态分布),适用于那些特征值呈现钟形分布的数据,如身高、温度、价格等连续数值型数据。
概率模型与公式推导
对于连续特征 fi,我们无法像离散特征那样直接计算概率,而是使用概率密度函数。高斯朴素贝叶斯假设:
P(fi∣Ck)=2πσk,i21exp(−2σk,i2(fi−μk,i)2)
其中:
- μk,i 是类别 Ck 下特征 Fi 的均值
- σk,i2 是类别 Ck 下特征 Fi 的方差
参数估计与计算
在训练阶段,我们需要从数据中估计每个类别下每个特征的均值和方差:
μk.i=Nk1x∈Ck∑fi(x)
σk,i2=Nk1x∈Ck∑(fi(x−μk,i))2
其中 Nk 是类别 Ck 的样本数量。
特点与注意事项
- 优点:对连续数据建模自然,计算效率高
- 缺点:对不符合正态分布的数据效果较差
- 应用场景:医疗诊断(如基于连续生理指标的疾病分类)、金融风险评估等
3.2. 多项式朴素贝叶斯
适用场景与数据特征
多项式朴素贝叶斯是文本分类任务中最经典的算法,特别适用于处理离散计数特征,如词频、文档-词矩阵等。它假设特征服从多项式分布。
概率模型与公式推导
在文本分类中,我们通常将文档表示为词频向量 x=(x1,x2,...,xn),其中 xi 表示词 i 在文档中出现的次数。条件概率的计算公式为:
P(fi∣Ck)=Nk+αnNki+α
其中:
- Nki=∑x∈Ckxi 是类别 Ck 中词 i 出现的总次数
- Nk=∑i=1nNki 是类别 Ck 中所有词出现的总次数
- α 是平滑参数(通常 α=1,称为拉普拉斯平滑)
参数估计与计算
多项式朴素贝叶斯的先验概率估计为:
P(Ck)=N+αKNk+α
其中 N 是总文档数,K 是类别数。
特点与注意事项
- 优点:特别适合文本分类,对词频信息敏感
- 缺点:受文档长度影响较大
- 应用场景:垃圾邮件检测、新闻分类、情感分析
3.3. 伯努利朴素贝叶斯
适用场景与数据特征
伯努利朴素贝叶斯适用于二值特征数据,即特征只有两种取值(通常是0和1)。与多项式朴素贝叶斯关注词频不同,它只关心词是否出现。
概率模型与公式推导
伯努利朴素贝叶斯假设每个特征服从伯努利分布,条件概率计算公式为:
P(fi∣Ck)=Nk+2αNki+α
其中:
- Nki 是类别 Ck 中包含词 i 的文档数量
- Nk 是类别 Ck 的总文档数
- α 是平滑参数
与多项式朴素贝叶斯的区别
虽然两者都常用于文本分类,但建模方式不同:
- 多项式:考虑词频,P(fi∣Ck) 基于词频计数
- 伯努利:考虑词出现与否,P(fi∣Ck) 基于文档计数
特点与注意事项
- 优点:对短文本、存在性特征效果较好
- 缺点:忽略词频信息,可能损失重要信息
- 应用场景:短文本分类、存在性特征建模
3.4. 互补朴素贝叶斯
适用场景与数据特征
互补朴素贝叶斯是专门为解决数据不平衡问题而设计的变种。当某些类别的训练样本数量远少于其他类别时,传统朴素贝叶斯可能表现不佳,互补朴素贝叶斯通过利用"非该类"的信息来改善这种情况。
概率模型与公式推导
互补朴素贝叶斯的核心思想是使用所有不属于当前类别的样本来估计条件概率:
P(fi∣Ck)=N¬k+αnN¬k,i+α
其中:
- N¬k,i 是不在类别 Ck 的样本中词 i 出现的次数
- N¬k 是不在类别 Ck 的所有样本中词出现的总次数
决策规则的调整
最终的分类决策基于:
y^=k∈{1,2,...,K}argmini=1∑nlogP(fi∣Ck)
注意这里使用了 argmin 而不是 argmax,因为我们实际上是在最小化"不属于该类"的证据。
特点与注意事项
- 优点:对不平衡数据集有较好的鲁棒性
- 缺点:理解和使用相对复杂
- 应用场景:罕见疾病诊断、欺诈检测等类别不平衡问题
4. 拉普拉斯平滑
在前述各种朴素贝叶斯变种的参数估计中,无论是计算 P(fi∣Ck) 还是 P(Ck),我们都依赖于在训练集中进行计数。然而,这种基于计数的估计方法在现实中面临一个严峻的挑战:如果某个特征值在训练集的某个类别中从未出现过,会发生什么?
4.1. 零概率问题及其产生原因
问题的产生
考虑一个文本分类的例子:我们正在判断一封邮件“提供优惠与折扣”是否为垃圾邮件。在多项式朴素贝叶斯中,我们需要计算 P("折扣"∣垃圾邮件)。假设在训练数据中,“折扣”这个词从未在垃圾邮件中出现过,那么根据最大似然估计:
Nk,i=0⇒P(“折扣”|垃圾邮件)=Nk0=0
当我们在预测时,需要计算整个句子的联合概率:
P(垃圾邮件)⋅P(“提供”|垃圾邮件)⋅P(“优惠”|垃圾邮件)⋅P(“折扣”|垃圾邮件)⋅...
由于其中一项为0,根据概率乘法规则,整个连乘结果将会是0。这意味着,仅仅因为一个未登录词(在训练集中某类别下未出现过的词),就完全否定了该样本属于这个类别的可能性,这显然是不合理的。
问题的根源
- 数据稀疏性:有限的训练数据无法覆盖所有可能的特征组合。
- 最大似然估计的缺陷:未观察到的事件不等于不可能事件。
- 模型脆弱性:模型对未知或罕见特征过于敏感,导致泛化能力下降。
4.2. 平滑技术的数学原理
为了解决零概率问题,我们引入平滑技术,其核心思想是:给所有可能的计数加上一个小的正数,从而避免任何概率估计为0。
拉普拉斯平滑(加一平滑)
这是最经典、最常用的平滑方法,可以看作是在计数上施加一个均匀先验的贝叶斯估计。
平滑前的最大似然估计:
P(fi∣Ck)=NkNk,i
应用拉普拉斯平滑后:
P(fi∣Ck)=Nk+αVNk,i+α
其中:
- α:平滑参数(α≥0)。当 α=1 时,即为经典的“拉普拉斯平滑”或“加一平滑”。
- V:特征的词汇表大小,即所有可能的离散特征值的个数。在文本分类中,V 就是词表的大小。
- Nki:类别 Ck 中特征 fi 出现的次数。
- Nk:类别 Ck 中所有特征出现的总次数。
为什么分母是 Nk+αV?
分母必须确保所有特征的条件概率之和为1,即 ∑i=1VP(fi∣Ck)=1。平滑后,我们相当于给词表中的每一个词都预先加了 α 次:
i=1∑V(Nk,i+α)=Nk+αV
因此,除以 Nk+αV 是为了满足概率分布的归一化条件。
4.3. 超参数选择与影响
平滑参数 α 作为一个超参数,其取值对模型性能有着直接且重要的影响。
不同 α 值的影响
- α=0 :无平滑。模型退回到最大似然估计,存在零概率风险。
- α=1 :标准的拉普拉斯平滑。这是一个很好的默认起点,对大多数问题都有效。
- α>1 :强平滑。模型更加“均匀”或“保守”,认为所有特征出现的可能性更接近。
- 0<α<1 :弱平滑。在避免零概率的同时,尽量保持原始计数的相对关系。
α 的直观理解
- α 控制了我们先验信念的强度。我们事先认为每个特征在每个类别下都已经出现了 α 次。
- α 越大,先验的权重越大,模型对训练数据中观测到的计数的信任度就越低,模型变得更“平滑”和“保守”。
- α 可以被解释为我们对模型不确定性的度量。数据越稀疏,我们通常倾向于使用更大的 α。
如何选择 α?
-
默认值:从 α=1 开始尝试,这通常能取得不错的效果。
-
网格搜索:将 α 作为一个超参数,在验证集上使用网格搜索(例如 α∈[0.01,0.1,0.5,1,2,5,10])来寻找最优值。
-
经验法则:
- 对于小型、稀疏的数据集,使用较大的 α(如1.0或更大)来防止过拟合。
- 对于大型、密集的数据集,可以使用较小的 α(如0.1或0.01),因为数据本身已经能提供足够的统计信息。
拉普拉斯平滑虽然原理简单,但它是保证朴素贝叶斯模型鲁棒性和实用性的关键技术。它确保了模型在面对未知或罕见特征时不会彻底崩溃,从而显著提升了模型的泛化能力。