白葡萄酒数据集K-means聚类优化求助:PCA后效果仍不佳
白葡萄酒数据集K-Means聚类优化求助
我正在用R语言对白葡萄酒(Whitewine)数据集进行聚类分析,对比应用主成分分析(PCA)前后的聚类效果,但多次尝试后,不管有没有做PCA,数据点的聚类效果都不理想,集群之间存在明显重叠。
预处理与聚类情况
- PCA前:先对数据集做了离群值去除(基于IQR方法)和z-score标准化预处理,之后用K-means聚类(k=2),但聚类结果集群重叠严重。
- PCA后:用
prcomp函数对数据集做了降维处理,选取前7个主成分构建新数据集,但聚类效果依然没有明显改善。
代码展示
PCA前的聚类代码
# 离群值去除前的描述性统计 summary(Whitewine_v6[, 1:11]) # 计算每列的上下边界 lower_bounds <- apply(Whitewine_v6[, 1:11], 2, function(x) quantile(x, 0.25) - 1.5 * IQR(x)) upper_bounds <- apply(Whitewine_v6[, 1:11], 2, function(x) quantile(x, 0.75) + 1.5 * IQR(x)) # 识别包含离群值的行 outliers <- apply(Whitewine_v6[, 1:11], 1, function(row) any(row < lower_bounds | row > upper_bounds)) # 去除离群值 Whitewine_clean <- Whitewine_v6[!outliers, ] # 查看清洗后数据集维度 dim(Whitewine_clean) # K-Means聚类(k=2) set.seed(123) k_mean1 <- kmeans(Whitewine_scaled, 2) # 查看聚类结果信息 # 聚类中心 k_mean1$centers # 每个样本的聚类标签 k_mean1$cluster # 提取BSS和TSS BSS <- k_mean1$betweenss TSS <- k_mean1$totss # 计算WSS WSS <- sum(k_mean1$withinss) # 计算总WSS Total_WSS <- k_mean1$tot.withinss # 计算BSS/TSS比值 BSS_TSS_ratio <- BSS / TSS # 打印结果 cat("BSS:", BSS, "\n") cat("TSS:", TSS, "\n") cat("Total WSS:", WSS, "\n") cat("BSS/TSS ratio:", BSS_TSS_ratio, "\n") # 可视化K-means聚类结果 fviz_cluster(k_mean1, Whitewine_scaled, geom="point", ellipse.type="convex", ggtheme=theme_light()) # 计算并可视化轮廓系数 cluster_silhouette <- silhouette(k_mean1$cluster, dist(Whitewine_scaled)) fviz_silhouette(cluster_silhouette)
PCA后的降维代码
# 选取前7个主成分构建新数据集 Whitewine_pca <- data.frame(processed_data$x[,1:7])
当前操作总结
我已经完成了数据集的清洗、标准化处理,也做了PCA降维简化数据,但即便如此,聚类后的集群依然不清晰。项目要求只能使用K-means方法,我已经通过NbClust、肘部法则、Gap统计量、轮廓系数四种方法确定了最优聚类数,但结果改善甚微。现在寻求优化聚类效果的建议,尤其是针对PCA后的聚类优化方案。
内容的提问来源于stack exchange,提问作者BirdAtWar
相关产品推荐
相关产品推荐

