首页 > 编程语言 >从零开始学Python【37】--朴素贝叶斯模型(理论部分)

从零开始学Python【37】--朴素贝叶斯模型(理论部分)

时间:2022-11-29 19:33:14浏览次数:54  
标签:概率 Python 公式 37 贝叶斯 分类器 -- 类别 自变量


【知识铺垫】

在介绍如何使用贝叶斯概率公式计算后验概率之前,先回顾一下概率论与数理统计中的条件概率和全概率公式:

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_条件概率

如上等式为条件概率的计算公式,表示在已知事件A的情况下事件B发生的概率,其中P(AB)表示事件A与事件B同时发生的概率。所以,根据条件概率公式得到概率的乘法公式:。

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_贝叶斯分类器_02

事件A的概率可以根据全概率公式计算得到:

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_03

如上等式即为全概率公式,其中事件

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_04

构成了一个完备的事件组,并且每一个

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_05

均大于0。该公式表示,对于任意的一个事件A来说,都可以表示成n个完备事件组与其乘积的和。


【贝叶斯公式】

在具备上述的基础知识之后,再来看看贝叶斯公式。如前文所说,贝叶斯分类器的核心就是在已知X的情况下,计算样本属于某个类别的概率,故这个条件概率的计算可以表示为:


从零开始学Python【37】--朴素贝叶斯模型(理论部分)_条件概率_06

其中,

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_07

表示样本所属的某个类别。假设数据集的因变量y一共包含k个不同的类别,故根据全概率公式,可以将上式中的分母表示成

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_条件概率_08

;再根据概率的乘法公式,可以将上式中的分子重新改写为

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_贝叶斯分类器_09

。对于上面的条件概率公式而言,样本最终属于哪个类别

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_07

,应该将计算所得的最大概率值

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_贝叶斯分类器_11

对应的类别作为样本的最终分类,所以上式可以表示为:

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_12

如上公式所示,对于已知的X,朴素贝叶斯分类器就是计算样本在各分类中的最大概率值。接下来详细拆解公式中的每一个部分,为获得条件概率的最大值,寻找最终的影响因素。分母

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_贝叶斯分类器_13

是一个常量,它与样本属于哪个类别没有直接关系,所以计算

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_14

的最大值就转换成了计算分子的最大值,即

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_贝叶斯分类器_15

;如果分子中的

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_贝叶斯分类器_16

项未知的话,一般会假设每个类别出现的概率相等,只需计算

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_条件概率_17

的最大值,然而在绝大多数情况下,

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_贝叶斯分类器_16

是已知的,它以训练数据集中类别

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_07

的频率作为先验概率,可以表示为

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_20



所以,现在的主要任务就是计算

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_条件概率_17

的值,即已知某个类别的情况下自变量为某种值的概率。假设数据集一共包含p个自变量,则可以表示成

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_22

,进而条件概率可以表示为:

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_条件概率_23


很显然,条件联合概率值的计算还是比较复杂的,尤其是当数据集的自变量个数非常多的时候。为了使分类器在计算过程中提高速度,提出了一个假设前提,即自变量是条件独立的(自变量之间不存在相关性),所以上面的计算公式可以重新改写为:

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_24


如上式所示,将条件联合概率转换成各条件概率的乘积,进而可以大大降低概率值

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_条件概率_17

的运算时长。但问题是,在很多实际项目的数据集中,很难保证自变量之间满足独立的假设条件。根据这条假设,可以得到一般性的结论,即自变量之间的独立性越强,贝叶斯分类器的效果就会越好;如果自变量之间存在相关性,就会在一定程度提高贝叶斯分类器的错误率,但通常情况下,贝叶斯分类器的效果不会低于决策树。


自变量X的数据类型可以是连续的数值型,也可以是离散的字符型,或者是仅含有0-1两种值的二元类型。通常会根据不同的数据类型选择不同的贝叶斯分类器,例如高斯贝叶斯分类器、多项式贝叶斯分类器和伯努利贝叶斯分类器。


【高斯贝叶斯分类器】

如果数据集中的自变量X均为连续的数值型,则在计算

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_条件概率_17

时会假设自变量服从高斯正态分布,所以自变量的条件概率可以表示成:

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_27

其中,

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_28

表示第j个自变量的取值,

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_贝叶斯分类器_29

为训练数据集中自变量

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_28

属于类别

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_07

的均值,

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_贝叶斯分类器_32

为训练数据集中自变量

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_28

属于类别

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_07

的标准差。所以在已知均值

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_贝叶斯分类器_29

和标准差

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_贝叶斯分类器_32

时,就可以利用如上的公式计算自变量

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_28

取某种值的概率。


【多项式贝叶斯分类器】

如果数据集中的自变量X均为离散型变量,就无法使用高斯贝叶斯分类器,而应该选择多项式贝叶斯分类器。在计算概率值

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_条件概率_17

时,会假设自变量X的条件概率满足多项式分布,故概率值

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_条件概率_17

的计算公式可以表示为:

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_条件概率_40


其中,

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_贝叶斯分类器_41

表示自变量

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_28

的取值;

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_43

表示因变量为类别

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_07

时自变量

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_28


从零开始学Python【37】--朴素贝叶斯模型(理论部分)_贝叶斯分类器_41

的样本个数;

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_条件概率_47

表示数据集中类别

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_07

的样本个数;

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_条件概率_49

为平滑系数,用于防止概率值取0可能,通常将该值取为1,表示对概率值做拉普拉斯平滑;n表示因变量的类别个数。


 【伯努利贝叶斯分类器】

当数据集中的自变量X均为0-1二元值时(例如在文本挖掘中,判断某个词语是否出现在句子中,出现用1表示,不出现用0表示),通常会优先选择伯努利贝叶斯分类器。利用该分类器计算概率值

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_条件概率_17

时,会假设自变量X的条件概率满足伯努利分布,故概率值

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_条件概率_17

的计算公式可以表示为:

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_52


其中,

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_28

为第j个自变量,取值为0或1;表示类别为

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_07

时自变量取1的概率,该概率值可以使用经验频率代替,即

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_55


其中,

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_条件概率_47

表示类别

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_07

的样本个数;

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_58

表示在类别为

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_数据集_07

时,变量取1的样本量;

从零开始学Python【37】--朴素贝叶斯模型(理论部分)_条件概率_49

为平滑系数,同样是为了避免概率为0而设置的;n为因变量中的类别个数。


有关贝叶斯算法的原理就介绍到这里,除此,如何借助于简单的案例解释原理背后的道理,可以在我的新书《从零开始学Python数据分析与挖掘》中得到详细的答案。


【结语】

OK,关于贝叶斯算法的理论知识我们就分享到这里,如果你有任何问题,欢迎在公众号的留言区域表达你的疑问,下一期我们将分享三种贝叶斯算法的实战案例。同时,也欢迎各位朋友继续转发与分享文中的内容,让更多的人学习和进步。

标签:概率,Python,公式,37,贝叶斯,分类器,--,类别,自变量
From: https://blog.51cto.com/u_9205406/5896603

相关文章

  • 书写工具类实现手动获取容器中的bean
    importjava.lang.reflect.Field;importjava.util.Map;importorg.springframework.beans.BeansException;importorg.springframework.beans.factory.support.BeanDef......
  • 大数据之脚踏实地学18--Scala正则表达式的使用
    前言在《​​大数据之脚踏实地学17--Scala字符串的清洗​​》一文中我们介绍了Scala语言中常用的字符串处理方法,但这些方法并不是万能的,例如字符串子串的获取,如果目标子串并......
  • 计算平均值。输入十个学生的考试成绩计算平均值。(数组实现))
    #include<stdio.h>#defineN10intmain(){ inti; doublea[N],sum=0.0; sum=0.0; printf("请输入成绩:\n"); for(i=0;i<N;i++) scanf("%lf",&a[i]); for(i=0......
  • Git到底是什么?它有哪些功能?
    Git是一个免费的、开源的分布式版本控制系统,可以用于记录一个或者若干个文件内容的变化,方便查阅或者修改。Git官网:​​https://git-scm.com/​​1、常见的版本控制系统1.1、......
  • 测试索引
    准备#1.准备表createtables1(idint,namevarchar(20),genderchar(6),emailvarchar(50));#2.创建存储过程,实现批量插入记录delimiter$$#声明存储过程的......
  • 每日食词—day010
    insteadadv.代替、改为、反而.enterprisen.企业、企业版、企业号.setTimeoutn.定时器、计时器vendorn.供应商、厂商、小贩、卖方.cachen. v.缓......
  • 实验五
    实验四pets.hpp1#pragmaonce2#include<iostream>3#include<string>4usingnamespacestd;5classMachinePets{6public:7MachinePets()=defau......
  • Bootstrap_全局CSs样式_按钮&图片和Bootstrap_全局CSS样式2_表格&表单
    Bootstrap_全局CSs样式_按钮&图片:全局css样式:按钮:<aclass="btnbtn-default"href="#">Link</a>图片:<!--图片--><imgsrc="img/banner_1.jpg"class="......
  • rfc3442-classless-static-routes 字段含义
    参考文档:https://www.nuomiphp.com/serverfault/zh/60480e758726d95932321906.html#dhcp配置optionrfc3442-classless-static-routescode121=arrayofinteger......
  • 2022 ICPC 济南站 L 题题解
    题意给定一棵\(n\)个点有边权的无根树,有\(q\)次询问,每次给定\(l,r\),求\[\min_{l\leu<v\ler}\{\operatorname{dist}(u,v)\}.\]数据范围:\(1\len\le2\times10^5......