|
matlab代码如下:
- clc,clear,close all % 清屏、清工作区、关闭窗口
- warning off % 消除警告
- feature jit off % 加速代码执行
- % 产生X,并画图
- randn('seed',0); % 随机种子初始化
- m1=[1, 2]'; m2=[2, 3]';m3=[3, 6]'; % 已知量
- m=[m1 m2 m3];
-
- S(:,:,1)=0.1*eye(2); % 初始化
- S(:,:,2)=0.2*eye(2); % 初始化
- S(:,:,3)=0.3*eye(2); % 初始化
- P=[0.4 0.4 0.2]; % 初始化
- N=1000; % 初始化
- sed=0; % 初始化
- [X,y]=mixt_model(m,S,P,N,sed); % 混合分布
- plot_data(X,y,m,1)
复制代码 混合分布函数:
- function [X,y]=mixt_model(m,S,P,N,sed)
- % 产生一组数据,来自于混合高斯分布模型
- %输入:
- % m: 均值向量
- % S: 协方差向量
- % P: 先验概率
- % N: 数据点数
- % sed: rand()中的随机种子初始化
- %输出:
- % X: lxN 矩阵,列向量存储
- % y: N为向量,对应于X下的正态分布指数
-
- rand('seed',sed); % 随机种子
- [l,c]=size(m); % 矩阵维数
- P_acc=P(1); % 初始化
- for i=2:c
- t=P_acc(i-1)+P(i);
- P_acc=[P_acc t];
- end
-
- % 初始化,产生数据
- X=[];
- y=[];
- for i=1:N
- t=rand;
- ind=sum(t>P_acc)+1; % 正态分布指数
- X=[X; mvnrnd(m(:,ind)',S(:,:,ind),1)];
- y=[y ind];
- end
- X=X';
复制代码 绘图函数:
- function plot_data(X,y,m,h)
- % 画图,实现不同的数据类,用不同的颜色表示
- % 输入:
- % X: lxN matrix, 画图采用X的列向量进行一列一列绘制
- % y: N-dimensional vector,数据类别
- % m: lxc matrix, 均值向量.
- % h: 图像句柄
-
- [l,N]=size(X); % N=no. of data vectors, l=dimensionality
- [l,c]=size(m); % c=no. of classes
-
- if(l~=2) || (c>7)
- fprintf('数据维数有问题,请检查\n')
- return
- else
- pale=['r.'; 'g.'; 'b.'; 'y.'; 'm.'; 'c.';'co'];
- figure(h)
- % 画图
- hold on
- for i=1:N
- plot(X(1,i),X(2,i),pale(y(i),:))
- hold on
- end
-
- % 绘制数据类重心
- for j=1:c
- plot(m(1,j),m(2,j),'k+')
- hold on
- end
- end
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|