首先将朴素贝叶斯引入到分类问题中。
思想:
通过某对象的先验概率,利用贝叶斯公式,计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类。
推导:
1、设为一个待分类项xj={a1,a2,...,am},每个a为xj的一个属性值;
2、设类别集合c={y1,y2,...,yn};
3、计算带分类样本xj属于各个类别的后验概率,P(y1|xj),P(y2|xj),...,P(yn|xj);
4、找出第三步骤中求得的最大后验概率值,其所对应的类yk即为该样本点所属类别。
求解:
因而,P(yk|xj)得: 对于推导过程中,第三步的求解过程,利用到贝叶斯公式(右图):
上式中,P(xj|yk)为:
现在假设各个属性间独立,从而得到:
将式3带入式1,从而得到:
同时,因为分母P(xj)的值对于所有类别yk都是一样,因此在计算的时候可以省略。对于每个P(ai|yk)值,都可以通过训练数据得来,其含义为:属性ai出现在类yk中的概率。P(yk)即为类yk在训练样本中出现的概率。
Q&A:
1. 贝叶斯核心部分,是假设属性间相互独立,从而大大简化了其计算过程,简化的同时,也造成了算法本身的缺陷,现实生活中,往往很多事物不是相互独立的。
2. 贝叶斯有个好处,计算简单,是一种比较快速的分类方法。
代码实现:
1. 实现的时候,考虑到数据稀疏的特点,往往在假定在训练样本中,所有属性至少出现一次。
2. 求得的P(xj|yk)往往比较小,因此往往加入对数后再进行比较logP(xj|yk)。
python实现见github:https://github.com/xwzhong/classical-machine-learning-algorithm/tree/master/bayesian
例子:
研究一个问题挂科与喝酒、逛街和学习之间的关系,根据表中的数据计算出,不喝酒、不逛街和学习了,判断是否挂科?(0代表不挂科,1代表挂科,其他类推)
y = f(x)
不喝酒、不逛街和学习了 是y = f(x1=0,x2=0,x3=1) 是否挂科呢???