使用K-Prototypes做客户分群遇AssertionError错误求助
解决K-Prototypes "Categorical index larger than number of columns" 错误
给你几个实际使用K-Prototypes时最容易踩的坑和对应的解决办法:
检查分类列索引的计数规则
K-Prototypes的catColumnsPos要求用0起始的索引,很多人习惯按1-based(比如Excel列号)来写,导致索引超出列数。你可以先跑两行代码快速验证:# 打印数据总列数 print("总列数:", df.shape[1]) # 打印分类索引的最大值 print("分类索引最大值:", max(catColumnsPos))如果
max(catColumnsPos) >= df.shape[1],直接把所有分类索引减1(如果之前是按1-based写的),或者对照列的实际位置逐个修正。自动生成分类列索引,避免手动输入错误
手动写索引很容易因为列顺序调整、增删列失效,建议直接通过列名自动获取索引:# 列出所有分类列的名称 categorical_columns = ["Daypart", "col2", "col3", ...] # 替换成你的分类列名 # 自动获取每个分类列在数据框中的位置索引 catColumnsPos = [df.columns.get_loc(col) for col in categorical_columns]这样不管列怎么变化,索引都是准确匹配的。
排查预处理过程中是否误操作了列
如果之前做过df.drop()、df.select_dtypes()这类操作,原来的列顺序或数量已经改变,手动写的catColumnsPos自然就不匹配了。这时候必须重新生成索引,或者回溯预处理步骤,确保分类列都保留且位置正确。确认分类列的类型合规
K-Prototypes不需要哑编码,但分类列得是object或category类型,要是被误转成数值型(比如不小心做了错误的标签编码),也可能触发索引相关错误。可以用df.dtypes检查分类列类型,必要时转回正确类型:df[categorical_columns] = df[categorical_columns].astype('category')
内容的提问来源于stack exchange,提问作者mothercluster
相关产品推荐
相关产品推荐

