em算法,matlab
时间: 2023-10-24 15:36:14 浏览: 112
em算法for matlab
5星 · 资源好评率100%
EM算法(Expectation-Maximization Algorithm)是一种迭代算法,用于在具有潜变量(latent variables)的统计模型中进行参数估计。它常用于无监督学习和模型的最大似然估计。可以用MATLAB编写实现。下面是一个简单的例子:
假设我们观测到一组数据X={x1,x2,...,xn},我们知道这些数据是从一个高斯混合模型中生成的,但是我们不知道这个混合模型的参数,即每个高斯分布的均值和方差,以及每个高斯分布的权重。我们可以使用EM算法来估计这些参数。
步骤如下:
1.初始化模型参数,包括每个高斯分布的均值、方差和权重。
2.在E步骤中,计算每个数据点属于每个高斯分布的概率。这可以通过计算后验概率来完成,即对于每个数据点和每个高斯分布,计算P(该数据点属于该高斯分布|模型参数)。这可以使用贝叶斯公式来计算。
3.在M步骤中,使用上一步计算出的后验概率来更新模型参数。具体来说,更新每个高斯分布的均值、方差和权重,使得对数似然函数最大化。
4.重复步骤2和步骤3,直到模型参数达到收敛。
下面是MATLAB代码示例:
% 生成一组数据
mu1 = [1 2];
sigma1 = [1 0.5;0.5 2];
mu2 = [-3 -5];
sigma2 = [2 0;0 1];
X = [mvnrnd(mu1,sigma1,100);mvnrnd(mu2,sigma2,100)];
% 初始化模型参数
k = 2; % 高斯分布的个数
pi = ones(1,k)/k; % 权重
mu = [ones(k,1)*mean(X);ones(k,1)*mean(X)+2]; % 均值
sigma = repmat(eye(2),1,1,k); % 方差
% EM算法迭代
for iter = 1:10 % 设定最大迭代次数
% E步骤
for i = 1:k
pdf(:,i) = mvnpdf(X,mu(:,i)',sigma(:,:,i)); % 计算每个数据点属于每个高斯分布的概率
end
gamma = repmat(pi,size(X,1),1).*pdf; % 计算后验概率
gamma = gamma./repmat(sum(gamma,2),1,k); % 归一化
% M步骤
Nk = sum(gamma,1); % 每个高斯分布的数据点数
pi = Nk/size(X,1); % 更新权重
for i = 1:k
mu(:,i) = sum(repmat(gamma(:,i),1,size(X,2)).*X)/Nk(i); % 更新均值
X_centered = X-repmat(mu(:,i)',size(X,1),1);
sigma(:,:,i) = (X_centered.*(repmat(gamma(:,i),1,size(X,2)).*X_centered))'/Nk(i); % 更新方差
end
end
% 绘制结果
figure;
scatter(X(:,1),X(:,2),'filled');
hold on;
ezcontour(@(x,y)pdf_2d(x,y,mu,sigma,pi),[-10 10],[-10 10]);
title('Gaussian Mixture Model');
function p = pdf_2d(x,y,mu,sigma,pi)
p = zeros(size(x));
for i = 1:size(mu,2)
p = p+pi(i)*mvnpdf([x y],mu(:,i)',sigma(:,:,i));
end
end
阅读全文