2017-01-22 21 views
-1

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

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

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()函数中的聚类中心?

请帮我解决上述问题。

+1

检查这个https://in.mathworks.com/help/stats/kmeans.html –

回答

1

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

有了这个目标,你会写

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

这会调整他们的起始位置聚类中心,直到被发现的最佳位置和分配。

如果你不是想在m固定聚类中心的点相关联,你不会用kmeans,但计算clusterIndex直接使用min

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 
+0

感谢您的回答。如果你能让我知道如何绘制结果,这将是非常有帮助的。 – TSac

+0

@TSac如果这个答案帮助你考虑[接受它](http://stackoverflow.com/help/someone-answers) – EBH

+0

关于如何在2D中绘制上图的任何想法?例如,x轴表示时间,y轴表示频率。如果你能回答,会很感激。 – TSac