zoukankan      html  css  js  c++  java
  • 机器学习笔记(10)-高斯混合模型

    机器学习笔记(10)-高斯混合模型

    高斯混合模型(Gaussian Mixture Model,GMM),顾名思义是通过假设样本数据是由若干个服从高斯分布组合混合而成的,当我们确定一个样本点后,它可以属于任何一个高斯分布,只是属于每个分布的概率不同,所有分布的总和为1。

    所以高斯分布可以用于聚类,当输入一个样本数据后,根据模型来判断该样本点属于哪个高斯分布(簇)。

    最后使用上一节介绍的EM算法来求解GMM。

    GMM极大似然估计

    GMM也是采用极大似然估计来构建求解参数的,但是我们很难推导出解析解来解出模型参数,下面我们就来看一下为啥不行。首先我们现来建立GMM模型和参数:

    1. (X=(x_{1},x_{2},cdots x_{n})):观测变量,已知的数据样本。
    2. (Z=(z^{(1)},z^{(2)},cdots z^{(k)})):隐藏变量,k个高斯分布。(z^{(k)}_{i})表示第k个z高斯分布生成(x_{i})的样本。
    3. (P=(p_{1},p_{2},cdots ,p_{k})):每个(z^{k})的概率,其中(sum_{k=1}^{K}p_{k}=1),所有高斯分布的概率之和为1
    4. (P(X|Z=z^{(k)})sim N(mu_{k},sigma^2_{k})):样本服从第k个高斯分布。
    5. ( heta=(p_{1sim k},mu_{1sim k},sigma_{1sim k})):参数。

    我们的任务就是要求解( heta)下所有的参数(p_{1sim k},mu_{1sim k},sigma_{1sim k})。我们通过极大似然估计得到似然估计函数:

    [egin{aligned} hat heta_{MLE}&=underset{ heta}{argmax};log P(X; heta)\ &=underset{ heta}{argmax};sum_{i=1}^{N}log ;p(x_{i}; heta)\ &=underset{ heta}{argmax};sum_{i=1}^{N}log ;sum_{k=1}^{K}p(x_{i},z^{(k)}_{i}; heta)p(x_{i}|z_{i}=z_{i}^{(k)}; heta)\ &=underset{ heta}{argmax};sum_{i=1}^{N}log ;sum_{k=1}^{K}p_{k}N(mu_{k},sigma^2_{k}) end{aligned} ]

    上式就是我们要估计的极大似然估计函数,但是这个函数很难作出解析解,下一节介绍采用EM算法来解。

    EM算法求解

    下面我们根据EM算法来求解,我们先根据上一节机器学习笔记(9)-EM算法中推出的EM表达式得到最大期望,分开写就是:

    E步:求最大期望函数:

    [underset{ heta}{max};E_{P(Z|X; heta^t)}[log P(X,Z| heta)] ]

    M步:求下个时间步参数估计:

    [ heta^{t+1}=underset{ heta}{argmax};E_{P(Z|X; heta^t)}[log P(X,Z| heta)] ]

    合起来就是:

    [egin{aligned} heta^{t+1}&=underset{ heta}{argmax};E_{P(Z|X; heta^t)}[log P(X,Z| heta)]\ &=underset{ heta}{argmax};sum_{Z_{1}sim Z_{n}}^{}P(Z|X; heta^t)log P(X,Z| heta)\ &=underset{ heta}{argmax};sum_{Z_{1}sim Z_{n}}^{}prod_{i=1}^{N}p(z_{i}|x_{i}; heta^t)sum_{i=1}^{N}log ;p(x_{i},z_{i}; heta)\ end{aligned} ]

    上式中因为k个高斯分布是离散的,所有用累加不用积分来表达。

    这里稍微解释下(sum_{Z_{1}sim Z_{n}}^{}),代表n个(Z)对应(X)样本空间,也就是有k个(Z)关于高斯分布,每个高斯分布(Z^{(k)})中有n个(Z_{i}^{(k)})作为n个(x_{i})的隐藏变量,所以当确定某个样本((x_{i},z_{i}))后,(z_{i})在k个高斯分布概率之和为1,继而有:

    [sum_{k=1}^{K}p_{k}=1Leftrightarrow sum_{Z_{i}}p(z_{i}|x_{i}; heta^t)=1 ]

    上式是简化下面推导的关键,我们仔细观察( heta^{t+1})式,我们把(sum_{i=1}^{N}log ;p(x_{i},z_{i}; heta))拆开,取一个(log ;p(x_{1},z_{1}; heta))来看:

    [egin{aligned} sum_{Z_{1}sim Z_{n}}^{}prod_{i=1}^{N}p(z_{i}|x_{i}; heta^t)log ;p(x_{1},z_{i}; heta)&= sum_{Z_{1}sim Z_{n}}^{}log ;p(x_{1},z_{1}; heta)p(z_{1}|x_{1}; heta^t)prod_{i=2}^{N}p(z_{i}|x_{i}; heta^t)\ &=sum_{Z_{1}}^{}log ;p(x_{1},z_{1}; heta)p(z_{1}|x_{1}; heta^t)sum_{Z_{2}sim Z_{n}}^{}prod_{i=2}^{N}p(z_{i}|x_{i}; heta^t)\ &=sum_{Z_{1}}^{}log ;p(x_{1},z_{1}; heta)p(z_{1}|x_{1}; heta^t)prod_{i=2}^{N}sum_{Z_{i}}^{}p(z_{i}|x_{i}; heta^t)\ &=sum_{Z_{1}}^{}log ;p(x_{1},z_{1}; heta)p(z_{1}|x_{1}; heta^t) end{aligned} ]

    所以原始简化为:

    [egin{aligned} heta^{t+1} &=underset{ heta}{argmax};sum_{i=1}^{N}sum_{Z_{i}}^{}log ;p(x_{i},z_{i}; heta)p(z_{i}|x_{i}; heta^t)\ &=underset{ heta}{argmax};sum_{i=1}^{N}sum_{Z_{i}}^{}log ;[p(z_{i}; heta)p(x_{i}|z_{i}; heta)]p(z_{i}|x_{i}; heta^t)\ &=underset{ heta}{argmax};sum_{i=1}^{N}sum_{k=1}^{K}log ;[p_{k}cdot N(mu_{k},sigma^2_{k})]p(z_{i}|x_{i}; heta^t)\ &=underset{ heta}{argmax};sum_{i=1}^{N}sum_{k=1}^{K}[log ;p_{k}+log ;N(mu_{k},sigma^2_{k})]p(z_{i}|x_{i}; heta^t) end{aligned} ]

    接下来我们就挨个对参数(p^{t+1},mu^{t+1},sigma^{t+1})求导来解出表达式即可:

    首先我们先求(p_{k})

    [egin{aligned} left{egin{matrix} underset{p}{max};sum_{i=1}^{N}sum_{k=1}^{K}[log ;p_{k}+log ;N(mu_{k},sigma^2_{k})]p(z_{i}|x_{i}; heta^t)\ s.t.;sum_{k=1}^{K}p_{k}=1 end{matrix} ight. end{aligned} ]

    采用拉格朗日乘子法得到:

    [egin{aligned} left{egin{matrix} mathcal{L}(p,lambda)=sum_{i=1}^{N}sum_{k=1}^{K}[log ;p_{k}+log ;N(mu_{k},sigma^2_{k})]p(z_{i}|x_{i}; heta^t)+lambda(1-sum_{k=1}^{K}p_{k})\ s.t.;lambdageq 0 end{matrix} ight. end{aligned} ]

    [egin{equation} frac{partial mathcal{L}(p,lambda)}{partial p_{k}}=sum_{i=1}^{N}p(z_{i}|x_{i}; heta^t)frac{1}{p_{k}}-lambda=0 end{equation} ag{1} ]

    两边加上(sum_{k=1}^{K})

    [sum_{i=1}^{N}sum_{k=1}^{K}p(z_{i}|x_{i}; heta^t)=sum_{k=1}^{K}p_{k}lambda ]

    [Rightarrow lambda=n ]

    再代入表达式((1))中:

    [egin{aligned} hat p^{t+1}_{k} &=frac{1}{n}sum_{i=1}^{N}p(z_{i}|x_{i}; heta^t)\ &=frac{1}{n}sum_{i=1}^{N}frac{p(x_{i},z_{i}; heta^t)}{p(x_{i}; heta^t)}\ &=frac{1}{n}sum_{i=1}^{N}frac{p_{k}^{(t)}cdot N(x_{i}|mu^{(t)}_{k},sigma^{2(t)}_{k})}{sum_{k=1}^{K}p_{k}^{(t)}cdot N(x_{i}|mu^{(t)}_{k},sigma^{2(t)}_{k})} end{aligned} ]

    同理也可以把高斯密度表达式(N(x_{i}|mu^{(t)}_{k},sigma^{2(t)}))展开计算出(hat mu^{t+1}_{k},hat sigma^{t+1}_{k})

  • 相关阅读:
    解决Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom:2.7
    java.net.ConnectException: Connection timed out: no further information
    private static final long serialVersionUID = 1L;
    判断input[type=file]上传文件格式
    toString()和toLocaleString()有什么区别
    js时间与时间戳互相转换
    获取手机校验码倒计时
    jq判断网页是在什么浏览器打开的
    使用navigator.userAgent.toLowerCase()判断移动端类型
    jq回车触发绑定点击事件
  • 原文地址:https://www.cnblogs.com/Epir/p/13190931.html
Copyright © 2011-2022 走看看