1. 程式人生 > >如何確定Kmeans中的k值

如何確定Kmeans中的k值

KMeans聚類是目前應用比較廣泛的無監督聚類方法。
但是存在下面兩個問題:
1.初始簇的選擇,一般python呼叫Kmeans包的時候是隨機生成初始簇,但是存在一些問題。這個以後再做相信分析。
2.現在遇到的一個問題是:需求方想知道k是怎麼確定的,一般k是通過經驗給出的,或者對於資料有一個瞭解,有大致的k值範圍。
但是如果資料量巨大,該怎麼確定比較好的k值呢?
現在有一個解決辦法:Kmeans聚類的效果評估方法是SSE,是計算所有點到相應簇中心的距離均值,當然,k值越大
SSE越小,我們就是要求出隨著k值的變化SSE的變化規律,找到SSE減幅最小的k值,這時k應該是相對比較合理的值。

(這是目前的遇到的一點問題,以後還會繼續補充)
最近用手中的資料用Kmeans實驗了一下,下面是用python實現的過程:
step 1:匯入資料
step 2:找到最佳的k
下面是python程式碼:
inertia=[]
label_pred=[]
meanall=meanall.fillna(0)
centroids=[]
for k in range(1,10):
estimator = KMeans(n_clusters=k)#構造聚類器
estimator.fit(meanall)#聚類
label_pred.append(estimator.labels_) #獲取聚類標籤
centroids.append(estimator.cluster_centers_) #獲取聚類中心
inertia.append(estimator.inertia_ )# 獲取聚類準則的總和
這裡寫圖片描述


由此確定最佳的k為3,畫出k=3時的分類情況,如下圖:
這裡寫圖片描述