sklearn中的朴素贝叶斯

1 概述

1.1 真正的概率分类器

在许多分类算法应用中,特征和标签之间的关系并非是决定性的。如想预测一个人究竟是否能在泰坦尼克号海难中生存下来,可以建一棵决策树来学习训练集。在训练中,其中一个人的特征为30岁、男、普通舱,最后他在海难中去世了。当测试时,发现有另一个人的特征也为30岁、男、普通舱。基于在训练集中的学习,决策树必然会给这个人打上标签:去世。然而这个人的真实情况一定是去世吗?并非如此。
也许这个人是心脏病患者,得到了上救生艇的优先权,也可能,这个人就是挤上了救生艇,活了下来。对分类算法来说,基于训练的经验,这个人“很有可能”是没有活下来,但是算法永远也无法确定“这个人一定没有活下来”。即便这个人最后真的没有活下来,算法也无法确定基于训练数据给出的判断,是否真的解释了这个人没有活下来的真实原因。也就是说,算法得出的结论,永远不是100%确定的,更多的是判断出了一种“样本的标签更可能是某类的可能性”,而非一种“确定”。通过某些规定,如在决策树的叶子节点上占比较多的标签,就是叶子节点上所有样本的标签,来强行让算法返回一个固定结果。但许多时候,也希望能够理解算法判断出的可能性本身。
每种算法使用不同的指标来衡量这种可能性。如,决策树使用的就是叶子节点上占比较多的标签所占的比例(接口predict_proba调用),逻辑回归使用的是sigmoid函数压缩后的似然(接口predict_proba调用),而SVM使用的是样本点到决策边界的距离(接口decision_function调用)。但这些指标的本质,其实都是一种“类概率”的表示,可以通过归一化或sigmoid函数将这些指标压缩到0-1之间,让它们表示模型对预测的结果究竟有多大的把握(置信度)。但无论如何,都希望使用真正的概率来衡量可能性,因此就有真正的概率算法:朴素贝叶斯。
朴素贝叶斯是一种直接衡量标签与特征之间的概率关系的有监督学习算法,是一种专注分类的算法。朴素贝叶斯的算法根源就是基于概率论和数理统计的贝叶斯理论,因此它是真正的概率模型。

1.2 朴素贝叶斯是如何工作的

朴素贝叶斯被认为是最简单的分类算法之一。首先,需要了解一些概率论的基本理论。假设有两个随机变量 X X X Y Y Y,分别可以取值为 x x x y y y。有这两个随机变量,可以定义两种概率:

关键概念:联合概率与条件概率
联合概率:“ X X X取值为 x x x”和“ Y Y Y取值为 y y y”两个事件同时发生的概率,表示为 P ( X = x , Y = y ) P(X=x,Y=y) P(X=x,Y=y)
条件概率:在“ X X X取值为 x x x”的前提下,“ Y Y Y取值为 y y y”的概率,表示为 P ( Y = y ∣ X = x ) P(Y=y\mid X=x) P(Y=yX=x)

在概率论中,可以证明两个事件的联合概率等于这个两个事件任意条件概率*这个条件事件本身的概率。
举个例子:令 X X X为“气温”, Y Y Y为“七星瓢虫冬眠”,则 X X X Y Y Y可能的取值分别为 x x x y y y,其中 x = { 0 , 1 } x = \{0,1\} x={ 0,1},表示没有下降到0度以下,1表示下降到了0度以下。 y = { 0 , 1 } y=\{0,1\} y={ 0,1},其中0表示否,1表示是。两个时间分别发生的概率为:
P ( X = 1 ) = 50 % P(X = 1)=50\% P(X=1)=50%,则是说明气温下降到0度以下的可能性为50%,则 P ( X = 0 ) = 1 − P ( X = 1 ) = 50 % P(X=0)=1-P(X=1) = 50\% P(X=0)=1P(X=1)=50%
P ( Y = 1 ) = 70 % P(Y = 1)=70\% P(Y=1)=70%,则是说明七星瓢虫会冬眠的可能性为70%,则 P ( Y = 0 ) = 1 − P ( Y = 1 ) = 30 % P(Y=0) = 1-P(Y=1)=30\% P(Y=0)=1P(Y=1)=30%
则这两个事件的联合概率为 P ( X = 1 , Y = 1 ) P(X=1,Y=1) P(X=1,Y=1),这个概率代表了气温下降到0度以下和七星瓢虫去冬眠这两件事情同时发生的概率。而两个事件之间的条件概率为 P ( Y = 1 ∣ X = 1 ) P(Y=1\mid X=1) P(Y=1X=1),这个概率代表了气温下降到0度以下这个条件被满足之后,七星瓢虫会去冬眠的概率。也就是说,气温下降到0度以下,一定程度上影响力七星瓢虫去冬眠这个事件。
P ( X = x , Y = y ) = P ( Y = y ∣ X = x ) ∗ P ( X = x ) = P ( X = x ∣ Y = y ) ∗ P ( Y = y ) P(X = x,Y=y)=P(Y=y \mid X=x)*P(X=x) = P(X=x \mid Y=y)*P(Y=y) P(X=x,Y=y)=P(Y=yX=x)P(X=x)=P(X=xY=y)P(Y=y)
简单一些,则可以将上面的式子写成:
P ( X , Y ) = P ( Y ∣ X ) ∗ P ( X ) = P ( X ∣ Y ) ∗ P ( Y ) P(X ,Y)=P(Y \mid X)*P(X) = P(X \mid Y)*P(Y) P(X,Y)=P(YX)P(X)=P(XY)P(Y)
由上面的式子,可以得到贝叶斯理论等式:
P ( Y ∣ X ) = P ( X ∣ Y ) ∗ P ( Y ) P ( X ) P(Y\mid X) = \frac{P(X\mid Y)*P(Y)}{P(X)} P(YX)=P(X)P(XY)P(Y)
而这个式子,就是一切贝叶斯算法的根源理论。可以把特征 X X X当成是条件事件,而要求解的标签 Y Y Y当成是被满足条件后会被影响的结果,而两者之间的概率关系就是 P ( Y ∣ X ) P(Y\mid X) P(YX), 这个概率在机器学习中,被称之为是标签的后验概率(posterior probability),即是说知道了条件,再去求解结果,而标签 Y Y Y在没有任何条件限制下取值为某个值的概率,被写作 P ( Y ) P(Y) P(Y),与后验概率相反,这是完全没有任何限制的,标签的先验概率(prior probability)。而 P ( X ∣ Y ) P(X \mid Y) P(XY)被称为“类的条件概率”(其中类是指标签的分类),表示当 Y Y Y的取值固定的时候, X X X为某个值的概率。

1.2.1 瓢虫冬眠:理解 P ( Y ∣ X ) P(Y|X) P(YX)

假设 X X X是“气温”,也是特征, Y Y Y是“七星瓢虫冬眠”,就是标签。建模的目的是预测七星瓢虫是否会冬眠,也就是说现在求解的是 P ( Y ∣ X ) P(Y\mid X) P(YX),然后根据贝叶斯理论等式开始做各种计算和分析。那么写作 P ( Y ∣ X ) P(Y\mid X) P(YX)的这个概率,代表了什么?更具体一点,可以代表多少种概率?

P ( Y ∣ X ) P(Y\mid X) P(YX)代表了多少种情况的概率?
P ( Y = 1 ∣ X = 1 ) P(Y=1\mid X=1) P(Y=1X=1)表示气温0度以下的条件下,七星瓢虫冬眠的概率
P ( Y = 1 ∣ X = 0 ) P(Y=1\mid X=0) P(Y=1X=0)表示气温0度以上的条件下,七星瓢虫冬眠的概率
P ( Y = 0 ∣ X = 1 ) P(Y=0\mid X=1) P(Y=0X=1)表示气温0度以下的条件下,七星瓢虫没有冬眠的概率
P ( Y = 0 ∣ X = 0 ) P(Y=0\mid X=0) P(Y=0X=0)表示气温0度以上的条件下,七星瓢虫没有冬眠的概率

数学中的第一个不步骤,也就是最重要的事情,就是定义清晰。其实在数学中, P ( Y ∣ X ) P(Y\mid X) P(YX)代表了全部的可能性,而不是单一的概率本身。现在 Y Y Y有两种取值, X X X也有两种取值,就让概率 P ( Y ∣ X ) P(Y\mid X) P(YX)的定义变得很模糊,排列组合之后竟然有4种可能。在机器学习中,一个特征 X X X下取值可能远远不止两种,标签也可能是多分类的,还会有多个特征,排列组合下,最后求解的 P ( Y ∣ X ) P(Y\mid X) P(YX)是什么东西,令人感到困惑。同理, P ( Y ) P(Y) P(Y)随着标签中分类的个数,可以有不同的取值。 P ( Y ∣ X ) P(Y\mid X) P(YX)也是一样的。在这里需要澄清的是:机器学习中的简写 P ( Y ) P(Y) P(Y),通常表示标签取到少数类的概率,少数类往往使用正样本表示,也就是 P ( Y = 1 ) P(Y=1) P(Y=1),本质就是所有样本中标签为1的样本所占的比例。如果没有样本不均衡问题,则必须在求解的时候明确, Y Y Y的取值是什么。
P ( Y ∣ X ) P(Y\mid X) P(YX)是对于任意一个样本而言,如果这个样本的特征 X X X的取值为1,则表示求解 P ( Y = 1 ∣ X = 1 ) P(Y=1\mid X=1) P(Y=1X=1)。如果这个样本下的特征 X X X取值为0,则表示求解 P ( Y = 1 ∣ X = 0 ) P(Y=1\mid X=0) P(Y=1X=0)。也就是说, P ( Y ∣ X ) P(Y\mid X) P(YX)是具体到每一个样本上的,究竟求什么概率,由样本本身的特征的取值决定。每个样本的 P ( Y ∣ X ) P(Y\mid X) P(YX)如果大于阈值0.5,则认为样本是少数类(正样本,1),如果这个样本的 P ( Y ∣ X ) P(Y\mid X) P(YX)小于阈值0.5,则认为样本是多数类(负样本,0或者-1)。如果没有具体的样本,只是说明例子,则必须明确 P ( Y ∣ X ) P(Y\mid X) P(YX) X X X的取值。
在机器学习中,对每一个样本,不可能只有一个特征 X X X,而是会存在着包含 n n n个特征的取值的特征向量 X \textbf X X。因此机器学习中的后验概率,被写作 P ( Y ∣ X ) P(Y\mid \textbf X) P(YX),其中 X \textbf X X中包含样本在 n n n个特征 X i X_i Xi上的分别的取值 x i x_i xi,由此可以表示为 X = { X 1 = x 1 , X 2 = x 2 , . . . , X n = x n } \textbf X = \{ X_1=x_1,X_2=x_2,...,X_n = x_n \} X={ X1=x1,X2=x2,...,Xn=xn}。因此,有:
在这里插入图片描述
虽然写法不同,但其实都包含着同样的含义。以此为基础,机器学习中,对
每一个样本
有:
P ( Y = 1 ∣ X ) = P ( X ∣ Y = 1 ) ∗ P ( Y = 1 ) P ( X ) = P ( x 1 , x 2 , . . . , x n ∣ Y = 1 ) ∗ P ( Y = 1 ) P ( x 1 , x 2 , . . . , x n ) P(Y=1\mid \textbf X) = \frac{P(\textbf X\mid Y=1)*P(Y=1)}{P(\textbf X)} = \frac{P(x_1,x_2,...,x_n\mid Y=1)*P(Y=1)}{P(x_1,x_2,...,x_n)} P(Y=1X)=P(X)P(XY=1)P(Y=1)=P(x1,x2,...,xn)P(x1,x2,...,xnY=1)P(Y=1)
对于分子而言, P ( Y = 1 ) P(Y=1) P(Y=1)就是少数类占总样本量的比例, P ( X ∣ Y = 1 ) P(\textbf X\mid Y=1) P(XY=1)则需要稍微复杂一点的过程来求解。假设只有两个特征 X 1 , X 2 X_1,X_2 X1,X2,由联合概率公式,可以有如下证明:
P ( X 1 , X 2 ∣ Y = 1 ) = P ( X 1 , X 2 , Y = 1 ) P ( Y = 1 ) = P ( X 1 , X 2 , Y = 1 ) P ( X 2 , Y = 1 ) ∗ P ( X 2 , Y = 1 ) P ( Y = 1 ) = P ( X 1 ∣ X 2 , Y = 1 ) ∗ P ( X 2 ∣ Y = 1 ) P(X_1,X_2\mid Y=1) = \frac{P(X_1,X_2,Y=1)}{P(Y=1)}=\frac{P(X_1,X_2,Y=1)}{ P(X_2,Y=1)}*\frac{P(X_2,Y=1)}{P(Y=1)} = P(X_1\mid X_2,Y=1)*P(X_2\mid Y=1) P(X1,X2Y=1)=P(Y=1)P(X1,X2,Y=1)=P(X2,Y=1)P(X1,X2,Y=1)P(Y=1)P(X2,Y=1)=P(X1X2,Y=1)P(X2Y=1)
假设 X 1 X_1 X1 X 2 X_2 X2是有条件独立的:
P ( X 1 , X 2 ∣ Y = 1 ) = P ( X 1 ∣ Y = 1 ) ∗ P ( X 2 ∣ Y = 1 ) P(X_1,X_2\mid Y=1) = P(X_1\mid Y=1)*P(X_2\mid Y=1) P(X1,X2Y=1)=P(X1Y=1)P(X2Y=1)
若推广到 n n n X X X上,则有: P ( X ∣ Y = 1 ) = ∏ i = 1 n P ( X i = x i ∣ Y = 1 ) P(\textbf X\mid Y=1)=\prod_{i=1}^nP(X_i=x_i\mid Y=1) P(XY=1)=i=1nP(Xi=xiY=1)这个式子证明,在

  • 12
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值