高斯(正态)分布、GDA、Mixtures of Gaussian

(原创文章,转载请注明出处!)

高斯分布的密度函数

一元高斯分布:

p(x;μ,σ2)=(1/{sqrt(2π)*σ}) * exp{-(x-μ)2/(2σ2)}

期望:E(X) = μ;方差:D(X) = σ2

二元高斯分布:

p(x1,x2121222)={ 1 / [2π*σ1σ2*sqrt(1-ρ2)] }   *   exp{    [(-1)/(2*(1-ρ2))]  *   [ (x-μ1)212 - 2ρ(x-μ1)(x-μ2)/(σ1σ2) + (x-μ2)222]   }

ρ为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(xiy(i))(xiy(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,即:Φ12,...,Φ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(xij)(xij)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

原文地址:https://www.cnblogs.com/activeshj/p/3939404.html