KMeans——之我見
在講解KMeans演算法聚類之前,先推出一個場景:在上政治課的過程中,有N個班級,每個班級為M人,按照正常邏輯,相熟悉的人,會坐在一起。但是,不代表每個班的同學恰巧都坐在一起,為了把每個班的同學聚集在一起,我們需要給每個同學貼一個Label。同時,讓每個班的班長站起來,其餘同學根據自己身上的Label(即:屬於哪個班集體),自動的和身邊的人換座,向班長靠攏。這個過程和KMeans所表達的思想基本上是類似的,使結果儘可能收斂(每個班級的同學儘可能坐在一起)。
注:當一個班級中所有的同學都找到班長時,可以向班長做一個手勢,該手勢只有該班班長能清楚——做這個手勢的同學,是屬於我們班的。然後,班長為了能夠使同學通過移動最小的距離,就聚集在一起,他需要分析自己和每個同學大致的距離,然後儘可能的把自己的位置調整到最中心(使同學們移動的總的距離最小)。
通過模擬以上場景,大家對KMeans演算法作用及其操作應該有了一個清晰的認識。好了,讓我們具體的去學習它吧!
聚類演算法和分類演算法思想是不同的(不要混為一談)。分類演算法是給出一個數據,然後判斷這個資料屬於已分好的類中的具體哪一個類。聚類演算法是給一大堆原始資料,然後通過演算法將其中具有相似特徵的資料聚為一類。
在這裡,聚類的物件,根據自己定義(本文就不多加干涉了,要不就感覺有了侷限性)。
KMeans演算法的思想是隨機給定k個簇中心(就是每個班的班長)。按照最近鄰原則把待分類樣本點(每個班級裡的學生)分到各個簇。然後按平均法重新計算各個簇的中心,從而確定新的簇心(班長的位置需要變動,以致同學們總的移動距離最短)。然後,進行迭代,直到簇心的移動距離小於某個給定的值。(收斂的程度,根據實驗要求安排)
主要分為三步:
1) 為待聚類的點尋找聚類中心(一般是隨機定義)
2) 計算每個點到聚類中心的距離,將每個點聚類到離該點最近的聚類中心,設定Label.
3) 計算每個聚類中所有點的座標平均值,並將這個平均值作為新的類中心。(在這裡,每個樣本就是一個N維向量,每維相加,最後取均值)
最後:反覆執行(2)、(3),直到聚類中心不再進行大範圍移動或者聚類次數達到實驗要求位置。
KMeans主要思想就是以上內容,思想懂了,Code就不難了。各位朋友,如果在做行實驗過程中,有什麼疑問,可以留言。