朴素贝叶斯

2024-05-15

1. 朴素贝叶斯

        在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,但是朴素贝叶斯却是生成方法。
                                          
 如何理解这句话,看例题:
                                          
         根据上述数据集,如果一对男女朋友,男生想女生求婚,男生的四个特点分别是不帅,性格不好,身高矮,不上进,请你判断一下女生是嫁还是不嫁?
  
 这里我们联系到朴素贝叶斯公式:
                                          
 p(不帅、性格不好、身高矮、不上进|嫁) = p(不帅|嫁)*p(性格不好|嫁)*p(身高矮|嫁)*p(不上进|嫁)---------->要使这个公式成立,需要各个特征之间相互独立。
  
 而朴素贝叶斯算法就是假设各个特征之间相互独立。
  
 1、假如没有这个假设,那么我们对右边这些概率的估计其实是不可做的,这么说,我们这个例子有4个特征,其中帅包括{帅,不帅},性格包括{不好,好,爆好},身高包括{高,矮,中},上进包括{不上进,上进},那么四个特征的联合概率分布总共是4维空间,总个数为2*3*3*2=36个。36个,计算机扫描统计还可以,但是现实生活中,往往有非常多的特征,每一个特征的取值也是非常之多,那么通过统计来估计后面概率的值,变得几乎不可做,这也是为什么需要假设特征之间独立的原因。
  
 2、假如我们没有假设特征之间相互独立,那么我们统计的时候,就需要在整个特征空间中去找,比如统计p(不帅、性格不好、身高矮、不上进|嫁)。我们就需要在嫁的条件下,去找四种特征全满足分别是不帅,性格不好,身高矮,不上进的人的个数,这样的话,由于数据的稀疏性,很容易统计到0的情况。 这样是不合适的。
  
         根据上面俩个原因,朴素贝叶斯法对条件概率分布做了条件独立性的假设,由于这是一个较强的假设,朴素贝叶斯也由此得名!这一假设使得朴素贝叶斯法变得简单,但有时会牺牲一定的分类准确率。
  
 所以公式整理以后变为:
                                          
 整理训练数据中,嫁的样本数如下:
                                          
 分别计算各个概率:
  
 p(嫁) = 6/12(总样本数) = 1/2
  
 p(不帅|嫁) = 3/6 = 1/2
  
 p(性格不好|嫁)= 1/6
  
 p(矮|嫁) = 1/6
  
 p(不上进|嫁) = 1/6
  
 
  
  
 总样本为:
                                          
 p(不帅) = 4/12 = 1/3
  
 p(性格不好) = 4/12 = 1/3
  
 p(身高矮) = 7/12
  
 p(不上进) = 4/12 = 1/3
  
 将以上概率带入公式,就能得出嫁的概率。
  
 
  
  
  总结:理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。
   
  
  而在属性相关性较小时,朴素贝叶斯性能最 为良好。

朴素贝叶斯

2. 朴素贝叶斯

 A 在另外一个事件 B 已经发生条件下的发生概率        贝叶斯公式:   
                                                                                                                           
    不知道B事件的前提下,我们对A事件概率的一个主观判断。    对应这个例子里就是在不知道女神经常对你笑的前提下,来主观判断出女神喜欢一个人的概率。这里我们假设是50%,也就是不喜欢你,可能不喜欢你的概率都是一半。
    这是一个调整因子,也就是将先验概率(之前的主观判断)调整到更接近真实概率。    可能性函数你可以理解为新信息过来后,对先验概率的一个调整。比如我们刚开始看到“人工智能”这个信息,你有自己的理解(先验概率-主观判断),但是当你学习了一些数据分析,或者看了些这方面的书后(新的信息),然后你根据掌握的最新信息优化了自己之前的理解(可能性函数-调整因子),最后重新理解了“人工智能”这个信息(后验概率)如果"可能性函数"P(B|A)/P(B)>1,意味着"先验概率"被增强,事件A的发生的可能性变大;如果"可能性函数"=1,意味着B事件无助于判断事件A的可能性;如果"可能性函数"<1,意味着"先验概率"被削弱,事件A的可能性变小。
    B事件发生之后,我们对A事件概率的重新评估。    这个例子里就是在女神冲你笑后,对女神喜欢你的概率重新预测。带入贝叶斯公式计算出P(A|B)=P(A)* P(B|A)/P(B)=50% *1.5=75%因此,女神经常冲你笑,喜欢上你的概率是75%。这说明,女神经常冲你笑这个新信息的推断能力很强,将50%的"先验概率"一下子提高到了75%的"后验概率"。
                                             
               
                                           它是一种简单但极为强大的预测建模算法。之所以称为朴素贝叶斯,是因为它 假设每个输入变量是独立的 。这是一个强硬的假设,实际情况并不一定
     
   1)计算  最大的   即最大的     即最大的     2)  
                                                                                                                           朴素贝叶斯分类常用于文本分类,尤其是对于英文等语言来说,分类效果很好。它常用于垃圾文本过滤、情感预测、推荐系统等。
    MultinomialNB(*, alpha=1.0, fit_prior=True, class_prior=None) 

3. 朴素贝叶斯的理解

 朴素贝叶斯是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入输出的联合概率分布,然后基于模型,对给定的输入x,利用贝叶斯定理求出后验概率的最大的输出y。
     
   具体的推导可以参考网上的博文,这里不再进行叙述。
   其中P(A)称之为先验概率,我们希望求得的P(A|B)称之为后验概率。
   单纯的看这个公式很难理解贝叶斯的含义,这里用周志华西瓜书中例子来进行更好的理解。
   假设我们手里有了一个西瓜,它有一系列的特征,那么我们现在需要根据这些特征来判断这个是好瓜还是坏瓜呢?这也就变成了一个数理统计里面称为条件概率的东西,也就是在某个条件存在的基础上,我们来求某一个事件发生的概率,比如事件B发生的条件下求事件A发生的概率,我们可以写成P(A|B).
   那我们西瓜的例子来说,事件B是什么?当我是我们可以观察到的一系列的这个瓜的特征值了。假设我们用加粗的 X 来表示,因为特征很多,加粗表示这是一个特征向量, X = x1,x2,...,Xn 。那么我们要求的就是基于这个条件下这个瓜是好瓜或者是坏瓜的事件的概率。就是求P("好瓜"|X)或者P("坏瓜"|X)。那这个怎么求呢?当然是使用上面的贝叶斯公式了。
   最终我们可以写出          
   来比较这两个哪个的概率大,那么我们就认为我们的这个瓜是好瓜还是坏瓜。
   既然已经有了可以求概率的公式,那我们可以着手进行计算了,首先是先验概率P(Ci)(这里换成字母C表示类别以及下标i表示第i类,当然在西瓜的例子里面只有两个类别,那就是“好瓜”和“坏瓜”),这个很好计算,只用统计出“好瓜”和“坏瓜”各有多少个,然后除以全部的个数就可以得出相应的概率了。
   这边先看分母,因为在计算中我们用到的特征数据都是一样的,所以分母完全可以当成一个常数,也就是我们的公式可以简化成:     
   P(Ci)可以容易求出,但是P(X/Ci)就很困难了。因为把这个展开后为:     
   理论上这个可以利用我们的数据集来进行估计的,但是现实情况是,n的值往往非常大(属性非常多),而我们的数据集往往不能保证我们的样本包含了属性值的所有可能组合。那么很多p(X|ci)我们估计得到的值就是0。然而这些样本很可能仅仅是我们的数据集中没包含到,即“未被观测到”,但不代表它们现实中“出现概率为0”。
   朴素贝叶斯对条件概率分布作了条件独立性的假设,由于这是一个较强的假设,朴素贝叶斯由此得名。有了这个假设,我们就可以这样计算P(X/Ci):   P(x1/ci)P(x2/ci)...P(xn/ci)
   没错,就是把每个特征独立的拆出来写成连乘的形式来计算这个概率。
   引入连乘操作后可能导致一个问题,那就是数据量大了之后,进行多次的连乘操作可能导致结果下溢,也就是最后算出的概率为0了,所以把连乘操作改为取对数操作,即logP(X/ci),展开后把每个概率取对数后进行相加。
   由于我们验证的西瓜中有些特征属性可能数据集中不会出现,导致最终算出的概率为0,但现实中这种瓜是存在的,所以引入拉普拉斯平滑来进行处理。也就是计算公式是修改为:
     
     
   N表示训练集D中可能的类别树,Ni表示第i个属性可能的取值数
   对于离散数据只需要把对应特征的属性个数加起来除以总数即可,而连续型数据则需要借助概率密度函数,此处假设数据服从高斯分布,用高斯密度函数来计算连续型数据的概率。
   此处用Python实现西瓜书上151页的例子,数据集是西瓜数据集3.0。
   整体的思路:使用两个全局变量来存储好瓜和坏瓜在数据集中的索引,遍历待分类数据的数据,拿出待分类的特征属性来进行概率计算,,每次计算都需要算出特征属性值在所有好瓜或者坏瓜上的概率,计算概率时要区分离散数据以及连续型数据,加入拉普拉斯平滑和取对数运算,最终比较各自大小,得出分类结果。

朴素贝叶斯的理解

4. 朴素贝叶斯的详细内容

分类是将一个未知样本分到几个预先已知类的过程。数据分类问题的解决是一个两步过程:第一步,建立一个模型,描述预先的数据集或概念集。通过分析由属性描述的样本(或实例,对象等)来构造模型。假定每一个样本都有一个预先定义的类,由一个被称为类标签的属性确定。为建立模型而被分析的数据元组形成训练数据集,该步也称作有指导的学习。在众多的分类模型中,应用最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model,NBC)。决策树模型通过构造树来解决分类问题。首先利用训练数据集来构造一棵决策树,一旦树建立起来,它就可为未知样本产生一个分类。在分类问题中使用决策树模型有很多的优点,决策树便于使用,而且高效;根据决策树可以很容易地构造出规则,而规则通常易于解释和理解;决策树可很好地扩展到大型数据库中,同时它的大小独立于数据库的大小;决策树模型的另外一大优点就是可以对有许多属性的数据集构造决策树。决策树模型也有一些缺点,比如处理缺失数据时的困难,过度拟合问题的出现,以及忽略数据集中属性之间的相关性等。

5. 朴素贝叶斯的定义

学过概率的同学一定都知道贝叶斯定理:这个在250多年前发明的算法,在信息领域内有着无与伦比的地位。贝叶斯分类是一系列分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。朴素贝叶斯算法(Naive Bayesian) 是其中应用最为广泛的分类算法之一。朴素贝叶斯分类器基于一个简单的假定:给定目标值时属性之间相互条件独立。通过以上定理和“朴素”的假定,我们知道:P( Category | Document) = P ( Document | Category ) * P( Category) / P(Document)

朴素贝叶斯的定义

6. 朴素贝叶斯优点

优点如下:1、朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率;2、对大数量训练和查询时具有较高的速度。即使使用超大规模的训练集,针对每个项目通常也只会有相对较少的特征数,并且对项目的训练和分类也仅仅是特征概率的数...3、对小规模的数据表现很好,能个处理多分类任务,适合增量式训练(即可以实时的对新增的样本进行训练)。

7. 朴素贝叶斯分类的优点

朴素贝叶斯分类的优点如下:
一、详细释义
1、朴素贝叶斯分类器(英语:Naive Bayes classifier,台湾称为单纯贝氏分类器),在机器学习中是一系列以假设特征之间强(朴素)独立下运用贝叶斯定理为基础的简单概率分类器(英语:probabilistic classifier)。

2、单纯贝氏自20世纪50年代已广泛研究。在20世纪60年代初就以另外一个名称引入到文本信息检索界中,并仍然是文本分类的一种热门(基准)方法,文本分类是以词频为特征判断文件所属类别或其他(如垃圾邮件、合法性、体育或政治等等)的问题。
3、单纯贝氏是一种构建分类器的简单方法。该分类器模型会给问题实例分配用特征值表示的类标签,类标签取自有限集合。它不是训练这种分类器的单一算法,而是一系列基于相同原理的算法:所有单纯贝氏分类器都假定样本每个特征与其他特征都不相关。

二、优点
1、朴素贝叶斯模型有稳定的分类效率。
2、对小规模的数据表现很好,能处理多分类任务,适合增量式训练,尤其是数据量超出内存时,可以一批批地去增量训练。
3、对缺失数据不太敏感,算法也比较简单,常用于文本分类。
4、朴素贝叶斯对结果解释容易理解。

朴素贝叶斯分类的优点

8. 朴素贝叶斯分类——大道至简

 已知m个样本   ,x是特征变量,y是对应的类别。   要求一个模型函数h,对于新的样本   ,能够尽量准确的预测出   。
   很多机器学习算法从误差角度来构建模型函数h,也就是先假设一个h,然后定义一个h(x)与y的误差,通过逐步减少h(x)与y的误差来获得一个拟合的模型h。
   现在我们从概率的角度来考虑一下。   假设y有m个类别,即   ,   对于样本   ,如果能计算出每个类别的条件概率   ,那么可以认为概率最大的那个类别就是    所属的类别。(关于条件概率和贝叶斯定理请参考  理解贝叶斯定理 )。即     
   已知m个样本   ,   x是n维特征变量,即   ,   y是对应的类别,设有K个类别,即   ,
   对任一给定的x,我们需要分别计算出x属于各分类的概率   ,其中有最大值的  ,x即属于该分类  ,即样本x属于分类     
   现在需要计算   ,应用贝叶斯定理:     
   这里     是一个条件联合概率,意思是在分类    中,特征    取一组特定值(也就是需要预测的样本x的各特征的值)的概率。这个概率不容易计算,为了方便,于是 朴素 贝叶斯(Naive Bayes) 隆重登场。在这里朴素的意思是, 假定 x 的各特征    是条件独立 的。(参考 维基百科 - 条件独立 )。因此        这个转换其实就是  独立变量的联合分布 = 各变量先验分布的乘积 (参考  维基百科 - 联合分布 ),只不过这里是条件概率,但是因为变换前后都有同样的条件   ,从样本空间    的角度看,其实就是联合分布转换成先验分布的乘积。(对样本空间的理解请参考  理解贝叶斯定理 )。
   将(5)带回(4)得     
   对任一给定的样本x的值是确定的,且x不依赖于C,所以P(x)可以看作常量。所以可以忽略   。        这就是朴素贝叶斯分类的模型函数。
   上述公式中主要有两项,分别考察一下如何计算。
   上式中    比较容易计算,用频率来估算概率,统计m个样本中属于    的样本的频率即可。设m个样本中有    个样本的类别是   ,则     
   对  的计算需要事先假设样本特征  的数据分布情况。对特征分布的假设,我们称之为事件模型,通常会采用以下三种假设。
        有时候样本中某个特征的特定取值的样本数   ,这将导致整个   ,严重扭曲了该特征的概率值。因此,通常可以采用拉普拉斯平滑来避免这种情况发生。即        通常取      将(8)和(10)带入贝叶斯分类器(7),得到
     
   用一个粗略的示意图来理解一下特征为离散值时,条件概率  如何根据样本集来进行估算:
   
                                                                                                                                                                                                           
    举例:根据天气情况决定是否打网球    本案例来自  朴素贝叶斯分类器 
                                           上面表格是某同学在不同天气情况下的打网球决策数据。   假设今天天气状况是:Outlook=sunny, Temperature=cool,Humidity=high,Wind=strong,该同学是否会去打网球呢?   这里的几个特征,天气、温度、湿度、风速都是离散型变量,适合采用上面的多项式贝叶斯分类方法。将上面的公式写在这里便于查看。     
   我们需要计算    两种情况下,   的估算概率。   统计上表中各种情况下的样本数量可知:   总样本数 m=14
   打球(k=yes)的样本数    = 9   不打球(k=no)的样本数    = 5
   天气的取值   (Sunny/Overcast/Rain)   晴天打球(k=yes,j=Outlook,s=sunny)的样本数      晴天不打球(k=no,j=Outlook,s=sunny)的样本数   
   温度的取值   (Hot/Mild/Cool)   冷天打球(k=yes,j=Temperature,s=cool)的样本数      冷天不打球(k=no,j=Temperature,s=cool)的样本数   
   湿度的取值   (High/Normal)   潮湿天打球(k=yes,j=Humidity,s=high)的样本数      潮湿天不打球(k=no,j=Humidity,s=high)的样本数   
   风力的取值   (Strong/Weak)   大风天打球(k=yes,j=Wind,s=strong)的样本数      大风天不打球(k=no,j=Wind,s=strong)的样本数   
   将上述数据代入公式(11),对于样本    ,打球(k=yes)的概率        不打球(k=nos)的概率     
   这里 0.01822 > 0.007084,所以该同学可能不会去打球。经过归一化,   不打球的概率 = 0.01822 / (0.01822 + 0.007084) = 72%   (注:这里计算结果与原案例中的数值不同,因为这里有做拉普拉斯平滑,原案例中没有。本案例中其实没有出现特定特征的样本数为0的情况,可以不用做拉普拉斯平滑,不过这里是按照公式写下来的,就按公式计算了)
   另外注意到伯努利分布其实是多项式分布的特例,所以我们可以用上面公式(12)计算,也可以用之前多项式分布公式(11)计算。
   垃圾邮件分类等涉及文本的任务中可以采用伯努利分布,比如构造一个5000个不同单词的向量作为输入特征x,对于一段文本,其中有出现的单词,在x中对应单词的位置设为1,其它位置为0,这样x中的每个特征(单词)的取值为1或0,符合伯努利分布。
   案例请参考  维基百科 - 案例 - 性别分类 
   处理连续数值问题的另一种常用的技术是通过 离散化连续数值 的方法。通常,当训练样本数量较少或者是精确的分布已知时,通过概率分布的方法是一种更好的选择。   而在大量样本的情形下离散化的方法表现更优,因为大量的样本可以学习到数据的实际分布,而不用“朴素”的假设其分布。典型情况下很多任务都会提供大量的样本,所以这时选择离散化方法会比概率分布估计的方法更好。
   顺便说一句,每次看到朴素这个词,我就仿佛看到贝叶斯穿着一身打满补丁衣服的样子。而naive意思是缺乏经验的;幼稚的;无知的;轻信的。从公式推导过程来看,朴素贝叶斯分类器采用了一些简化条件的假设,比如假设 x 的各特征    是条件独立的,假设样本特征数据符合多项式分布、伯努利分布、高斯分布等,这些假设都可能不完全符合实际情况,因为对险恶的现实世界的无知从而采用了一些天真的假设。   不过,朴素还有一层含义是专一、纯粹,在这个意义上,贝叶斯分类也算大道至简,大智若愚了。
   朴素贝叶斯的主要优点有:
   1)算法简单,有稳定的分类效率。   2)对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。   3)对缺失数据不太敏感。
   朴素贝叶斯的主要缺点有:      1)“朴素”的假设如果与实际情况不符,会影响模型效果。   2)输入特征数据的表现形式,比如是连续特征,离散特征还是二元特征,会影响概率计算和模型的分类效果。
    朴素贝叶斯算法原理小结     朴素贝叶斯分类器     维基百科 - Naive Bayes classifier     理解贝叶斯定理