朴素贝叶斯(Naive Bayes)
贝叶斯公式
朴素贝叶斯算法其实原理很简单,要理解朴素贝叶斯算法我们首先得知道贝叶斯公式:
其中是在A发生的情况下B发生的可能性。
公式就不在这推导了,理解起来也很简单的,画个venn图就行,我们接下来通过例子来看贝叶斯公式是如何应用在分类问题中的。
假如我们现在有如下样本:
颜色 | 水果 |
---|---|
红 | 水果A |
黄 | 水果B |
红 | 水果A |
黄 | 水果B |
黄 | 水果B |
红 | 水果B |
现在我们已知一个水果颜色为红色,那么他是水果A还是水果B呢?
根据贝叶斯公式我们有如下:
我们需要判断的就是和
谁大一些,谁的概率大我们预测谁。
由于分母都一样,我们只需计算:
那么我们判断这个红色的水果是水果A。
通俗点理解,当我们已知一个条件的时候,我们去看当这个条件发生的时候哪个类别的概率大,我们就预测为该类别。
何为朴素
我们刚刚的例子中只有一个特征条件,但当特征条件多的时候(一个简单的文本分类都会上万维),上述方法就行不通了,那该怎么办?
Be Naive!!!
但当是两个相互独立的条件的时候,我们就会有如下公式:
所以朴素贝叶斯算法的前提条件就是假设各个条件都是相互独立的,这也是朴素贝叶斯算法的朴素之处。
整个逻辑与上面的一致,分别计算当条件发生时各个类别的概率,哪个最大选哪个,在此就不赘述了。
优化
-
平滑处理
当待预测样本中出现了训练集中未出现的特征的时候(文本分类中非常常见),应用上述公式,不管是哪个类别,最后结果都是0,So为了增加算法的泛化能力,我们会统一给每个特征值加上一个固定值,
不宜过大,当
的时候我们称之为拉普拉斯平滑。
针对文本分类
对于朴素贝叶斯算法,其实就是一个简简单单的公式,所以在算法上优化的空间几乎没有,为了提升准确率,更多的时候我们需要在特征处理上下功夫。
- 关键字提取
对于一段文字,里面其实很多词语对结果是没有影响的,譬如‘的’,‘时候’,‘一个’等等,我们可以提前剔除掉这部分词语,通用的关键词提取方法有TF-IDF/TextRank等,当然你也可以建立自己的关键词库来提取。 - 增加权重
譬如现在有三个词[a,b,c],很多时候这个三个词语是有区别的,但是单纯的统计词频是没办法做区分的,因此多数时候,我们会选择通过TF-IDF值来代替词频。 - 词语组合
很多时候单个词语并不能确定一个问题,譬如我们现在需要判断一个文本是不是脏话,‘草’和‘你妹’这两个词单独出现的时候并不能说明问题,但是当两个词共同出现的时候,那就可以确定这个文本是脏话了。
So我们在处理特征时候可以增加各个词语之间的组合,二元或者三元就足够了,效果会好很多。
网友评论