Hello Mat

 找回密码
 立即注册
查看: 6151|回复: 0

随机产生高斯混合分布数据集

[复制链接]

1323

主题

1551

帖子

0

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22647
发表于 2017-2-4 21:36:53 | 显示全部楼层 |阅读模式
matlab代码如下:
  1. clc,clear,close all                            % 清屏、清工作区、关闭窗口
  2. warning off                                 % 消除警告
  3. feature jit off                               % 加速代码执行
  4. % 产生X,并画图
  5. randn('seed',0);                                 % 随机种子初始化
  6. m1=[1, 2]'; m2=[2, 3]';m3=[3, 6]';                  % 已知量
  7. m=[m1 m2 m3];

  8. S(:,:,1)=0.1*eye(2);   % 初始化
  9. S(:,:,2)=0.2*eye(2);   % 初始化
  10. S(:,:,3)=0.3*eye(2);   % 初始化
  11. P=[0.4 0.4 0.2];      % 初始化
  12. N=1000;             % 初始化
  13. sed=0;             % 初始化
  14. [X,y]=mixt_model(m,S,P,N,sed);                  % 混合分布
  15. plot_data(X,y,m,1)
复制代码
混合分布函数:
  1. function [X,y]=mixt_model(m,S,P,N,sed)
  2. % 产生一组数据,来自于混合高斯分布模型
  3. %输入:
  4. %   m:    均值向量
  5. %   S:    协方差向量
  6. %   P:    先验概率
  7. %   N:    数据点数
  8. %   sed:  rand()中的随机种子初始化
  9. %输出:
  10. %   X:  lxN 矩阵,列向量存储
  11. %   y:  N为向量,对应于X下的正态分布指数

  12. rand('seed',sed);   % 随机种子
  13. [l,c]=size(m);      % 矩阵维数
  14. P_acc=P(1);       % 初始化
  15. for i=2:c
  16.     t=P_acc(i-1)+P(i);
  17.     P_acc=[P_acc t];
  18. end

  19. % 初始化,产生数据
  20. X=[];
  21. y=[];
  22. for i=1:N
  23.     t=rand;
  24.     ind=sum(t>P_acc)+1;  % 正态分布指数
  25.     X=[X; mvnrnd(m(:,ind)',S(:,:,ind),1)];
  26.     y=[y ind];
  27. end
  28. X=X';
复制代码
绘图函数:
  1. function plot_data(X,y,m,h)
  2. % 画图,实现不同的数据类,用不同的颜色表示
  3. % 输入:
  4. %   X:  lxN matrix, 画图采用X的列向量进行一列一列绘制
  5. %   y:  N-dimensional vector,数据类别
  6. %   m:  lxc matrix, 均值向量.
  7. %   h:  图像句柄

  8. [l,N]=size(X); % N=no. of data vectors, l=dimensionality
  9. [l,c]=size(m); % c=no. of classes

  10. if(l~=2) || (c>7)
  11.     fprintf('数据维数有问题,请检查\n')
  12.     return
  13. else
  14.     pale=['r.'; 'g.'; 'b.'; 'y.'; 'm.'; 'c.';'co'];
  15.     figure(h)
  16.     % 画图
  17.     hold on
  18.     for i=1:N
  19.         plot(X(1,i),X(2,i),pale(y(i),:))
  20.         hold on
  21.     end
  22.    
  23.     % 绘制数据类重心
  24.     for j=1:c
  25.         plot(m(1,j),m(2,j),'k+')
  26.         hold on
  27.     end
  28. end
复制代码




















本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-11-22 23:26 , Processed in 0.199532 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表