概述
- 前言
- 正文
- 生成模型和判别模型的区别
- 为什么不使用回归模型
- 生成模型 —— 后验概率
- 高斯分布
- 分类模型(Step1:build model)
- 最大似然估计
- 目标函数(Step2:Goodness of function)
- 求解(Step3:the best function)
- 模型优化(协方差)
- 一个合适的概率分布模型
- 后验概率公式推导
- 后记
前言
笔者一直在ipad上做手写笔记,最近突然想把笔记搬到博客上来,也就有了下面这些。因为本是给自己看的笔记,所以内容很简陋,只是提了一些要点。随缘更新。
正文
生成模型和判别模型的区别
- 生成模型:学习得到联合概率分布P(x,y),即特征x和标记y共同出现的概率,然后求条件概率分布。能够学习到数据生成的机制。
- 判别模型:学习得到条件概率分布P(y|x),即在特征x出现的情况下标记y出现的概率。
引用知乎上我看到的一个举例,要确定一个羊是山羊还是绵羊
- 用判别模型的方法是从历史数据中学习到模型,然后通过提取这只羊的特征来预测出这只羊是山羊的概率,是绵羊的概率。
- 利用生成模型是根据山羊的特征首先学习出一个山羊的模型,然后根据绵羊的特征学习出一个绵羊的模型,然后从这只羊中提取特征,放到山羊模型中看概率是多少,在放到绵羊模型中看概率是多少,哪个大就是哪个。
为什么不使用回归模型
-
分类问题也是确定一条线,将我们要分类的数据集分成若干种。分类问题应该是这条线将两边的模型分得越开越好,但是如果我们采用回归模型去确定这条线,回归模型的loss function是计算点到线的距离的平方和,那距离越远loss function的值越大,那和我们的意愿就背道而驰了。所以我们如果把分类问题应回归模型硬解,会得不到一个好的模型。例如下图中绿线是我们想要得到的,但是紫线是回归模型所认为的最佳的模型。
-
在多分类问题中,类别1设为1,类别2设为2,类别3设为3,如果采用回归模型,会认为1、2或2、3比较接近,但实际上并没有这种关系的存在,这会导致我们的model出现问题。
生成模型 —— 后验概率
高斯分布
f μ , Σ = 1 ( 2 π ) D 2 1 ∣ Σ ∣ 1 2 exp [ − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ] f_{mu ,Sigma }=frac {1}{( 2pi ) ^{frac {D}{2}}} dfrac {1}{left| Sigma right| ^{frac {1}{2}}}exp[-dfrac {1}{2}left( x-mu right) ^{T}Sigma ^{-1}left( x- mu right)] fμ,Σ=(2π)2D1∣Σ∣211exp[−21(x−μ)TΣ−1(x−μ)]
- μ mu μ 为均值向量
- Σ Sigma Σ 为方差矩阵
-
D
D
D 为
x
x
x 的维数
这是一个概率密度函数,简单的说可以把它看成一个function,输入 x x x 输出 x x x 的概率(当然这不是概率,但和概率成正比)。
分类模型(Step1:build model)
C
1
=
C_1=
C1= { 种类一 },
C
2
=
C_2=
C2= { 种类二 }
P
(
C
1
∣
x
)
=
P
(
x
∣
C
1
)
P
(
C
1
)
P
(
x
∣
C
1
)
P
(
C
1
)
+
P
(
x
∣
C
2
)
P
(
C
2
)
P(C_1|x)=frac{P(x|C_1)P(C_1)}{P(x|C_1)P(C_1)+P(x|C_2)P(C_2)}
P(C1∣x)=P(x∣C1)P(C1)+P(x∣C2)P(C2)P(x∣C1)P(C1)
- P ( x ∣ C 1 ) = f μ 1 , Σ 1 P(x|C_1)=f_{mu^1 ,Sigma^1 } P(x∣C1)=fμ1,Σ1
-
P
(
x
∣
C
2
)
=
f
μ
2
,
Σ
2
P(x|C_2)=f_{mu^2 ,Sigma^2 }
P(x∣C2)=fμ2,Σ2
需要求解出两组 μ , Σ mu,Sigma μ,Σ
最大似然估计
假设有
n
n
n 个点,
L
(
μ
,
Σ
)
=
f
μ
,
Σ
(
x
1
)
f
μ
,
Σ
(
x
2
)
.
.
.
f
μ
,
Σ
(
x
n
)
L(mu,Sigma)=f_{mu,Sigma}(x_1)f_{mu,Sigma}(x_2)...f_{mu,Sigma}(x_n)
L(μ,Σ)=fμ,Σ(x1)fμ,Σ(x2)...fμ,Σ(xn) 是生成这些点的概率(说成概率更容易理解),也成为样本的似然函数。
为使得
L
(
μ
,
Σ
)
L(mu,Sigma)
L(μ,Σ) 最大的
L
(
μ
,
Σ
)
L(mu,Sigma)
L(μ,Σ) 记为
(
μ
∗
,
Σ
∗
)
(mu^*,Sigma^*)
(μ∗,Σ∗),即所有
L
(
μ
,
Σ
)
L(mu,Sigma)
L(μ,Σ) 的最大似然估计。
我们的目标是使生成这些的点概率最大,即我们要求
(
μ
∗
,
Σ
∗
)
(mu^*,Sigma^*)
(μ∗,Σ∗)
总结一下:极大似然估计就是先假设生成数据(数据分布)的模型已知(比如高斯分布),但是模型的具体参数不知(不知道高斯分布中的均值和标准差),通过已有的数据,进行参数的推断求解,使得该模型(高斯分布)生成已有观测数据的可能性最大。
目标函数(Step2:Goodness of function)
arg max μ , Σ L ( μ , Σ ) arg max _{mu ,Sigma } L(mu ,Sigma ) argμ,ΣmaxL(μ,Σ)
求解(Step3:the best function)
利用微分等于0,易得:
μ
∗
=
1
n
∑
i
=
1
n
x
i
mu^* = frac{1}{n}sum ^{n}_{i=1}x_i
μ∗=n1i=1∑nxi
Σ
∗
=
1
n
∑
i
=
1
n
(
x
i
−
μ
∗
)
(
x
i
−
μ
∗
)
T
Sigma^*=frac{1}{n}sum^{n}_{i=1}(x_i-mu^*)(x_i-mu^*)^T
Σ∗=n1i=1∑n(xi−μ∗)(xi−μ∗)T
模型优化(协方差)
我们通常不会给每个高斯分布都去计算一套不同的最大似然估计, Σ Sigma Σ 和输入的feature成平方关系,当平方很大时, Σ Sigma Σ 就会变的非常巨大,一是计算时间太长,二是容易过拟合。因此我们给每个高斯分布相同的 Σ Sigma Σ。
公式转变为(以二分类为例):
arg
max
μ
1
,
μ
2
,
Σ
L
(
μ
1
,
μ
2
,
Σ
)
arg max _{mu_1, mu_2 ,Sigma } L(mu_1,mu_2 ,Sigma )
argμ1,μ2,ΣmaxL(μ1,μ2,Σ)
- L ( μ 1 , μ 2 , Σ ) = f μ 1 , Σ ( x 1 ) . . . f μ , Σ ( x n ) ∗ f μ 2 , Σ ( x n + 1 ) . . . f μ 2 , Σ ( x n + m ) L(mu^1,mu^2,Sigma)=f_{mu^1,Sigma}(x_1)...f_{mu,Sigma}(x_n)*f_{mu^2,Sigma}(x_{n+1})...f_{mu^2,Sigma}(x_{n+m}) L(μ1,μ2,Σ)=fμ1,Σ(x1)...fμ,Σ(xn)∗fμ2,Σ(xn+1)...fμ2,Σ(xn+m)
求解:
-
μ
1
,
μ
2
mu_1,mu_2
μ1,μ2 和原先一致
μ 1 = 1 n ∑ i = 1 n x i mu_1 = frac{1}{n}sum ^{n}_{i=1}x_i μ1=n1i=1∑nxi
μ 2 = 1 n ∑ i = n + 1 n + m x i mu_2 = frac{1}{n}sum ^{n+m}_{i=n+1}x_i μ2=n1i=n+1∑n+mxi -
Σ
Sigma
Σ 为二者加权平均
Σ = n m + n Σ 1 + m n + m Σ 2 Sigma=frac{n}{m+n}Sigma_1+frac{m}{n+m}Sigma_2 Σ=m+nnΣ1+n+mmΣ2
优化过后的分类曲线变成了线性的
一个合适的概率分布模型
你可能会问为什么用高斯分布,用李宏毅老师的话来说就是,如果我用别的分布模型你也会问同样的问题。
别的分布模型当然可以使用,例如二分类问题我们可以使用伯努利分布。高斯分布更加通用、普遍,所以我们在此用是用高斯分布举例,并不是一定要用高斯分布。
后验概率公式推导
P
(
C
1
∣
x
)
=
P
(
x
∣
C
1
)
P
(
C
1
)
P
(
x
∣
C
1
)
P
(
C
1
)
+
P
(
x
∣
C
2
)
P
(
C
2
)
P(C_1|x)=frac{P(x|C_1)P(C_1)}{P(x|C_1)P(C_1)+P(x|C_2)P(C_2)}
P(C1∣x)=P(x∣C1)P(C1)+P(x∣C2)P(C2)P(x∣C1)P(C1)
经过处理你会发现这是一个关于
z
z
z 的sigmiod函数(这下知道Sigmoid函数是哪来的吧)
=
1
1
+
p
(
x
∣
C
2
)
P
(
C
2
)
p
(
x
/
C
1
)
p
(
C
1
)
=
1
1
+
e
x
p
(
z
)
=
σ
(
z
)
=dfrac {1}{1+dfrac {pleft( x|C_2 right) Pleft( C_2right) }{pleft( x/C_{1}right) pleft( C_{1}right) }}=frac{1}{1+exp(z)}=sigma(z)
=1+p(x/C1)p(C1)p(x∣C2)P(C2)1=1+exp(z)1=σ(z)
z = l n P ( x ∣ C 1 ) P ( C 1 ) P ( x ∣ C 2 ) P ( C 2 ) z=lnfrac{P(x|C_1)P(C_1)}{P(x|C_2)P(C_2)} z=lnP(x∣C2)P(C2)P(x∣C1)P(C1)
然后一同操作猛如虎,公式我就不打了,太长了,估计你们也没有兴趣看。反正最后得到
z
=
(
μ
1
−
μ
2
)
T
Σ
−
1
x
−
1
2
(
μ
1
)
T
μ
1
+
1
2
(
μ
2
)
T
Σ
−
1
μ
2
+
l
n
n
m
z=(mu_1-mu_2)^TSigma^{-1}x-frac{1}{2}(mu_1)^Tmu_1+frac{1}{2}(mu_2)^TSigma^{-1}mu_2+lnfrac{n}{m}
z=(μ1−μ2)TΣ−1x−21(μ1)Tμ1+21(μ2)TΣ−1μ2+lnmn
我们令
- w = ( μ 1 − μ 2 ) T Σ − 1 w=(mu_1-mu_2)^TSigma^{-1} w=(μ1−μ2)TΣ−1
- b = 1 2 ( μ 1 ) T μ 1 + 1 2 ( μ 2 ) T Σ − 1 μ 2 + l n n m b=frac{1}{2}(mu_1)^Tmu_1+frac{1}{2}(mu_2)^TSigma^{-1}mu_2+lnfrac{n}{m} b=21(μ1)Tμ1+21(μ2)TΣ−1μ2+lnmn
w w w 和 b b b 都是常数,也就是说,最后我们得到的后验模型是个线性模型。
后记
其实判别模型和生成模型应该一起讲的,因为这两个模型的推到思路是连贯的。但是实在太长了,就先把生成模型写出来了,判别模型改天再写。
最后
以上就是活力胡萝卜为你收集整理的机器学习笔记(2) —— 生成模型(概率模型)前言正文后记的全部内容,希望文章能够帮你解决机器学习笔记(2) —— 生成模型(概率模型)前言正文后记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复