文章目录
判别模型与生成模型
机器学习或者统计学习的方法可以分为判别模型(非概率模型)和生成模型(概率模型)。
判别模型
常见的形式为 y = f(x) ,建立目标变量y和输入特征x之间的映射关系,并且多数情况下会形成决策边界,如下图所示。例如 y = wx + b。每当输入一个新样本的特征时,可以直接得到预测结果。以二分类为例子,wx + b 的结果是0~1之间的概率值,当概率值大于0.5,我们就得到y=1,反之,则y=0。
生成模型
常见的形式为P(y|x),建立出特征x与不同目标变量y之间的联合概率分布。也就是建立好属于不同y的特征x的分布模型,如下图所示。当需要对新的数据x预测时,则需要判断x属于各个y的概率,概率大的y则为预测结果。
引用知乎文章机器学习“判定模型”和“生成模型”有什么区别? 中 politer的回答来举个具体的例子:
判别式模型举例:要确定一个羊是山羊还是绵羊,用判别模型的方法是从历史数据中学习到模型,然后通过提取这只羊的特征来预测出这只羊是山羊的概率,是绵羊的概率。
生成式模型举例:利用生成模型是根据山羊的特征首先学习出一个山羊的模型,然后根据绵羊的特征学习出一个绵羊的模型,然后从这只羊中提取特征,放到山羊模型中看概率是多少,在放到绵羊模型中看概率是多少,哪个大就是哪个。
细细品味上面的例子,判别式模型是根据一只羊的特征可以直接给出这只羊的概率(比如logistic regression,这概率大于0.5时则为正例,否则为反例),而生成式模型是要都试一试,最大的概率的那个就是最后结果~
如果你还了解过机器学习的其他算法,那么:
- 概率模型(生成模型)有:朴素贝叶斯、高斯混合模型、决策树、隐马尔可夫模型、条件随机场、概率潜在语义分析、潜在狄利克雷分配等。
- 非概率模型(判别模型)有:感知机、支持向量机、k近邻,k均值,Adaboost,神经网络等。
先验概率、条件概率、后验概率
先验概率:是基于以往的经验或对现有数据的分析所得到的概率,如硬币正面的概率p为1/2,这里的p=1/2就是先验概率。
条件概率:条件概率是知道原因来推测结果,即有因求果。就是给定某个事件X发生的前提条件下,另一个事件Y发生的概率,记为P(Y|X)。例如已知X:今天是双十一,那么Y:促销的概率可以记为P(促销|今天是双十一)。
后验概率:条件概率是知道结果来推测原因,即有果求因。表达形式与条件概率相似,例如P(X|Y),只不过含义变了。例如X:今天是双十一,Y:促销,则P(X|Y)表示已知现在商品在促销,那么今天是双十一的概率,即P(今天是双十一|促销)。
朴素贝叶斯法建模
假设输入空间
X
∈
R
n
\mathcal X \in R^n
X∈Rn是n维的向量集合,输出空间
Y
=
{
c
1
,
c
2
.
.
.
c
k
}
\mathcal Y = \{c_1, c_2...c_k\}
Y={c1,c2...ck}为类别标记的集合。输入为特征向量
x
∈
X
x \in \mathcal X
x∈X,输出为类别标记
y
∈
Y
y \in \mathcal Y
y∈Y。X 为
X
\mathcal X
X 上的随机向量,Y为
Y
\mathcal Y
Y 上的随机变量。P(X, Y) 是X,Y的联合概率分布,假设训练集T:
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
T = \{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}
T={(x1,y1),(x2,y2),...,(xN,yN)}
是由P(X, Y)独立同分布产生。
朴素贝叶斯法实际上学到的是生成数据的机制,所以属于生成模型。朴素贝叶斯法对条件概率分布做了条件独立性假设(不同的特征相互独立且同分布),通过已知数据集学习联合概率分布P(X, Y)。具体的,需要学习:
P
(
Y
=
c
k
)
,
k
=
1
,
2
,
.
.
.
,
K
(1)
P(Y=c_k), k=1,2,...,K \tag 1
P(Y=ck),k=1,2,...,K(1)
P ( X = x ∣ Y = c k ) = P ( X ( 1 ) = x ( 1 ) , X ( 2 ) = x ( 2 ) , … , X ( n ) = x ( n ) ∣ Y = c k ) = ∏ j = 1 n P ( X ( j ) = x ( j ) ∣ Y = c k ) (2) \begin{aligned} P(X=x|Y=c_k)&=P(X^{(1)}=x^{(1)},X^{(2)}=x^{(2)},\dots,X^{(n)}=x^{(n)}|Y=c_k)\\ &=\prod^n_{j=1}P(X^{(j)}=x^{(j)}|Y=c_k) \end{aligned} \tag 2 P(X=x∣Y=ck)=P(X(1)=x(1),X(2)=x(2),…,X(n)=x(n)∣Y=ck)=j=1∏nP(X(j)=x(j)∣Y=ck)(2)
公式的上角标表示第i个样本,其中(1)是各个类别的先验概率分布,(2)是条件概率分布。基于上面的两个式子,就可以计算得到联合概率分布P(X, Y)。
朴素贝叶斯法在分类时,对给定的输入x,通过学习到的模型计算后验概率分布
P
(
Y
=
c
k
∣
X
=
x
)
P(Y=c_k| X = x)
P(Y=ck∣X=x),然后将后验概率最大的类别作为x的输出。后验概率的计算公式由贝叶斯定理(全概率公式)可得:
P
(
Y
=
c
k
∣
X
=
x
)
=
P
(
Y
=
c
k
,
X
=
x
)
p
(
X
=
x
)
=
P
(
X
=
x
∣
Y
=
c
k
)
P
(
Y
=
c
k
)
∑
k
=
1
K
P
(
X
=
x
∣
Y
=
c
k
)
P
(
Y
=
c
k
)
(3)
\begin{aligned} P(Y=c_k| X = x) &= \frac{P(Y=c_k, X = x)}{p(X = x)} \\ &= \frac{P(X=x|Y=c_k) P(Y=c_k)}{\sum_{k=1}^KP(X=x|Y=c_k)P(Y=c_k)} \end{aligned} \tag 3
P(Y=ck∣X=x)=p(X=x)P(Y=ck,X=x)=∑k=1KP(X=x∣Y=ck)P(Y=ck)P(X=x∣Y=ck)P(Y=ck)(3)
基于(3),朴素贝叶斯分类器可以表示为:
y
=
arg
max
c
k
P
(
Y
=
c
k
∣
X
=
x
)
(4)
y = \arg \max\limits_{c_k}P(Y=c_k| X = x) \tag 4
y=argckmaxP(Y=ck∣X=x)(4)
由于(3)的分母是个固定值,故(4)可以简化为:
y
=
arg
max
c
k
P
(
X
=
x
∣
Y
=
c
k
)
P
(
Y
=
c
k
)
(5)
y =\arg \max\limits_{c_k}P(X=x|Y=c_k) P(Y=c_k) \tag 5
y=argckmaxP(X=x∣Y=ck)P(Y=ck)(5)
将(2)代入(5)又可以得到:
y
=
arg
max
c
k
P
(
Y
=
c
k
)
∏
j
=
1
n
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
(6)
y =\arg \max\limits_{c_k} P(Y=c_k)\prod^n_{j=1}P(X^{(j)}=x^{(j)}|Y=c_k) \tag 6
y=argckmaxP(Y=ck)j=1∏nP(X(j)=x(j)∣Y=ck)(6)
后验概率 P ( Y = c k ∣ X = x ) P(Y=c_k| X = x) P(Y=ck∣X=x)最大化的解释
朴素贝叶斯法将实例划分到概率最大的类别中,等价于期望风险最小化,所谓期望风险就是损失的期望值。假设我们选择0-1损失函数:
L
(
Y
,
f
(
x
)
)
=
{
1
,
Y
≠
f
(
X
)
0
,
Y
≠
f
(
X
)
L(Y,f(x)) = \left\{ \begin{array}{lr} 1, Y\ne f(X) \\ 0, Y\ne f(X) \end{array} \right.
L(Y,f(x))={1,Y=f(X)0,Y=f(X)
损失值越小,模型越好。f(X)为决策函数,此时期望风险为:
R
e
x
p
(
f
)
=
E
[
L
(
Y
,
f
(
X
)
)
]
R_{exp}(f) = E[L(Y, f(X))]
Rexp(f)=E[L(Y,f(X))]
对于某个向量X,可以用下面的公式求期望风险:
R
e
x
p
(
f
)
=
∑
k
=
1
K
[
L
(
c
k
,
f
(
X
)
)
]
P
(
c
k
∣
X
)
R_{exp}(f) = \sum_{k=1}^K[L(c_k,f(X))]P(c_k|X)
Rexp(f)=k=1∑K[L(ck,f(X))]P(ck∣X)
要得到某个y,使得上式最小化,则有:
f
(
x
)
=
arg
min
y
∈
Y
∑
k
=
1
K
L
(
c
k
,
y
)
P
(
c
k
∣
X
=
x
)
=
arg
min
y
∈
Y
∑
k
=
1
K
P
(
y
≠
c
k
∣
X
=
x
)
=
arg
min
y
∈
Y
(
1
−
P
(
y
=
c
i
∣
X
=
x
)
)
=
arg
max
y
∈
Y
P
(
y
=
c
k
∣
X
=
x
)
\begin{aligned} f(x) &= \arg\min\limits_{y \in \mathcal Y} \sum_{k=1}^KL(c_k, y)P(c_k|X=x) \\ &= \arg\min\limits_{y \in \mathcal Y} \sum_{k=1}^KP(y \ne c_k|X=x) \\ &= \arg\min\limits_{y \in \mathcal Y} (1-P(y=c_i|X=x)) \\ &= \arg\max\limits_{y \in \mathcal Y}P(y=c_k|X=x) \end{aligned}
f(x)=argy∈Ymink=1∑KL(ck,y)P(ck∣X=x)=argy∈Ymink=1∑KP(y=ck∣X=x)=argy∈Ymin(1−P(y=ci∣X=x))=argy∈YmaxP(y=ck∣X=x)
这样,想要期望风险最小化则需要后验概率最大化:
f
(
x
)
=
arg
max
y
∈
Y
P
(
y
=
c
k
∣
X
=
x
)
f(x) = \arg\max\limits_{y \in \mathcal Y}P(y=c_k|X=x)
f(x)=argy∈YmaxP(y=ck∣X=x)
这就是朴素贝叶斯法采用的原理。
朴素贝叶斯法的参数估计
极大似然估计
在朴素贝叶斯法中,模型的学习就是要估计 P ( Y = c k ) P(Y=c_k) P(Y=ck)和 P ( X ( j ) = x ( j ) ∣ Y = c k ) P(X^{(j)}=x^{(j)}|Y=c_k) P(X(j)=x(j)∣Y=ck),可以用极大似然估计法估计相应的概率。
P
(
Y
=
c
k
)
P(Y=c_k)
P(Y=ck)好理解,其实就是
c
k
c_k
ck的频率:
P
(
Y
=
c
k
)
=
∑
i
=
1
N
I
(
y
i
=
c
k
)
N
,
k
=
1
,
2
,
.
.
.
,
K
P(Y=c_k) = \frac{\sum_{i=1}^N I(y_i=c_k)}{N}, k=1,2,...,K \\
P(Y=ck)=N∑i=1NI(yi=ck),k=1,2,...,K
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
P(X^{(j)}=x^{(j)}|Y=c_k)
P(X(j)=x(j)∣Y=ck) 就是要计算属于不同的
c
k
c_k
ck的样本中,不同特征的不同取值的概率。设第j个特征
x
(
j
)
x^{(j)}
x(j)的可能取值集合为
{
a
j
1
,
a
j
2
,
.
.
.
,
a
j
S
j
}
\{a_{j1}, a_{j2},..., a_{jS_j}\}
{aj1,aj2,...,ajSj},则极大似然估计为:
P
(
X
(
j
)
=
a
j
l
∣
Y
=
c
k
)
=
∑
i
=
1
N
I
(
x
i
(
j
)
=
a
j
l
,
y
i
=
c
k
)
∑
i
=
1
N
I
(
y
i
=
c
k
)
j
=
1
,
2
,
.
.
.
,
n
;
l
=
1
,
2
,
.
.
.
,
S
j
;
k
=
1
,
2
,
.
.
.
,
K
;
P(X^{(j)}=a_{jl}|Y=c_k) = \frac{\sum_{i=1}^N I(x_i^{(j)}=a_{jl}, y_i = c_k)}{\sum_{i=1}^N I(y_i = c_k)} \\ j=1,2,...,n; \quad l=1,2,...,S_j; \quad k=1,2,...,K; \quad
P(X(j)=ajl∣Y=ck)=∑i=1NI(yi=ck)∑i=1NI(xi(j)=ajl,yi=ck)j=1,2,...,n;l=1,2,...,Sj;k=1,2,...,K;
其中
a
j
l
a_{jl}
ajl表示第j个特征取第
l
l
l个值,
I
I
I为指示函数,满足条件则取值为1,否则为0。
算法流程
(1)计算先验概率与条件概率:
P
(
Y
=
c
k
)
=
∑
i
=
1
N
I
(
y
i
=
c
k
)
N
P
(
X
(
j
)
=
a
j
l
∣
Y
=
c
k
)
=
∑
i
=
1
N
I
(
x
i
(
j
)
=
a
j
l
,
y
i
=
c
k
)
∑
i
=
1
N
I
(
y
i
=
c
k
)
j
=
1
,
2
,
.
.
.
,
n
;
l
=
1
,
2
,
.
.
.
,
S
j
;
k
=
1
,
2
,
.
.
.
,
K
;
P(Y=c_k) = \frac{\sum_{i=1}^N I(y_i=c_k)}{N}\\ P(X^{(j)}=a_{jl}|Y=c_k) = \frac{\sum_{i=1}^N I(x_i^{(j)}=a_{jl}, y_i = c_k)}{\sum_{i=1}^N I(y_i = c_k)} \\ j=1,2,...,n; \quad l=1,2,...,S_j; \quad k=1,2,...,K; \quad
P(Y=ck)=N∑i=1NI(yi=ck)P(X(j)=ajl∣Y=ck)=∑i=1NI(yi=ck)∑i=1NI(xi(j)=ajl,yi=ck)j=1,2,...,n;l=1,2,...,Sj;k=1,2,...,K;
(2)对于给定的实例
x
=
(
x
(
1
)
,
x
(
2
)
,
.
.
.
x
(
n
)
)
T
x=(x^{(1)},x^{(2)},...x^{(n)})^T
x=(x(1),x(2),...x(n))T,计算:
P
(
Y
=
C
k
)
=
∏
j
=
1
n
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
P(Y=C_k) = \prod^n_{j=1}P(X^{(j)}=x^{(j)}|Y=c_k)
P(Y=Ck)=j=1∏nP(X(j)=x(j)∣Y=ck)
(3)确定实例x的类:
y
=
arg
max
c
k
P
(
Y
=
c
k
)
∏
j
=
1
n
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
y =\arg \max\limits_{c_k} P(Y=c_k)\prod^n_{j=1}P(X^{(j)}=x^{(j)}|Y=c_k)
y=argckmaxP(Y=ck)j=1∏nP(X(j)=x(j)∣Y=ck)
举个例子,假设有数据集如下图所示,估计
x
=
(
2
,
S
)
T
x=(2,S)^T
x=(2,S)T的类别:
则利用朴素贝叶斯法求解过程如下:
P
(
Y
=
1
)
=
9
/
15
,
P
(
Y
=
−
1
)
=
6
/
15
P
(
X
(
1
)
=
1
∣
Y
=
1
)
=
2
/
9
,
P
(
X
(
1
)
=
2
∣
Y
=
1
)
=
3
/
9
,
P
(
X
(
1
)
=
3
∣
Y
=
1
)
=
4
/
9
P
(
X
(
2
)
=
S
∣
Y
=
1
)
=
1
/
9
,
P
(
X
(
2
)
=
M
∣
Y
=
1
)
=
4
/
9
,
P
(
X
(
2
)
=
L
∣
Y
=
1
)
=
4
/
9
P
(
X
(
1
)
=
1
∣
Y
=
−
1
)
=
3
/
6
,
P
(
X
(
1
)
=
2
∣
Y
=
−
1
)
=
2
/
6
,
P
(
X
(
1
)
=
3
∣
Y
=
−
1
)
=
4
/
6
P
(
X
(
2
)
=
S
∣
Y
=
−
1
)
=
3
/
6
,
P
(
X
(
2
)
=
M
∣
Y
=
−
1
)
=
2
/
6
,
P
(
X
(
2
)
=
L
∣
Y
=
−
1
)
=
1
/
6
P
(
Y
=
1
)
P
(
X
(
1
)
=
2
∣
Y
=
1
)
P
(
X
(
2
)
=
S
∣
Y
=
1
)
=
9
15
⋅
3
9
⋅
1
9
=
1
45
P
(
Y
=
−
1
)
P
(
X
(
1
)
=
2
∣
Y
=
−
1
)
P
(
X
(
2
)
=
S
∣
Y
=
−
1
)
=
6
15
⋅
2
6
⋅
3
6
=
1
15
\begin{aligned} & P(Y=1) = 9/15, P(Y=-1) = 6/15 \\ \\ & P(X^{(1)}=1|Y=1)=2/9, P(X^{(1)}=2|Y=1)=3/9, P(X^{(1)}=3|Y=1)=4/9 \\ & P(X^{(2)}=S|Y=1)=1/9, P(X^{(2)}=M|Y=1)=4/9, P(X^{(2)}=L|Y=1)=4/9 \\ & P(X^{(1)}=1|Y=-1)=3/6, P(X^{(1)}=2|Y=-1)=2/6, P(X^{(1)}=3|Y=-1)=4/6 \\ & P(X^{(2)}=S|Y=-1)=3/6, P(X^{(2)}=M|Y=-1)=2/6, P(X^{(2)}=L|Y=-1)=1/6 \\ \\ & P(Y=1)P(X^{(1)}=2|Y=1)P(X^{(2)}=S|Y=1) = \frac{9}{15} \cdot\frac{3}{9} \cdot\frac{1}{9}=\frac{1}{45} \\ & P(Y=-1)P(X^{(1)}=2|Y=-1)P(X^{(2)}=S|Y=-1) = \frac{6}{15} \cdot\frac{2}{6} \cdot\frac{3}{6}=\frac{1}{15} \end{aligned}
P(Y=1)=9/15,P(Y=−1)=6/15P(X(1)=1∣Y=1)=2/9,P(X(1)=2∣Y=1)=3/9,P(X(1)=3∣Y=1)=4/9P(X(2)=S∣Y=1)=1/9,P(X(2)=M∣Y=1)=4/9,P(X(2)=L∣Y=1)=4/9P(X(1)=1∣Y=−1)=3/6,P(X(1)=2∣Y=−1)=2/6,P(X(1)=3∣Y=−1)=4/6P(X(2)=S∣Y=−1)=3/6,P(X(2)=M∣Y=−1)=2/6,P(X(2)=L∣Y=−1)=1/6P(Y=1)P(X(1)=2∣Y=1)P(X(2)=S∣Y=1)=159⋅93⋅91=451P(Y=−1)P(X(1)=2∣Y=−1)P(X(2)=S∣Y=−1)=156⋅62⋅63=151
由于1/15大于1/45,所以y = -1。
贝叶斯估计
回归条件概率的计算:
P
(
X
(
j
)
=
a
j
l
∣
Y
=
c
k
)
=
∑
i
=
1
N
I
(
x
i
(
j
)
=
a
j
l
,
y
i
=
c
k
)
∑
i
=
1
N
I
(
y
i
=
c
k
)
P(X^{(j)}=a_{jl}|Y=c_k) = \frac{\sum_{i=1}^N I(x_i^{(j)}=a_{jl}, y_i = c_k)}{\sum_{i=1}^N I(y_i = c_k)}
P(X(j)=ajl∣Y=ck)=∑i=1NI(yi=ck)∑i=1NI(xi(j)=ajl,yi=ck)
如果存在某个类别下的某个特征没有出现过,则概率值为0,会影响后验概率的计算结果,导致分类结果产生偏差。解决此类问题的方法是采用贝叶斯估计。条件概率的贝叶斯估计是:
P
λ
(
X
(
j
)
=
a
j
l
∣
Y
=
c
k
)
=
∑
i
=
1
N
I
(
x
i
(
j
)
=
a
j
l
,
y
i
=
c
k
)
+
λ
∑
i
=
1
N
I
(
y
i
=
c
k
)
+
S
j
λ
(1)
P_\lambda(X^{(j)}=a_{jl}|Y=c_k) = \frac{\sum_{i=1}^N I(x_i^{(j)}=a_{jl}, y_i = c_k) + \lambda}{\sum_{i=1}^N I(y_i = c_k)+ S_j\lambda} \tag 1
Pλ(X(j)=ajl∣Y=ck)=∑i=1NI(yi=ck)+Sjλ∑i=1NI(xi(j)=ajl,yi=ck)+λ(1)
式子中
λ
≥
0
\lambda \ge 0
λ≥0,当
λ
=
0
\lambda = 0
λ=0则为极大似然估计,
λ
\lambda
λ 通常取1,此时成为拉普拉斯平滑。同样,先验概率的贝叶斯估计是:
P
λ
(
Y
=
c
k
)
=
∑
i
=
1
N
I
(
y
i
=
c
k
)
+
λ
N
+
K
λ
P_\lambda(Y=c_k) = \frac{\sum_{i=1}^N I(y_i=c_k)+\lambda}{N+K\lambda}
Pλ(Y=ck)=N+Kλ∑i=1NI(yi=ck)+λ
优缺点
优点
- 朴素贝叶斯模型有稳定的分类效率。
- 对小规模的数据表现很好,能处理多分类任务,适合增量式训练,尤其是数据量超出内存时,可以一批批的去增量训练。
- 对缺失数据不太敏感,算法也比较简单,常用于文本分类。
缺点:
- 理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。
- 需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
- 由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。
- 对输入数据的表达形式很敏感。
参考文章:
- 《统计学习方法 第二版》
- 机器学习算法基础_Task2 bayes_plus.ipynb