朴素贝叶斯分类原理

2024-05-14

1. 朴素贝叶斯分类原理

为什么叫朴素贝叶斯分类呢?
  
  
 1.它用到了贝叶斯定理
  
 2.这种方法的思想真的很朴素🐒
  
 对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。你在街上看到一个黑人,你很可能会猜非洲。因为黑人中非洲人的比率最高,当然也不一定对。但在没有其它可用信息下,我们会选择条件概率最大的类别,这就是朴素贝叶斯的思想基础。
  
 举个栗子🌰:
  
 用cu,fe,ca三种元素的含量判断某人是否患病。
  
 可以先统计1000人的患病情况,并测出他们的三种元素含量。
  
 若其中400人患病,那p(患病)=0.4,p(健康)=0.6
  
 患病的400人中:
  
 p(cu>0.1)=0.8, p(cu<0.1)=0.2,
  
 p(fe>0.1)=0.7,  p(fe<0.1)=0.3,
  
 p(ca>0.1)=0.6, p(ca>0.1)=0.4,
  
 健康的600人中:
  
 p(cu>0.1)=0.3, p(cu<0.1)=0.7,
  
 p(fe>0.1)=0.2,  p(fe<0.1)=0.8,
  
 p(ca>0.1)=0.1, p(ca<0.1)=0.9,
  
 那么我们就可以计算其他人的患病概率了:
  
 加入一个人cu,fe,ca三种元素含量分别为0.12,0.8,0.7
  
 那他的p(患病)=0.4*0.8*0.3*0.4=0.0384
  
 p(健康)=0.6*0.3*0.8*0.9=0.1296
  
 可以看出,他的p(健康)明显大于p(患病),所以很可能是健康的

朴素贝叶斯分类原理

2. 朴素贝叶斯分类原理

贝叶斯分类算法是统计学的一种分类方法,它是一类利用概率统计知识进行分类的算法。在许多场合,朴素贝叶斯(Naïve Bayes,NB)分类算法可以与决策树和神经网络分类算法相媲美,该算法能运用到大型数据库中,而且方法简单、分类准确率高、速度快。
由于贝叶斯定理假设一个属性值对给定类的影响独立于其它属性的值,而此假设在实际情况中经常是不成立的,因此其分类准确率可能会下降。

3. 朴素贝叶斯的应用

和决策树模型相比,朴素贝叶斯分类器(Naive Bayes Classifier,或 NBC)发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。理论上,NBC模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这给NBC模型的正确分类带来了一定影响。解决这个问题的方法一般是建立一个属性模型,对于不相互独立的属性,把他们单独处理。例如中文文本分类识别的时候,我们可以建立一个字典来处理一些词组。如果发现特定的问题中存在特殊的模式属性,那么就单独处理。这样做也符合贝叶斯概率原理,因为我们把一个词组看作一个单独的模式,例如英文文本处理一些长度不等的单词,也都作为单独独立的模式进行处理,这是自然语言与其他分类识别问题的不同点。实际计算先验概率时候,因为这些模式都是作为概率被程序计算,而不是自然语言被人来理解,所以结果是一样的。在属性个数比较多或者属性之间相关性较大时,NBC模型的分类效率比不上决策树模型。但这点有待验证,因为具体的问题不同,算法得出的结果不同,同一个算法对于同一个问题,只要模式发生变化,也存在不同的识别性能。这点在很多国外论文中已经得到公认,在机器学习一书中也提到过算法对于属性的识别情况决定于很多因素,例如训练样本和测试样本的比例影响算法的性能。决策树对于文本分类识别,要看具体情况。在属性相关性较小时,NBC模型的性能稍微良好。属性相关性较小的时候,其他的算法性能也很好,这是由于信息熵理论决定的。

朴素贝叶斯的应用

4. 朴素贝叶斯算法的原理是什么?

朴素贝叶斯分类(NBC)是以贝叶斯定理为基础并且假设特征条件之间相互独立的方法,以特征词之间独立作为前提假设,学习从输入到输出的联合概率分布,再基于学习到的模型。




朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。
最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model,NBM)。和决策树模型相比,朴素贝叶斯分类器(Naive Bayes Classifier 或 NBC)发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。
同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。理论上,NBC模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这给NBC模型的正确分类带来了一定影响。
朴素贝叶斯算法(Naive Bayesian algorithm) 是应用最为广泛的分类算法之一。
朴素贝叶斯方法是在贝叶斯算法的基础上进行了相应的简化,即假定给定目标值时属性之间相互条件独立。也就是说没有哪个属性变量对于决策结果来说占有着较大的比重,也没有哪个属性变量对于决策结果占有着较小的比重。
虽然这个简化方式在一定程度上降低了贝叶斯分类算法的分类效果,但是在实际的应用场景中,极大地简化了贝叶斯方法的复杂性。

5. 朴素贝叶斯的定义

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

朴素贝叶斯的定义

6. 朴素贝叶斯分类器原理

 
   朴素贝叶斯分类器,实际上也是对人们常识做的一个算法的完善。其以一种更为精准的量化来判断分类,使用的方法是后验概率。本文从与决策树的比较出发,介绍先验概率和后验概率的关系,再详细介绍一下朴素贝叶斯算法的流程。
   朴素贝叶斯算法比较简单,所以此文多是留以面试前复习之用。理清各个问题之间的关系是重点。
    与决策树的比较 
   我们在学习完经典的决策树算法之后,可以有这样一个认识:决策树的特点是它总是在沿着特征做切分。随着层层递进,这个划分会越来越细。大体上就像这样:
   
   对于决策树不是很了解的朋友们可以看我这篇文章《经典决策树算法》
   我今天在此基础上,在介绍一种在概率框架下实施决策的基本方法。同样的,这也很符合我们人类的经验思维。这就是贝叶斯分类器。相比于决策树,其分类示意如下:
   
   此处的的蓝色与红色交织,就代表着概率的大小。贝叶斯分类器的名字很高大上,其实背后的原理非常简单。就是根据概率来选择我们要将某一个个体分在哪一类中。
   我们可以这样去理解贝叶斯分类器。西瓜藤新鲜的瓜甜的概率为0.7,若只看瓜藤,我们就将瓜藤新鲜的瓜判定为甜瓜。我们引入西瓜纹理这一个第二个特征,假设纹理整齐的瓜甜的概率为0.8。则这时候我们要算出瓜藤新鲜且纹理整齐的瓜甜的概率,比如为0.9(为什么要大于前两个概率大家可以思考一下),这样我们看到纹理和瓜藤这两个特征的时候就可以有概率的判断瓜是否甜了。
   这里我们可以类比一下分类决策树。对于决策树不是很了解的朋友们可以看我这篇文章《经典决策树算法》相比于决策树将瓜藤新鲜的瓜甜的概率直接转化成瓜藤新鲜我们就判断成瓜甜,我们的贝叶斯更是有了一种概率性的容错性,使得结果更加准确可靠一点。但是贝叶斯分类器对数据有着比决策树更高的要求,其需要一个比较容易解释,而且不同维度之间相关性较小的模型。这个我们在之后会细细提及。
    先验概率与后验概率 
   我们来看贝叶斯公式:
   可见,先验概率,后验概率和似然概率关系密切的很。值得注意的是,A和B的顺序和这个先验后验是有关系的。A和B反了,先验与后验也需要反过来。举个例子来说: 桌子上如果有一块肉和一瓶醋,你如果吃了一块肉,然后你觉得是酸的,那你觉得肉里加了醋的概率有多大?
   对于这个问题,在吃起来是酸的条件下肉里面放了醋的概率,便是后验概率。肉加了醋的前提下吃起来是酸的概率便是似然概率,肉里面加了醋的概率和吃起来是酸的概率便是先验概率。
   我们可以总结一下,A事件是导致的结果,B事件是导致的原因之一。这里我们吃到肉是酸的,则是各种原因的结果,而肉里面放了醋则是导致这个A结果的诸多原因之一。为什么说是之一呢,因为除了放了醋,也有可能是肉变质了等等。
    朴素贝叶斯分类算法 
   先通过一个经典例子来解释朴素贝叶斯分类的算法。由如下表格中的数据学习一个朴素贝叶斯的分类器并确定 的w类标记 ,表格中 , 为特征,取值的集合分别为 , , 为类标记,
   
   此时我们对于给定的 可以如下计算:
   可见 时候后验概率更大一些。所以
   通过以上例子,我们会发现朴素贝叶斯的方法其实就是一种常规做法,拉普拉斯曾经说过,概率论就是将人们的常识使用数学公式表达。接下来我们来看看最完整的朴素贝叶斯分类算法的数学表达。
   

7. 朴素贝叶斯算法

 贝叶斯算法是由英国数学家托马斯·贝叶斯提出的,这个算法的提出是为了解决“逆向概率”的问题。首先我们先来解释下正向概率与逆向概率的含义:
                                            正向概率 :假设一个箱子里有5个黄色球和5个白色球,随机从箱子里拿出一个球,请问取出的是黄球的概率是多少?很容易计算P(黄球)= N(黄球)/N(黄球)+ N(白球) = 5/5+5 = 1/2。    逆向概率 :起初我们并不知道箱子里有多少个球,我们依次从箱子里取出10个球,发现这个10个球中有7个白球,3个黄球,那么我们会根据我们观察到的结果去推测箱子里白球与黄球的分布比例大概是7:3,但是我们无法推测出箱子里的球的个数。
   贝叶斯算法是一种基于概率统计的机器学习算法,它会计算出每种情况发生的概率,然后对其进行分类,贝叶斯算法经常用于文本分类问题和垃圾邮件过滤问题。假设有一篇新闻报道news report,我们使用贝叶斯算法来判断它们的类别,结果如下:   p(politics|news) = 0.2   p(entertainment|news) = 0.4   p(sports|news) = 0.7   因为p(sports|news)的概率最大,所以我们判断这篇新闻报道为体育类报道。“|”左边为要判断的类别,右边是我们给定的文章。
    贝叶斯公式推导    接下来,我们将通过一个例子来推导贝叶斯公式。在一所学校里,男生和女生的比例分别是60%和40%,男生全部穿长裤,女生一半穿长裤,一半穿裙子。现迎面走来一个同学,你只能看清他(她)穿的是长裤,而无法分辨出他(她)的性别,请问他(她)是女生的概率?   
                                           
   下面我们逐步计算这个问题:   假设学校里的学生总数为N。   男生人数:N * P(boys),女生人数:N * P(girls)。   穿长裤的男生人数:N * P(boys) * P(pants|boys),其中P(pants|boys)是条件概率的表达形式,意思是男生中穿长裤的概率。因为男生都穿长裤,所以N * P(boys) * P(pants|boys) = 60% * N。   穿长裤的女生的人数:N * P(girs) * P(pants|girls) = 0.2 * N。   穿长裤的总人数:N * P(boys) * P(pants|boys) + N * P(girs) * P(pants|girls)   穿长裤的同学是女生的概率:P(girl|pants) = N * P(girs) * P(pants|girls) / N * P(boys) * P(pants|boys) + N * P(girs) * P(pants|girls) = P(girs)*P(pants|girls) / P(pants),分母用P(pants)表示穿长裤的概率。   最终结果:P(girl | pants) = P(pants | girl) * P(girl) / P(pants)   其中:P(girl)我们称为先验概率,是已知值,在这个例子中P(girl) = 40%。先验概率:根据以往的经验和分析得到的结果,先验概率和其他条件的影响不受样本影响。   P(girl | pants)我们称为后验概率,根据观察到的结果,去反推是女生的概率。    贝叶斯数学表达式    
                                           
    贝叶斯算法在垃圾邮件过滤中的应用    给定一封邮件,判定它是否属于垃圾邮件?用D 来表示这封邮件,注意D 由N 个单词组成。我们用h+ 来表示垃圾邮件,h-表示正常邮件。   有贝叶斯公式可得:   P(h+ | D) = P(D | h+) * P(h+) / P(D)   P(h- | D) = P(D | h-) * P(h-) / P(D)   其中P(h+),P(h-)为先验概率,假如我们有1000封邮件,其中有50封是垃圾邮件,其他都是正常邮件,那么P(h+),P(h-)的概率就是已知的。两个式子的分母都是P(D),所以P(D)对于最终结果的比较是没有影响的。接下来就是要求P(D | h+),P(D | h-)垃圾邮件中或正常邮件中是邮件D的概率。   我们都知道一封邮件是由许多词构成的,所以我们将P(D | h+)的表达式转化为P(d1,d2,d3......dn | h+),就是看垃圾邮件中出现d1,d2...dn这些词的概率是多少。   P(d1,d2,d3......dn | h+) = P(d1 | h+) * P(d2 |d1,h+) * P(d3 |d1,d2,h+) ...   这个式子计算起来非常困难,所以在这里我们做一个假设,假设每个词都是独立的并且互不影响,那么这个式子就可以表示为:   P(d1,d2,d3......dn | h+) = P(d1 | h+) * P(d2 | h+) * P(d3 | h+) ...P(dn | h+)   P(h+ | D) =  {P(d1 | h+) * P(d2 | h+) * P(d3 | h+) ...P(dn | h+)}* P(h+) / P(D)   上述这个式子我们就称为朴素贝叶斯公式,朴素贝叶斯公式是对贝叶斯公式的简化,它建立在每个条子互相独立的基础上。   在现实生活中,我们写的每一句话中词与词之间肯定是有相互联系,如果没有联系,那么这句话是读不通的。那么为什么朴素贝叶斯能够在计算中使用,首先是计算简单,其次对最终结果的影响非常小。    参考资料    1.唐宇迪,《机器学习与数据分析实战》课程。   2.Peter,《机器学习实战》。

朴素贝叶斯算法

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     理解贝叶斯定理