您的位置:首页 > 其它

基于概率论的分类方法:朴素贝叶斯

2017-12-31 18:55 363 查看
本文为«机器学习实战»学习笔记, 主要目的是整理自己的思路, 记录学习历程, 也希望能给大家带来帮助.

朴素贝叶斯分类器中的两个假设

假设一:特征之间相互独立。

所谓独立,指的是统计意义上的独立,即一个特征或者单词出现的可能性与它和其他单词相邻没有关系。这也是“朴素”一词的含义。(独立性假设是指一个词的出现概率并不依赖于文档中的其他词。)

假设二:每个特征同等重要。

朴素贝叶斯的优缺点

优点:在数据较少的情况下仍然有效,可以处理多类别问题。

缺点:对于输入数据的准备方式较为敏感。

贝叶斯决策理论的核心思想

选择高概率对应的类别,即选择具有最高概率的决策。

条件概率与贝叶斯准则

条件概率计算公式:

p(A|B)=p(AB)p(B)

贝叶斯准则:

p(c|x)=p(x|c)p(c)p(x)

朴素贝叶斯的一般过程

收集数据:可以使用任何方法。

准备数据:需要数值型或者布尔型数据

分析数据:有大量特征时,绘制特征作用不大,此时使用直方图效果更好。

训练算法:计算不同的独立特征的条件概率。

测试算法:计算错误率。

使用算法:一个常见的朴素贝叶斯应用是文档分类。可以在任意的分类场景中使用朴素贝叶斯分类器,不一定非要是文本。

从词向量计算概率

公式:

p(ci|w⃗ )=p(w⃗ |ci)p(ci)p(w⃗ )

计算过程伪代码

计算每个类别中的文档数目
对每篇训练文档:
对每个类别:
如果词条出现在文档中->增加该词条的计数值
增加所有词条的计数值
对每个类别:
对每个词条:
将该词条的数目除以总词条数目得到条件概率
返回每个类别的条件概率


贝叶斯分类器几点问题

利用贝叶斯分类器对文档进行分类时,要计算多个概率的乘积以获得文档属于某个类别的概率,即计算p(w0|1)p(w1|1)p(w2|1)...如果其中一个概率值为0,那么最后的乘积也为0。为降低这种影响,可以将所有词的出现数初始化为1,并将分母初始化为2。

另一个问题是下溢出,这是由于太多很小的数相乘造成的。一种解决办法是对乘积取自然对数,在代数中有ln(a*b)=ln(a)+ln(b),于是通过求对数可以避免下溢或者浮点数舍入导致的错误。同时,采用自然对数进行处理不会有任何损失。

词集模型与词袋模型

词集模型:将每个词的出现与否作为一个特征。

词袋模型:如果一个词在文档中出现不止一次,这可能意味着包含该词是否出现在文档中所不能表达的某种信息。

留存交叉验证(hold-out cross validation)

随机选择数据的一部分作为训练集,而剩余部分作为测试集的过程。

平均错误率

假定现在只完成了一次迭代,那么为了更准确地估计分类器的错误率,就应该进行多次迭代后求出平均错误率。

为了避免错误,有多种方式可以用来修正分类器。

移除高频词。

从某个预定词表中移除结构上的辅助词。(停用词表)

词袋模型在解决文档分类问题上比词集模型有所提高。

对切分器进行优化。

小结

对于分类而言,使用概率有时要比使用硬规则更为有效。贝叶斯概率及贝叶斯准则提供了一种利用已知值来估计未知概率的有效方法。可以通过特征之间的条件独立性假设,降低对数据量的需求。独立性假设是指一个词的出现概率并不依赖于文档中的其他词。当然我们也知道这个假设过于简单。这就是之所以称为朴素贝叶斯的原因。尽管条件独立性假设并不正确,但是朴素贝叶斯仍然是一种有效的分类器。利用现代编程语言来实现朴素贝叶斯时需要考虑很多实际因素。下溢出就是其中一个问题,它可以通过对概率取对数来解决。词袋模型在解决文档分类问题上比词集模型有所提高。还有其他一些方面的改进,比如说移除停用词,当然也可以花大量时间对切分器进行优化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: