更多精彩推荐,请关注公众号:tjxj666
概述
朴素贝叶斯是基于贝叶斯,定理与特征条件独立假设的分类方法。最为广泛的两种分类模型是决策树模型和朴素贝叶斯模型。
和决策树模型相比,朴素贝叶斯分类器(Naive Bayesian Classifier, NBC)发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。同时,NBC模型所需估计的参数很少,对缺失数据不敏感,算法也比较简单。理论上,NBC模型与其他分类方法相比,具有最小的误差率。但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这个NBC模型的正确分类带来了一定影响。
优点:在数据较少的情况下任然有效,可以处理多类别问题
缺点:对于输入数据的准备方式较为敏感
使用数据类型:标称型数据
贝叶斯决策理论的核心思想是,选择具有最高概率的决策。
算法流程
收集数据:可以使用任何方法。
准备数据:需要数值型或者布尔型数据
分析数据:有大量特征时,绘制特征作用不大,此时使用直方图效果更好
训练算法:计算不同的独立特征的条件概率
测试算法:计算错误率
使用算法:一个常见的朴素贝叶斯应用是文档分类。可以在任意的分类场景中使用朴素贝叶斯分类器,不一定非要是文本
文本分类
准备数据:从文本中构建词向量
将文本看成单词向量或词条向量,也就是说把句子转换为向量。
函数验证
训练算法:从词向量计算概率
贝叶斯准则:
p(
ci
|w)=
p(w|
ci
)p(
ci
)p(w)
p(ci|w)=p(w|ci)p(ci)p(w)
w
w表示这是一个向量,即它由多个数值组成。
w
w中元素众多,使用Numpy数组快速计算这些值。
函数测试
对样本数据集进行朴素贝叶斯分类,得到出现侮辱性语言的概率为0.5。
从样本数据中可以看到,总共有6句话,有三句是侮辱性语句,因此概率0.5是正确的。
查看侮辱性言论中各单词出现的概率。
找出侮辱性言论中单词出现概率最大的值和其对应的索引
单词列表中找到对应索引的单词,发现该单词为’stupid’。这意味着’stupid’是最能表征侮辱性言论类别的单词
测试算法:根据现实情况修改分类器
利用贝叶斯分类器对文档进行分类时,要计算多个概率的乘积以获得文档属于某个类别的概率,即计算
p(
w
|1)p(
w1
|1)p(
w2
|1)
p(w|1)p(w1|1)p(w2|1)。如果其中一个概率为0,那么最后的乘积也为0。
为了降低这种影响,可以将所有词出现数初始化为1,并将分母初始化为2。
另一个问题是下溢出,这是由于太多很小的数相乘造成的。由于大部分因子都非常小,所以程序会下溢出或者得不到正确答案。
一种解决办法是对乘积取自然对数。在代数中有
ln(a∗b)=ln(a)+ln(b)
ln(a∗b)=ln(a)+ln(b),于是通过求对数可以避免下溢出或者浮点数舍入导致的错误。同时,采用自然对数进行处理不会有任何损失。
编写朴素贝叶斯分类函数
执行测试
准备数据:文档词袋模型
上面将每个单词在文本中出现与否作为一个特征,这可以被描述为词集模型(set-of-words model)。
如果一个词在文档中出现不止一次,这可能意味着该词是否出现在文档中不能表达的某种信息,这种方法被称为词袋模型(bag-of-words model)。
词袋中每个单词可以出现多次,而词集中每个单词只能出现一次。
示例:电子邮件垃圾过滤
收集数据:提供文本文件
准备数据:将文本文件解析成词条向量
分析数据;检查词条确保解析的正确性
训练算法:使用之前建立的trainNB0()函数
测试算法:使用classifyNB(),并且构建一个新的测试函数来计算文档集的错误率
使用算法:构建一个完整的程序对一组文档进行分类,将错分的文档输出到屏幕上
准备数据:切分文本
使用正则表达式切分,其中分隔符是除单词、数字外的任意字符
切分邮件
测试算法:使用朴素贝叶斯进行交叉验证
由于SpamTest()构造的测试集和训练集是随机的,所以每次运行的分类结果可能不一样。如果发生错误,函数会输出错分文档的词表,这样就可以了解到底哪篇文档发生了错误。
这里出现的错误是将垃圾邮件误判为了正常邮件。
示例:使用朴素贝叶斯分类器从个人广告中获取区域倾向
分别从美国的两个城市中选取一些人,通过这些人发布的征婚广告信息,来比较这两个城市的人们在广告用词上是否不同。如果结论确实不同,那么各自的常用词有哪些?从人们的用词当中,我们能否对不同城市的人所关心的内容有所了解?
收集数据:从RSS源收集内容
准备数据:将文本解析成词条向量
分析数据:检查词条以确保词条的正确性
训练算法:使用之前建立的traingNB0()函数
测试算法:观察错误率,确保分类器可用。可以修改切片程序,以降低错误率,提高分类结果
使用算法:构建一个完整的程序,封装所有内容。给定两个RSS源,该程序会显示常用的公共词
收集数据:导入RSS源
验证RSS分类器
分析数据:显示地域相关的用词
验证函数
从结果可以看出两者之间的常用词差距还是比较明显
·END·
统计学家
统计学·机器学习·人工智能
微信号:tjxj666
领取专属 10元无门槛券
私享最新 技术干货