高斯混合模型matlab代码
时间: 2023-11-20 18:58:27 浏览: 27
以下是一个简单的高斯混合模型的 MATLAB 代码示例:
```matlab
% 生成一组高斯分布数据
rng(1);
mu1 = [1 2];
sigma1 = [0.5 0.2; 0.2 0.5];
mu2 = [-3 -5];
sigma2 = [1 0.5; 0.5 1];
X = [mvnrnd(mu1, sigma1, 200); mvnrnd(mu2, sigma2, 200)];
% 初始化模型参数
k = 2; % 高斯分布的数量
[n, d] = size(X);
mu = rand(k, d) * range(X) + min(X);
sigma = repmat(eye(d), [1 1 k]);
phi = ones(1, k) / k;
gamma = zeros(n, k);
% EM算法迭代
for iter = 1:100
% E步:计算每个样本属于每个高斯分布的概率
for i = 1:n
for j = 1:k
gamma(i, j) = phi(j) * mvnpdf(X(i, :), mu(j, :), sigma(:, :, j));
end
gamma(i, :) = gamma(i, :) / sum(gamma(i, :));
end
% M步:更新模型参数
Nk = sum(gamma);
phi = Nk / n;
for j = 1:k
mu(j, :) = sum(repmat(gamma(:, j), [1 d]) .* X) / Nk(j);
sigma(:, :, j) = ((repmat(gamma(:, j), [1 d]) .* (X - mu(j, :)))' * (X - mu(j, :))) / Nk(j);
end
end
% 绘制聚类结果
[~, labels] = max(gamma, [], 2);
figure;
scatter(X(:, 1), X(:, 2), 10, labels, 'filled');
hold on;
scatter(mu(:, 1), mu(:, 2), 100, 1:k, 'x');
```
该代码将生成两个高斯分布的数据,然后使用 EM 算法来拟合一个包含两个高斯分布的混合模型。最后,绘制聚类结果和各个高斯分布的中心。