K均值算法首先隨機的指定K個簇中心。然後:1)將每個實例分配到距它最近的簇中心,得到K個簇;2)計分別計算各簇中所有實例的均值,把它們作爲各簇新的簇中心。重複1)和2),直到K 個簇中心的位置都固定,簇的分配也固定。
上述K均值算法只能處理數值型的屬性,遇到分類型的屬性時要把它變爲若干個取值0和1的屬性。 WEKA將自動實施這個分類型到數值型的變換,而且WEKA會自動對數值型的數據作標準化。
用“Explorer”打開數據文件,並切換到“Cluster”。點“Choose”按鈕選擇“SimpleKMeans”,這是WEKA中實現K均值的算法。
參數說明:
displayStdDevs 是否顯示數字屬性標準差和名詞屬性個數distanceFunction 用於比較實例的距離函數(默認: weka.core.EuclideanDistance).
dontReplaceMissingValues 是否不使用mean/mode替換全部丟失的值。
maxIterations 最大迭代次數
numClusters 所聚類的個數
preserveInstancesOrder 是否預先排列實例的順序
seed 設定的隨機種子值
選中“Cluster Mode”的“Use training set”,點擊“Start”按鈕,觀察右邊“Clusterer output”給出的聚類結果。也可以在左下角“Result list”中這次產生的結果上點右鍵,“View in separate window”在新窗口中瀏覽結果。
結果解釋:
首先我們注意到結果中有這麼一行:
Within cluster sum of squared errors: 1604.7416693522332
這是評價聚類好壞的標準,數值越小說明同一簇實例之間的 距離越小。也許你得到的數值會不一樣;實際上如果把“seed”參數改一下,得到的這個數值就可能會不一樣。我們應該多嘗試幾個seed,並採納這個數值 最小的那個結果。例如我讓“seed”取100,就得到
Within cluster sum of squared errors: 1555.6241507629218
我該取後面這個。當然再嘗試幾個seed,這個數值可能會更小。
接下來“Cluster centroids:”之後列出了各個簇中心的位置。對於數值型的屬性,簇中心就是它的均值(Mean);分類型的就是它的衆數(Mode), 也就是說這個屬性上取值爲衆數值的實例最多。對於數值型的屬性,還給出了它在各個簇裏的標準差(Std Devs)。
最後的 “Clustered Instances”是各個簇中實例的數目及百分比。
爲了觀察可視化的聚類結果,我們在左下方“Result list”列出的結果上右擊,點“Visualize cluster assignments”。彈出的窗口給出了各實例的散點圖。最上方的兩個框是選擇橫座標和縱座標,第二行的“color”是散點圖着色的依據,默認是根 據不同的簇“Cluster”給實例標上不同的顏色。
可以在這裏點“Save”把聚類結果保存成ARFF文件。在這個新的ARFF文件 中,“instance_number”屬性表示某實例的編號,“Cluster”屬性表示聚類算法給出的該實例所在的簇。