机器学习之贝叶斯算法

在了解朴素贝叶斯算法之前,我们需要先了解条件概率及贝叶斯定理,还有贝叶斯本人,就是下面的大牛,作为业务数学家,他的成就不亚于大多数的数学家

条件概率与贝叶斯定理

先验概率:事件B发生之前,我们对事件A的发生有一个基本的概率判断,称为A的先验概率,用P(A)表示

条件概率:又称后验概率,事件A在另外一个事件B已经发生条件下的发生概率。条件概率表示为P(A|B),表示在B条件下A发生的概率,称为A的后验概率

所以贝叶斯定理最简单的公式就是:P(A|B)= P(B|A) P(A)/P(B)

已知某种疾病的发病率是0.001,即1000人中会有1个人得病。现有一种试剂可以检验患者是否得病,它的准确率是0.99,即在患者确实得病的情况下,它有99%的可能呈现阳性。它的误报率是5%,即在患者没有得病的情况下,它有5%的可能呈现阳性。现有一个病人的检验结果为阳性,请问他确实得病的可能性有多大?

假定A事件表示得病,那么P(A)为0.001。这就是"先验概率",即没有做试验之前,我们预计的发病率。再假定B事件表示阳性,那么要计算的就是P(A|B)。这就是"后验概率",即做了试验以后,对发病率的估计。

使用全概率公式,则可以表示:

结果可得:

P(A|B)约等于0.019。也就是说,即使检验呈现阳性,病人得病的概率,也只是从0.1%增加到了2%左右。这就是所谓的"假阳性",即阳性结果完全不足以说明病人得病。

为什么会这样?为什么这种检验的准确率高达99%,但是可信度却不到2%?这与我们日常感觉相悖,其实是与它的误报率太高有关。

朴素贝叶斯

朴素贝叶斯(Naive Bayesian)是基于贝叶斯定理和特征条件独立假设的分类方法,它通过特征计算分类的概率,选取概率大的情况进行分类,因此它是基于概率论的一种机器学习分类方法。因为分类的目标是确定的,所以属于监督学习

在数据服从条件独立假设的基础上,使用贝叶斯定理构建的算法,在文本领域有广泛的应用

贝叶斯定理:

给定一个类别 y 和一个从 X1 到 Xn 的相关的特征向量, 贝叶斯定理阐述了以下关系:

使用简单(naive)的假设-每对特征之间都相互独立:

这个关系式可以简化为

由于在给定的输入中

是一个常量,我们使用下面的分类规则:

我们可以使用最大后验概率来估计 P(y)和 P(Xi|y)前者是训练集中类别 的相对频率

各种各样的的朴素贝叶斯分类器的差异大部分来自于处理P(Xi|y) 分布时的所做的假设不同。

另一方面,尽管朴素贝叶斯被认为是一种相当不错的分类器,但却不是好的估计器,所以不能太过于重视输出的概率。

优缺点及注意事项:

朴素贝叶斯算法实现简单,学习和预测的效率较高

对缺失数据不敏感,在小规模数据集上有较好的效果。

能够避免误差点和离群点对结果的影响,因为对每个检测样本的归类,都是根据全部训练集的信息得到的。

可以处理多类别的分类问题

对于类别类的输入特征变量,效果非常好。对于数值型变量特征,我们是默认它符合正态分布的,否则要变换成正态分布的数据。

使用先验数据去做预测分类,会存在一定的误差

注意事项:

如果测试数据特征出现频率为0的数据,就用平滑技术"拉普拉斯变换"来进行预测

删除相关联的特征,可能造成过拟合

贝叶斯模型常用的场景:文本分类/垃圾过滤/情感分析/推荐系统

三种常见的模型

1,高斯模型

当特征是连续变量的时候,运用多项式模型就会导致很多P(xi|yk)=0(不做平滑的情况下),此时即使做平滑,所得到的条件概率也难以描述真实情况。所以处理连续的特征变量,应该采用高斯模型。

2,多项式模型

当特征是离散的时候,使用多项式模型,分布参数由每类y的

向量决定,式中n是特征的数量(对于文本分类,是词汇量的大小)是样本中属于类 y 中特征i概率P(Xi|y)

参数 θy 使用平滑过的最大似然估计法来估计,即相对频率计数:

式中

是 训练集 T 中 特征 i 在类 y 中出现的次数,

是类 y 中出现所有特征的计数总和。

先验平滑因子 α >= 0 应用于在学习样本中没有出现的特征,以防在将来的计算中出现0概率输出。 把 α=1 被称为拉普拉斯平滑,而 α<1 被称为利德斯通。

如果不做平滑,当某一维特征的值xi没在训练样本中出现过时,会导致P(xi|yk)=0,从而导致后验概率为0。加上平滑就可以克服这个问题。

3,伯努利模型

与多项式模型一样,伯努利模型适用于离散特征的情况,所不同的是,伯努利模型中每个特征的取值只能是1和0(以文本分类为例,某个单词在文档中出现过,则其特征值为1,否则为0)

努利朴素贝叶斯的决策规则基于

与多项分布朴素贝叶斯的规则不同,伯努利朴素贝叶斯明确地惩罚类 y 中没有出现作为预测因子的特征 i ,而多项分布分布朴素贝叶斯只是简单地忽略没出现的特征。

在文本分类的例子中,词频向量(word occurrence vectors)(而非词数向量(word count vectors))可能用于训练和用于这个分类器。 BernoulliNB 可能在一些数据集上可能表现得更好,特别是那些更短的文档。如果时间允许,建议对两个模型都进行评估。