1. 程式人生 > >kmeans聚類演算法及複雜度

kmeans聚類演算法及複雜度

kmeans是最簡單的聚類演算法之一,kmeans一般在資料分析前期使用,選取適當的k,將資料分類後,然後分類研究不同聚類下資料的特點。

演算法原理

  1. 隨機選取k箇中心點;
  2. 遍歷所有資料,將每個資料劃分到最近的中心點中;
  3. 計算每個聚類的平均值,並作為新的中心點;
  4. 重複2-3,直到這k箇中線點不再變化(收斂了)。

時間複雜度:O(I*n*k*m)

空間複雜度:O(n*m)

其中m為每個元素欄位個數,n為資料量,I為跌打個數。一般I,k,m均可認為是常量,

所以時間和空間複雜度可以簡化為:O(n),即線性的。

演算法收斂

從kmeans的演算法可以發現,設目標函式SSE如下:

SSE(clip_image002,clip_image004,…,clip_image006) = clip_image008

SSE其實是一個嚴格的座標下降(Coordinate Decendet)過程,採用歐式距離作為變數之間的聚類函式。每次朝一個變數 Ci 的方向找到最優解;目標函式SSE求偏倒數,並令其偏導數等於0,可得:

Ci = clip_image012 

其中 m 是 Ci 所在的簇的元素的個數.

我們由公式Ci發現,當前聚類的均值就是當前方向的最優解(最小值),這與kmeans的每一次迭代過程一樣。所以,這樣保證SSE每一次迭代時,都會減小,最終使SSE收斂。

由於SSE是一個非凸函式(non-convex function),所以SSE並不能保證找到全域性最優解,只能確保區域性最優解。但是可以重複執行幾次kmeans,選取SSE最小的一次作為最終的聚類結果。

計算最近的鄰居之間的距離,通常用歐氏距離來,有時也用曼哈頓距離,請對比下這兩種距離的差別?


歐氏距離


歐氏距離,最常見的兩點之間或多點之間的距離表示法,又稱之為歐幾里得度量,它定義於歐幾里得空間中,如點 x = (x1,...,xn) 和 y = (y1,...,yn) 之間的距離為:

歐氏距離雖然很有用,但也有明顯的缺點。它將樣品的不同屬性(即各指標或各變數量綱)之間的差別等同看待,這一點有時不能滿足實際要求。例如,在教育研究中,經常遇到對人的分析和判別,個體的不同屬性對於區分個體有著不同的重要性。因此,歐氏距離適用於向量各分量的度量標準統一的情況

如果各資料之間量綱的不相同,該如何比較?

0-1規格化

由於資料之間量綱的不相同,不方便比較。舉個例子,比如遊戲使用者的線上時長和活躍天數,前者單位是秒,數值一般都是幾千,而後者單位是天,數值一般在個位或十位,如果用這兩個變數來表徵使用者的活躍情況,顯然活躍天數的作用基本上可以忽略。所以,需要將資料統一放到0~1的範圍,將其轉化為無量綱的純數值,便於不同單位或量級的指標能夠進行 比較 和 加權

具體計算方法如下:

clip_image014

其中clip_image016屬於A。

評估聚類的效果

通常使用輪廓係數(Silhouette Coefficient),用於評估聚類的效果。輪廓係數結合了聚類的凝聚度(Cohesion)和分離度(Separation)。該值處於-1~1之間,值越大,表示聚類效果越好。具體計算方法如下:

  1. 對於第i個元素x_i,計算x_i與其同一個簇內的所有其他元素距離的平均值,記作a_i,用於量化簇內的凝聚度。
  2. 選取x_i外的一個簇b,計算x_i與b中所有點的平均距離,遍歷所有其他簇,找到最近的這個平均距離,記作b_i,用於量化簇之間分離度。
  3. 對於元素x_i,輪廓係數s_i = (b_i – a_i)/max(a_i,b_i)
  4. 計算所有x的輪廓係數,求出平均值即為當前聚類的整體輪廓係數

從上面的公式,不難發現若s_i小於0,說明x_i與其簇內元素的平均距離小於最近的其他簇,表示聚類效果不好。如果a_i趨於0,或者b_i足夠大,那麼s_i趨近與1,說明聚類效果比較好。

曼哈頓距離

曼哈頓距離,我們可以定義曼哈頓距離的正式意義為L1-距離城市區塊距離,也就是在歐幾里得空間的固定直角座標系上兩點所形成的線段對軸產生的投影的距離總和。例如在平面上,座標(x1, y1)的點P1與座標(x2, y2)的點P2的曼哈頓距離為:

要注意的是,曼哈頓距離依賴座標系統的轉度,而非系統在座標軸上的平移或對映。當座標軸變動時,點間的距離就會不同。

通俗來講,想象你在曼哈頓要從一個十字路口開車到另外一個十字路口,駕駛距離是兩點間的直線距離嗎?顯然不是,除非你能穿越大樓。而實際駕駛距離就是這個“曼哈頓距離”,這也是曼哈頓距離名稱的來源, 同時,曼哈頓距離也稱為城市街區距離(City Block distance)。

曼哈頓距離和歐式距離一般用途不同,無相互替代性。

馬氏距離和餘弦相似度可參考下面: