假设我想要使用3个功能对数据进行聚类。在运行聚类算法后,我获得了以下6个聚类中心:
246.844727524039 250.149069392025 94.0942587475951
121.988259016632 162.247917376091 100.033277638728
246.832071340390 250.114555535282 94.0640197467370
247.069762690783 237.380529249185 176.069941183101
57.6643682370364 59.8647220036974 44.0150398556124
253.248727658092 254.655572229735 71.2948414962619
任何人都可以注意到中心1和3彼此非常接近。有没有办法将它们合并为一个中心?我看起来像一个返回合并的集群中心的函数。有什么想法吗?
答案 0 :(得分:1)
我建议采用以下方法:
您可以按如下方式执行此计算:
[m,n] = size(centers);
threshold = 1; %defines a threshold
centroidsToMerge = [];
for i=1:m
for j=(i+1):m
if norm(centers(i,:)-centers(j,:))<threshold
centroidsToMerge = [centroidsToMerge;[i,j]];
end
end
end
阈值= 1的结果:
centroidsToMerge = [1, 3]
阈值= 30的结果:
centroidsToMerge = [ 1,3 ; 1,6 ; 3,6 ]
如果你有统计和机器学习工具箱,你可以使用MATLAB的pdist函数来自动计算所有距离,因此可以避免for循环。不幸的是,我目前还没有这个工具箱,所以我无法使用它。但是,我仍然相信这是一个很好的开始。