Julia中K-medoids算法触发AssertionError问题排查求助
问题排查与解决方案
错误原因分析
AssertionError: !(isempty(grp)) 错误本质是K-medoids算法的:kmpp初始化阶段出现了空簇——即某个初始化的medoid未被分配到任何样本。这种情况通常和以下因素有关:
- Julia Clustering.jl的
:kmpp实现对极端数据分布(如大量重复样本、样本高度集中)的鲁棒性弱于sklearn_extra的版本; - 距离矩阵存在异常值(NaN/Inf),导致样本分配逻辑失效。
分步解决方案
检查并清洗数据
先排查是否存在重复场景数据,重复样本会干扰kmpp的簇分配逻辑:# 按列去除重复样本(假设data为每行一个特征、每列一个样本的结构) unique_data = unique(data, dims=2) # 重新计算距离矩阵 C = pairwise(Euclidean(), unique_data', unique_data')更换初始化方法
改用鲁棒性更强的初始化策略替代:kmpp:# 随机初始化 kmedoids(C, 25, init = :random) # 启发式初始化 kmedoids(C, 25, init = :heuristic)验证距离矩阵有效性
确认距离矩阵无异常值且符合欧氏距离的对称要求:# 检查是否存在非有限值(NaN/Inf) all(isfinite.(C)) # 检查矩阵是否对称 issymmetric(C)若存在异常值,需先清洗原始数据(如处理缺失值、标准化数据)。
临时调整聚类数验证
先尝试更小的聚类数(如10),若能正常运行,说明原聚类数25与当前数据分布适配性较差。可考虑先通过PCA降维压缩数据特征,再重新执行聚类。
内容的提问来源于stack exchange,提问作者Lyft
相关产品推荐
相关产品推荐

