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

摘要:
多元高斯分布:f=1/*exp{*(X-μ)TC-1(X-,当类别已知时,找到样本的多变量高斯分布。)混合高斯模型中,对于没有标签的样本数据,混合高斯模型的p=pp,xi和zi的联合分布,xi是样本集中的第i个样本,zi无法观察到,但混合高斯模型认为xi的值与无法观察到的东西有关,zi。

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

高斯分布的密度函数

一元高斯分布:

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)

  x1x2...xi...xm
z=1Φ1w11w12...w1i...w1m
z=2Φ2w21w22...w2i...w2m
........................
z=jΦjwj1wj2...wji...wjm
........................
z=kΦkwk1wk2...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

免责声明:文章转载自《高斯(正态)分布、GDA、Mixtures of Gaussian》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python 判断当前时间是否在一个时间范围内编写一个自己的PHP框架(一)写在前面下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

常见的聚类算法

常见的聚类算法 1. K-Means(K均值)聚类 算法步骤: (1) 首先我们选择一些类/组,并随机初始化它们各自的中心点。中心点是与每个数据点向量长度相同的位置。这需要我们提前预知类的数量(即中心点的数量)。 (2) 计算每个数据点到中心点的距离,数据点距离哪个中心点最近就划分到哪一类中。 (3) 计算每一类中中心点作为新的中心点。 (4) 重复以上步...

python正态分布

1、生成正态分布数据并绘制概率分布图 import pandas as pd import numpy as np import matplotlib.pyplot as plt # 根据均值、标准差,求指定范围的正态分布概率值 def normfun(x, mu, sigma): pdf = np.exp(-((x - mu)**2)/(2*...

机器学习之朴素贝叶斯及高斯判别分析

1判别模型与生成模型 上篇报告中提到的回归模型是判别模型,也就是根据特征值来求结果的概率。形式化表示为,在参数确定的情况下,求解条件概率。通俗的解释为在给定特征后预测结果出现的概率。 比如说要确定一只羊是山羊还是绵羊,用判别模型的方法是先从历史数据中学习到模型,然后通过提取这只羊的特征来预测出这只羊是山羊的概率,是绵羊的概率。换一种思路,我们可以根据山羊...

偏度与峰度的正态性分布判断

来自:https://mp.weixin.qq.com/s/VgwRuEIyvsC5K8dtgIjDuQ 偏度与峰度的正态性分布判断 用统计方法对数据进行分析,有很多方法如T检验、方差分析、相关分析以及线性回归等。都要求数据服从正态分布或近似正态分布。上篇博客用Q-Q图验证数据集符合正态分布。这篇博客先介绍偏度与峰度定义,然后用偏度与峰度检测数据集是否符合...

自编码器 Autoencoder

自监督模型 训练一个ae的encoder,就能把code和object对应起来,获得code。给定一个code,decoder就能输出对应的object。 Autoencoder存在什么问题?   因为作为训练数据的object是有限的,导致decoder实际上只能把训练过程中见过的code给还原成对应的object。如果随机给一些code,它不会生成训...

paper 62:高斯混合模型(GMM)参数优化及实现

高斯混合模型(GMM)参数优化及实现 (< xmlnamespace prefix ="st1" ns ="urn:schemas-microsoft-com:office:smarttags" />2010-11-13) 1 高斯混合模型概述< xmlnamespace prefix ="o" ns ="urn:schemas-micr...