2012-12-13 118 views
4

我有71個屬性和17個實例的數據。我想將它們分爲六組或一組。我嘗試了newsom(data, [ 6 6 ])通過SOM集羣

結果如下圖所示。我無法弄清楚集羣的位置以及如何以編程方式找到它們?


enter image description here enter image description here

我讀了所有那些關於SOM的論文,但永遠無法弄清楚如何獲得這些集羣的集羣和數據?所以,當你回答我的問題時,也請指出。

+0

這不是直接有用,但是有選擇自組織映射的原因嗎?我總是發現它不雅,耗時,而且在少數情況下,我發現它(我與之合作的人)看到它會產生大多無用的聚類。 – micans

+0

也許你是正確的,仍然不是一種聚類的方式?如果沒有,請提出一些其他方法。 – user1900559

+0

17個實例並不多。我建議使用分層聚類來使用例如單鏈連接聚類和完整鏈接聚類。這會讓你處理你的數據,你可以使用生成的樹來將你的數據分成六類。你也可以用k-means將k設置爲6.對於所有的方法,你需要確保沒有任何屬性支配其他屬性(除非這是你想要的)。正常化可能是需要的。最後,對於某些類型的數據(例如時間進程),基於例如皮爾遜相關係數可能是合適的。 – micans

回答

1

您必須仔細研究有關從newsom(目前不推薦使用)或selforgmap函數返回結構的文檔。在IW領域內,您可以找到N * N個羣集座標。例如:

somnet = newsom(data, [ 6 6 ]) 
my_clusters = somnet.IW; 

myclusters將具有(在殼體6 * 6)和M列N * N行等於輸入尺寸。就這樣。

+1

非常感謝。 IW給出每個數據的節點權重。對於我的數據,my_clusters中有36x71的數據。所以,這些數據仍然沒有顯示集羣。 – user1900559

+0

在這種情況下,權重是集羣座標。因此,您所擁有的36行中的每一行都是代表集羣中心的71維矢量。 –

1

由於實例與地圖節點的比例很高,因此您有最終地圖中不會「贏」實例的節點,因此可以使用這些「空」節點分隔地圖。請查看以下關於som聚類的更多信息:Clustering of the Self−Organizing Map

請記住,SOM是一種非監測聚類方法,即您沒有定義聚類數量,數據會告訴您這一點。

+0

謝謝你的回覆。我知道SOM是一種無監督的聚類方法。問題是,在分組完成後,我需要4或6個羣集。 不幸的是,kmeans算法沒有返回滿意的結果。 – user1900559

+0

@ user1900559,如果您需要少量的集羣,則可以使用較小的映射(2x3),並將每個映射節點視爲集羣,但不建議使用SOM。您也可以在我所引用的論文中描述的SOM上實現分層聚類,並且您可以定義所需數量的最終聚類。 – pater

+0

謝謝。我嘗試了層次聚類和k-means。問題在於一些數據點在不同的集羣過程中從一個集羣轉移到另一個集羣。 – user1900559