K-means聚類分析


一、原理

  1. 先確定簇的個數,K
  2. 假設每個簇都有一個中心點 centroid
  3. 將每個樣本點划分到距離它最近的中心點所屬的簇中
選擇K個點做為初始的中心點
while1)
{
      將所有點分配個K個中心點形成K個簇
      重新計算每個簇的中心點
      if(簇的中心點不再改變)
break;
}

 

  • 目標函數:定義為每個樣本與其簇中心點的距離的 平方和(theSum of Squared Error, SSE)

 

  – μk 表示簇Ck 的中心點(或其它能代表Ck的點)

  – 若xn被划分到簇Ck則rnk=1,否則rnk= 0 

• 目標:找到簇的中心點μk及簇的划分rnk使得目標 函數SSE最小

 

 

  • 初始中心點通常是隨機選取的(收斂后得到的是局部最優解)

不同的中心點會對聚類結果產生不同的影響:

1、

2、

 

 

此時你一定會有疑問:如何選取"較好的"初始中心點?

  1.  憑經驗選取代表點
  2. 將全部數據隨機分成c類,計算每類重心座位初始點
  3. 用“密度”法選擇代表點
  4. 將樣本隨機排序后使用前c個點作為代表點
  5. 從(c-1)聚類划分問題的解中產生c聚類划分問題的代表點

    結論:若對數據不夠了解,可以直接選擇2和4方法

  • 需要預先確定K

   Q:如何選取K

   SSE一般隨着K的增大而減小

 

 A:emmm你多嘗試幾次吧,看看哪個合適。斜率改變最大的點比如k=2

總結:

簡單的來說,K-means就是假設有K個簇,然后通過上面找初始點的方法,找到K個初始點,將所有的數據分為K個簇,然后一直迭代,在所有的簇里面找到找到簇的中心點μk及簇的划分rnk使得目標函數SSE最小或者中心點不變之后,迭代完成。成功把數據分為K類。

預告:下一篇博文講K-means代碼實現

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM