2017-08-17 96 views
0

我正在處理一組座標,並且想要動態地(我有很多組需要經過這個過程)瞭解數據中有多少個不同的組。我的方法是應用k-means來調查它是否會找到質心,我可以從那裏去。爲什麼k-均值聚類會忽略大量數據?

當使用6個不同的聚類(直觀地)繪製某些數據時,k-means算法繼續忽略兩個重要的聚類,同時將多個質心置入另一個。

見圖像下面:

Clusters and Centroids

紅是座標數據點和藍色是質心的是k均值提供。在這個特定情況下,我已經達到了15個(任意),但它仍然不能識別右側的那些數據塊,而是在它們之間插入一箇中間點,而在右上角的集羣中放置8個數據塊。

不可否認,右上角的數據點稍多一點,但不是太多。

我在R中使用標準的k-means算法,只是在x和y座標中輸入。我試圖標準化數據,但這沒有任何區別。

有關爲什麼會出現這種情況的任何想法,或者可以應用其他潛在方法來試圖動態瞭解數據中存在的不同羣集的數量?

+1

你可以嘗試標準化數據,並增加'iter.max'和'nstart'(也許'iter.max = 500'和'nstart = 25')?你有可能發佈你的數據嗎? – bouncyball

+0

如果你提供一個[可重現的例子](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)和樣本輸入數據,這很容易幫助我們運行並測試代碼以查看發生了什麼。 – MrFlick

+0

這已經工作了 - 謝謝! – andrewjones54

回答

0

你可以嘗試用自組織映射

這是在此基礎上建立了訓練樣本的輸入空間的離散表示神經網絡,聚類算法稱爲地圖,並因此,一種做降維(SOM)的方法。

這個算法對於聚類也非常好,因爲不需要事先選擇簇的數量(在k-意思是你需要選擇k,這裏不是)。在你的情況下,它希望能自動找到最佳數量的簇,並且你可以實際可視化它。

你可以找到一個非常不錯的python包叫做somoclu,它已經實現了這個算法,並且可以簡單地顯示結果。除此之外,你可以去R. Here你可以找到一個博客文章的教程,和Cran包手冊的SOM。

0

K均值是一個隨機算法,它將得到卡在當地最小值

由於存在這些問題,通常運行k-means幾次,並用最小二乘法保留結果,即,找到最好的局部最小值。