You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

白葡萄酒数据集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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 01:30:20