高斯(正态)分布、GDA、Mixtures of Gaussian
(原创文章,转载请注明出处!)
高斯分布的密度函数
一元高斯分布:
p(x;μ,σ2)=(1/{sqrt(2π)*σ}) * exp{-(x-μ)2/(2σ2)}
期望:E(X) = μ;方差:D(X) = σ2
二元高斯分布:
p(x1,x2;μ1,μ2,σ12,σ22)={ 1 / [2π*σ1σ2*sqrt(1-ρ2)] } * exp{ [(-1)/(2*(1-ρ2))] * [ (x-μ1)2/σ12 - 2ρ(x-μ1)(x-μ2)/(σ1σ2) + (x-μ2)2/σ22] }
ρ为x1,x2的相关系数: ρ = E[X1-E(X1)] * E[X2-E(X2)] / (σ1σ2)
x1,x2的协方差:Cov(X1,X2) = ρσ1σ2
对二元高斯分布来说,两个维度的随机变量不相关与独立等价。
多元高斯分布:(n维正态随机分布分每一个分量都是正态随机变量)
f(x1,x2,...,xn) = 1 / ( (2π)n/2|C|1/2 ) * exp{ (-1/2) * (X-μ)TC-1(X-μ)}
X = (x1 x2 ... xn)T, μ = (μ1 μ2 ... μn )T
C是协方差矩阵,C-1是C的逆矩阵
GDA (Gaussian Discriminant analysis),高斯判别分析
GDA模型的基本思想是分别用两个多元高斯分布(对二分类问题)来描述两个不同的类别的概率分布,即:在已知类别的情况下,来寻找样本的多元高斯分布。(GDA模型假设两个类别的样本服从多元高斯分布, 如果样本数据确实服从高斯分布,则能取得较好的分类效果。)
得到两个类别的概率分布后,对新的样本,分别计算在两个概率分布下的概率,概率大的分布所对应的类别即为新样本的类别。
类别y的概率用0-1分布描述:p(y) = py(1-p)1-y
类别0的概率分布,p(x|y=0) = 1 / ( (2π)n/2|C|1/2 ) * exp{ (-1/2) * (X-μ0)TC-1(X-μ0)}, n为样本特征的个数
类别1的概率分布,p(x|y=1) = 1 / ( (2π)n/2|C|1/2 ) * exp{ (-1/2) * (X-μ1)TC-1(X-μ1)}
对一个新样本x’,分别计算:p(y=0|x') = p(x'|y=0) * (1-p(y=1))
p(y=1|x') = p(x'|y=1) * p(y=1)
然后比较这两个概率值大小,来判别新样本x’所属类别。
注:在模型中,两类不同样本的期望不同,但协方差矩阵一样,即:两类的中心点不一样,但围绕中心点,样本的分散度一样;输入X的值是连续型。
通过极大似然估计,求得模型中的参数:
p = (1/m) * num_of_sample(y=1)
μ0 = sum(x_of_sample(y=0)) / num_of_sample(y=0)
μ1 = sum(x_of_sample(y=1)) / num_of_sample(y=1)
C = (1/m) * ∑i=1m(xi-μy(i))(xi-μy(i))T
(算法的实现与应用高斯分布来解决异常检测问题(二)多元高斯分布模型的实现基本一样,只是对两个不同类别的均值要分别计算。)
Mixtures of Gaussian,混合高斯模型
对无label的样本数据,有p(xi, zi) = p(xi|zi)p(zi), xi与zi的联合分布,xi是样本集中的第i个样本,zi观测不到,
但混合高斯模型认为xi的值与某个观测不到的东西,zi,有关。
假设p(zi)服从多项分布, p(xi|zi)服从多元高斯分布。zi的取值有k个{1,2,...,k}, p(zi=j) = Φj, ∑j=1kΦj = 1。
(即:认为样本中有k类数据,目的就是通过训练找出描述这k类数据的k个高斯分布函数,由于数据没有label,所以每个样本可能由k个高斯分布函数任一个生成。
相当于把样本聚成k个类,每个类不是由聚类中心确定,而是由一个高斯分布描述。)
zi的每一个取值代表了一个不同的多元高斯分布,所以在高斯混合模型中有k个不同的多元高斯分布,p(xi|zi=j)表示样本xi来自第j个多元高斯分布。
由于zi观测不到, 所以p(zi=j) = Φj是未知的。在这种情况下,使用极大似然估计就无法计算出模型中的参数。可以使用EM算法进行训练,计算出参数。
EM算法, Expectation Maximization :
EM算法的基本思路与k-均值算法类似,
(1)首先对未知的p(zi=j) = Φj进行初始化
(2)用其计算出模型中的参数;
(3)用计算得到的参数再调整p(zi=j) = Φj
(4)重复(2)、(3)直到收敛。
(使用EM算法来训练含有隐含变量的模型p(x,z)时保证是收敛的,但与k-means类似,可能收敛到局部最优解,所以需要多尝试不同的初始化值来训练)
模型中的参数:模型训练的目的是要得到k个多元高斯分布,用这k个多元高斯分布来描述样本数据,所以模型的参数就是这个k个多元高斯分布的μ和C,即:(μ1,C1), (μ2,C2),...,(μj,Cj),...,(μk,Ck)
k个多元高斯分布是p(xi|zi),是条件分布,混合高斯模型需要(xi, zi),即xi, z的联合分布,所以模型的参数还包括k个Φ,p(zi=j) = Φj,即:Φ1,Φ2,...,Φj,...,Φk
计算过程如下:
----初始化: 对每个样本初始化其p(zi|xi),由于不确定xi是由哪一个高斯分布生成的,所以,zi可能取k个值,记:wji = p(zi=j|xi;Φ,μ,C)
x1 | x2 | ... | xi | ... | xm | ||
z=1 | Φ1 | w11 | w12 | ... | w1i | ... | w1m |
z=2 | Φ2 | w21 | w22 | ... | w2i | ... | w2m |
... | ... | ... | ... | ... | ... | ... | ... |
z=j | Φj | wj1 | wj2 | ... | wji | ... | wjm |
... | ... | ... | ... | ... | ... | ... | ... |
z=k | Φk | wk1 | wk2 | ... | wki | ... | wkm |
需要随机的初始化 m*k 个 wji ,保证∑j=1k(wji)=1 。
----do
--------对每一个j,通过如下公式计算参数,以下公式是在假设wji已知的情况下,由极大似然法计算出来:
Φj= (1/m)∑i=1m(wji) //上面表格中的一行求平均,即每个样本由第j个多元高斯分布生成的概率求平均,来作为p(zi=j)的估计
μj = ∑i=1m(wjixi) / ∑i=1m(wji) //wji为第i个样本由第j个多元高斯分布生成的概率
//公式在形式可理解为样本均值作为期望的估计
//对第j个分布,每个样本xi由其生成的概率是wji,∑i=1m(wjixi)就可以看做第j个分布的样本值之和
//然后除以总份数 ∑i=1m(wji),即为第j个分布的样本平均值
Cj = ∑i=1m[wji(xi-μj)(xi-μj)T] / ∑i=1m(wji) //对此公式的理解与计算μj的公式类似
//分子可以看做第j个高斯分布的样本的协方差矩阵之和,
//然后除以份数后,以作为第j个高斯分布的协方差矩阵的估计
--------对j的循环结束
--------判断是否收敛,如果收敛,就跳出循环,结束训练
--------使用如下公式,更新每个wji, 共有m*k个:
wji = p(zi=j | xi;Φ,μ,C) = p(xi|zi=j;μ,C)p(zi=j;Φ) / ∑l=1k[p(xi|zi=l;μ,C)p(zi=l;Φ)]
//Bayes公式,计算后验概率
//p(xi|zi=j;μ,C)是一个高斯多元分布,期望μ与协方差矩阵C已经由上面公式计算得到
//p(zi=j;Φ) = Φj , 已经由上面的公式计算得到
----while(true)
对是否已经收敛的判断:检查当前训练得到的k个高斯分布的参数(μ,C)与前一次训练的是否一样,如果一样表示已经收敛(类似于聚类中心不再移动)。
本文章更关注算法的实现,关于混合高斯模型和EM算法更详细的描述,可以参考如下链接:
http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006924.html
http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html
关于GDA算法的描述,可以参考如下链接:
http://www.cnblogs.com/dyllove98/archive/2013/07/10/3181896.html