1. 概述
1.1 什么是朴素贝叶斯
朴素贝叶斯是一种直接衡量标签和特征之间的概率关系的有监督的学习算法,是一种专注分类的算法。该算法是基于概率论和数理统计的贝叶斯理论,因此它是一个真正的概率模型。
对于朴素贝叶斯分类器是真正的概率分类器这种说法,该如何理解呢?因为其实在分类算法里边,特征和标签的关系并非是绝对的。比较经典的一个案例是,预测一个人能否在泰坦尼克号海难中生存下来。若构建一棵决策树来学习训练集,在训练样本中,有一个人特征为:30岁,男性,普通舱,最后是去世。在进行测试的时候,如果测试的这个人的特征也是30岁,男性,普通舱。决策树势必会给他打上去世的标签,但是真实情况可能与之相反。因为这个人有可能最后上了救生舱,活了下来。对于分类算法而言,它只能预测这个人“很可能”没有活下来,而没有办法确定这个人一定没活下来。即算法得到的结论,不可能是100%正确的,更多的是判断出更大的可能性,而非确定性。
1.2 朴素贝叶斯工作原理
首先,需要了解概率论的基础的一些知识。假设有两个随机变量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。其中x={0,1},0表示天气下雨,1表示晴朗。y={0,1},0表示否,1表示是。
P(X=1) = 50%表示,天晴朗的可能性为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),表示天气晴朗和小明去看电影这两件事同时独立发生的概率。
两个事件的条件概率为P(Y=1|X=1),表示天气晴朗这个条件成立的情况下,小明去看电影的概率。即天气晴朗这个事件,对小明去看电影这个事件是有影响的。
在概率论中,两个事件的联合概率等于这两个事件任意条件概率*这个条件事件本身的概率,即
P(X=1,Y=1) = P(Y=1|X=1)*P(X=1) = P(X=1|Y=1)*P(Y=1)
上边的式子也可以简写成:
P(X,Y) = P(Y|X)*P(X) = P(X|Y)*P(Y)
由上边的式子可以得到贝叶斯理论的等式:
P(Y|X) =
P
(
X
∣
Y
)
∗
P
(
Y
)
P
(
X
)
{P(X|Y)*P(Y)} \over {P(X)}
P(X)P(X∣Y)∗P(Y)
以上是对数学中的贝叶斯理论的介绍,那么在机器学习算法中该如何理解呢?
一般,我们把特征X当成是条件事件,需要求解的标签Y当成是被满足条件后会被影响的结果,两者之间的概率关系就是P(Y|X),在机器学习称此概率是标签的后验概率(posterior probability),即先知道了条件,再去求解结果。而P(Y)是标签Y在没有任何条件限制下取值为某个值的概率,是标签的先验概率(prior probability)。而P(X|Y)是当Y取某个固定值,X为某个值的概率,是类的条件概率
在机器学习中,P(Y)通常表示标签取到少数类的概率,少数类往往使用正样本表示,即P(Y=1),即所有样本中标签为1的样本所占的比例。
P(Y|X)是对于一个样本而言,如果这个样本的特征X的取值为1,则表示求解P(Y=1|X=1);如果这个样本的特征X的取值为0,则表示求解P(Y=1|X=0)。
注意如下写法:
机器学习中,对每一个样本有:
P(Y=1|X) =
P
(
X
∣
Y
=
1
)
∗
P
(
Y
=
1
)
P
(
X
)
{P(X|Y=1)*P(Y=1)} \over {P(X)}
P(X)P(X∣Y=1)∗P(Y=1) =
P
(
x
1
,
x
2
,
x
3...
x
n
∣
Y
=
1
)
∗
P
(
Y
=
1
)
P
(
x
1
,
x
2
,
x
3...
x
n
)
{P(x1, x2,x3...xn|Y=1)*P(Y=1)} \over {P(x1,x2,x3...xn)}
P(x1,x2,x3...xn)P(x1,x2,x3...xn∣Y=1)∗P(Y=1)
表示,在这一个样本下的这一组特征取值,Y=1的概率是多少。
假设样本只有两个特征X1,X2,根据联合概率公式:
P(X1,X2|Y=1) =
P
(
X
1
,
X
2
,
Y
=
1
)
P
(
Y
=
1
)
{P(X1, X2,Y=1)} \over {P(Y=1)}
P(Y=1)P(X1,X2,Y=1) =
P
(
X
1
,
X
2
,
Y
=
1
)
P
(
X
2
,
Y
=
1
)
{P(X1, X2,Y=1)} \over {P(X2, Y=1)}
P(X2,Y=1)P(X1,X2,Y=1)*
P
(
X
2
,
Y
=
1
)
P
(
Y
=
1
)
{P(X2,Y=1)} \over {P(Y=1)}
P(Y=1)P(X2,Y=1) = P(X1| X2,Y=1) * P(X2|Y=1)
假设X1和X2之间是有条件独立的(Y=1条件成立,无论X2取什么,X1的概率都可以实现,所以可以消掉X2的条件):
上式 = P(X1|Y=1)*P(X2|Y=1)
如果推广到n个X上,就有:
即在Y=1的条件下,多个特征取值被同时取到的概率等于在Y=1的条件下多个特征取值被分别取到某个值的概率相乘。
上面的式子中,假设X1与X2是有条件独立的(X2是一个对X1在某个条件下的取值完全无影响的变量),则P(X1|X2,Y=1) = P(X1|Y=1)。
假设特征之间是有条件独立的,可以解决很多问题,简化了计算的过程,这也是朴素贝叶斯被称为“朴素”的原因。但是,这也使得贝叶斯在处理特征之间的相关性较大的数据集时,表现不佳。
上面的过程中,解决了如何求解贝叶斯理论中的分子的问题,接下来思考如何求解分母。
可以使用全概率公式来求解P(X):
m表示标签的种类
以二分类问题为例:
P(X) = P(Y=1)*P(X|Y=1) + P(Y=0)*P(X|Y=0)
举个栗子来计算一下后验概率
ID | 有房者(X1) | 婚姻状况(X2) | 拖欠贷款(Y) |
---|---|---|---|
1 | 是 | 单身 | 否 |
2 | 否 | 已婚 | 否 |
3 | 否 | 单身 | 否 |
4 | 是 | 已婚 | 否 |
5 | 否 | 离异 | 是 |
6 | 否 | 已婚 | 否 |
7 | 是 | 离异 | 否 |
8 | 否 | 单身 | 是 |
9 | 否 | 已婚 | 否 |
10 | 否 | 单身 | 是 |
基于上面的数据,希望预测没房、单身的人,会不会拖欠贷款。
P(Y=1|X1=0,X2=单身) =
P
(
x
1
,
x
2
∣
Y
=
1
)
∗
P
(
Y
=
1
)
P
(
x
1
,
x
2
)
{P(x1,x2|Y=1)} *P(Y=1)\over {P(x1,x2)}
P(x1,x2)P(x1,x2∣Y=1)∗P(Y=1) = P(拖欠贷款|没房,单身) =
P
(
没
房
,
单
身
∣
拖
欠
贷
款
)
∗
P
(
拖
欠
贷
款
)
P
(
没
房
,
单
身
)
{P(没房,单身|拖欠贷款)*P(拖欠贷款)}\over{P(没房,单身)}
P(没房,单身)P(没房,单身∣拖欠贷款)∗P(拖欠贷款) =
P
(
没
房
∣
拖
欠
贷
款
)
∗
P
(
单
身
∣
拖
欠
贷
款
)
∗
P
(
拖
欠
贷
款
)
P
(
拖
欠
贷
款
)
∗
P
(
没
房
,
单
身
∣
拖
欠
贷
款
)
+
P
(
不
拖
欠
贷
款
)
∗
P
(
没
房
,
单
身
∣
不
拖
欠
贷
款
)
{P(没房|拖欠贷款)*P(单身|拖欠贷款)*P(拖欠贷款)}\over{P(拖欠贷款)*P(没房,单身|拖欠贷款)+P(不拖欠贷款)*P(没房,单身|不拖欠贷款)}
P(拖欠贷款)∗P(没房,单身∣拖欠贷款)+P(不拖欠贷款)∗P(没房,单身∣不拖欠贷款)P(没房∣拖欠贷款)∗P(单身∣拖欠贷款)∗P(拖欠贷款)
分子求解:
P(拖欠贷款) =
3
10
{3}\over{10}
103
P(没房|拖欠贷款) = 3 3 {3}\over{3} 33 = 1
P(单身|拖欠贷款) = 2 3 {2}\over{3} 32
分母求解:
P(拖欠贷款) =
3
10
{3}\over{10}
103
P(没房,单身|拖欠贷款) = 1* 2 3 {2}\over{3} 32 = 2 3 {2}\over{3} 32
P(不拖欠贷款) = 7 10 {7}\over{10} 107
P(没房,单身|不拖欠贷款) = 4 7 {4}\over{7} 74 * 2 7 {2}\over{7} 72 = 8 49 {8}\over{49} 498
故,没房、单身的人,会拖欠贷款的概率为:
(
3
/
10
)
∗
1
∗
(
2
/
3
)
(
3
/
10
)
∗
(
2
/
3
)
+
(
7
/
10
)
∗
(
8
/
49
)
{(3/10) * 1 * (2/3)}\over{(3/10)*(2/3) + (7/10)*(8/49)}
(3/10)∗(2/3)+(7/10)∗(8/49)(3/10)∗1∗(2/3) =
7
11
{7}\over{11}
117 = 0.64
设定阈值为0.5,假设大于0.5就认为会拖欠贷款,小于0.5就认为不会拖欠贷款。根据上面的计算结果(大于0.5),可以认为没房、单身的人是会拖欠贷款的。这就完成了一次预测的过程。
上面的过程是我们人为模拟的一个过程,在这个过程中,训练集和测试集对应的是什么呢?模型在哪呢?对数据集的fit以及predict又体现在何处?
这些问题将在下面一篇博客中解释。