朴素贝叶斯算法介绍及优化

作者: AwesomeTang | 来源:发表于2018-11-18 19:19 被阅读10次

朴素贝叶斯(Naive Bayes

贝叶斯公式

朴素贝叶斯算法其实原理很简单,要理解朴素贝叶斯算法我们首先得知道贝叶斯公式:
P(B|A) = \frac{P(A|B)*P(B)} {P(A)}
其中P(B|A)是在A发生的情况下B发生的可能性。

公式就不在这推导了,理解起来也很简单的,画个venn图就行,我们接下来通过例子来看贝叶斯公式是如何应用在分类问题中的。
假如我们现在有如下样本:

颜色 水果
水果A
水果B
水果A
水果B
水果B
水果B

现在我们已知一个水果颜色为红色,那么他是水果A还是水果B呢?
根据贝叶斯公式我们有如下:
P(水果A|红色) = \frac{P(红色|水果A)*P(水果A)} {P(红色)}
P(水果B|红色) = \frac{P(红色|水果B)*P(水果B)} {P(红色)}
我们需要判断的就是P(水果A|红色)P(水果B|红色)谁大一些,谁的概率大我们预测谁。
由于分母都一样,我们只需计算:
P(红色|水果A)*P(水果A) = \frac{2}{2}*\frac{2}{6}=\frac{1}{3}
P(红色|水果B)*P(水果B) = \frac{1}{4}*\frac{4}{6}=\frac{1}{6}
那么我们判断这个红色的水果是水果A。
通俗点理解,当我们已知一个条件的时候,我们去看当这个条件发生的时候哪个类别的概率大,我们就预测为该类别。

何为朴素

我们刚刚的例子中只有一个特征条件,但当特征条件多的时候(一个简单的文本分类都会上万维),上述方法就行不通了,那该怎么办?
Be Naive!!!
P(B|x_1,x_2) = \frac{P(x_1,x_2|B)*P(B)} {P(x_1,x_2)}
但当x_1,x_2是两个相互独立的条件的时候,我们就会有如下公式:
P(B|x_1,x_2) = \frac{P(x_1|B)*P(x_2|B)*P(B)} {P(x_1)*P(x_2)}
所以朴素贝叶斯算法的前提条件就是假设各个条件都是相互独立的,这也是朴素贝叶斯算法的朴素之处。
整个逻辑与上面的一致,分别计算当条件发生时各个类别的概率,哪个最大选哪个,在此就不赘述了。

优化

  • 平滑处理
    当待预测样本中出现了训练集中未出现的特征的时候(文本分类中非常常见),应用上述公式,不管是哪个类别,最后结果都是0,So为了增加算法的泛化能力,我们会统一给每个特征值加上一个固定值\alpha\alpha不宜过大,当\alpha=1的时候我们称之为拉普拉斯平滑
针对文本分类

对于朴素贝叶斯算法,其实就是一个简简单单的公式,所以在算法上优化的空间几乎没有,为了提升准确率,更多的时候我们需要在特征处理上下功夫。

  • 关键字提取
    对于一段文字,里面其实很多词语对结果是没有影响的,譬如‘的’,‘时候’,‘一个’等等,我们可以提前剔除掉这部分词语,通用的关键词提取方法有TF-IDF/TextRank等,当然你也可以建立自己的关键词库来提取。
  • 增加权重
    譬如现在有三个词[a,b,c],很多时候这个三个词语是有区别的,但是单纯的统计词频是没办法做区分的,因此多数时候,我们会选择通过TF-IDF值来代替词频。
  • 词语组合
    很多时候单个词语并不能确定一个问题,譬如我们现在需要判断一个文本是不是脏话,‘草’和‘你妹’这两个词单独出现的时候并不能说明问题,但是当两个词共同出现的时候,那就可以确定这个文本是脏话了。
    So我们在处理特征时候可以增加各个词语之间的组合,二元或者三元就足够了,效果会好很多。

相关文章

网友评论

    本文标题:朴素贝叶斯算法介绍及优化

    本文链接:https://www.haomeiwen.com/subject/myqifqtx.html