kmeans中的k的含義 kmeans聚類理論篇

2021-10-14 10:41:55 字數 2114 閱讀 9011

前言

kmeans是最簡單的聚類演算法之一,但是運用十分廣泛。最近在工作中也經常遇到這個演算法。kmeans一般在資料分析前期使用,選取適當的k,將資料分類後,然後分類研究不同聚類下資料的特點。

演算法原理

kmeans的計算方法如下:

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其實是乙個嚴格的座標下降(coordinate decendet)過程。設目標函式sse如下:

sse(

採用歐式距離作為變數之間的聚類函式。每次朝乙個變數

的方向找到最優解,也就是求偏倒數,然後等於0,可得

c_i=

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

也就是當前聚類的均值就是當前方向的最優解(最小值),這與kmeans的每一次迭代過程一樣。所以,這樣保證sse每一次迭代時,都會減小,最終使sse收斂。

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

0-1規格化

其中屬於a。

輪廓係數

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

對於第i個元素x_i,計算x_i與其同乙個簇內的所有其他元素距離的平均值,記作a_i,用於量化簇內的凝聚度。

選取x_i外的乙個簇b,計算x_i與b中所有點的平均距離,遍歷所有其他簇,找到最近的這個平均距離,記作b_i,用於量化簇之間分離度。

對於元素x_i,輪廓係數s_i = (b_i – a_i)/max(a_i,b_i)

計算所有x的輪廓係數,求出平均值即為當前聚類的整體輪廓係數

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

k值選取

在實際應用中,由於kmean一般作為資料預處理,或者用於輔助分類貼標籤。所以k一般不會設定很大。可以通過列舉,令k從2到乙個固定值如10,在每個k值上重複執行數次kmeans(避免區域性最優解),並計算當前k的平均輪廓係數,最後選取輪廓係數最大的值對應的k作為最終的集群數目。

實際應用

下面通過例子(r實現,完整**見附件)講解kmeans使用方法,會將上面提到的內容全部串起來

library(fpc) # install.packages("fpc")

data(iris)

head(iris)

載入實驗資料iris,這個資料在機器學習領域使用比較頻繁,主要是通過畫的幾個部分的大小,對花的品種分類,實驗中需要使用fpc庫估計輪廓係數,如果沒有可以通過install.packages安裝。

# 0-1 正規化資料

min.max.norm

(x-min(x))/(max(x)-min(x))

raw.data

norm.data

sw = min.max.norm(raw.data[,2]),

pl = min.max.norm(raw.data[,3]),

pw = min.max.norm(raw.data[,4]))

對iris的4個feature做資料正規化,每個feature均是花的某個不為的尺寸。

# k取2到8,評估k

k round

rst

print(paste("k=

kmeans中的k的含義 聚類分析 K means

一 基本原理 將相似的物體的物體聚在一起。評估相似度的方法 計算距離 距離計算方法 歐式距離 曼哈頓距離 切比雪夫距離 余弦距離 二 應用場景 使用者分群 rfm模型 行為聚類 埋點設計 影象分割影象壓縮 三 工作原理 1 演算法原理 1 選取k個點作為初始的類中心點,這些點一般都是從資料集中隨機抽...

K means中K值的選擇

kmeans是最簡單的聚類演算法之一,但是運用十分廣泛。最近在工作中也經常遇到這個演算法。kmeans一般在資料分析前期使用,選取適當的k,將資料分類後,然後分類研究不同聚類下資料的特點。kmeans的計算方法如下 1.隨機選取k個中心點 2.遍歷所有資料,將每個資料劃分到最近的中心點中 3.計算每...

如何選擇K Means中K的值

k means需要設定乙個簇心個數的引數,現實中,最常用於確定k數的方法,其實還是人手工設定。例如,當我們決定將衣服做成幾個碼的時候,其實就是在以 人的衣服的長和寬為為特徵進行聚類。所以,弄清楚我們更在意的是什麼,能夠 引導選擇更合適的k值。有種方法能自動決定k值,也就是所謂的elbow metho...