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

R语言中PCA预处理后,基于前3个主成分可视化K-means聚类的方法

基于3个主成分的K-means聚类可视化方案

问题说明

我在R中对数据做PCA预处理后执行K-means聚类,发现factoextra包的fviz_cluster函数仅支持基于前两个主成分的二维可视化。现需要能利用保留的3个主成分进行聚类可视化的替代方法,当前代码如下:

# Load necessary libraries
library(ggplot2)
library(cluster)
library(GGally)
library(dplyr)
library(factoextra)

# Load the data
data <- read.csv("Hydro_lm.csv")

# Replace any missing data with NA
data[data == ""] <- NA

# Check for missing values
if (any(is.na(data))) {
  cat("Warning: There are missing values in the dataset. They have been replaced with NA.\n")
}

# Min-max normalization function
min_max_normalize <- function(x) {
  return((x - min(x, na.rm = TRUE)) / (max(x, na.rm = TRUE) - min(x, na.rm = TRUE)))
}

# Apply min-max normalization to each column
data_normalized <- as.data.frame(lapply(data, min_max_normalize))

# Perform PCA on the normalized data
pca_result <- prcomp(data_normalized, center = TRUE, scale. = FALSE)
summary(pca_result)

#keep first 3 PC
hydro_transform = as.data.frame(-pca_result$x[,1:3])
hydro_transform

# Decide on the number of clusters using Elbow Method on PCA results
fviz_nbclust(hydro_transform, kmeans, method = "wss")

#vizualize clusters
k = 4
kmeans_hydro = kmeans(hydro_transform, centers = k, nstart = 50)
kmeans_hydro
fviz_cluster(kmeans_hydro, data = hydro_transform)
print(kmeans_hydro)

替代可视化方案

1. 交互式3D散点图(plotly包)

plotly可生成可旋转、缩放的交互式3D图,直观展示三个主成分维度下的聚类分布:

# 加载plotly包
library(plotly)

# 将聚类标签加入主成分数据框
hydro_transform$cluster <- as.factor(kmeans_hydro$cluster)

# 绘制3D散点图
plot_ly(hydro_transform, 
        x = ~PC1, y = ~PC2, z = ~PC3,
        color = ~cluster,
        type = "scatter3d",
        mode = "markers",
        marker = list(size = 5)) %>%
  layout(title = "K-means聚类(基于前3个主成分)",
         scene = list(xaxis = list(title = "主成分1"),
                      yaxis = list(title = "主成分2"),
                      zaxis = list(title = "主成分3")))

2. 主成分两两组合的散点图矩阵(GGally包)

利用GGally::ggpairs生成所有主成分两两组合的散点图,每个子图按聚类标签着色,全面展示聚类在不同主成分维度的分布:

# 将聚类标签加入主成分数据框
hydro_transform$cluster <- as.factor(kmeans_hydro$cluster)

# 绘制散点图矩阵
ggpairs(hydro_transform, 
        columns = 1:3,  # 指定前3个主成分
        aes(color = cluster, alpha = 0.7),
        upper = list(continuous = "cor"),  # 上三角显示相关系数
        lower = list(continuous = "point")) +
  ggtitle("主成分两两组合的聚类散点图矩阵") +
  theme_bw()

3. 静态交互式3D图(rgl包)

rgl包可生成可手动旋转的3D图,适合本地交互查看场景:

# 加载rgl包
library(rgl)

# 为不同聚类分配颜色
cluster_colors <- c("#FF0000", "#00FF00", "#0000FF", "#FFFF00")[kmeans_hydro$cluster]

# 绘制3D散点图
plot3d(hydro_transform$PC1, hydro_transform$PC2, hydro_transform$PC3,
       col = cluster_colors,
       size = 2,
       xlab = "主成分1", ylab = "主成分2", zlab = "主成分3",
       main = "K-means聚类3D可视化")

# 添加图例
legend3d("topright", 
         legend = paste("Cluster", 1:k),
         col = c("#FF0000", "#00FF00", "#0000FF", "#FFFF00"),
         pch = 16,
         cex = 0.8)

内容的提问来源于stack exchange,提问作者brgionta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:53:17