0
点赞
收藏
分享

微信扫一扫

GMM(2)

静悠 2022-03-30 阅读 46

若已知高斯混合模型的均值、协方差矩阵和权重系数,用函数gmdistribution可以生成一个高斯混合模型。通常我们只有一组样本数据,要将其拟合为高斯混合模型,所用算法为EM算法;matlab中函数fitmdist()可以较好的拟合出高斯混合模型。

实验代码如下:

%高斯混合模型的参数拟合 
%产生三个二维的单高斯模型,并用来产生模拟数据
clc; close all; clear all;
k = 3; %单高斯成分个数
mu1 = [-2 -2]'; sigma1 = [1 0; 0 2];   %第一个高斯分布
mu2 = [-3  3]'; sigma2 = [1 0; 0 0.5]; %第二个高斯分布
mu3 = [ 3 -3]'; sigma3 = [0.5 0; 0 1]; %第三个高斯分布
%根据三个高斯模型参数,分别随机产生500个样本点,并组合在一起
rng(1); 
X1 = mvnrnd(mu1,sigma1,500); %产生第一类样本数据
X2 = mvnrnd(mu2,sigma2,500); %产生第二类样本数据
X3 = mvnrnd(mu3,sigma3,500); %产生第三类样本数据
X = [X1; X2; X3];            %组成三类样本数据

gm = fitgmdist(X,k);                             %gm是个结构体,保存了拟合模型的参数
lab = [ones(500,1);2*ones(500,1);3*ones(500,1)]; %三类数据的标签
h = gscatter(X(:,1), X(:,2), lab);               %画出三类数据散点图
hold on;
f = @(x,y)pdf(gm,[x,y]);                         %计算拟合后的概率密度函数值
fcontour(f, '--', 'LineWidth',2);
title('散点图和拟合的高斯模型轮廓');
legend('簇1','簇2','簇3','Location','NE');
set(gca,'Ylim',[-7,7],'Xlim',[-7,7],'FontSize',12);
hold off
properties(gm)              %显示拟合模型的属性
Mu = gm.mu                  %显示拟合模型的均值
Sigma = gm.Sigma            %显示拟合模型的协方差
w = gm.ComponentProportion  %显示拟合模型的成分比例

其输出为

Mu =

    2.9313   -2.9883
   -1.9967   -2.0620
   -2.9637    3.0801


Sigma(:,:,1) =

    0.4878   -0.0162
   -0.0162    1.0621


Sigma(:,:,2) =

    0.9857    0.0049
    0.0049    1.8753


Sigma(:,:,3) =

    1.1347    0.0667
    0.0667    0.5450


w =

    0.3345    0.3307    0.3348

其中w为三种数据的混合比例,Mu为均值,Sigma为协方差矩阵,可见其拟合效果还不错。

在这里插入图片描述

举报

相关推荐

0 条评论