2017-01-22 19 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