利用模擬退火提高Kmeans的聚類精度

2021-09-23 23:21:22 字數 1918 閱讀 2290

kmeans演算法是一種非監督聚類演算法,由於原理簡單而在業界被廣泛使用,一般在實踐中遇到聚類問題往往會優先使用kmeans嘗試一把看看結果。本人在工作中對kmeans有過多次實踐,進行過使用者行為聚類(mapreduce版本)、影象聚類(mpi版本)等。然而在實踐中發現初始點選擇與聚類結果密切相關,如果初始點選取不當,聚類結果將很差。為解決這一問題,本博文嘗試將模擬退火這一啟發式演算法與kmeans聚類相結合,實踐表明這種方法具有較好效果,已經在實際工作中推廣使用。

k-means演算法:輸入:聚類個數k,以及包含 n個資料物件的資料。輸出:滿足方差最小標準的k個聚類。

處理流程:        

(1)  從 n個資料物件選擇 k 個物件作為初始聚類中心;

(2)  迴圈(3)到(4)直到每個聚類不再發生變化為止

(3)  根據每個聚類物件的均值(中心物件),計算每個物件與這些中心物件的距離;並根據最小距離重新對相應物件進行劃分;

(4)  重新計算每個(有變化)聚類的均值(中心物件)

k means的結果與初始點的選擇密切相關,往往陷於區域性最優。

下面以乙個實際例子來講初始點的選擇對聚類結果的影響。首先3個中心點(分別是紅綠藍三點)被隨機初始化,所有的資料點都還沒有進行聚類,預設全部都標記為紅色,如下圖所示:

迭代最終結果如下:

如果初始點為如下:

最終會收斂到這樣的結果:

那怎麼解決呢?一般在實際使用中,我們會隨機初始化多批初始中心點,然後對不同批次的初始中心點進行聚類,執行完後選擇乙個相對較優的結果。這種方法不僅不夠自動,而且有較大概率得不到較優的結果。目前,研究較多的是將模擬退火、遺傳演算法等啟發式演算法與kmeans聚類相結合,這樣能大大降低陷於區域性最優的困境。下圖就是模擬退火的演算法流程圖。

「紙上得來終覺淺,絕知此事要躬行」,僅知道原理而不去實踐永遠不能深刻掌握某一知識。本人實現了基於模擬退火的kmeans演算法以及普通的kmeans演算法,以便進行比較分析。

1)首先我們隨機生成二維資料點以便用於聚類。

2)基於原生的kmeans得到的結果。

3)基於模擬退火的kmeans得到的結果

由上圖的實驗結果可以看出,基於模擬退火的kmeans所得的總體誤差準則結果為:19309.9。

而普通的kmeans所得的總體誤差準則結果為:23678.8。

可以看出基於模擬退火的kmeans所得的結果較好,當然,此演算法的複雜度較高,收斂所需的時間較長,尤其是在大資料環境下。

利用模擬退火提高Kmeans的聚類精度

kmeans演算法是一種非監督聚類演算法,由於原理簡單而在業界被廣泛使用,一般在實踐中遇到聚類問題往往會優先使用kmeans嘗試一把看看結果。本人在工作中對kmeans有過多次實踐,進行過使用者行為聚類 mapreduce版本 影象聚類 mpi版本 等。然而在實踐中發現初始點選擇與聚類結果密切相關,...

利用模擬退火提高Kmeans的聚類精度

kmeans演算法是一種非監督聚類演算法,由於原理簡單而在業界被廣泛使用,一般在實踐中遇到聚類問題往往會優先使用kmeans嘗試一把看看結果。本人在工作中對kmeans有過多次實踐,進行過使用者行為聚類 mapreduce版本 影象聚類 mpi版本 等。然而在實踐中發現初始點選擇與聚類結果密切相關,...

模擬退火的思考

無論是求最大值還是最小值 能量差值del now ans del的正負性無關緊要,重要的是del的差值,也就是絕對值大小 如果當前求的是最大值if now ans ans now,說明現在的值更優,否則完美以一定概率接受劣質解 如果del越大說明劣質解偏差較大,我們接受它的概率就要小,否則劣質解偏差...