2014-09-03 79 views
2

如果數據集有440個對象和8個屬性(數據集取自UCI機器學習庫)。那麼我們如何計算這些數據集的質心。 (批發客戶數據) https://archive.ics.uci.edu/ml/datasets/Wholesale+customersK意味着多維數據的聚類

如果我計算每行的值的平均值,那會是質心? 以及如何在matlab中繪製結果集羣。

+1

您是否嘗試使用任何可用的統計軟件包來計算K均值聚類?你試過R統計嗎? – rfolt 2014-09-03 17:30:37

+0

我不知道這件事。我讀了它的另一個工具來執行k方法。我需要的是瞭解算法。不過謝謝你,至少我知道了一些新的東西。 – Suvidha 2014-09-04 16:38:44

回答

20

OK,首先,在數據集中,1行對應於一個單個的示例中的數據,您有440行,這意味着數據集由440個示例組成。每列包含該特定特徵(或稱之爲特徵)的值,例如,數據集中的第1列包含功能Channel的值,第2列包含功能Region等的值。

K-Means

現在對於K-均值聚類,你需要指定集羣的數量(以K-意味着ķ)。假設你想要K = 3個簇,那麼初始化K-Means最簡單的方法就是從你的數據集中隨機選擇3個例子(也就是3行,從440行中隨機抽取)作爲你的質心。 現在這3個例子是你的質心

你可以把你的重心爲3個箱,你想要把每一例從數據集中到最接近(通常由歐氏距離測量;檢查功能norm在Matlab中)垃圾桶。

第一輪將所有示例放入最近的箱子後,您可以通過計算其各個箱中所有示例的mean來重新計算質心。您重複將所有示例放入最近的垃圾箱的過程,直到數據集中的示例不會將移動到另一個垃圾箱。

一些Matlab起點

您可以通過X = load('path/to/the/dataset', '-ascii');

加載數據在你的情況X將是一個440x8矩陣。

可以通過 distance = norm(example - centroid1);, 其中兩個,examplecentroid1具有維數計算1x8從一個例子的質心的歐幾里得距離。

重新計算質心的工作原理如下,假設您已經完成了K-Means的1次迭代並將所有示例放入其各自的最近倉。假設Bin1現在包含最接近centroid1的所有示例,因此Bin1的維度爲127x8,這意味着440箇中的127個示例位於此容器中。要計算下一次迭代的質心位置,可以執行centroid1 = mean(Bin1);。你會做類似的事情,你的其他箱。至於繪圖,你必須注意到你的數據集包含8個特徵,這意味着8個維度,哪個是不可視的。我建議你創建或尋找只包含2個特徵的(虛擬)數據集,因此可以通過使用Matlab的plot()函數進行查看。

+0

謝謝你的解釋。我不會找到比這更好的解釋。非常感謝您的耐心。否則,我開始相信,stackoverflow不適合像我這樣天真的人。 – Suvidha 2014-09-04 16:16:53