混合拉普拉斯分布(LMM)推导及实现
作者:桂。
时间:2017-03-21 07:25:17
链接:http://www.cnblogs.com/xingshansi/p/6592599.html
声明:欢迎被转载,不过记得注明出处哦~
前言
本文为曲线拟合与分布拟合系列的一部分,主要讲解混合拉普拉斯分布(Laplace Mixture Model,LMM)。拉普拉斯也是常用的统计概率模型之一,网上关于混合高斯模型(GMM)的例子很多,而关于LMM实现的很少。其实混合模型都可以用EM算法推导,只是求闭式解的运算上略有差别,全文包括:
1)LMM理论推导;
2)LMM代码实现;
内容多有借鉴他人,最后一并附上链接。
一、LMM理论推导
A-模型介绍
对于单个拉普拉斯分布,表达式为:
$f(Y) = \frac{1}{{2b}}{e^{ - \frac{{\left| {Y - \mu } \right|}}{b}}}$
对于$K$个模型的混合分布:
$P\left( {{Y_j}|\Theta } \right) = \sum\limits_{k = 1}^K {{w_k}f\left( {{Y_j}|{\mu _k},{b_k}} \right)} $
如何拟合呢?下面利用EM分析迭代公式,仅分析Y为一维的情况,其他可类推。(先给出一个结果图)
B-EM算法推导
E-Step:
1)求解隐变量,构造完全数据集
同GMM推导类似,利用全概率公式:
2)构造Q函数
基于之前混合高斯模型(GMM)的讨论,EM算法下混合模型的Q函数可以表示为:
$Q\left( {\Theta ,{\Theta ^{\left( i \right)}}} \right) = \sum\limits_{j = 1}^N {\sum\limits_{k = 1}^K {\log \left( {{w_k}} \right)P\left( {{Z_j} \in {\Upsilon _k}|{Y_j},{\Theta ^{\left( i \right)}}} \right)} } + \sum\limits_{j = 1}^N {\sum\limits_{k = 1}^K {\log \left( {{f_k}\left( {{Y_j}|{Z_j} \in {\Upsilon _k},{\theta _k}} \right)} \right)} } P\left( {{Z_j} \in {\Upsilon _k}|{Y_j},{\Theta ^{\left( i \right)}}} \right)$
其中${{\theta _k}} = [\mu_k,b_k]$为分布$k$对应的参数,$\Theta$ = {$\theta _1$,$\theta _2$,...,$\theta _K$}为参数集合,$N$为样本个数,$K$为混合模型个数。
M-Step:
1)MLE求参
- 首先对${{w_k}}$进行优化
由于$\sum\limits_{k = 1}^M {{w_k}} = 1$,利用Lagrange乘子求解:
${J_w} = \sum\limits_{j = 1}^N {\sum\limits_{k = 1}^K {\left[ {\log \left( {{w_k}} \right)P\left( {\left. {{Z_j} \in {\Upsilon _k}} \right|{Y_j},{{\bf{\Theta }}^{\left( i \right)}}} \right)} \right]} } + \lambda \left[ {\sum\limits_{k = 1}^K {{w_k}} - 1} \right]$
求偏导:
$\frac{{\partial {J_w}}}{{\partial {w_k}}} = \sum\limits_{J = 1}^N {\left[ {\frac{1}{{{w_k}}}P\left( {{Z_j} \in {\Upsilon _k}|{Y_j},{{\bf{\Theta }}^{\left( i \right)}}} \right)} \right] + } \lambda = 0$
得
- 对各分布内部参数$\theta_k$进行优化
给出准则函数:
${J_\Theta } = \sum\limits_{j = 1}^N {\sum\limits_{k = 1}^K {\log \left( {{f_k}\left( {{Y_j}|{Z_j} \in {\Upsilon _k},{\theta _k}} \right)} \right)} } P\left( {{Z_j} \in {\Upsilon _k}|{Y_j},{\Theta ^{\left( i \right)}}} \right)$
仅讨论$Y_j$为一维数据情况,其他类推。对于拉普拉斯分布:
关于$\theta_k$利用MLE即可求参。
首先求解$b_k$的迭代公式:
由于$\mu_k$含有绝对值,因此需要一点小技巧。${J_\Theta }$对$\mu_k$求偏导,得到:
得到的$\mu_k$估计即为:
$\mu _k^{\left( {i + 1} \right)} = {{\hat \mu }_k}$
在迭代的最终状态,可以认为$i$次参数与$i+1$次参数近似相等,从而上面的求导结果转化为:
得到参数$\mu_k$的迭代公式:
总结一下LMM的求解步骤:
E-Step:
M-Step:
二、LMM代码实现
根据上一篇GMM的代码,简单改几行code,即可得到LMM:
function [u,b,t,iter] = fit_mix_laplace( X,M ) % % fit_mix_laplace - fit parameters for a mixed-laplacian distribution using EM algorithm % % format: [u,b,t,iter] = fit_mix_laplacian( X,M ) % % input: X - input samples, Nx1 vector % M - number of gaussians which are assumed to compose the distribution % % output: u - fitted mean for each laplacian % b - fitted standard deviation for each laplacian % t - probability of each laplacian in the complete distribution % iter- number of iterations done by the function % N = length( X ); Z = ones(N,M) * 1/M; % indicators vector P = zeros(N,M); % probabilities vector for each sample and each model t = ones(1,M) * 1/M; % distribution of the gaussian models in the samples u = linspace(0.2,1.4,M); % mean vector b = ones(1,M) * var(X) / sqrt(M); % variance vector C = 1/sqrt(2*pi); % just a constant Ic = ones(N,1); % - enable a row replication by the * operator Ir = ones(1,M); % - enable a column replication by the * operator Q = zeros(N,M); % user variable to determine when we have converged to a steady solution thresh = 1e-7; step = N; last_step = 300; % step/last_step iter = 0; min_iter = 3000; while ((( abs((step/last_step)-1) > thresh) & (step>(N*1e-10)) ) & (iter<min_iter) ) % E step % ======== Q = Z; P = 1./ (Ic*b) .* exp( -(1e-6+abs(X*Ir - Ic*u))./(Ic*b) ); for m = 1:M Z(:,m) = (P(:,m)*t(m))./(P*t(:)); end % estimate convergence step size and update iteration number prog_text = sprintf(repmat( '\b',1,(iter>0)*12+ceil(log10(iter+1)) )); iter = iter + 1; last_step = step * (1 + eps) + eps; step = sum(sum(abs(Q-Z))); fprintf( '%s%d iterations\n',prog_text,iter ); % M step % ======== Zm = sum(Z); % sum each column Zm(find(Zm==0)) = eps; % avoid devision by zero u = sum(((X*Ir)./abs(X*Ir - Ic*u)).*Z) ./sum(1./abs(X*Ir - Ic*u).*Z) ; b = sum((abs(X*Ir - Ic*u)).*Z) ./ Zm ; t = Zm/N; end end
给出上文统计分布的拟合程序:
clc;clear all; %generate random xmin = -10; xmax = 10; Len = 10000000; x = linspace(xmin,xmax,Len); mu = [3,-4]; b = [0.9 0.4]; w = [0.7 0.3]; fx = w(1)/2/b(1)*exp(-abs(x-mu(1))/b(1))+ w(2)/2/b(2)*exp(-abs(x-mu(2))/b(2)); ymax = 1/b(2); ymin = 0; Y = (ymax-ymin)*rand(1,Len)-ymin; data = x(Y<=fx); %Laplace Mixture Model fitting K = 2; [mu_new,b_new,w_new,iter] = fit_mix_laplace( data',K); %figure subplot 221 hist(data,2000); grid on; subplot 222 numter = [xmin:.2:xmax]; plot(numter,w_new(1)/2/b_new(1)*exp(-abs(numter-mu_new(1))/b_new(1)),'r','linewidth',2);hold on; plot(numter,w_new(2)/2/b_new(2)*exp(-abs(numter-mu_new(2))/b_new(2)),'g','linewidth',2);hold on; subplot (2,2,[3,4]) [histFreq, histXout] = hist(data, numter); binWidth = histXout(2)-histXout(1); %Bar bar(histXout, histFreq/binWidth/sum(histFreq)); hold on;grid on; plot(numter,w_new(1)/2/b_new(1)*exp(-abs(numter-mu_new(1))/b_new(1)),'r','linewidth',2);hold on; plot(numter,w_new(2)/2/b_new(2)*exp(-abs(numter-mu_new(2))/b_new(2)),'g','linewidth',2);hold on;
对应结果图(与上文同):
参考
- Mitianoudis N, Stathaki T. Batch and online underdetermined source separation using Laplacian mixture models[J]. IEEE Transactions on Audio, Speech, and Language Processing, 2007, 15(6): 1818-1832.
混合拉普拉斯分布(LMM)推导及实现的更多相关文章
- 【RS】Sparse Probabilistic Matrix Factorization by Laplace Distribution for Collaborative Filtering - 基于拉普拉斯分布的稀疏概率矩阵分解协同过滤
[论文标题]Sparse Probabilistic Matrix Factorization by Laplace Distribution for Collaborative Filtering ...
- 拉普拉斯分布(Laplace distribution)
拉普拉斯分布的定义与基本性质 其分布函数为 分布函数图 其概率密度函数为 密度函数图 拉普拉斯分布与正太分布的比较 从图中可以直观的发现拉普拉斯分布跟正太分布很相似,但是拉普拉斯分布比正太分布有尖的峰 ...
- 拉普拉斯分布,高斯分布,L1 L2
之前那篇文章里提到,L1其实是加上服从拉普拉斯分布的先验,L2是加上服从高斯分布的先验: http://www.cnblogs.com/charlesblc/p/7977732.html 那么记住拉普 ...
- 混合高斯模型(GMM)推导及实现
作者:桂. 时间:2017-03-20 06:20:54 链接:http://www.cnblogs.com/xingshansi/p/6584555.html 声明:欢迎被转载,不过记得注明出处哦 ...
- 拉普拉斯(Laplace)分布
Laplace分布的概率密度函数的形式是这样的: $p(x) = \frac{1}{2 \lambda} e^{-\frac{\vert x –\mu \vert}{\lambda}}$ 一般$\ ...
- 记录:EM 算法估计混合高斯模型参数
当概率模型依赖于无法观测的隐性变量时,使用普通的极大似然估计法无法估计出概率模型中参数.此时需要利用优化的极大似然估计:EM算法. 在这里我只是想要使用这个EM算法估计混合高斯模型中的参数.由于直观原 ...
- 极大既然估计和高斯分布推导最小二乘、LASSO、Ridge回归
最小二乘法可以从Cost/Loss function角度去想,这是统计(机器)学习里面一个重要概念,一般建立模型就是让loss function最小,而最小二乘法可以认为是 loss function ...
- PLSA的EM推导
本文作为em算法在图模型中的一个应用,推导plsa的em算法. 1 em算法 em算法是解决一类带有隐变量模型的参数估计问题. 1.1 模型的定义 输入样本为,对应的隐变量为.待估计的模型参数为,目标 ...
- Lasso回归的坐标下降法推导
目标函数 Lasso相当于带有L1正则化项的线性回归.先看下目标函数:RSS(w)+λ∥w∥1=∑Ni=0(yi−∑Dj=0wjhj(xi))2+λ∑Dj=0∣wj∣RSS(w)+λ∥w∥1=∑i=0 ...
随机推荐
- 2017-01-27-hibernate环境搭建
Hibernate的环境搭建(uid方式): 1:导入包 2:创建实体对象 3:hibernate的映射配置文件 4:hibernate的核心配置文件 5:创建测试类实现表的创建 2:创建实体对象-U ...
- spring-mvc.xml配置
1.自动扫描 <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 --> <context:component-scan base-pac ...
- Python学习--13 文件I/O
Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系 ...
- react+redux构建淘票票首页
react+redux构建淘票票首页 描述 在之前的项目中都是单纯的用react,并没有结合redux.对于中小项目仅仅使用react是可以的:但当项目变得更加复杂,仅仅使用react是远远不够的,我 ...
- (@WhiteTaken)设计模式学习——工厂方法模式
这个工厂方法模式,是简单工厂的延伸,不同点在于,将某个具体的类继续细分,将核心部分抽象成一个接口.而简单工厂,把核心写在了一个类上,不利于拓展. 举个例子,简单工厂中有苹果类,香蕉类,我们创建了一个F ...
- Spark Streaming实时写入数据到HBase
一.概述 在实时应用之中,难免会遇到往NoSql数据如HBase中写入数据的情景.题主在工作中遇到如下情景,需要实时查询某个设备ID对应的账号ID数量.踩过的坑也挺多,举其中之一,如一开始选择使用NE ...
- Linq 集合操作
Linq 集合操作 演示代码 两个对象一个是Person,一个Address, AddressId是外键, public class Person { public string ID { get; ...
- [Hadoop] - Cannot run program "cmake"
在编译hadoop的过程中,遇到缺少cmake命令的异常,异常信息为:Cannot run program "cmake" (in directory "/opt/wor ...
- JMessage是让App 同时集成 Push 功能与 IM 功能最完美的方案
历经几个月的沉寂,以及兄弟们的奋战,极光推送的兄弟产品诞生了:极光IM,英文名 JMessage. 极光IM 是我们团队基于大量客户的需求反馈,在很多客户的殷切期盼下所开发的.团队成员一方面要支撑极光 ...
- centOS7 mini配置linux服务器(一)安装centOs7
1. 准备centos-7 (minni镜像) 官网地址http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minim ...