企业传统网站开发实例,app个人主页设计,一对一直播app源码,旅游搜索网站开发在学习模糊c均值聚类时#xff0c;突然想到能否将每个样本对所属簇的奴属度(C)用气泡图的形式表示出来#xff0c;这样就可以在一张图上同时获得分类与奴属度(C)两类信息。在matlab中没有绘制气泡图的专用函数#xff0c;不过可以通过手动设置参数#xff0c;来最终达到气泡…在学习模糊c均值聚类时突然想到能否将每个样本对所属簇的奴属度(C)用气泡图的形式表示出来这样就可以在一张图上同时获得分类与奴属度(C)两类信息。在matlab中没有绘制气泡图的专用函数不过可以通过手动设置参数来最终达到气泡图的效果。以下是实现代码。二维气泡图的绘制% 这个脚本用来对模糊c均值聚类生成二维气泡图clcclear%% 获得模糊c均值聚类的结果数据load fcmdata.dat[centers,U] fcm(fcmdata,2); % 返回聚类中心信息以及每个数据点奴属与各聚类中心的值index1 find(U(1,:)max(U));% 使用find()函数找到属于第一个聚类中心的元素序号index2 find(U(2,:)max(U));% 获得属于第二个聚类中心的元素序号%% 绘制二维bubble图figureweight normalize(max(U),range)*600; % 一种扩大一组数据之间差距的方法,否则气泡效果不明显weight(weight0)(1/20)*mean(weight);% 粗略将0值转化为1/20的均值(这是估计出来的)% 绘制第一个簇的气泡图for i1:length(index1)scatter(fcmdata(index1(i),1),fcmdata(index1(i),2),weight(index1(i)),...MarkerEdgeColor,k,MarkerEdgeAlpha,0,MarkerFaceColor,r,...MarkerFaceAlpha,0.3);hold on % 别忘了这句要不然总是一个点end% 绘制第二个簇的气泡图for i1:length(index2)scatter(fcmdata(index2(i),1),fcmdata(index2(i),2),weight(index2(i)),...MarkerEdgeColor,k,MarkerEdgeAlpha,0,MarkerFaceColor,b,...MarkerFaceAlpha,0.3);hold on % 别忘了这句要不然总是一个点endplot(centers(:,1),centers(:,2),xk,markersize,10,linewidth,3);hold off最终绘制效果如下图所示 气泡的大小代表每个样本的奴属度(C)但可以看出大部分气泡大小差距不大只有在两分类交界处出现奴属度较小的气泡这是符合实施规律的。事实上图中气泡的大小差距是经过放大处理的若不经历此步操作气泡的大小是差不多的。三维气泡图的绘制原理同二维气泡图一样直接上代码。% 使用这个脚本创建三维气泡图clcclear%% 数据集的创建rng default; % For reproducibilityX [randn(20,3)*0.75ones(20,3);randn(20,3)*0.5-ones(20,3)]; % 创建20个样本的二分类数据集%% 进行模糊c均值聚类Numclust 2;[centers,U] fcm(X,Numclust);index1 find(U(1,:)max(U)); % 获取簇1的标号index2 find(U(2,:)max(U)); % 获取簇2的标号weight normalize(max(U),range)*800; % 获取气泡权重weight(weight0) (1/20)*mean(weight); % 调好看一点%% 绘制3维气泡图figurefor i 1:length(index1)scatter3(X(index1(i),1),X(index1(i),2),X(index1(i),3),weight(index1(i)),...MarkerEdgeColor,k,MarkerEdgeAlpha,0,MarkerFaceColor,r,...MarkerFaceAlpha,0.3);hold onendfor i 1:length(index2)scatter3(X(index2(i),1),X(index2(i),2),X(index2(i),3),weight(index2(i)),...MarkerEdgeColor,k,MarkerEdgeAlpha,0,MarkerFaceColor,b,...MarkerFaceAlpha,0.3);hold onendplot3(centers(:,1),centers(:,2),centers(:,3),xk,markersize,10,linewidth,3);hold off最终绘制效果图如下图所示 后续冷静下来想了想将c值以气泡图形式表示出来似乎有点画蛇添足不过作为日常编程练习还是有帮助的。matlab入门小白欢迎大家多多指教