Kmeans算法


1.Kmeans算法

1.1算法思想

  kmeans算法又名k均值算法,是一個重復移動類中心點的過程,把類的中心點,也稱重心(centroids),移動到其包含成員的平均位置,然后重新划分其內部成員。k是算法計算出的超參數,表示類的數量;Kmeans可以自動分配樣本到不同的類,但是不能決定究竟要分幾個類。k必須是一個比訓練集樣本數小的正整數。有時,類的數量是由問題內容指定的。其算法思想總結為:先從樣本集中隨機選取 k 個樣本作為簇中心,並計算所有樣本與這 k 個“簇中心”的距離,對於每一個樣本,將其划分到與其距離最近的“簇中心”所在的簇中,對於新的簇計算各個簇的新的“簇中心”。

根據以上描述,我們可以知道實現kmeans算法的要點:

  (1)簇個數 k 的選擇,一般是按照實際需求進行決定,或在實現算法時直接給定 kk 值。
  (2)各個樣本點到“簇中心”的距離

     給定樣本 x(i)={x(i)1,x(i)2,,...,x(i)n,}x(j)={x(j)1,x(j)2,,...,x(j)n,}i,j=1,2,...,mnx(i)={x1(i),x2(i),,...,xn(i),}與x(j)={x1(j),x2(j),,...,xn(j),},其中i,j=1,2,...,m,表示樣本數,n表示特 征數 。本文數據集為連續屬性,因此代碼中主要以歐式距離進行距離的度量計算

 

 

  

         (3)根據新划分的簇,更新“簇中心”

1.2算法步驟

       輸入:訓練數據集 D=x(1),x(2),...,x(m)D=x(1),x(2),...,x(m) ,聚類簇數 k ;
  過程:函數 kMeans(D,k,maxIter)kMeans(D,k,maxIter) .
  1:從 D 中隨機選擇 kk 個樣本作為初始“簇中心”向量: μ(1),μ(2),...,,μ(k)μ(1),μ(2),...,,μ(k) :
  2:repeat
  3:  令 Ci=(1ik)Ci=∅(1≤i≤k)
  4:  for j=1,2,...,mj=1,2,...,m do
  5:    計算樣本 x(j)x(j) 與各“簇中心”向量 μ(i)(1ik)μ(i)(1≤i≤k) 的歐式距離
  6:    根據距離最近的“簇中心”向量確定 x(j)x(j) 的簇標記: λj=argmini{1,2,...,k}djiλj=argmini∈{1,2,...,k}dji
  7:    將樣本 x(j)x(j) 划入相應的簇: Cλj=Cλj{x(j)}Cλj=Cλj⋃{x(j)} ;
  8:  end for
  9:  for i=1,2,...,ki=1,2,...,k do
  10:    計算新“簇中心”向量: (μ(i))=1|Ci|xCix(μ(i))′=1|Ci|∑x∈Cix ;
  11:    if (μ(i))=μ(i)(μ(i))′=μ(i) then
  12:      將當前“簇中心”向量 μ(i)μ(i) 更新為 (μ(i))(μ(i))′
  13:    else
  14:      保持當前均值向量不變
  15:    end if
  16:  end for
  17:  else
  18:until 當前“簇中心”向量均未更新
  輸出:簇划分 C=C1,C2,...,CK

1.3代碼實現

 

1.4算法優缺點

1.4.1優點:

      1.原理比較簡單,實現也是很容易,收斂速度快。

      2.對大數據集有較高的效率並且是可伸縮性的。

      3.主要需要調參的參數僅僅是簇數k。

1.4.2缺點:

      1.K值需要預先給定,很多情況下K值的估計是非常困難的。

       2.K-Means算法對初始選取的質心點是敏感的,不同的隨機種子點得到的聚類結果完全不同 ,對結果影響很大。

       3.采用迭代方法,可能只能得到局部的最優解,而無法得到全局的最優解。

 

參考文獻:

   http://bigdata.51cto.com/art/201804/571439.htm

   https://www.cnblogs.com/lliuye/p/9144312.html

 


免責聲明!

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



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