Naive Bayes Classifier - 朴素贝叶斯分类器

Naive Bayes Classifier - 朴素贝叶斯分类器

简介

在机器学习中,朴素贝叶斯分类器是一系列基于“贝叶斯原理”和“特征之间独立分布假设”的概率分类器的总称。把它的名称分成两部分来看,一部分是“贝叶斯”对应的是“贝叶斯原理”;另一部分对应的是“朴素 Naive” 对应的是 “特征之间独立分布假设”,因为在现实世界里这明显是一个过于简单的假设。

自20世纪50年代以来, 朴素贝叶斯一直受到广泛的研究。它是在1960s,作为一种流行的文本分类方法进入人们的视野。经过适当的预处理, 它在文本分类领域甚至可以与更高级的算法(比如svm)取得相当的水平; 在自动医疗诊断中也有发现其应用价值。

数学原理

朴素贝叶斯本质上是一个条件概率模型,他首先要解决的问题是求出某个状态X=(x1,…,xn)X=(x_1, \dots, x_n)X=(x1,,xn)下,发生事件CkC_kCk的概率。数学表达式如下:
p(Ck∣x1,…,xn)p(C_k \mid x_1, \dots, x_n) p(Ckx1,,xn)
根据“贝叶斯原理”,上述表达式可以转化成如下表达式,其中X=(x1,…,xn)X=(x_1, \dots, x_n)X=(x1,,xn):

对于给定的x来说,p(x)其实是一定的,可以理解为是个常数。那么说明我们要求解的是上述等式的分子,分子可以用如下联合概率(joint probability)表达式表示:
p(Ck,x1,…,xn)p(C_k , x_1, \dots, x_n) p(Ck,x1,,xn)
根据条件概率定义,可以使用链式法则作如下推导:

到了这个时候,该’Naive Bayes’里的Naive出来表演了,Naive指的是简单,朴素:假设X=(x1,…,xn)X=(x_1, \dots, x_n)X=(x1,,xn)里的所有xix_ixi相互独立。
根据这个前提假设我们可以知道:

因此,我们要求解的问题可以表达如下,其中∝\propto表示成正比:

可以进一步表达如下,其中

截止目前以上讨论的都是 Naive Bayes 概率模型的推导问题,离我们要讨论的 Naive Bayes Classifier 还差一步。要形成一个完整的 Naive Bayes Classifier,我们还需要一个判定法则。最通常用的一个法则是最大概率法则(MAP rule);

结合如上法则,我们可以形成一个完整的 Naive Bayes Classifier 了。

不同的 Naive Bayes Classifier 的不同之处主要体现在其对 P(xi∣y)P(x_i \mid y)P(xiy) 的假设上,比如说 ‘Gaussian Naive Bayes’ 的假设是,P(xi∣y)P(x_i \mid y)P(xiy) 服从高斯分布:

P(xi∣y)=12πσy2exp⁡(−(xi−μy)22σy2)P(x_i \mid y) = \frac{1}{\sqrt{2\pi\sigma^2_y}} \exp\left(-\frac{(x_i - \mu_y)^2}{2\sigma^2_y}\right)P(xiy)=2πσy21exp(2σy2(xiμy)2)

在训练一个 “Gaussian Naive Bayes Classifier” 的时候,我们的目的是计算出 y 的mean(μy\mu_yμy)和std(σy2\sigma^2_yσy2)。

优劣势讨论

朴素贝叶斯是一种基于概率理论的分类算法,其代码实现和训练都比较简单,需要计算量较少。尽管它对于特征相互独立这一假设不太符合实际,但是却使其在在实际中更加实用。特征间关系的解耦,使得我们可以独立地研究每个特征相对于类别的分布,有效避免了‘维度灾难’(即需要处理的数据量随着特征数量(维度)的增加呈指数级地增长)。

另一方面,尽管朴素贝叶斯在分类领域的效果不错,是处理分类问题的一把好手,但却不能准确预测事务的概率,它的机制设计是通过概率之间的比较输出结果,更关注的是相对的大小。

参考文献

维基百科 - Naive Bayes Classifier

scikit-learn - 1.9. Naive Bayes

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530452.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hello,My first blog!

这是我的第一个博客,之所以想开始写博客主要有几个原因: 1)刚刚毕业,想记录自己在技术方面的成长; 2)不断学习,不断思考,活到老,学到老; 3)希望…

如何在Oracle官网上下载历史版本的JDK

点击下面链接: http://java.sun.com/products/archive/ 选择对应的版本,然后它需要你注册一个Oracle账号,注册一个然后登陆就行了

PL/SQL Developer调试Oracle存储过程

1,选中存储过程,右键,点击Edit,会打开一个窗口,提示错误信息2,添加debug information3,开始调试4,点击调试窗口上面的按钮进行调试

Oracle复杂查询

1、 列出至少有一个员工的所有部门编号、名称,并统计出这些部门的平均工资、最低工资、最高工资。 1、确定所需要的数据表: dept表:部门名称;emp表:统计信息; 2、确定已知的关联字段: emp.de…

TCP三次握手和四次挥手以及11种状态

TCP三次握手和四次挥手以及11种状态 1、三次握手 置位概念:根据TCP的包头字段,存在3个重要的标识ACK、SYN、FIN ACK:表示验证字段 SYN:位数置1,表示建立TCP连接 FIN:位数置1,表示断开TCP连…

计算机网络体系结构——各层的功能

OSI七层架构 物理层主要功能:实现比特流的透明传输。基本单位:比特。 数据链路层主要功能 :封装成帧 。把帧从原MAC传到目的MAC(相邻节点之间帧的透明传输) 差错检测 循环冗余检测法。只检测有没有比特错误&#xf…

HTTP报文分析

一、HTTP请求报文解剖 HTTP请求报文由3部分组成(请求行请求头请求体): 下面我们基于socket编写一个简单的HTTP server import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.Inp…

SSM框架整合一(springmvc+spring+mybatis+maven+tomcat)

一,环境说明 jdk1.7.0_07(cmd命令行输入java -version查看),点击下载 eclipse Kepler Service Release 2 apache-maven-3.3.9(cmd命令行输入mvn -v查看),点击下载 apache-tomcat-7.0.52,点击下载 mysql-5.5.28-winx64&#xff0c…

如何在windows机器上安装apache ab

为什么要使用apache ab,apache ab的是用来干嘛的,apache ab的命令? 如果您是来找上面这些问题的答案,那么请立刻关掉当前页面,因为这篇文章是纯粹的安装教程,避免浪费时间。 一,安装环境 win…

apache log4j入门

学习一项新东西之前,我常常问自己: 这项技术是什么? 这项技术为我们做了什么? 为什么不用其他类似的技术? 如何使用这项技术? 于是我带着这些问题开始学习apache log4j 一,apache log4j是…

低版本Eclipse如何快速设置黑色主题

低版本的Eclipse(例如Kepler Service Release 2),没有自带的黑色主题,并且在线安装黑色主题会报错 去网上找了一圈结果都是骗人的,这个时候别着急,只需三个简单的步骤即可完成黑色主题配置。 下面是设置完…

tomcat-maven插件热部署(简洁版)

最近在学ssm框架,为了提高学习效率,想使用tomcat-maven插件热部署,网上有很多关于这方面的文章,但是有很多坑。 自己总结了一下,简化了多余的配置,还有运行过程中发生异常的原因。 环境:apach…

eclipse中配置jad反编译插件

1 下载Eclipse支持jad插件的jar包 将下载得到的net.sf.jadclipse_3.3.0.jar放到eclipse》plugins目录下 2 eclipse配置jad插件 下载jad.exe 3 设置文件关联

SpringCloud学习之路(一)-简单Demo

首先,我们先在C:\Windows\System32\drivers\etc路径下的hosts最后添加两个地址用于模拟服务端以及消费端的IP 127.0.0.1 dept-8001.com #微服务端127.0.0.1 client.com #消费端 SpringCloud的一个最基础Demo,本地真实模拟环境(服务的创建者以及消费者),这是我们Demo截图: 分为一…

Oracle数据库数据泵导入导出

由于开发过程中有时候无法直接连数据库,这时候需要将数据库导入开发环境中,故此总结一个完整的数据库导入导出过程。 注意expdp和impdp命令末尾都不能加分号 1 导出某个用户的所有数据库对象 1.1 Linux导出 su - oracle 授权用户grant exp_full_data…

eclipse工作区打不开的解决方案

今天上班的时候发现eclipse打开总是闪退,刚开始以为是eclipse的问题,后来才发现是工作区的问题。 分享出来,希望能够帮助遇到同样问题的人。 1 设置询问打开的工作区 eclipse安装目录\configuration\.settings\org.eclipse.ui.ide.prefs&a…

日期时间总结

今天总结一下日期时间如何处理,方便以后查看。 1 Oracle 1.1 日期格式参数及其含义说明 Oracle不区分大小写,所以下面参数大小写都可以 D 一周中的星期几 DAY 天的名字,使用空格填充到9个字符 DD …

Oracle对象被锁如何处理

1 查看被锁住的对象 select object_name,machine,s.sid,s.SERIAL# from v$locked_object l,dba_objects o ,v$session s where l.object_id  o.object_id and l.session_ids.sid; 2 解锁 将1中查询出的sid和serial#,作为参数 alter system kill session 2400,…

BeycondCompare3破解绿色版下载

链接: https://pan.baidu.com/s/1GBtkLdqU7wTAzjvn2QfHrw 提取码: rzcw 复制这段内容后打开百度网盘手机App,操作更方便哦

Oracle rowid和rownum的区别

rowid和rownum在本质上有区别: rowid rowid是物理结构上的,每插入一行数据,都会生成一条唯一的编号。可以说默认排序是根据rownum升序的,但是本质上还是根据rowid升序排列的。 rownum rownum可以说是伪列,并不存在&a…