% function [Lh,Ph,Mu,Pi,LL]=mfa(X,M,K,cyc,tol);
%
% Maximum Likelihood Mixture of Factor Analysis using EM
%
% X - data matrix
% M - number of mixtures (default 1)
% K - number of factors in each mixture (default 2)
% cyc - maximum number of cycles of EM (default 100)
% tol - termination tolerance (prop change in likelihood) (default 0.0001)
%
% Lh - factor loadings
% Ph - diagonal uniquenesses matrix
% Mu - mean vectors
% Pi - priors
% LL - log likelihood curve
%
% Iterates until a proportional change < tol in the log likelihood
% or cyc steps of EM
function [Lh, Ph, Mu, Pi, LL] = mfa(X,M,K,cyc,tol)
if nargin<5 tol=0.0001; end;
if nargin<4 cyc=100; end;
if nargin<3 K=2; end;
if nargin<2 M=1; end;
N=length(X(:,1));
D=length(X(1,:));
tiny=exp(-700);
% randn('seed',2); % XXX
% rand('seed',2);
fprintf('\n');
if (M==1)
[Lh,Ph,LL]=ffa(X,K,cyc,tol);
Mu=mean(X);
Pi=1;
else
mX=mean(X);
cX=cov(X);
scale=det(cX)^(1/D);
Lh=randn(D*M,K)*sqrt(scale/K);
Ph=diag(cX)+tiny;
Pi=ones(M,1)/M;
Mu=randn(M,D)*sqrtm(cX)+ones(M,1)*mX;
oldMu=Mu;
I=eye(K);
lik=0;
LL=[];
H=zeros(N,M); % E(w|x)
EZ=zeros(N*M,K);
EZZ=zeros(K*M,K);
XX=zeros(D*M,D);
s=zeros(M,1);
const=(2*pi)^(-D/2);
%%%%%%%%%%%%%%%%%%%%
for i=1:cyc;
%%%% E Step %%%%
Phi=1./Ph;
Phid=diag(Phi);
for k=1:M
Lht=Lh((k-1)*D+1:k*D,:);
LP=Phid*Lht;
MM=Phid-LP*inv(I+Lht'*LP)*LP';
dM=sqrt(det(MM));
Xk=(X-ones(N,1)*Mu(k,:));
XM=Xk*MM;
H(:,k)=const*Pi(k)*dM*exp(-0.5*rsum(XM.*Xk));
EZ((k-1)*N+1:k*N,:)=XM*Lht;
end;
Hsum=rsum(H);
oldlik=lik;
lik=sum(log(Hsum+(Hsum==0)*exp(-744)));
Hzero=(Hsum==0); Nz=sum(Hzero);
H(Hzero,:)=tiny*ones(Nz,M)/M;
Hsum(Hzero)=tiny*ones(Nz,1);
H=rdiv(H,Hsum);
s=csum(H);
s=s+(s==0)*tiny;
s2=sum(s)+tiny;
for k=1:M
kD=(k-1)*D+1:k*D;
Lht=Lh(kD,:);
LP=Phid*Lht;
MM=Phid-LP*inv(I+Lht'*LP)*LP';
Xk=(X-ones(N,1)*Mu(k,:));
XX(kD,:)=rprod(Xk,H(:,k))'*Xk/s(k);
beta=Lht'*MM;
EZZ((k-1)*K+1:k*K,:)=I-beta*Lht +beta*XX(kD,:)*beta';
end;
%%%% log likelihood %%%%
LL=[LL lik];
fprintf('cycle %g \tlog likelihood %g ',i,lik);
if (i<=2)
likbase=lik;
elseif (lik<oldlik)
fprintf(' violation');
elseif ((lik-likbase)<(1 + tol)*(oldlik-likbase)|~finite(lik))
break;
end;
fprintf('\n');
%%%% M Step %%%%
% means and covariance structure
Ph=zeros(D,1);
for k=1:M
kD=(k-1)*D+1:k*D;
kK=(k-1)*K+1:k*K;
kN=(k-1)*N+1:k*N;
T0=rprod(X,H(:,k));
T1=T0'*[EZ(kN,:) ones(N,1)];
XH=EZ(kN,:)'*H(:,k);
T2=inv([s(k)*EZZ(kK,:) XH; XH' s(k)]);
T3=T1*T2;
Lh(kD,:)=T3(:,1:K);
Mu(k,:)=T3(:,K+1)';
T4=diag(T0'*X-T3*T1')/s2;
Ph=Ph+T4.*(T4>0);
end;
Phmin=exp(-700);
Ph=Ph.*(Ph>Phmin)+(Ph<=Phmin)*Phmin; % to avoid zero variances
% priors
Pi=s'/s2;
end;
fprintf('\n');
end;


阿里matlab建模师
- 粉丝: 5004
- 资源: 2908
最新资源
- 无位置传感器控制无刷直流电机:反相电动势观测器的精准复现研究,无位置传感器控制无刷直流电机:反相电动势观测器的精准复现研究,无位置传感器无刷直流电机,一篇Sci的复现,采用反相电动势观测器的方法进行无
- 仿京细菜谱微信小程序源码云开发菜谱微信小程序源码.zip
- 电动叉车控制系统设计与仿真-实现电机驱动、重量检测与限阈报警功能的完整演示,电动叉车模拟控制系统设计介绍:电机控制、重量检测与LCD显示功能展示,电动叉车系统设计,重量检测,电机控制 电动随车叉车控
- 基于FPGA的Native接口DDR3多功能读写测试系统:单/多字节与自动测试,仿真+实物验证,学习实用工具 ,基于FPGA的Native接口DDR3多功能读写测试系统:单/多字节及自动测试,附仿真文
- 基于改进蚁群算法与动态窗口算法的混合路径规划仿真系统:全局与局部路径规划的协同优化与多项对比实验,改进蚁群算法与动态窗口算法融合:全局路径规划与局部避障仿真(附对比代码),改进蚁群算法+动态窗口算法全
- 并联混合动力系统:电动汽车模型的技术探索与展望,并联混合动力电动汽车模型:高效能源利用与智能控制系统研究,并联混合动力电动汽车模型 ,并联; 混合动力; 电动汽车; 模型,并联混合动力:电动汽车模型的
- ScreenRecording_02-19-2025 21-07-20_1.MP4
- 音圈电机精确控制技术:双闭环PID算法实践与应用,音圈电机双闭环PID控制策略详解:高效精准的运动控制实践,音圈电机控制,双闭环pid控制 ,音圈电机控制; 双闭环; PID控制,音圈电机控制技术:双
- 全国国土利用现状、耕地分布、园地分布、林地分布等三调专题图PDF PNG分享
- 点云转换为封闭Mesh的时候,例如MeshLab等软件生成的Mesh光滑度不够,或者存在破洞,此软件解决了该问题
- JVM系列-Java运行时数据区&对象访问如何进行
- 哪吒之魔童闹海1csv
- 固高GTS控制卡视觉点胶涂覆伺服运动控制:精准控制轴数与高效点胶技术结合,固高GTS控制卡视觉点胶涂覆伺服运动控制解决方案:精准定位与高效生产结合,固高GTS8轴或4轴控制卡,视觉点胶涂覆,伺服运动控
- 个性化定制声学模型:COMSOL超材料吸隔声仿真计算助力精准模拟声学效果,COMSOL声学超材料个性化吸隔声仿真计算模型:实现任意声学模型的定制分析,comsol声学超材料 吸隔声仿真计算模型可以个人
- 自动驾驶技术:基于PID与MPC的电动车横纵向控制策略研究与应用,电动车自动驾驶系统:基于PID和MPC控制的横纵向动力调控策略,自动驾驶横纵向控制,纵向采用PID控制,横向采用MPC控制,纵向PID
- 2021-2023年中国石油大学(北京)硕士研究生进入复试的初试成绩基本要求.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


