朴素贝叶斯分类——大道至简
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了朴素贝叶斯分类——大道至简相关的知识,希望对你有一定的参考价值。
参考技术A 已知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
理解贝叶斯定理
机器学习九大算法---朴素贝叶斯分类器
机器学习九大算法---朴素贝叶斯分类器
搞懂朴素贝叶斯分类算
贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。而朴素朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法。这篇文章我尽可能用直白的话语总结一下我们学习会上讲到的朴素贝叶斯分类算法,希望有利于他人理解。
1 分类问题综述
对于分类问题,其实谁都不会陌生,日常生活中我们每天都进行着分类过程。例如,当你看到一个人,你的脑子下意识判断他是学生还是社会上的人;你可能经常会走在路上对身旁的朋友说“这个人一看就很有钱”之类的话,其实这就是一种分类操作。
既然是贝叶斯分类算法,那么分类的数学描述又是什么呢?
从数学角度来说,分类问题可做如下定义:已知集合和,确定映射规则y = f(x),使得任意有且仅有一个,使得成立。
其中C叫做类别集合,其中每一个元素是一个类别,而I叫做项集合(特征集合),其中每一个元素是一个待分类项,f叫做分类器。分类算法的任务就是构造分类器f。
分类算法的内容是要求给定特征,让我们得出类别,这也是所有分类问题的关键。那么如何由指定特征,得到我们最终的类别,也是我们下面要讲的,每一个不同的分类算法,对应着不同的核心思想。
本篇文章,我会用一个具体实例,对朴素贝叶斯算法几乎所有的重要知识点进行讲解。
2 朴素贝叶斯分类
那么既然是朴素贝叶斯分类算法,它的核心算法又是什么呢?
是下面这个贝叶斯公式:
换个表达形式就会明朗很多,如下:
我们最终求的p(类别|特征)即可!就相当于完成了我们的任务。
3 例题分析
下面我先给出例子问题。
给定数据如下:
现在给我们的问题是,如果一对男女朋友,男生想女生求婚,男生的四个特点分别是不帅,性格不好,身高矮,不上进,请你判断一下女生是嫁还是不嫁?
这是一个典型的分类问题,转为数学问题就是比较p(嫁|(不帅、性格不好、身高矮、不上进))与p(不嫁|(不帅、性格不好、身高矮、不上进))的概率,谁的概率大,我就能给出嫁或者不嫁的答案!
这里我们联系到朴素贝叶斯公式:
我们需要求p(嫁|(不帅、性格不好、身高矮、不上进),这是我们不知道的,但是通过朴素贝叶斯公式可以转化为好求的三个量.
p(不帅、性格不好、身高矮、不上进|嫁)、p(不帅、性格不好、身高矮、不上进)、p(嫁)(至于为什么能求,后面会讲,那么就太好了,将待求的量转化为其它可求的值,这就相当于解决了我们的问题!)
4 朴素贝叶斯算法的朴素一词解释
那么这三个量是如何求得?
是根据已知训练数据统计得来,下面详细给出该例子的求解过程。
回忆一下我们要求的公式如下:
那么我只要求得p(不帅、性格不好、身高矮、不上进|嫁)、p(不帅、性格不好、身高矮、不上进)、p(嫁)即可,好的,下面我分别求出这几个概率,最后一比,就得到最终结果。
p(不帅、性格不好、身高矮、不上进|嫁) = p(不帅|嫁)*p(性格不好|嫁)*p(身高矮|嫁)*p(不上进|嫁),那么我就要分别统计后面几个概率,也就得到了左边的概率!
等等,为什么这个成立呢?学过概率论的同学可能有感觉了,这个等式成立的条件需要特征之间相互独立吧!
对的!这也就是为什么朴素贝叶斯分类有朴素一词的来源,朴素贝叶斯算法是假设各个特征之间相互独立,那么这个等式就成立了!
但是为什么需要假设特征之间相互独立呢?
1、我们这么想,假如没有这个假设,那么我们对右边这些概率的估计其实是不可做的,这么说,我们这个例子有4个特征,其中帅包括{帅,不帅},性格包括{不好,好,爆好},身高包括{高,矮,中},上进包括{不上进,上进},那么四个特征的联合概率分布总共是4维空间,总个数为2*3*3*2=36个。
36个,计算机扫描统计还可以,但是现实生活中,往往有非常多的特征,每一个特征的取值也是非常之多,那么通过统计来估计后面概率的值,变得几乎不可做,这也是为什么需要假设特征之间独立的原因。
2、假如我们没有假设特征之间相互独立,那么我们统计的时候,就需要在整个特征空间中去找,比如统计p(不帅、性格不好、身高矮、不上进|嫁),
我们就需要在嫁的条件下,去找四种特征全满足分别是不帅,性格不好,身高矮,不上进的人的个数,这样的话,由于数据的稀疏性,很容易统计到0的情况。 这样是不合适的。
根据上面俩个原因,朴素贝叶斯法对条件概率分布做了条件独立性的假设,由于这是一个较强的假设,朴素贝叶斯也由此得名!这一假设使得朴素贝叶斯法变得简单,但有时会牺牲一定的分类准确率。
好的,上面我解释了为什么可以拆成分开连乘形式。那么下面我们就开始求解!
我们将上面公式整理一下如下:
下面我将一个一个的进行统计计算(在数据量很大的时候,根据中心极限定理,频率是等于概率的,这里只是一个例子,所以我就进行统计即可)。
p(嫁)=?
首先我们整理训练数据中,嫁的样本数如下:
则 p(嫁) = 6/12(总样本数) = 1/2
p(不帅|嫁)=?统计满足样本数如下:
则p(不帅|嫁) = 3/6 = 1/2 在嫁的条件下,看不帅有多少
p(性格不好|嫁)= ?统计满足样本数如下:
则p(性格不好|嫁)= 1/6
p(矮|嫁) = ?统计满足样本数如下:
则p(矮|嫁) = 1/6
p(不上进|嫁) = ?统计满足样本数如下:
则p(不上进|嫁) = 1/6
下面开始求分母,p(不帅),p(性格不好),p(矮),p(不上进)
统计样本如下:
不帅统计如上红色所示,占4个,那么p(不帅) = 4/12 = 1/3
性格不好统计如上红色所示,占4个,那么p(性格不好) = 4/12 = 1/3
身高矮统计如上红色所示,占7个,那么p(身高矮) = 7/12
不上进统计如上红色所示,占4个,那么p(不上进) = 4/12 = 1/3
到这里,要求p(不帅、性格不好、身高矮、不上进|嫁)的所需项全部求出来了,下面我带入进去即可,
= (1/2*1/6*1/6*1/6*1/2)/(1/3*1/3*7/12*1/3)
下面我们根据同样的方法来求p(不嫁|不帅,性格不好,身高矮,不上进),完全一样的做法,为了方便理解,我这里也走一遍帮助理解。首先公式如下:
下面我也一个一个来进行统计计算,这里与上面公式中,分母是一样的,于是我们分母不需要重新统计计算!
p(不嫁)=?根据统计计算如下(红色为满足条件):
则p(不嫁)=6/12 = 1/2
p(不帅|不嫁) = ?统计满足条件的样本如下(红色为满足条件):
则p(不帅|不嫁) = 1/6
p(性格不好|不嫁) = ?据统计计算如下(红色为满足条件):
则p(性格不好|不嫁) =3/6 = 1/2
p(矮|不嫁) = ?据统计计算如下(红色为满足条件):
则p(矮|不嫁) = 6/6 = 1
p(不上进|不嫁) = ?据统计计算如下(红色为满足条件):
则p(不上进|不嫁) = 3/6 = 1/2
那么根据公式:
p (不嫁|不帅、性格不好、身高矮、不上进) = ((1/6*1/2*1*1/2)*1/2)/(1/3*1/3*7/12*1/3)
很显然(1/6*1/2*1*1/2) > (1/2*1/6*1/6*1/6*1/2)
于是有p (不嫁|不帅、性格不好、身高矮、不上进)>p (嫁|不帅、性格不好、身高矮、不上进)
所以我们根据朴素贝叶斯算法可以给这个女生答案,是不嫁!!!!
5 朴素贝叶斯分类的优缺点
优点:
(1) 算法逻辑简单,易于实现(算法思路很简单,只要使用贝叶斯公式转化医学即可!)
(2)分类过程中时空开销小(假设特征相互独立,只会涉及到二维存储)
缺点:
理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。
而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
整个例子详细的讲解了朴素贝叶斯算法的分类过程,希望对大家的理解有帮助~
参考:李航博士《统计学习方法》
算法杂货铺--分类算法之朴素贝叶斯分类(Naive Bayesian classification)
致谢:德川,皓宇,继豪,施琦
以上是关于朴素贝叶斯分类——大道至简的主要内容,如果未能解决你的问题,请参考以下文章
朴素贝叶斯:朴素贝叶斯定义朴素贝叶斯公式分解朴素贝叶斯分类流程高斯型朴素贝叶斯多项式朴素贝叶斯伯努利型朴素贝叶斯朴素贝叶斯预测概率校准朴素贝叶斯优缺点