目录
1.朴素贝叶斯是如何工作的?
朴素贝叶斯被认为是最简单的1分类算法之一。假如有两个随机变量X和Y,他们分别可以取值x和y,有这两个随机变量,我们可以定义两种概率:
关键概念:联合概率与条件概率
联合概率:“X取值为x”和“Y取值为y”两个事件同时发生的概率,表示为P(X=x,Y=y)
条件概率:在“X取值为x”的前提下,“Y取值为y”的概率,表示为P(Y=y|X=x)
举个例子,设X为“气温”,Y为“七星瓢虫冬眠”,则X和Y可能的取值分别为x和y,其中{0,1},0不表示温度在0度以上,1表示温度在0度以下。y{0,1},其中0表示否,1表示是。
两个事件分别发生的概率就为:
P(X=1)=50%,表示:气温下降到0度以下的可能性为50%,则P(X=0)=1-P(X=1)=50%。
P(Y=1)=70%,表示:七星瓢虫会冬眠的可能性为70%,则P(Y=0)=1-P(Y=1)=30%。
则这两个事件的联合概率为P(X=1,Y=1),这个概率代表了气温下降到0度以下和七星瓢虫冬眠这两件事情同时,独立发生的概率。而这两个事件之间的条件概率为P(Y=y|X=x),这个概率代表了气温下降到0度以下这个条件被满足之后和七星瓢虫冬眠的概率。也就是说,气温下降到0度以下,一定程度上影响了七星瓢虫冬眠这个事件。在概率论中,我们可以证明,两个事件的联合概率等于这两个任意条件概率乘以这个条件事件本身的概率:
即:
即得到贝叶斯理论等式:
而这个式子,就是一切贝叶斯算法的根源理论,我们可以把特征X当成是条件事件,而要求解的标签Y当成是我们被满足条件后会被影响的结果,而两者之间的概率关系就是P(Y|X),这个概率在机器学习中被称之为标签的后验概率(posterior probability),即是说我们先知道了条件,再去求解结果。而标签Y在没有任何条件限制下取值为某个值的概率P(Y),与后验概率相反,这是完全没有任何条件限制的,成为标签的先验概率(prior probablity)。而P(Y|X)被称为“类的条件概率”,表示当Y的取值固定时,X为某个值的概率。
2.举例:瓢虫冬眠
假设依然以X为“气温”,Y为“七星瓢虫冬眠”
P(Y|X)代表了多少种情况的概率?
P(Y=1|X=1)气温0度以下的条件下,七星瓢虫冬眠的概率
P(Y=1|X=0)气温0度以上的条件下,七星瓢虫冬眠的概率
P(Y=0|X=1)气温0度以下的条件下,七星瓢虫没有冬眠的概率
P(Y=0|X=0)气温0度以上的条件下,七星瓢虫没有冬眠的概率
![](https://i-blog.csdnimg.cn/blog_migrate/fd704afb655e40a85c5622f5ce94c572.png)
这个式子证明,在Y=1的条件下,X的多种取值被同时取到的概率,就等于Y=1的条件下,X的多种取值被分别取到的概率相乘。假设特征之间是有条件独立的,可以解决众多问题,叶建华里很多过程,这是朴素贝叶斯“朴素”的理由。因此,贝叶斯在特征之间有较多相关性的数据集上表现不佳,而现实中的数据多多少少都会有一些相关性,所以贝叶斯的分类效力在分类算法中不算特别强大。但无论如何,有了这个式子,我们就可以求解出我们的分子了。 对于贝叶斯理论等式的分母而言,我们可以使用全概率公式来求解P(X):
其中m代表标签的种类,那么对于二分类而言,有:
基于这个方程来求解一个例子的后验概率:
索引 | 温度( | 瓢虫年龄( | 瓢虫冬眠 |
---|---|---|---|
0 | 零下 | 10天 | 是 |
1 | 零下 | 20天 | 是 |
2 | 零上 | 10天 | 否 |
3 | 零下 | 一个月 | 是 |
4 | 零下 | 20天 | 否 |
5 | 零上 | 两个月 | 否 |
6 | 零下 | 一个月 | 否 |
7 | 零下 | 两个月 | 是 |
8 | 零上 | 一个月 | 否 |
9 | 零上 | 10天 | 否 |
10 | 零下 | 20天 | 否 |
现在,我们需要预测零下的时候,年龄为20天的瓢虫,是否会冬眠。
设定阈值为0.5,假设大于0.5就会被认为是冬眠,小于0.5就被认为不会冬眠。根据计算结果可得:在零下,年龄为20天的瓢虫是不会冬眠的,这就完成了第一次预测。
3.与众不同的贝叶斯![P(Y=0|X_{1},X_{2},.....X_{n})](https://latex.csdn.net/eq?P%28Y%3D0%7CX_%7B1%7D%2CX_%7B2%7D%2C.....X_%7Bn%7D%29)
朴素贝叶斯是一个不建模的算法。KMeans,PCA都是无监督学习,而朴素贝叶斯是一个有监督,不建模的算法。在上面的例子中,有标签的表格就是训练集,而所提出的“零下,20天”则是没有标签的测试集。我们认为,训练集和测试集都来自于同一个不可获得的大样本下,并且这个大样本下的各个属性所表现出来的规律应当是一致的,因此训练集上计算出来的各种概率,可以直接放到测试集上来使用,即便不建模,也能完成分类。
对于这个式子来说,从训练集中求解P(Y=1)很容易,但和
这一部分就没有那么容易了。在上面的例子中,分母通过全概率公式求解,两个特征就求解了四项概率,随着特征数目的逐渐变多,分母上的计算将会成指数级增长,而分子中的
也越来越难计算。不过对于同一个样本来说,在而分类状况下有:
并且:
所以在分类的时候,我们选择和
中较大的一个所对应的Y的取值作为这个样本的分类。在比较两个类别时,两个概率计算的分母是一致的,因此可以不计算分母,只考虑分子的大小。当分别计算出分子的大小之后,就可以通过让两个分子相加来获得分母的值,以此来避免计算分母。这个过程被称为“最大后验估计(MAP)”。在最大后验估计中,只需要求解分子,主要是求解
,就能够获得相应概率。
在现实中,要求解分子也会有各种各样的问题,比如说,测试集中出现的某种概率组合是训练集中从未出现的状况,这种时候就会出现概率为0的情况,贝叶斯概率的分子就为0。接下来以汉堡称重的例子了解如何对连续性特征求解概率。
4. 汉堡称重:连续型变量的概率估计
问题:汉堡王向客户承诺他们的汉堡至少是100g一个,但实际我们去买汉堡可以预料到它肯定不是标准的100g。设汉堡重量为特征,100g就是取值
,那买到一个汉堡是100g的概率P(100g|Y)为多少?如果买n个汉堡,很可能n个汉堡都不一样重,只要我们称重足够精确,100.00001g和100.00002g就可以是不一致的。这种情况下我们可以买无限个汉堡,可以得到无限个重量,可以有无限个基本事件的发生,所以有:
。即买到汉堡刚好是100g的概率为0,当一个特征下有无数种可能发生的时间时,这个特征的取值就是连续型的。当特征为连续型时,随机取到某一个事件发生的概率为0。
那么换一个问题:如果我们随机买一个汉堡,汉堡的重量在98g~102g之间的概率是多少?即求解概率P(98g<x<102g)。现在随机买100个汉堡,称重后绘制直方图,并且规定每4g为一个区间,可以得到如下图:其中重量在98g~102g之间的汉堡为浅绿色柱子中的所有样本,假设上面有m个汉堡,则此时P(98g<x<102g)=m/100。如果购买1w个汉堡,那么P(98g<x<102g)就是所有浅绿色柱状图上的样本加和除以一万,可以看出直方图更加平滑。那假设购买10w个汉堡,直方图会变得接近一条曲线,而P(98g<x<102g)依然是所有浅绿色柱状图上的样本加和除以购买汉堡的总量,即可以表示为浅绿色柱子的面积除以曲线下的总面积。当购买无限个汉堡所形成的曲线就要概率密度曲线(probability density function,PDF)。
一条曲线下的面积,就是这条曲线所代表的的函数的积分,如果我们定义曲线可以用函数f(x)来表示的话,整条曲线的面积就是:,
就是
在
上的微分。在某些特定
下,可以证明上述积分等于1,总面积是1。这说明一个连续型特征的取值
取到某个区间
之内的概率就为这个区间在概率密度曲线下的面积,所以特征
在区间
中取值的概率可以表示为:
而在后验概率的计算过程中,常量可以被抵消,所以就可以利用
的某种变化来估计
,现在求解连续型变量下某个点取值的概率问题,转化成了求解一个函数
在点
上取值的问题。只要找到
就可以求解出不同的条件概率了。
4. sklearn中的朴素贝叶斯
类 | 含义 |
---|---|
naive_bayes.BernoulliNB | 伯努利分布下的朴素贝叶斯 |
naive_bayes.GaussianNB | 高斯分布下的朴素贝叶斯 |
naive_bayes.MultinomialNB | 多项式分布下的朴素贝叶斯 |
naive_bayes.ComplementNB | 补充朴素贝叶斯 |
linear_model.BayesianRidge | 贝叶斯岭回归 |