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

时间:2017-01-22 06:02:52

标签: algorithm matlab k-means

我是matlab的新手,我想知道如何在MATLAB中执行k-means算法,而且我想知道在执行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()函数中的聚类中心?

请帮我解决上述问题。

2 个答案:

答案 0 :(得分:1)

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); 

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

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

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

答案 1 :(得分:0)

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

...享受