k-means算法處理聚類標簽不足的異常


k-means算法在人群聚類場景中,是一個非常實用的工具。(該算法的原理可以參考K-Means算法的Python實現)

常見調用方式

該算法常規的調用方式如下:

# 從sklearn引包
from sklearn import cluster
# 初始化並設定聚類數
k_means = cluster.KMeans(n_clusters=9)
# 指定聚類特征
df_pct = stat_score['feature_1', 'feture_2', 'feature_3']
k_means.fit(df_input.fillna(0))

# 計算聚類標簽
labels = k_means.labels_
# 獲得聚類的質心
C = k_means.cluster_centers_

異常現象

常規情況下,以上處理后,會根據dataframe上的索引列順序的label(0~8的數值)。
但是,我們在執行代碼過程中,出現了raise ValueError('Length of values does not match length of ' 'index')錯誤,該錯誤是由於對label值進行翻譯的時候出現了label個數不到8個的情況。也就是說,k-means算法最后給出少於8個的聚類標簽。

打印中間信息,確認只得到了3個聚類標簽。

>>>>>>>>>>>>>>>>>>>>labels<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
[4 4 4 4 4 2 4 4 4 0 4 4 4 0]
14
{0, 2, 4}

異常原因

在對原數據進行下鑽維度上的聚類時,比如全公司下某個門店的訂單,存在一定時間內訂單過少的情況。上面異常就是因為在一個下鑽維度上只有28條特征記錄,造成k-means只得到3個標簽,最后出現了dataframe行數不匹配的情況。

處理方式

在對下鑽維度進行聚類前,對此維度的特征數量進行統計,若數量小於特定閾值則考慮:

  1. 使用特征分組聚類然后再對分組標簽進行組合;
  2. 考慮其它聚類算法,如Spectral clustering。


免責聲明!

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



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