理论 | 朴素贝叶斯模型算法研究与实例分析
理论 | 朴素贝叶斯模型算法研究与实例分析
( 白宁超 2018年8月31日17: 02:08)
导读:朴素贝叶斯模型是机器学习常用的模型算法之一,其在文本分类方面简单易行,且取得不错的分类效果。所以很受欢迎,对于朴素贝叶斯的学习,本文首先介绍理论知识即朴素贝叶斯相关概念和公式推导,为了加深理解,采用一个维基百科上面性别分类例子进行形式化描述。然后通过编程实现朴素贝叶斯分类算法,并在屏蔽社区言论、垃圾邮件、个人广告中获取区域倾向等几个方面进行应用,包括创建数据集、数据预处理、词集模型和词袋模型、朴素贝叶斯模型训练和优化等。然后结合复旦大学新闻语料进行朴素贝叶斯的应用。最后,大家熟悉其原理和实现之后,采用机器学习sklearn包进行实现和优化。由于篇幅较长,采用理论理解、案例实现、sklearn优化三个部分进行学习。(本文原创,转载必须注明出处:朴素贝叶斯模型算法研究与实例分析)
朴素贝叶斯理论
朴素贝叶斯概述
朴素贝叶斯是一种构建分类器的简单方法。该分类器模型会给问题实例分配用特征值表示的类标签,类标签取自有限集合。所有朴素贝叶斯分类器都假定样本每个特征与其他特征都不相关。
特征独立理解的例子:如果一种水果其具有红,圆,直径大概3英寸等特征,该水果可以被判定为是苹果。尽管这些特征相互依赖或者有些特征由其他特征决定,然而朴素贝叶斯分类器认为这些属性在判定该水果是否为苹果的概率分布上独立的。
尽管是带着这些朴素思想和过于简单化的假设,但朴素贝叶斯分类器在很多复杂的现实情形中仍能够获取相当好的效果。朴素贝叶斯分类器的一个优势在于只需要根据少量的训练数据估计出必要的参数(变量的均值和方差)。
朴素贝叶斯模型
朴素贝叶斯方法是基于贝叶斯定理的一组有监督学习算法,即“简单”地假设每对特征之间相互独立。 给定一个类别和一个从
到
的相关的特征向量,贝叶斯定理阐述了以下关系:
使用简单(naive)的假设-每对特征之间都相互独立:
对于所有的 math: i ,这个关系式可以简化为
我们可以使用最大后验概率(Maximum A Posteriori, MAP) 来估计 和
; 前者是训练集中类别 y 的相对频率。各种各样的的朴素贝叶斯分类器的差异大部分来自于处理
分布时的所做的假设不同。尽管其假设过于简单,在很多实际情况下,朴素贝叶斯工作得很好,特别是文档分类和垃圾邮件过滤。相比于其他更复杂的方法,朴素贝叶斯学习器和分类器非常快。
朴素贝叶斯算法思想
假设有一个数据集,它由两类数据组成,数据分布如下图所示:
我们现在用 表示数据点 (x,y) 属于类别 1(图中用圆点表示的类别)的概率,用
表示数据点 (x,y) 属于类别 2(图中三角形表示的类别)的概率,那么对于一个新数据点 (x,y),可以用下面的规则来判断它的类别:
也就是说,我们会选择高概率对应的类别。这就是贝叶斯决策理论的核心思想,即选择具有最高概率的决策。
朴素贝叶斯工作原理
提取所有文档中的词条并进行去重 获取文档的所有类别 计算每个类别中的文档数目 对每篇训练文档: 对每个类别: 如果词条出现在文档中-->增加该词条的计数值(for循环或者矩阵相加) 增加所有词条的计数值(此类别下词条总数) 对每个类别: 对每个词条: 将该词条的数目除以总词条数目得到的条件概率(P(词条|类别)) 返回该文档属于每个类别的条件概率(P(类别|文档的所有词条))
朴素贝叶斯算法流程
收集数据: 可以使用任何方法。 准备数据: 需要数值型或者布尔型数据。 分析数据: 有大量特征时,绘制特征作用不大,此时使用直方图效果更好。 训练算法: 计算不同的独立特征的条件概率。 测试算法: 计算错误率。 使用算法: 一个常见的朴素贝叶斯应用是文档分类。可以在任意的分类场景中使用朴素贝叶斯分类器,不一定非要是文本。
朴素贝叶斯优缺点
优点: 在数据较少的情况下仍然有效,可以处理多类别问题。 缺点: 对于输入数据的准备方式较为敏感。 适用数据类型: 标称型数据。
案例描述:形式化理解朴素贝叶斯性别分类
问题描述
通过一些测量的特征,包括身高、体重、脚的尺寸,判定一个人是男性还是女性。
训练数据
性别 | 身高(英尺) | 体重(磅) | 脚的尺寸(英寸) |
---|---|---|---|
男 | 6 | 180 | 12 |
男 | 5.92 | 190 | 11 |
男 | 5.58 | 170 | 12 |
男 | 5.92 | 165 | 10 |
女 | 5 | 100 | 6 |
女 | 5.5 | 150 | 8 |
女 | 5.42 | 130 | 7 |
女 | 5.75 | 150 | 9 |
假设训练集样本的特征满足高斯分布,得到下表:
性别 | 均值(身高) | 方差(身高) | 均值(体重) | 方差(体重) | 均值(脚的尺寸) | 方差(脚的尺寸) |
---|---|---|---|---|---|---|
男性 | 5.855 | 3.5033e-02 | 176.25 | 1.2292e+02 | 11.25 | 9.1667e-01 |
女性 | 5.4175 | 9.7225e-02 | 132.5 | 5.5833e+02 | 7.5 | 1.6667e+00 |
我们认为两种类别是等概率的,也就是P(male)= P(female) = 0.5。在没有做辨识的情况下就做这样的假设并不是一个好的点子。但我们通过数据集中两类样本出现的频率来确定P(C),我们得到的结果也是一样的。
测试数据
以下给出一个待分类是男性还是女性的样本。
性别 | 身高(英尺) | 体重(磅) | 脚的尺寸(英尺) |
---|---|---|---|
sample | 6 | 130 | 8 |
我们希望得到的是男性还是女性哪类的后验概率大。男性的后验概率通过下面式子来求取
女性的后验概率通过下面式子来求取
证据因子(通常是常数)用来对各类的后验概率之和进行归一化.
证据因子是一个常数(在正态分布中通常是正数),所以可以忽略。接下来我们来判定这样样本的性别。
其中 是训练集样本的正态分布参数. 注意,这里的值大于1也是允许的 – 这里是概率密度而不是概率,因为身高是一个连续的变量.
集样本的正态分布参数. 注意,这里的值大于1也是允许的 – 这里是概率密度而不是概率,因为身高是一个连续的变量.
模型预测结果
由于女性后验概率的分子比较大,所以我们预计这个样本是女性。
参考文献
- scikit中文社区:http://sklearn.apachecn.org/cn/0.19.0/
- 中文维基百科:https://zh.wikipedia.org/wiki/
- 文本分类特征选择:https://www.cnblogs.com/june0507/p/7601001.html
- GitHub:https://github.com/BaiNingchao/MachineLearning-1
- 图书:《机器学习实战》
- 图书:《自然语言处理理论与实战》
完整代码下载
源码请进【机器学习和自然语言QQ群:436303759】文件下载:
作者声明
本文版权归作者白宁超所有,本文原创,旨在学术和科研使用。文章同步如下:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
9月3日云栖精选夜读 | 只有100个标记数据,如何精确分类400万用户评论?
在本文中,我们将介绍自然语言处理(NLP)在迁移学习上的最新应用趋势,并尝试执行一个分类任务:使用一个数据集,其内容是亚马逊网站上的购物评价,已按正面或负面评价分类。然后在你可以按照这里的说明,用你自己的数据重新进行实验。 热点热议 干货 | 只有100个标记数据,如何精确分类400万用户评论? 作者:技术小能手 发表于:数据派THU 六个维度、数万条数据帮你揭穿房租大涨的背后(附代码) 作者:技术小能手 发表于:数据派THU 终于有人把SDH、MSTP、OTN和PTN的关系解释清楚了…… 作者:技术小能手 发表于:鲜枣课堂 知识整理 深度学习笔记4:深度神经网络的正则化 作者:技术小能手 发表于:Python爱好者社区 [雪峰磁针石博客]python3快速入门教程9重要的标准库-基础篇 作者:磁针石 [雪峰磁针石博客]tesseract OCR识别工具及pytesseract 作者:磁针石 Python知识梳理 作者:雪飞鸿 漫画:设计模式六大原则(下) 作者:技术小能手 发表于:Java小咖秀 美文回顾 给妹子讲python-S01E17函数的基本特征 作者:技术小能手 发表于:P...
- 下一篇
Java源码阅读之ArrayList - JDK1.8
阅读优秀的源码是提升编程技巧的重要手段之一。 如有不对的地方,欢迎指正~ 转载请注明出处https://blog.lzoro.com。 前言 当你对某件事情很感兴趣的时候,时间的流逝在感知中都模糊了(是不是很文艺,绕口得都快听不懂了),通俗来说,就是时间过得很快。 而且,只有感兴趣才能驱动你继续下去,不然读源码,写解析博客这么高(Ku)大(Zao)上的事,是很难坚持的。 详细地写一篇源码解析博客少则半天一天,比如本篇,多则几天,比如红黑树在Java - HashMap中的应用,又要画图又要注释,还要排版,时不时要加点表情,开个车什么的,你说要是没兴趣,怎么坚持呢,还不如吃个鸡实在(啊,暴露了我是吃鸡选手)。 image 闲话少说,打开你的IDE,挽起袖子,开撸代码,加上注释,总计1461行代码。 基本介绍 常量 相比HashMap来说,ArrayList的常量算是短小精悍了,只有几个。 其中包含一个默认容量和两个空数组等,如下。 /** * 默认初始化容量 */ private static final int DEFAULT_CAPACITY = 10; /** * 空数组共享实例 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装