2014-01-13 33 views
0

我創建了一個基於k-means聚類算法的代碼手冊。但是該算法沒有收斂到最優的代碼手冊,每次,聚類質心都是變化的(因爲隨機選擇初始種子)。 Matlab中有一個選項給K-Means提供初始矩陣。但是我們如何才能從大數據集中選擇初始代碼本?有沒有其他方法可以使用K-means獲得獨特的代碼簿?MATLAB:K均值聚類隨着變化的質心

+1

我不確定,但它可能是準隨機數字會給你一個比典型的僞隨機數更穩定的初始化嗎? – Dan

+0

要做到這一點的最好方法是在數據中搜索常量屬性,並使用它們來生成初始代碼簿。 – phyrox

+0

[MATLAB kMeans並不總是收斂到全局最小值]的可能重複(http://stackoverflow.com/questions/3657801/matlab-kmeans-does-not-always-converge-to-global-minima) – Amro

回答

1

使用不同的初始狀態(例如,初始種子)多次運行k均值並且選擇具有最低誤差的結果作爲最佳結果是有點標準的。

通過從您的數據集中隨機選擇k個元素作爲初始種子來種植k-means也是很典型的。

+0

我試着用隨機種子,但是我的最終碼本並不是不斷變化的。我認爲最終的碼書取決於最初的種子。 – Viz

+0

是的,k-均值受局部最小值的影響,所以很容易從不同的種子得到不同的最終結果。爲了解決這個問題,你應該用不同的種子多次運行它,並選擇錯誤率最低的結果。 – mattnedrich

0

由於默認情況下,MATLAB的K-Means使用K-MEans ++算法進行初始化,這意味着它使用隨機數。

因此,對K-Means的每個調用(對於順序調用)都可能產生不同的結果。調用K-手段之前

  1. 集MATLAB的隨機數發生器的狀態一定的狀態:

    你有3種選擇,使這個確定性。

  2. 使用K-Means選項中的流選項來設置K-Means內的流。
  3. 編寫您自己的K-Means版本,它使用確定性的方式初始化K-Means。