背景
贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础。朴素贝叶斯分类Naive Bayes是贝叶斯分类中最简单,也是常见的一种分类方法,它基于贝叶斯定理和特征条件独立性的假设,通过计算给定特征条件下类别的后验概率来进行分类。
核心算法如下,公式可以通过条件概率推得:
P(B∣A)=P(A)P(A∣B)P(B)
其中,B为类别,A为特征。我们的任务是计算在A特征的条件下,类别B出现的概率P(B∣A)。朴素贝叶斯的核心假设是特征条件独立性,即假设给定类别时,每个特征与其他特征是条件独立的。尽管这个假设在现实中往往不成立,但朴素贝叶斯在许多实际问题中表现良好,尤其是在高维数据和大规模数据集上。
朴素贝叶斯
接下来以一个简单情景为例子,对算法进行分析解释。
假设我们有一个简单的二分类问题,数据集包含12个样本,每个样本有4个特征,标记为X1、X2、X3、X4,以及相应的类别标签Y。我们的目标是通过朴素贝叶斯算法来预测新样本的类别。
X1 | X2 | X3 | X4 | Y |
---|
1 | 0 | 0 | 0 | No |
0 | 1 | 0 | 1 | No |
1 | 1 | 0 | 1 | Yes |
0 | 1 | 2 | 1 | Yes |
1 | 0 | 0 | 1 | No |
1 | 0 | 0 | 1 | No |
1 | 1 | 2 | 0 | Yes |
0 | 1 | 1 | 1 | Yes |
1 | 1 | 1 | 1 | Yes |
0 | 0 | 2 | 1 | Yes |
1 | 1 | 0 | 0 | No |
1 | 1 | 0 | 0 | No |
我们的计算步骤如下:
-
数据准备:
- 特征:X1、X2、X3、X4
- 类别:Yes和No
-
计算先验概率:
- P(Yes)=1/2
- P(No)=1/2
-
计算类别条件概率:对于每个特征和每个类别,计算特征值的条件概率,种类太多,我们以其中几个情况为例:
- P(X1=0∣Yes)=3/6=1/2
- P(X2=0∣Yes)=1/6
- P(X3=0∣Yes)=1/6
- P(X4=0∣Yes)=1/6
-
应用贝叶斯定理: 对于一个新样本,如X1=0、X2=0、X3=0、X4=0,我们可以计算每个类别的后验概率。
P(Yes∣X1=0,X2=0,X3=0,X4=0)=P(X1=0,X2=0,X3=0,X4=0)P(X1=0,X2=0,X3=0,X4=0∣Yes)⋅P(Yes)=31×31×127×3121×61×61×61×21=0.0536
P(No∣X1=0,X2=0,X3=0,X4=0)=P(X1=0,X2=0,X3=0,X4=0)P(X1=0,X2=0,X3=0,X4=0∣No)⋅P(No)=31×31×127×3161×21×1×21×21=0.9643
事实上,由于分母是相同的,在求argmax时我们并不用计算分母也能得到分类结果。在这种情况下,我们更加倾向于选择No。
连续特征
特征值未必是离散的,因此我们还需要考虑特征值为连续值的情况,此时我们通常假设其服从正态分布:
f(x,μ,σ)=2πσ21⋅exp(−2σ2(x−μ)2)
那么条件概率可以表示为:
P(X=x∣Y=y)=f(X=x,μy,σy)
这样就可以继续计算类别后验概率。
Laplace平滑
在朴素贝叶斯中,当某个特征在训练样本中没有出现过,会导致条件概率为零,进而使整个后验概率为零,从而无法对新样本进行分类。为了避免这种情况,引入了拉普拉斯平滑。
通过在计算条件概率时给所有特征的计数加上一个平滑参数(通常是1),每个特征的计数至少为1。这样可以确保即使某个特征在训练样本中没有出现过,其条件概率仍然不为零。
平滑后,条件概率计算公式如下:
PL(Y∣X)=count(Y)+numClassescount(X∣Y)+1
其中,numClasses
为特征种类数,只有添加了numClasses
,平滑处理后概率之和才能保持为1。
同样的,分类结果也需要进行拉普拉斯平滑:
PL(Y)=totalCount+numClassescount(Y)+1
其中,totalCount
为样本总数,numClasses
为分类结果的种类数。
对数操作
当计算多个概率相乘时,特别是在大规模数据集或多个特征的情况下,概率值通常非常小,会非常接近于零。计算机浮点数表示精度是有限的,连续相乘多个小概率的结果可能会导致数值下溢、丢失精度。
因此,通过取对数转换,将概率相乘转换为对数相加,可以在不改变概率之间相对关系的同时有效避免数值下溢的问题。
如果m个特征值都为离散值,共有k个种类,则分类结果y(x)计算如下:
y(x)=1≤i≤kargmaxlogPL(Yi)+j=1∑mlogPL(xj∣Yi)
如果为连续函数,那么计算如下:
y(x)=1≤i≤kargmaxlogPL(Yi)+PL(Yi)+j=1∑mlogf(X=xj,μYi,σYi)=1≤i≤kargmaxlogPL(Yi)+PL(Yi)+j=1∑m−21log2π−logσYi−2σYi2(xj−μYi)2
21log2π是常数,在做argmax操作时可以直接略去,因此分类结果可以表示为:
y(x)=1≤i≤kargmaxlogPL(Yi)+PL(Yi)+j=1∑m−logσYi−2σYi2(xj−μYi)2