matlab生成多组多维高斯分布数据
生活随笔
收集整理的這篇文章主要介紹了
matlab生成多组多维高斯分布数据
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
matlab生成多組多維高斯分布數(shù)據(jù)
之所以寫這么一個函數(shù),是因為在練習(xí)用matlab實現(xiàn)聚類分析,用matlab生成的高斯分布數(shù)據(jù)可以作為很好的數(shù)據(jù)。當(dāng)然,直接load進(jìn)鳶尾花數(shù)據(jù)集也可以拿來練手,到后邊再對鳶尾花數(shù)據(jù)集進(jìn)行分析。
代碼如下:
function data = generate_data_GMM(dim, model_class, m, s, num)% 生成多組多維高斯分布數(shù)據(jù)% dim為高斯分布的維數(shù)% model_class為生成的數(shù)據(jù)組數(shù)% m為高斯分布的期望值,大小為model_class*dim% s為高斯分布的協(xié)方差陣,大小為dim*dim*model_class% num為各組高斯分布的數(shù)據(jù)量,其大小為model_class*1% 返回值data為生成的數(shù)據(jù),其大小為num*(dim+1)% 前dim列為高斯分布數(shù)據(jù),第(dim+1)列為組的類別編號% 該函數(shù)用于生成多組高斯分布數(shù)據(jù),可為聚類算法提供數(shù)據(jù)data = [];for i = 1 : model_classdata1 = 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;enddata = [data; data1];end
end
主函數(shù)調(diào)用:
model_class = 2;
dim = 3;
% 期望值
m = [0, 0, 0;2, 2, 2];
% 協(xié)方差陣
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);% 提出每組數(shù)據(jù)
data1 = data((data(:,4) == 1), (1:3));
data2 = data((data(:,4) == 2), (1:3));% 繪圖分析(以第二組數(shù)據(jù)為例)
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')
繪圖:
總結(jié)
以上是生活随笔為你收集整理的matlab生成多组多维高斯分布数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 觉醒迦尔纳至少需要几天可以得到
- 下一篇: matlab编程实现k_means聚类(