無監督學習-k-means聚類方法

K-Means 聚類方法


對象

  • 與有監督學習不同的是,無監督學習所面向的數據是沒有標籤的。
  • 那麼如果給定一個無標籤的數據集,怎麼對其進行分類呢,這時就要使用聚類方法
  • K-means 就是聚類方法的一種

K-means 的流程:

k-means 是一個迭代算法,可以按以下步驟記憶

  1. 按照給定的K值產生K個不同的聚類中心
  2. 數據點與K個聚類中心進行距離上的計算,每個數據點選擇其本身距離最近的聚類中心的類作爲本輪的歸屬
  3. 按照新的數據分佈,分別計算各類數據的均值來作爲新的聚類中心
  4. 不斷迭代2,3步驟,直到聚類中心不再進行變化算法結束

注意:如果分類的過程中發生某類簇中沒有數據點的情況,就將那個簇刪除掉;若對簇的數量有要求,就重新進行聚類中心的初始化。

失真函數

J(c1,c2,,cm,μ1,μ2,,μk)=1mi=1mx[i]μc[i]2target:minJ(c,μ)J(c_1,c_2,\dots , c_m,\mu_1,\mu_2,\dots,\mu_k) = \frac{1}{m}\sum^{m}_{i=1}||x^{[i]} - \mu_{c^[i]} ||^2 \\ target: minJ(c,\mu)
從數學角度來看,K-means算法是基於上式的損失函數來優化求解的。

  • cic_i是第i個數據點的分類
  • μk\mu_k是聚類中心
  • μc[i]\mu_{c^{[i]}}代表的是某輪迭代時,數據點x的分類的聚類中心

而K-means的兩個迭代流程可以分別看作,失真函數J對於c和u做拉格朗日乘子法得到的最值解。
比如在簇分配時,就是固定u變量,計算所有x到u的距離,通過此方法來優化c
而在更新聚類中心時,就是固定c變量,並利用c來重新計算新的聚類中心。

聚類中心的初始化

在算法的第一步就是初始化聚類中心的位置,這裏應用了一個較好的方法,就是在所有的數據點裏隨機化選擇k個(不放回抽取)點作爲初始的聚類中心,依據此來開始算法的迭代

但是這種隨機化分配的變化性較強,就使得聚類的結果會出現問題,產生局部最優解

此時對應的解決辦法就是,多次(比如100次)隨機化初始聚類中心,然後進行聚類的分配,並計算每次最終的分類對應的失真函數的值,選擇最小的一次作爲最終的分類結果。這種方法對K在2到10之間的聚類問題很有效果,當類的數量太多的時候,這種方法的作用就不會那麼明顯了。

K的選擇

通常來講,K的選擇是經過人的思考或經驗決定的,它通常取決於要解決的問題或要達到的目的,因此並不存在一種自動的最優的k的選擇方法
若不知道K應該取多少,可以通過”肘部法則“來進行嘗試,但往往並不會取得太好的效果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章