朴素贝叶斯(Naive Bayes)

当我们将贝叶斯公式应用到实际问题中时,我们发现存在问题。接下来,我们结合下面的数据来看看存在哪些问题。数据如下:

样本数职业体型是否喜欢
1程序员超重不喜欢
2产品匀称喜欢
3程序员匀称喜欢
4程序员超重喜欢
5美工匀称不喜欢
6美工超重不喜欢
7产品匀称喜欢

1. 特征条件独立性假设

假设:我们要计算 P(喜欢|程序员,超重)

编号职业体型喜欢的概率?
1程序员超重

基于贝叶斯公式的计算过程如下:

其中:P(职业=产品,体型=超重|喜欢) = P(体型=超重|喜欢) * P(职业=产品|喜欢,体型=超重)

我们的数据集中,只有 2 个特征,在实际应用场景中,可能会存在几百、几千个特征,此时联合概率的计算就会变得非常复杂。如何简化这个计算过程?办法就是给贝叶斯公式增加了一个假设:

特征条件独立性假设

即:职业体型这两个特征之间是不存在关系的,相互独立的。经过这个假设之后,贝叶斯就叫做朴素贝叶斯。其计算过程变化如下:

P(职业=产品,体型=超重|喜欢) = P(体型=超重|喜欢) * P(职业=产品|喜欢)

至此,我们应该明白了,增加了 “朴素” 假设的贝叶斯能够更好的适应实际的应用场景。总结该假设带来的影响主要有以下两点:

  1. 计算:假设特征条件独立性可以将联合概率分布拆分为各个特征的条件概率,这样可以大大简化计算;
  2. 偏差:由于特征条件独立性假设,如果数据中存在显著的特征相关性,朴素贝叶斯可能会引入一定的偏差。然而,在实践中,它通常表现得相当鲁棒,特别是在大量数据可用的情况下。

2. 拉普拉斯平滑系数

在实际应用朴素贝叶斯时,过程如下:

  1. 统计训练集中,每个分类下的各个特征的条件概率;
  2. 新样本需要预测类别时,我们只需要查表并套用朴素贝叶斯公式即可

针对上面的数据集,我们需要统计如下概率值:

P(喜欢)
P(不喜欢)

P(职业=产品|喜欢)
P(职业=美工|喜欢)
P(职业=程序员|喜欢)
P(体型=超重|喜欢)
P(体型=匀称|喜欢)

P(职业=产品|不喜欢)
P(职业=美工|不喜欢)
P(职业=程序员|不喜欢)
P(体型=超重|不喜欢)
P(体型=匀称|不喜欢)

此时,如果要计算某个样本到底属于喜欢、不喜欢,只需要查表计算相应的概率值即可:

编号职业体型喜欢 or 不喜欢?
1程序员超重

接下来,我们看下问题:在前面根据数据集进行相关条件概率统计时,我们发现由于采样的样本数量的原因,P(职业=美工|喜欢) 在数据集中是无法统计得到的,这也就意味着该值为 0,如果进行如下计算:

编号职业体型喜欢 or 不喜欢?
1美工超重

上面的概率计算是为 0 的,即:概率为0的问题,这个显然是不合适的。怎么解决这个问题?这就使用到了拉普拉斯平滑系数。公式如下:

拉普拉斯平滑的目标是为每个类别下的每个特征引入一个小的概率值,以确保每个特征在每个类别下都有非零的概率。

例如:

  1. P(职业=程序员|喜欢) = 2/4,经过拉普拉斯平滑之后为:(2 + 1) / (4 + 3) = 3/7,其中 3 为该特征的数量;
  2. P(职业=美工|喜欢) = 0/4,经过拉普拉斯平滑之后为:(0+1)/(4+3) =1/7

此时,我们发现通过拉普拉斯平滑给数据集中不存在的条件概率引入了一个较小的非零概率。

如何理解拉普拉斯平滑的有效性?

  1. 未平滑的概率估计会导致在训练数据中没有出现的特征对分类结果产生过大的影响,因为它们的概率为零。平滑后,即使某个特征在训练数据中很少出现,它仍然会对分类产生一定的影响,但影响不会过于夸大,从而提高了模型的泛化能力。
  2. 拉普拉斯平滑确保了不同特征的相对大小关系在一定程度上得以保留。未平滑的概率估计可能会导致某些特征的概率远远高于其他特征,而平滑后,概率差距会减小,使得分类器更能够准确地考虑各个特征的贡献。

最后,我们总结下为什么要使用拉普拉斯平滑系数?

在朴素贝叶斯中,每个特征的条件概率是通过统计训练数据中的频率来估计的。如果在训练数据中某个特征在某个类别下从未出现,那么这个特征的条件概率将会变成零。这种情况下,如果在测试数据中遇到了这个特征,就无法进行有效的分类,因为概率为零。

未经允许不得转载:一亩三分地 » 朴素贝叶斯(Naive Bayes)
评论 (0)

9 + 5 =