MATLAB高斯混合数据的生成
作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/
高斯混合模型的基本原理:聚类——GMM,MATLAB中GMM聚类算法:MATLAB中“fitgmdist”的用法及其GMM聚类算法。本文主要讨论如何用MATLAB人工生成符合高斯混合模型的数据,文中给出生成二维数据与三维数据的案例。
1. 二维数据生成
1.1. 程序
- function data=generate_GMM()
- %前两列是数据,最后一列是类标签
- %数据规模
- N=300;
- %数据维度
- dim=2;
- %%
- %混合比例
- para_pi=[0.4 0.15 0.15 0.15 0.15];
- %第一类数据
- mul=[0 0]; % 均值
- S1=[1 0;0 1]; % 协方差
- data1=mvnrnd(mul, S1, para_pi(1)*N); % 产生高斯分布数据
- %第二类数据
- mu2=[4 4];
- S2=[2 -1;-1 2];
- data2=mvnrnd(mu2,S2,para_pi(2)*N);
- %第三类数据
- mu3=[-4 4];
- S3=[2 1;1 2];
- data3=mvnrnd(mu3,S3,para_pi(3)*N);
- %第四类数据
- mu4=[-4 -4];
- S4=[2 -1;-1 2];
- data4=mvnrnd(mu4,S4,para_pi(4)*N);
- %第五类数据
- mu5=[4 -4];
- S5=[2 1;1 2];
- data5=mvnrnd(mu5,S5,para_pi(5)*N);
- %显示数据
- plot(data1(:,1),data1(:, 2),'bo');
- hold on;
- plot(data2(:,1),data2(:,2),'ro');
- plot(data3(:,1),data3(:,2),'go');
- plot(data4(:,1),data4(:,2),'ko');
- plot(data5(:,1),data5(:,2),'mo');
- data = [data1, ones(para_pi(1)*N,1); data2, 2*ones(para_pi(2)*N,1); data3, 3*ones(para_pi(3)*N,1); data4, 4*ones(para_pi(4)*N,1); data5, 5*ones(para_pi(5)*N,1)];
- %%
- %将数据集存入文件
- fid1=fopen('gauss_data.txt','w');
- for i=1:N
- for d=1:dim+1
- fprintf(fid1, '%.4f ', data(i, d));
- end
- fprintf(fid1, '\n');
- end
- fclose(fid1);
1.2. 图像

1.3. 数据
同时数据已存入当前目录的文件“gauss_data.txt”中。
2. 三维数据生成
2.1. 程序
- function data=generate_GMM()
- %前两列是数据,最后一列是类标签
- %数据规模
- N=300;
- %数据维度
- dim=3;
- %%
- %混合比例
- para_pi=[0.1 0.2 0.3 0.4];
- %第一类数据
- mul=[0 0 0]; % 均值
- S1=[1 0 0;0 1 0;0 0 1]; % 协方差
- data1=mvnrnd(mul, S1, para_pi(1)*N); % 产生高斯分布数据
- %第二类数据
- mu2=[3 3 2];
- S2=[2 -1 0;-1 1 0;0 0 1];
- data2=mvnrnd(mu2,S2,para_pi(2)*N);
- %第三类数据
- mu3=[-3 3 1];
- S3=[2 1 0;1 2 0;0 0 1];
- data3=mvnrnd(mu3,S3,para_pi(3)*N);
- %第四类数据
- mu4=[0 -3 3];
- S4=[2 1 0;1 1 0;0 0 2];
- data4=mvnrnd(mu4,S4,para_pi(4)*N);
- %显示数据
- plot3(data1(:,1),data1(:, 2),data1(:,3),'bo');
- hold on;
- grid on
- xlabel('x');
- ylabel('y');
- zlabel('z');
- plot3(data2(:,1),data2(:,2),data2(:,3),'ro');
- plot3(data3(:,1),data3(:,2),data3(:,3),'go');
- plot3(data4(:,1),data4(:,2),data4(:,3),'ko');
- data = [data1, ones(para_pi(1)*N,1); data2, 2*ones(para_pi(2)*N,1); data3, 3*ones(para_pi(3)*N,1); data4, 4*ones(para_pi(4)*N,1)];
- %%
- %将数据集存入文件
- fid1=fopen('gauss_data.txt','w');
- for i=1:N
- for d=1:dim+1
- fprintf(fid1, '%.4f ', data(i, d));
- end
- fprintf(fid1, '\n');
- end
- fclose(fid1);
2.2. 图像

2.3. 数据
同时数据已存入当前目录的文件“gauss_data.txt”中。