matlab生成多组多维高斯分布数据
生活随笔
收集整理的這篇文章主要介紹了
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_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
主函數調用:
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')
繪圖:
總結
以上是生活随笔為你收集整理的matlab生成多组多维高斯分布数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 觉醒迦尔纳至少需要几天可以得到
- 下一篇: 求一本小说,女主被绑架老公为了小三没去救