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

如何在不改变原始尺度的情况下向PCA结果添加额外样本?术语咨询

PCA中添加新数据的术语与实现方法

术语说明

你要做的操作,标准表述是将新数据投影(project)到已有PCA空间,对应你提到的“project in”的专业语境。原因很简单:你没有重新计算PCA(主成分的计算依然基于原始wine数据集),只是用已训练好的PCA模型,把新数据映射到已经生成的主成分维度上,全程保留原始PCA的尺度和结构。而“添加”这个说法太模糊,无法准确体现这种基于模型映射的核心逻辑,建议用“投影”来描述。

具体代码实现

下面是完整的操作示例,包含模拟新数据、投影、以及在原有PCA图上叠加数据的步骤:

library(ggalt)
library(ggbiplot)
data(wine)

# 1. 基于原始wine数据训练PCA模型
wine.pca <- prcomp(wine, scale. = TRUE)

# 2. 模拟一组新数据(维度要和原始wine一致:13个特征)
set.seed(123)
new_wine <- matrix(rnorm(20*13), ncol=13, dimnames=list(NULL, colnames(wine)))

# 3. 将新数据投影到已有PCA空间
new_wine_pca <- predict(wine.pca, newdata = new_wine)

# 4. 把投影结果转成数据框,方便绘图
new_wine_df <- as.data.frame(new_wine_pca)
new_wine_df$group <- "New Data"  # 给新数据加分组标签

# 5. 绘制原始PCA图,并叠加投影后的新数据
ggbiplot(wine.pca,
         obs.scale = 1, var.scale = 1,
         groups = wine.class, ellipse = F, circle = F) +
  theme(legend.direction = "horizontal", legend.position = "top") +
  geom_point(aes(color = wine.class), size = 1) +
  scale_color_manual(name = "Group", 
                     values = c("red", "green", "blue", "purple"),  # 新增新数据的颜色
                     aesthetics = c("color", "fill")) +
  geom_encircle(aes(fill = wine.class), alpha = 0.3, show.legend = F, colour = NA) +
  # 添加投影后的新数据点
  geom_point(data = new_wine_df, aes(x = PC1, y = PC2, color = group), size = 1.2, shape = 17)

关键细节

  • 必须保证新数据的特征数量、特征名称(或顺序)和原始wine数据集完全一致,否则predict()函数无法正确投影
  • 投影操作完全复用了原始PCA的scale. = TRUE的标准化参数,所以不会改变原始PCA的尺度

内容的提问来源于stack exchange,提问作者Charité Learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:40:32