【模式识别与机器学习(14)】K-means算法中K值确定教程
怎么解决 :对于每个K值,运行K-means算法后,计算每个样本点i的轮廓系数:首先计算ai(样本i与同一簇中其他所有点的平均距离,衡量簇内紧凑程度),然后计算bi(样本i与最近簇中所有点的平均距离,衡量簇外部分散程度),最后计算Si = (bi - ai) / max(ai, bi)。计算所有样本点的轮廓系数均值,选择均值最大的K值。具体步骤:1. 设置K值范围;2. 对每个K值运行K-means算法;3. 计算每个样本的轮廓系数;4. 计算轮廓系数均值;5. 选择均值最大的K值。
带来什么效果 :优点 :评估全面,同时考虑簇内紧凑度和簇间分离度,结果更可靠,可以识别出聚类质量差的样本点。缺点 :计算复杂度高(需要计算每个样本与所有其他样本的距离),计算时间较长,对于大规模数据不适用。适用场景:适合中小规模数据,需要全面评估聚类质量的场景,计算资源充足的场景。
实际应用示例:
- 客户细分:测试K=2到K=8,计算每个K值的轮廓系数均值,如果K=5时均值最大(如0.65),则选择K=5
- 文档聚类:测试K=3到K=10,如果K=6时轮廓系数均值最高,则选择K=6
- 核心思想:Gap(k) = E*[log(Wk)] - log(Wk),即随机样本的簇内相异度期望与实际样本的簇内相异度之差
- 最佳K值判断:当Gap(k)取得最大值时对应的K值就是最佳簇数,或者选择满足Gap(k) ≥ Gap(k+1) - s(k+1)的最小k值
- 蒙特卡洛方法:通过多次随机采样计算E*[log(Wk)],使用标准差sk修正采样误差
- 适用条件:需要统计显著性 → 间隔统计量法(最科学但实现复杂)
为什么引入:前面的方法都是基于启发式规则或经验判断,缺乏统计理论支撑。间隔统计量法通过比较实际数据与随机数据的聚类结果,利用统计显著性确定最佳K值,方法更科学。
解决什么问题:通过比较实际数据的簇内相异度与随机数据的簇内相异度,找到两者差异最大的K值,这个K值对应的聚类结果最有统计意义。
怎么解决 :第一步 :对于每个K值,运行K-means算法计算实际数据的簇内相异度log(Wk),其中Wk是所有簇的簇内样本相异度的均值。第二步 :在样本所在区域内按照均匀分布随机生成B次(如B=10)与原始样本数量相同的随机样本,对每次随机样本运行K-means算法,计算log(Wk*),然后计算E*[log(Wk)] = (1/B)Σlog(Wk*)。第三步 :计算间隔统计量Gap(k) = E*[log(Wk)] - log(Wk)。第四步:计算标准差sk修正蒙特卡洛采样误差,选择满足Gap(k) ≥ Gap(k+1) - s(k+1)的最小k值作为最佳簇数,或者选择Gap值最大的K值。
带来什么效果 :优点 :方法科学,有统计理论支撑,结果可靠,可以处理拐点不明显的情况。缺点 :实现复杂,需要生成随机样本并多次运行聚类算法,计算成本非常高,对于大规模数据不适用。适用场景:适合中小规模数据,需要统计显著性的场景,实现能力充足的场景。
实际应用示例:
- 基因表达分析:测试K=2到K=8,对每个K值生成10次随机样本,计算Gap值,如果K=4时Gap值最大,则选择K=4
- 客户细分:测试K=3到K=7,如果K=5满足Gap(5) ≥ Gap(6) - s(6),则选择K=5
- 核心步骤:1. 给定阈值T1和T2(T1 > T2);2. 随机选择样本d作为中心;3. 将距离d < T1的样本归到Canopy中;4. 将距离d < T2的样本从数据集中移除;5. 重复直到数据集为空
- 特点:Canopy之间可能存在样本重叠,但不会存在某个样本不属于任何Canopy;对噪声不敏感,会删除噪声点所在的Canopy
- 适用条件:不需要指定K值 → Canopy算法(自动但精度较低);需要粗聚类 → Canopy算法;大数据场景 → Canopy算法(效率高)
- 与K-means结合:Canopy算法的质心可以直接作为K-means算法的初始质心
为什么引入:前面的方法都需要预先指定K值的范围,然后测试不同K值。Canopy算法可以自动确定K值,不需要用户指定,适合对数据分布不了解的场景。
解决什么问题:通过两个阈值T1和T2自动将数据分成多个Canopy(粗聚类),Canopy的数量就是K值,同时Canopy的质心可以作为K-means算法的初始质心。
带来什么效果 :优点 :不需要事先指定K值,执行速度快(聚类过程中不断删除样本,减少相似计算),对噪声不敏感(会删除噪声点所在的Canopy),适用于大数据场景,Canopy的质心可以直接作为K-means的初始质心。缺点 :精度较低(只是粗聚类),难以找到恰当的T1和T2值(T1过大会使许多点属于多个Canopy,T2过大或过小会影响簇个数和计算时间),Canopy之间可能存在重叠。适用场景:适合大数据场景,需要快速粗聚类的场景,作为K-means算法的预处理步骤,对数据分布不了解的场景。
实际应用示例:
- 大规模客户分析:使用Canopy算法快速确定K值(如得到15个Canopy),然后用K-means算法进行精确聚类
- 图像预处理:使用Canopy算法对像素点进行粗聚类,确定颜色簇的数量,然后用K-means算法进行精确分割
根据数据特点选择方法:
- 数据量很大 → Canopy算法(快速粗聚类)或经验方法(快速估算)
- K值较小(K → 肘方法(直观)或轮廓系数法(全面评估)
- 需要统计显著性 → 间隔统计量法(最科学)
- 需要快速确定 → 经验方法(最简单)或肘方法(较简单)
- 需要精确评估 → 轮廓系数法(全面)或间隔统计量法(科学)
实际应用建议:
- 快速估算:先用经验方法估算K值范围
- 初步确定:在估算范围内使用肘方法寻找拐点
- 质量评估:如果拐点不明显,使用轮廓系数法评估不同K值的聚类质量
- 统计验证:如果需要统计显著性,使用间隔统计量法验证
- 大数据场景:使用Canopy算法进行粗聚类,确定K值后再用K-means精确聚类
- 多方法结合:不要只依赖一种方法,结合多种方法的结果综合判断
- 可视化分析:绘制肘部图、轮廓系数图等,通过可视化辅助判断
- 参数调优:对于Canopy算法,需要根据数据特点调整T1和T2阈值
- 计算成本:考虑计算资源限制,选择合适的方法
- 业务验证:最终K值需要结合业务场景验证,确保聚类结果有实际意义
参考文献:
- Peter J. Rousseeuw. A graphical aid to the interpretation and validation of cluster analysis. Journal of Computational and Applied Mathematics, Vol. 20: 53-65, 1987.
- Robert Tibshirani, et al. Estimating the number of clusters in a data set via the gap statistic. Journal of the Royal Statistical Society, Series B, Vol. 63, Part 2: 411-423, 2001.
- Andrew McCallum, et al. Efficient Clustering of High-Dimensional Data Sets with Application to Reference Matching. Proceedings of the sixth ACM SIGKDD international conference on Knowledge discovery and data mining, pp: 169-178, 2000.