MATLAB實例:聚類網絡連接圖


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

K=4


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM