MATLAB实例:聚类网络连接图
作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/
本文给出一个简单实例,先生成2维高斯数据,得到数据之后,用模糊C均值(FCM)算法对数据进行聚类,得到聚类中心,然后绘制每一类数据到聚类中心的网络连接图。
1. 程序
generate_data.m
function data=generate_data() %前两列是数据,最后一列是类标签 %% %数据规模 N=100; %混合比例 para_pi=[0.33, 0.33, 0.34]; %第一类数据 mul=[0 -1]; % 均值 S1=[1 0;0 1]; % 协方差 data1=mvnrnd(mul, S1, para_pi(1)*N); % 产生高斯分布数据 %第二类数据 mu2=[2 2]; S2=[1 0;0 1]; data2=mvnrnd(mu2,S2,para_pi(2)*N); %第三类数据 mu3=[-2 2]; S3=[1 0;0 1]; data3=mvnrnd(mu3,S3,para_pi(3)*N); %显示数据 plot(data1(:,1),data1(:, 2),'b.'); hold on; plot(data2(:,1),data2(:,2),'r.'); plot(data3(:,1),data3(:,2),'g.'); data = [data1, ones(para_pi(1)*N,1); data2, 2*ones(para_pi(2)*N,1); data3, 3*ones(para_pi(3)*N,1)];
plot_fcm_2D.m
function plot_fcm_2D(data, K) [center,U] = fcm(data,K); index=cell(K, 1); for k=1:K index{k}=find(U(k,:)==max(U)); plot(data(index{k},1),data(index{k},2),'ro'); hold on; end plot((center(:, 1)),(center(:, 2)),'*', 'MarkerSize',10,'color','k'); for k=1:K for i=1:length(index{k}) line([data(index{k}(i),1),center(k,1)],[data(index{k}(i),2),center(k,2)],'LineWidth',0.8,'Color','b'); end end
demo_fcm.m
data=generate_data(); data=data(:, 1:2); K=3; plot_fcm_2D(data, K); string=['demo_figure_', num2str(K), '.jpg']; saveas(gcf,sprintf(string),'bmp'); %保存图片
2. 结果
K=2
K=3