matlab生成多组多维高斯分布数据
matlab生成多组多维高斯分布数据
之所以写这么一个函数,是因为在练习用matlab实现聚类分析,用matlab生成的高斯分布数据可以作为很好的数据。当然,直接load进鸢尾花数据集也可以拿来练手,到后边再对鸢尾花数据集进行分析。
代码如下:
function data = generate_data_GMM(dim, model_class, m, s, num) % 生成多组多维高斯分布数据 % dim为高斯分布的维数 % model_class为生成的数据组数 % m为高斯分布的期望值,大小为model_class*dim % s为高斯分布的协方差阵,大小为dim*dim*model_class % num为各组高斯分布的数据量,其大小为model_class*1 % 返回值data为生成的数据,其大小为num*(dim+1) % 前dim列为高斯分布数据,第(dim+1)列为组的类别编号 % 该函数用于生成多组高斯分布数据,可为聚类算法提供数据 data = []; for i = 1 : model_class data1 = ones(num(i), dim + 1); data1(:, (1 : dim)) = mvnrnd(m(i, :), s(:, :, i), num(i)); for j = 1 : num(i) data1(j, dim + 1) = i; end data = [data; data1]; end end
主函数调用:
model_class = 2; dim = 3; % 期望值 m = [0, 0, 0; 2, 2, 2]; % 协方差阵 s(:, :, 1) = [0.2, 0, 0; 0, 0.2, 0; 0, 0, 0.2]; s(:, :, 2) = [0.5, 0, 0; 0, 0.5, 0; 0, 0, 0.5]; num = [10000, 5000]; data = generate_data_GMM(dim, model_class, m, s, num); % 提出每组数据 data1 = data((data(:,4) == 1), (1:3)); data2 = data((data(:,4) == 2), (1:3)); % 绘图分析(以第二组数据为例) figure(1) plot(data2(:, 1), data2(:, 2), .k); axis equal; figure(2) plot(data2(:, 2), data2(:, 3), .k); axis equal; figure(3) plot(data2(:, 1), data2(:, 3), .k); axis equal; figure(4) histogram2(data2(:, 1), data2(:, 2), 30, FaceColor,flat)
绘图: