使用fviz_clusters()可视化K-means聚类时报数据维度不足2的问题
报错根因
- 直接触发原因:调用
fviz_cluster时传入的data参数为一维结构,达不到绘图的最低维度要求- R语法默认规则:用
数据框[, 列号]取单列时,会自动丢弃维度属性,将结果转换为一维向量 fviz_cluster的绘图逻辑需要依托多维特征做PCA降维,将高维数据投影到2D平面展示聚类分组,要求输入的data必须是列数≥2的二维矩阵/数据框,维度不足时直接终止绘图抛出报错
- R语法默认规则:用
- 逻辑匹配问题:你传入的
nci[,5]是单列数据,既和生成K-means对象res.km时所用的多维特征输入不匹配,本身结构也满足不了降维绘图的要求
可落地修复步骤
- 对齐K-means训练与可视化的输入数据
可视化时传入的data,必须和生成res.km时输入给kmeans()的特征矩阵完全一致,不能仅取单列数据。比如你跑聚类时用的是nci数据集的第2列到最后一列的基因表达特征,对应代码修改为:# 替换为你实际跑K-means时使用的特征列范围 km_input_features <- nci[, 2:ncol(nci)] res.km <- kmeans(km_input_features, centers = 3) # 可视化时传入完全一致的二维特征矩阵 fviz_cluster(res.km, data = km_input_features, palette = c("#2E9FDF", "#E7B800", "#FC4E07"), geom = "point") - 规避R的自动维度压缩(原理说明)
如果需要对单列数据做结构校验,可在取列时添加drop = FALSE参数,强制保留二维的单列数据框结构:# 强制保留二维结构的单列数据 single_col_structure <- nci[, 5, drop = FALSE] dim(single_col_structure) # 输出为(样本数, 1),依然因为列数不足2,无法满足fviz_cluster的绘图要求
注:内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

