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

如何使用scikit-learn将选定的特征脸投影到测试数据?

解决方案

方法1:手动投影(与Matlab逻辑完全对齐)

Scikit-learn的PCA拟合后,components_存储主成分(形状为(n_components, n_features)),mean_为训练数据的均值。要完成特定主成分的投影,步骤如下:

  1. 对数据做中心化处理(减去训练集均值),这是PCA默认的前置操作;
  2. 将中心化后的数据与选定主成分的转置相乘,得到投影结果。

代码示例:

from sklearn.decomposition import PCA
import numpy as np

# 假设X_train为训练数据,形状(样本数, 特征数)
pca = PCA().fit(X_train)
selected_indices = [1, 3, 5]
selected_components = pca.components_[selected_indices, :]

# 训练数据投影
X_train_centered = X_train - pca.mean_
X_train_projected = X_train_centered @ selected_components.T

# 测试数据投影(必须使用训练集的均值做中心化)
X_test_centered = X_test - pca.mean_
X_test_projected = X_test_centered @ selected_components.T

方法2:自定义PCA对象(复用Scikit-learn接口)

如果想沿用Scikit-learn的transform标准接口,可以手动构建仅保留特定主成分的PCA对象,核心是复制原PCA的关键参数并筛选:

from sklearn.decomposition import PCA

pca_full = PCA().fit(X_train)
selected_indices = [1, 3, 5]

# 创建仅包含选定主成分的PCA对象
pca_selected = PCA(n_components=len(selected_indices))
pca_selected.mean_ = pca_full.mean_
pca_selected.components_ = pca_full.components_[selected_indices, :]
pca_selected.explained_variance_ = pca_full.explained_variance_[selected_indices]
pca_selected.explained_variance_ratio_ = pca_full.explained_variance_ratio_[selected_indices]

# 使用标准transform方法完成投影
X_train_projected = pca_selected.transform(X_train)
X_test_projected = pca_selected.transform(X_test)

这种方式适合将投影步骤整合到Scikit-learn的Pipeline工作流中。

关于fit_transform()的说明

fit_transform()只是fit()与transform()的组合操作,默认会用所有主成分完成投影,无法指定特定主成分,因此不能满足你的需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:01:20