繁体   English   中英

如何在 MATLAB 中执行 k-means 算法?

[英]How to perform k-means algorithm in MATLAB?

我是 matlab 的新手,我想知道如何在 MATLAB 中执行 k 均值算法,还想知道在执行 k 均值时如何定义聚类中心。

例如,假设我正在创建一个如下所示的数组。

m = [11.00; 10.60; 11.00; 12.00; 11.75; 11.55; 11.20; 12.10; 11.60; 11.40;...
     11.10; 11.60; 11.00; 10.15; 9.55; 9.35; 8.55; 7.65; 7.80; 8.45; 8.05]

我想将上述值聚类为 5 个聚类,其中 k = 5。

我想将聚类中心设为 2、5、10、20、40。

所以我的问题是如何在 MATLAB 中定义聚类中心并执行 k-means 算法? 在 MATLAB kmeans()函数中是否有设置聚类中心的特定参数?

请帮我解决上述问题。

k-means聚类的目标是找到k个聚类中心,以最小化所有点到各自聚类中心的总距离。

有了这个目标,你会写

[clusterIndex, clusterCenters] = kmeans(m,5,'start',[2;5;10;20;40])

这将从它们的起始位置调整聚类中心,直到找到最佳位置和分配。

如果您想将m中的点与固定聚类中心相关联,则不会使用kmeans ,而是直接使用min计算 clusterIndex

distanceToCenter = bsxfun(@minus,m,[2 5 10 20 40]);
[~, clusterIndex] = min(abs(distanceToCenter),[],2); 

IE。 您计算每个点和每个中心之间的差异,并为每个点找到具有最小(绝对)距离的中心。


要绘制结果,您可以对齐线上的点并根据中心为它们着色:

nCenters = length(clusterCenters);
cmap = hsv(nCenters);
figure
hold on
for iCenter = 1:nCenters
    plot(m(iCenter==clusterIndex),1,'.','color',cmap(iCenter,:));
    plot(clusterCenters(iCenter),1,'*','color',cmap(iCenter,:));
end

你可以在我的帖子中看到一个经典的实现 - K-Means Algorithm with Arbitrary Distance Function Matlab (Chebyshev Distance)

享受...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM