[已解决] 层次聚类之后如何得到新的中心点图

[复制链接]
额赋完分 发表于 2022-6-22 12:10:36
各位大神,怎么做能将图中上面两个类各自只显示中心点。也就是红色的累两个点合成为一个点




clear,clc,close all
%导入数据
data = [1 0;2 0;3 5;4 8;5 15;6 0;7 0];
plot(data(:,1),data(:,2),'linestyle','none','marker','x')
%
close all
dis=pdist(data,'euclidean');  %用pdist函数计算变量之间的距离
SF =squareform(dis);
datalink = linkage(dis,'average');   %用 linkage函数定义变量之间的连接
%
% 绘制树状图
dendrogram(datalink);
%
T = cluster(datalink,'maxclust',3);   %用cluster函数创建聚类
figure;
%绘制经过聚类的原始数据
gscatter(data(:,1),data(:,2),T)




上.PNG

最佳答案


lyqmath 发表于 2022-6-22 16:48:39


可能需要做一些对应计算


更多的可参考
《视觉大数据智能分析算法实战》[刘衍琦等]


[attach]332027[/attach]
  1. clc; clear all; close all
  2. %导入数据
  3. data = [1 0;2 0;3 5;4 8;5 15;6 0;7 0];
  4. figure;
  5. plot(data(:,1),data(:,2),'linestyle','none','marker','x')

  6. dis=pdist(data,'euclidean');  %用pdist函数计算变量之间的距离
  7. SF =squareform(dis);
  8. datalink = linkage(dis,'average');   %用 linkage函数定义变量之间的连接

  9. figure;
  10. % 绘制树状图
  11. dendrogram(datalink);

  12. T = cluster(datalink,'maxclust',3);   %用cluster函数创建聚类
  13. figure;
  14. %绘制经过聚类的原始数据
  15. gscatter(data(:,1),data(:,2),T)
  16. xm = get(gca, 'XLim');
  17. ym = get(gca, 'YLim');

  18. T2 = [];
  19. for i = 1 : length(T)
  20.     if isempty(find(T2==T(i)))
  21.     T2(end+1) = T(i);
  22.     end
  23. end

  24. data2 = [];
  25. for i = 1 : length(T2)
  26.     id = find(T==T2(i));
  27.     m = mean(data(id,:), 1);
  28.     data2(end+1, :) = m;
  29. end
  30. figure;
  31. gscatter(data2(:,1),data2(:,2),T2)
  32. set(gca, 'XLim', xm, 'YLim', ym);


复制代码


回复此楼

14 条回复


lyqmath 发表于 2022-6-22 16:48:39


可能需要做一些对应计算


更多的可参考
《视觉大数据智能分析算法实战》[刘衍琦等]


result.png
  1. clc; clear all; close all
  2. %导入数据
  3. data = [1 0;2 0;3 5;4 8;5 15;6 0;7 0];
  4. figure;
  5. plot(data(:,1),data(:,2),'linestyle','none','marker','x')

  6. dis=pdist(data,'euclidean');  %用pdist函数计算变量之间的距离
  7. SF =squareform(dis);
  8. datalink = linkage(dis,'average');   %用 linkage函数定义变量之间的连接

  9. figure;
  10. % 绘制树状图
  11. dendrogram(datalink);

  12. T = cluster(datalink,'maxclust',3);   %用cluster函数创建聚类
  13. figure;
  14. %绘制经过聚类的原始数据
  15. gscatter(data(:,1),data(:,2),T)
  16. xm = get(gca, 'XLim');
  17. ym = get(gca, 'YLim');

  18. T2 = [];
  19. for i = 1 : length(T)
  20.     if isempty(find(T2==T(i)))
  21.     T2(end+1) = T(i);
  22.     end
  23. end

  24. data2 = [];
  25. for i = 1 : length(T2)
  26.     id = find(T==T2(i));
  27.     m = mean(data(id,:), 1);
  28.     data2(end+1, :) = m;
  29. end
  30. figure;
  31. gscatter(data2(:,1),data2(:,2),T2)
  32. set(gca, 'XLim', xm, 'YLim', ym);


复制代码


回复此楼

额赋完分 发表于 2022-6-23 13:58:46
lyqmath 发表于 2022-6-22 16:48
可能需要做一些对应计算

十分谢谢博主,能否将最后一张合成图片的数据导出为一维矩阵啊?其余值赋0

额赋完分 发表于 2022-6-23 14:12:47
lyqmath 发表于 2022-6-22 16:48
可能需要做一些对应计算

不好意思,刚刚回复理解错误,忽略

额赋完分 发表于 2022-6-23 14:22:17
lyqmath 发表于 2022-6-22 16:48
可能需要做一些对应计算

博主,我其实想问能否将data2的数据扩充成7个点的一维矩阵,其余点值为0

lyqmath 发表于 2022-6-23 20:56:53
额赋完分 发表于 2022-6-23 14:22
博主,我其实想问能否将data2的数据扩充成7个点的一维矩阵,其余点值为0

7个点的一维矩阵
是指标签吗?
能否举个例子

额赋完分 发表于 2022-6-24 09:54:21
lyqmath 发表于 2022-6-23 20:56
7个点的一维矩阵
是指标签吗?
能否举个例子

博主,您好,我以图片形式发您了,能否根据data2解决一下 拉拉.PNG

额赋完分 发表于 7 天前
lyqmath 发表于 2022-6-23 20:56
7个点的一维矩阵
是指标签吗?
能否举个例子

博主,还方便解答嘛:'(

lyqmath 发表于 6 天前
额赋完分 发表于 2022-6-29 20:22
博主,还方便解答嘛


嗯,刚注意到。

这实际上是一个升维后做聚类,再降维的过程。


更多的可参考
《视觉大数据智能分析算法实战》[刘衍琦等]



思路1:


对数据做细化,例如:

  1. data2 =

  2.     4.0000         0
  3.     3.5000    6.5000
  4.     5.0000   15.0000
复制代码


则数据按0.5刻度,重新处理,得到
  1. % 数据插值方法
  2. x3 = min(data(:,1)) : 0.5 : max(data(:,1));
  3. y3 = spline(data(:,1), data(:, 2), x3);
  4. data3 = [x3(:) y3(:)];
  5. data4 = data3; data4(:,2) = 0;
  6. for i = 1 : size(data2, 1)
  7.     id = find(data4(:,1)==data2(i,1));
  8.     data4(id, 2) = data2(i,2);
  9. end
复制代码
  1. data4 =

  2.     1.0000         0
  3.     1.5000         0
  4.     2.0000         0
  5.     2.5000         0
  6.     3.0000         0
  7.     3.5000    6.5000
  8.     4.0000         0
  9.     4.5000         0
  10.     5.0000   15.0000
  11.     5.5000         0
  12.     6.0000         0
  13.     6.5000         0
  14.     7.0000         0
复制代码


思路2:
对聚类中心做降维,得到一维形式

  1. >> data2

  2. data2 =

  3.     4.0000         0
  4.     3.5000    6.5000
  5.     5.0000   15.0000

  6. >> coeff = pca(data2)

  7. coeff =

  8.     0.0723    0.9974
  9.     0.9974   -0.0723

  10. >> data2*coeff(:,1)

  11. ans =

  12.     0.2894
  13.     6.7362
  14.    15.3224

  15. >>
复制代码


可以看到降维后实际上对应的数值,跟原数据是有一定的意义关联。



额赋完分 发表于 6 天前
lyqmath 发表于 2022-6-30 10:55
嗯,刚注意到。

这实际上是一个升维后做聚类,再降维的过程。

博主,您好,谢谢回复~我做了您第一个,怎么显示:未定义函数或变量 'data'。另外,我想降维成1乘7的,我看您第一个思路咋不是:'(

lyqmath 发表于 5 天前
额赋完分 发表于 2022-6-30 16:41
博主,您好,谢谢回复~我做了您第一个,怎么显示:未定义函数或变量 'data'。另外,我想降维成1乘7的,我 ...

这个是跟上面的回复一块的,先运行上面的代码,再运行这个。

第一个思路不是降维的,是从平面上考虑。第二个是pca降维的思路。

更多的可参考
《视觉大数据智能分析算法实战》[刘衍琦等]

额赋完分 发表于 5 天前
lyqmath 发表于 2022-7-1 10:51
这个是跟上面的回复一块的,先运行上面的代码,再运行这个。

第一个思路不是降维的,是从平面上考虑。第 ...

博主您好!您写的我看明白了,谢谢解答,帮助我不少 啦啦啦.PNG ,但是我这边有个想法,能否有空的时候解答一下:handshake

lyqmath 发表于 4 天前
额赋完分 发表于 2022-7-1 17:30
博主您好!您写的我看明白了,谢谢解答,帮助我不少,但是我这边有个想法,能否有空的时候解答一下:hands ...

是的,这个设定规则,直接做round、floor、ceil取整即可

额赋完分 发表于 3 天前
lyqmath 发表于 2022-7-2 10:24
是的,这个设定规则,直接做round、floor、ceil取整即可

谢谢博主回复,搞了一天没实现,能方便帮写一下吗。感激

lyqmath 发表于 前天 07:58
额赋完分 发表于 2022-7-3 14:33
谢谢博主回复,搞了一天没实现,能方便帮写一下吗。感激



举个例子
更多的可参考
《视觉大数据智能分析算法实战》[刘衍琦等]


  1. >> data=[2 4.5 6.5; 0.6667 14 0]'

  2. data =

  3.     2.0000    0.6667
  4.     4.5000   14.0000
  5.     6.5000         0

  6. >> ndata = zeros(7,2);
  7. >> ndata(round(data(:,1)), 2) = round(data(:, 2))

  8. ndata =

  9.      0     0
  10.      0     1
  11.      0     0
  12.      0     0
  13.      0    14
  14.      0     0
  15.      0     0

  16. >>
复制代码


您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表