朴素贝叶斯是贝叶斯决策理论的一部分,朴素贝叶斯是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法。对于大多数的分类算法,在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系,要么是决策函数,要么是条件分布。但是朴素贝叶斯却是生成方法,该算法原理简单,也易于实现。
贝叶斯决策理论。
选择高概率对应的类别。这就是贝叶斯决策理论的核心思想,即选择具有最高概率的决策。
朴素贝叶斯
优点:在数据较少的情况下仍然有效,可以处理多类别问题。
缺点:对于输入数据的准备方式较为敏感。
朴素贝叶斯算法步骤:
收集数据:可以使用任何方法;
准备数据:需要数值型或布尔型数据。如果是文本文件,要解析成词条向量bai;
分析数据:有大量特征时,用直方图分析效果更好;
训练算法:计算不同的独立特征的条件概率;
测试算法:计算错误率;
使用算法:一个常见的朴素贝叶斯应用是文档分类。
朴素贝叶斯分类器
先验概率P(X):先验概率是指根据以往经验和分析得到的概率。
后验概率P(Y|X):事情已发生,要求这件事情发生的原因是由某个因素引起的可能性的大小,后验分布P(Y|X)表示事件X已经发生的前提下,事件Y发生的概率,称事件X发生下事件Y的条件概率。
后验概率P(X|Y):在已知Y发生后X的条件概率,也由于知道Y的取值而被称为X的后验概率。
朴素:朴素贝叶斯算法是假设各个特征之间相互独立,也是朴素这词的意思,那么贝叶斯公式中的P(X|Y)可写成:
朴素贝叶斯公式:
朴素贝叶斯分类器:朴素贝叶斯分类器(Naïve Bayes Classifier)采用了“属性条件独立性假设” ,即每个属性独立地对分类结果发生影响。为方便公式标记,不妨记P(C=c|X=x)为P(c|x),基于属性条件独立性假设,贝叶斯公式可重写为:
其中d为属性数目,x_i 为 x 在第 i 个属性上的取值。
使用朴素贝叶斯进行文档分类
机器学习的一个重要应用就是文档的自动分类。在文档分类中,整个文档是实例,而电子邮件中的某些元素则构成特征。虽然电子邮件是一种会不断增加的文本,但我们同样也可以对新闻报道、用户留言、政府公文等其他任意类型的文本进行分类。我们可以观察文档中出现的词,并把每个词的出现或者不出现作为一个特征,这样得到的特征数目就会跟词汇表中的词目一样多。朴素贝叶斯是上节介绍的贝叶斯分类器的一个扩展,是用于文档分类的常用算法。
代码实现:
数据准备:从文本中构建词向量
词表到向量的转换函数:
函数执行结果:
训练算法:从词向量计算概率
朴素贝叶斯分类器训练函数:
函数实现结果:
测试算法:根据现实情况修改分类器
计算多个概率的乘积是,如果其中一个的概率为0,那么最终的乘积也为0,为降低影响,将所有词出现数初始化为1,分母初始化为2,修改函数trainNB0()的第四行和第五行为:
由于太多很小的数相乘会造成下溢出,可以对乘积取自然对数,修改return前的两行代码为:
修改后的实现结果为:
朴素贝叶斯分类函数
函数实现结果:
准备数据:文档词袋模型
使用朴素贝叶斯过滤垃圾邮件
数据集:
ham:
spam:
测试算法:使用朴素贝叶斯进行交叉验证
测试结果: