首先什麼是聚類,和分類有什麼區別,這裡講乙個例子,比如有一群學生考完期末考試,現在要根據他們的成績把他們劃分成幾個小組,讓老師分別進行輔導,這時候,你不知道要劃分幾個小組比較好,但你可以根據他們的成績,比較成績接近的歸到乙個小組,這個過程就是聚類,另一種情況是直接給出了90分段的乙個小組,80分段的乙個小組,其他乙個小組,根據這些要求把學生分組,這就是分類。
所以分類和聚類有什麼區別呢,就是分類會有乙個分類標準,或者說分類資料會有乙個label,你可以根據label建模,也就是有監督學習,但是聚類沒有乙個前提標準,資料沒有label,但會有乙個聚類結果的評價指標,那就是簇內距離小,簇間距離大,其實這個和主成分分析有點相似,用pca的話來說,就是希望簇內方差小,簇間均值差異大。
接下來就討論一下kmean演算法,基本流程是這樣的,首先我們要假設一共把資料分成k個cluster,假設為3,然後我們就從所有點中隨機選三個點,然後計算其他哪些點和他們的距離最近:
這是初步的聚類,可以看出,其實初始點的選取影響不少,如果選得好,直接就出結果了,不過選不好沒關係,接下來,我們會通過計算三個cluster的質心,並通過計算各個點到這些質心的距離重新進行聚類:
可以看到,第一次聚類中有乙個cluster只有乙個點,所以這個點也稱為了新的cluster的質心。而從結果來看,經過兩次cluster,其實就已經得到滿意的結果了,那麼對程式來說,它又是怎麼知道什麼時候結果才是滿意的呢,那就是當兩次迭代的質心都一樣,想象一下,我們再繼續做兩次聚類分析,聚類結果也不會變,所以cluster的質心也不會變,因此這時模型就知道是時候停下來了。
以上就是聚類以及k-mean的基本思想,理解起來還是挺簡單的,但接下來我想結合一下em演算法,分析兩者的關係。
之所以聯絡到em演算法,其實是因為兩者的過程其實十分接近,em演算法的乙個應用場景就是資料缺失時的引數估計,首先就是猜出缺失的資料是什麼,然後進行引數估計,再根據估計的引數重新猜缺失的資料,再估計,不斷重複這個過程,直到兩次迭代估計的引數差異足夠小,就認為模型已經收斂,整個過程其實和k-mean是一樣的:猜cluster質心,評估,重新計算質心,再評估,重複這個過程直到兩次質心不變。
在網路上還有更多關於em和k-mean關係的分析,這裡暫不深究。
想瀏覽更多關於數學、機器學習、深度學習的內容,可瀏覽本人部落格
K mean聚類演算法
k mean演算法屬於非監督類演算法,模型相對簡單。目標函式 j sum dj i 演算法 1 初始化k個點 2 樣本xi,到k個點的距離為 dk xi uk j argmin j dk xi屬於cj 3 更新引數 uk sum xi i sum i 重複2和3,終止條件j的變化很小或者uk變化很小...
Kmean聚類演算法原理python實現
kmean聚類演算法是基於距離對物件進行分類的演算法,該演算法實現步驟如下 1 確定初始資料簇質心,質心的數量與需要分的類的數量一致 2 將資料集中的每乙個物件與不同質心計算距離,並將其分類到最近的質心簇中 3 更新資料簇質心,迭代計算,直到資料簇質心不再變化或者分類精度達到要求時,停止演算法。如下...
sklearn機器學習 聚類演算法K Means
n init k均值演算法將在不同質心種子下執行的次數。就慣性而言,最終結果將是n init個連續執行的最佳輸出。max iter 單次執行的k均值演算法的最大迭代次數。tol 預設 1e 4,關於frobenius範數的相對容差,該範數表示兩個連續迭代的聚類中心的差異,以宣告收斂。precompu...