朴素贝叶斯是生成式模型,它试图对联合概率进行建模,预测时使用条件概率公式:
求出给定样本时指定类别的概率.
假设所有变量都属于二项分布,对于联合概率,其中有很多特征,所以联合概率相当于:,我们使用列表的方式把所有的概率都列出来:
概率 |
---|
... |
总共需要多少个概率呢?个概率,这些概率叫做被称作参数.
有没有可能使用更少的参数,来描述这个概率分布?因为总概率是1,所以只要确定个概率,那么最后一个概率也被确定下来了,描述一个分布最少的参数被称为独立参数.
显然,通过遍历概率分布中所有可能的情况是不可取的,因为遍历的个数与特征数乘指数形式.
朴素贝叶斯算法对条件概率分布作出了独立性的假设,也就是说特征之间是独立的,这也是"朴素"的含义,即:
结合条件概率公式:
可得转化联合分布模型为:
由上式可知,朴素贝叶斯若使由贝叶斯网画出来是:
这就是朴素贝叶斯的模型,那么它需要多少个独立参数呢?
,,都是为二项分布,共个二项分布,而每个二项分布需要一个独立参数.所以朴素贝叶斯的模型需要个独立参数.
相比遍历整个概率空间,朴素贝叶斯的模型与特征数呈线性关系,显然计算量小得多.
在预测的时候,根据贝叶斯公式将其转换成为后验概率:
举个例子,假设有三个类别A,B,C.给定一个新的样本x,我们要预测样本x属于哪个类别的.可以根据上述公式分别计算三个类别的后验概率:
那么x应该属于哪个类别呢?答案是x肯定属于A类,因为A类的后验概率最大.
通过这个例子可以发现都是相同的,所以省略分母中的,并不影响找最大值,所以朴素贝叶斯最优化分类器可以写为:
上式用到了连乘操作,这有可能造成数值下溢,即计算结果小于浮点数可以表示的最小数字.为了防止数值下溢,对取对数,将连成转化为连加:
在最优化分类器中,未知参数有和,这两个参数可以通过数据统计出来.
其中只需计算样本中的比例即可:
不过这样计算有一个小小的问题,如果有一个类别样本中没有,那么根据这个公式算出来概率为0,但是样本中没有并不代表一定不会出现.所以这里增加拉普拉斯平滑:
其中为拉普拉斯平滑值.
如果属性是离散的,的值也可以通过统计样本中的比例来计算,同样增加拉普拉斯平滑:
如果属性是连续的,我们可以根据高斯分布来估计:
编程实现:
https://www.kaggle.com/swimmingwhale/naive-bayes
参考: