k-means算法处理聚类标签不足的异常

Posted shenfeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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。

以上是关于k-means算法处理聚类标签不足的异常的主要内容,如果未能解决你的问题,请参考以下文章

K-means聚类算法原理与实现

聚类算法,从案例到入门

不足20行 python 代码,高效实现 k-means 均值聚类算法

基于轮廓系数的高维数据K-Means聚类算法处理

在R中练习k-meas聚类

聚类算法(算法小结与案例分析)