我是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()
函数中的聚类中心?
请帮我解决上述问题。
答案 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)。
...享受