Weka -- 聚類算法之K-means

聚類分析中的“類”(cluster)和分類的“類”(class)是不同的,對cluster更加準確的翻譯應該是“簇”。聚類的任務是把所有的實例分配到若干的簇,使得同一個簇的實例聚集在一個簇中心的周圍,它們之間距離的比較近;而不同簇實例之間的距離比較遠。對於由數值型屬性刻畫的實例來說,這個距離通常指歐氏距離。 
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”屬性表示聚類算法給出的該實例所在的簇。

發佈了43 篇原創文章 · 獲贊 13 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章