分类算法之贝叶斯(Bayes)分类器

摘要:旁听了清华大学王建勇老师的 数据挖掘:理论与算法 的课,讲的还是挺细的,好记性不如烂笔头,在此记录自己的学习内容,方便以后复习。

 

一:贝叶斯分类器简介

1)贝叶斯分类器是一种基于统计的分类器,它根据给定样本属于某一个具体类的概率来对其进行分类。

2)贝叶斯分类器的理论基础是贝叶斯理论

3)贝叶斯分类器的一种简单形式是朴素贝叶斯分类器,跟随机森林、神经网络等分类器都有可比的性能。

4)贝叶斯分类器是一种增量型的分类器。

 

二:贝叶斯理论

第一次接触贝叶斯还是本科学概率论的时候,那时候也就只知道做题目,没想到现在还能够在工作和学习中用到它,先复习下相关的基础概率公式吧:

1) 乘法定理:设P(B)>0,则有P(AB) = P(A|B)P(B).

2) 全概率公式:设试验E的样本空间为S,A为E的事件,若事件组B1,B2,…,Bn为S的一个划分,且P(Bi)> 0(i=1,2,…,n),则有

P(A) = P(A|B1)P(B1) + P(A|B2)P(B2) + …+ P(A|Bn)P(Bn).

    :在很多事件问题中P(A)不容易算出来,但是可以很容易的找到S的一个划分:B1,B2,…,Bn,并且P(Bi)和P(A|Bi)为已知或者容易算出,那么就可以根据上式求出P(A).

3)贝叶斯公式:设试验E的样本空间为S,A为E的事件,B1,B2…,Bn为S的一个划分,且P(A)>0,P(Bi)>0(i=1,2,…,n),则有

P(Bi|A) = P(ABi)/P(A) = P(A|Bi)P(Bi)/∑P(A|Bi)P(Bi),i=1,2,…n.

举例

X是一个待分类的数据元组,由n个属性描述;H是一个假设,例如X属于类C。对于分类问题,我们想计算出概率P(H|X):即已知元组X的每个元素对应的属性值,求出X属于C类的概率。

例如:X的属性值为:age=25,income=$5000,H对应的假设是:X会买电脑。

P(H|X):意思是在已知某客户信息age=25,income=$5000的条件下,该客户会买电脑的概率。

P(H):意思是对于任何给定的客户信息,该客户会购买电脑的概率。

P(X|H):意思是已知客户会买电脑,那么该客户的age=25,income=$5000的概率。

P(X):意思是在我们所有的客户信息集合中,客户的age=25,income=$5000的概率。

所以:P(H|X) = P(X|H)P(H)/P(X)

三:朴素贝叶斯分类器

朴素贝叶斯分类器的工作流程如下:

1:设D为样本训练集;每一个样本X是由n个属性值组成的,X=(x1,x2,…xn);对应的属性集为A1,A2,A3…An;

2: 假设有m个类标签:C1,C2,…Cm.对于某待分类元X,朴素分类器会把P(Ci|X)(i=1,2,…m)值最大的那个类标签Ci认为是X的类别,即朴素贝叶斯分类器预测出X属于类Ci,当且仅当P(Ci|X)>P(Cj|X) (1≤j≤m,j≠i).因此我们的目标就是找出P(Ci|X)中的最大值。

P(Ci|X) = P(X|Ci)P(Ci)/P(X)

对于给定的样本集,P(X)是常数,跟某个具体的类标签没有关联,所以要想找出P(Ci|X)的最大值也就是找出P(X|Ci)P(Ci)的最大值:

如果我们不知道P(Ci)的值,我们可以假设P(C1)=P(C2)=…=P(Cm),当然P(Ci)可以通过估计值来代替,P(Ci)=|Ci, D| /|D|

其中|D|为样本总数,|Ci,D|为D中属于类Ci的样本数。

3:如果n的值特别大,也就是说样本元有很多属性,那么对于P(X|Ci)的计算会相当复杂。所以在朴素贝叶斯中进行了一个假设:即对于样本元中的每个属性,它们都互相条件独立

所以有: b1

对于P(xi|Ci)我们可以从训练集中算出来,其中xi代表在某个具体样本中对应属性Ai的值。

P(xi|Ci)的计算分为两种情况:

1):如果属性Ai的值是分类变量(离散变量),那么P(xi|Ci)等于训练样本空间|D|中,属于类Ci并且对应属性Ai的值等于xi的数目除以样本空间中属于类Ci的样本数目。

2):如果Ai的值是连续型的变量,则P(xi|Ci)的计算会根据高斯分布来计算,设其中均值为μ,标准方差为σ:

2

3

4:为了预测X所属的类标签,我们根据前面的步骤可以算出每一个类标签Ci对应的P(X|Ci)P(Ci)值,当某一个类标签Ci有:

P(X|Ci)P(Ci)>P(X|Cj)P(Cj) 对于任意j:   1≤j≤m,j≠i

则我们认为X属于类标签Ci.

 

四:具体例子分析

这里我们还是用 分类算法之决策树 中的样本数据来进行举例:

样本空间D如下表所示:其中 |D|=14.

5

属性集合为A{age,come,student,credit_rating} 对应的属性个数n=4.

分类属性为:buys_computer,值为{yes,no}  即C1:buys_computer = yes;C2: buys_computer = no; 分类标签个数 m = 2;

有一待分类的数据元X={age<=30,income=medium,student=yes,credit_rating=fail}.

则根据朴素贝叶斯分类器的工作流程我们可以计算出:

P(Ci):

P(buys_computer = “yes”) = 9/14 = 0.643

P(buys_computer = “no”) = 5/14= 0.357

P(xi|Ci):

P(age = “<=30” | buys_computer = “yes”) = 2/9 = 0.222

P(age = “<= 30” | buys_computer = “no”) = 3/5 = 0.6

P(income = “medium” | buys_computer = “yes”) = 4/9 = 0.444

P(income = “medium” | buys_computer = “no”) = 2/5 = 0.4

P(student = “yes” | buys_computer = “yes) = 6/9 = 0.667

P(student = “yes” | buys_computer = “no”) = 1/5 = 0.2

P(credit_rating = “fair” | buys_computer = “yes”) = 6/9 = 0.667

P(credit_rating = “fair” | buys_computer = “no”) = 2/5 = 0.4

P(X|Ci):

P(X|buys_computer = “yes”) = 0.222 x 0.444 x 0.667 x 0.667 = 0.044

P(X|buys_computer = “no”) = 0.6 x 0.4 x 0.2 x 0.4 = 0.019

P(X|Ci)*P(Ci) :

P(X|buys_computer = “yes”) * P(buys_computer = “yes”) = 0.028

P(X|buys_computer = “no”) * P(buys_computer = “no”) = 0.007

因为0.28>0.007所以X属于类:buys_computer = “yes”.

五:朴素贝叶斯存在的问题

1:零概率问题

在上述的例子中假设在样本数据集中income = medium的样本数为0,那么P(income = “medium” | buys_computer = “yes”) 和

P(income = “medium” | buys_computer = “no”) 都将为0,那么在计算P(X|Ci)*P(Ci)时结果也为0,这样就不好决定X是属于哪一个类。

对于这样的问题的一个解决方案叫做:Laplacian correction或者Laplacian estimator,是以一位法国数学家Pierre Laplace名字命名的。

它的具体做法就是给相应的属性的不同值数目都加1:

假设:有1000个训练样本,其中income=low的数目为10,income=medium的数目为0,income=high的数目为990,则为了避免零概率问题,我们给每一种income的数目加1,及最后结果为 income =medium的数目为1,low的数目为11,high的数目为991.这样也就避免了零概率问题。

2:准确度问题

朴素贝叶斯分类器是基于样本属性条件独立的假设的前提下的,但是实际情况可能并不成立,这样也就缺失准确性了.

解决朴素贝叶斯准确性问题提出的一种方法叫做:贝叶斯网络(Bayesian Belief Networks ).这个方法留着下次学习。

转载于:https://www.cnblogs.com/justcxtoworld/p/3451571.html

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

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

相关文章

Ios生产证书申请(含推送证书)

一、Mac机上生成请求文件。 Mac机上点击证书助手 > 从证书颁发机构请求证书 > 得到CertificateSigningRequest.certSigningRequest请求文件&#xff08;此请求证书建议一直保存&#xff0c;因为根证书的生成需要使用此请求文件&#xff0c;根证书多个app可以使用一个&am…

优秀小程序demo 源码

1.Thor UI组件库https://github.com/dingyong0214/ThorUI 2.Booker图书共享借阅小程序开源https://github.com/shiheme/wx-bookerhttps://gitee.com/week7day/wx-booker 优惠券羊毛平台前端&#xff1a;https://github.com/leixiaokou/waimai-uniapp 优惠券羊毛平台后端&#…

算法:阶乘的五种算法

背景 周末温习了一下递归相关的一些概念&#xff0c;本文先给出阶乘的五种算法。 第一种实现&#xff1a;递归 1 private static long RecursiveFac(long n)2 {3 if (n 0)4 {5 return 1;6 }7 …

TortoiseGIT创建及合并分支

一、创建分支 项目右键 > TortoiseGit(T) > 创建分支&#xff0c;然后右键切换到刚刚创建的分支&#xff0c;新增/修改一个文件&#xff0c;提交分支到远端服务器&#xff0c;推送成功之后分支就创建好了。 二、合并分支 分支开发的代码先推送到远端&#xff0c;切换本…

如何画出企业系统架构图

该技术架构图是本人根据多年企业技术架构经验而制定&#xff0c;是企业技术的总架构图&#xff0c;希望对CTO们有所借鉴。 简单说明&#xff1a; 1.中间件基础运行环境是经过统一规划的以WebLogic、JBOSS为主的集群环境 2.企业集成平台是以基础业…

ashx中Response.ContentType的常用类型

ashx中Response.ContentType的常用类型&#xff1a; text/plaintext/htmltext/xmlapplication/jsonimage/GIFapplication/x-cdf

go 语言链接服务器上的mysql数据库

2019独角兽企业重金招聘Python工程师标准>>> 在网上找了一大堆例子&#xff0c;最后简化一下把&#xff0c;一下会从安装mysql开始&#xff0c;与大家分享一下如何用go链接服务器上的mysql 我用的是ubuntu系统 1&#xff0c;安装mysql&#xff1a;sudo apt-get in…

Nginx、LVS、HAProxy 的区别和优缺点

Nginx、LVS、HAProxy 是目前使用最广泛的三种负载均衡软件&#xff0c;本人都在多个项目中实施过&#xff0c;通常会结合Keepalive做健康检查&#xff0c;实现故障转移的高可用功能。 1&#xff09;在四层&#xff08;tcp&#xff09;实现负载均衡的软件&#xff1a; lvs------…

mssql 字增自段怎样重置(重新自增)|清空表已有数据

方法1 -- 清空已有数据&#xff0c;并且将自增自段恢复从1开始计数 truncate table 表名 方法2 -- 不清空已有数据&#xff0c;但将自增自段恢复从1开始计数 dbcc checkident(表名,RESEED,0) 让SQL自动增长的ID号从一个新的位置开始在查询分析器中执行后,该表自动增长列从1开始…

Android 基本测试工具的使用

Android 基本测试工具的使用和无线学习介绍1&#xff0c;日志查看工具1&#xff09;DDMSAndroid测试中&#xff0c;使用最多的日志查看工具就是DDMS了。ddms可以从两个地方打开&#xff0c;1&#xff0c;Eclipse的的ddms插件&#xff08;属于Eclipse 的SDK插件&#xff09;&…

服务端接口中的那些坑

TOP1&#xff1a;版本意识与兼容性问题。 对于一个好的程序员来说&#xff0c;思考的时间>写代码的时间&#xff0c;如果思路不对写的代码越多&#xff0c;错的也越多&#xff0c;任何时候思考是保证高效工作最省事的武器。 对于接口开发&#xff0c;不同于bs项目&#xff…

JS逆向学习笔记

JS逆向学习笔记 寻找深圳爬虫工作&#xff0c;微信:cjh-18888 文章目录 JS逆向学习笔记 一. JS Hook 1. JS HOOK 原理和作用 原理&#xff1a;替换原来的方法. (好像写了句废话)作用&#xff1a; 可以去Hook一些内置的函数, 例如Debugger, setInterval,JSON.stringify等等2.JS…

bfs+优先队列(hdu1242)

题目&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1242这题目就是个大坑&#xff0c;先说下思路就是在遇到‘x’时要多停留1步&#xff0c;另外就是要用到优先队列&#xff0c;要从小到大排列&#xff0c;另外就是普通的bfs了 但是要注意题里的each of Angels frien…

vscode使用汇总——常用插件、常用配置、常用快捷键

一、代码提示快捷键设置&#xff1a;&#xff08;keybindings.json&#xff09; [{"key": "ctrlj","command": "-workbench.action.togglePanel"},{"key": "ctrlj","command": "editor.action.tri…

HDFS使用JavaAPI操作上传特定副本到datanode

一、首先自然是导包 $HADOOP_HOME/share/hadoop/common/*.jar $HADOOP_HOME/share/hadoop/common/lib/*.jar $HADOOP_HOME/share/hadoop/hdfs/*.jar $HADOOP_HOME/share/hadoop/hdfs/lib/*.jar 二、代码如下 package com.stu.hdfs; /*** * author ysw28* HDFS的API操…

centos php 版本升级 至5.3 wordpress3.7

今天换了主机&#xff0c;wordpress居然出现下面的错误&#xff1a; 您的服务器现在运行的PHP版本为5.1.6&#xff0c;但WordPress 3.7要求的最低版本为5.2.4。 http://www.webtatic.com/packages/php53/ 这里已经准备了 5.3的安装包, 包括相关的扩展 升级命令&#xff1a; rpm…

vuejs深入浅出—基础篇

一、从HelloWorld说起 任何语言的都是从Hello World开始的&#xff0c;VueJs也不例外&#xff0c;直接上代码&#xff1a; <script src"https://unpkg.com/vue/dist/vue.js"></script><div id"demo">{{hello}}</div><script&g…

近百家公司高级运维的面试题汇总

10月1日日考题 画出系统应用架构图写出LVS与nginx的区别当前数据库服务处理速度慢&#xff0c;你认为可能是什么原因导致的&#xff0c;并阐述一下对应的解决办法说一下你知道的存储引擎&#xff0c;建表时如何决定表使用存储引擎单张表过大有什么缺点&#xff0c;如何解决给你…

Linux idle基础

2019独角兽企业重金招聘Python工程师标准>>> Linux系统越来越受到电脑用户的欢迎&#xff0c;于是很多人开始学习Linux时&#xff0c;学习linux&#xff0c;你可能会遇到linux内核问题&#xff0c;这里将介绍linux内核中idle知识。 1. idle是什么 简单的说idle是一…

PowerDesigner版本控制器设置权限

PowerDesigner版本控制权限之前一直在Groups里面设置&#xff0c;一直没有效果&#xff0c;原因终于找出来了&#xff0c;PowerDesigner是要对每个库单独赋权限的&#xff0c;步骤如下&#xff1a; 连接上版本控制&#xff0c;在左侧菜单 Object Browser里面&#xff0c;找到你…