凯鲁嘎吉
用书写铭记日常,最迷人的不在远方
posts - 292,comments - 409,views - 138万
回到顶部(go to top)

MATLAB实例:聚类网络连接图

作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/

    本文给出一个简单实例,先生成2维高斯数据,得到数据之后,用模糊C均值(FCM)算法对数据进行聚类,得到聚类中心,然后绘制每一类数据到聚类中心的网络连接图。

1. 程序

generate_data.m

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

1
2
3
4
5
6
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

posted on   凯鲁嘎吉  阅读(1596)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析

点击右上角即可分享
微信分享提示