将 PCA 应用于一个样本

Applying PCA to one sample

我目前正在使用机器学习进行图像识别项目。

现在,我想预测网络摄像头拍摄的单张图像。问题是我应该对那个图像应用 PCA 吗?


我用的是Python3,scikit-learn 0.20.3,我是这样应用PCA的:

from sklearn.decomposition import PCA
pca = PCA(50)
pca.fit_transform(features)

您还需要在测试集上应用 PCA。

你需要考虑 PCA 的作用:

PCA 构建一个新的特征集(包含的特征少于原始特征 space),然后您随后在这个新特征集上进行训练。您需要为您的模型的测试集构建此新功能集才能有效!

请务必注意,'reduced' 特征集中的每个特征都是原始特征的线性组合,其中对于给定数量的新特征 (n_components),它们是特征集最大化保留在新 space.

中的原始 space 的方差

实际上要对测试集执行相关转换,您需要执行以下操作:

# X_test - your untransformed test set

X_test_reduced = pca.transform(X_test)

其中 pca 是在您的训练集上训练的 PCA() 的实例。本质上,您正在构造一个低维 space 的转换,并且您希望此转换对于训练集和测试集是相同的!如果您在训练集和测试集上独立训练 pca,您(几乎可以肯定)将数据嵌入到不同的低维表示中并具有不同的特征集。

是的,你需要应用PCA,遵循在训练和测试期间对数据做同样的事情的原则。

但是,关键是你不能"retrain"/再次安装PCA。使用 PCA transform

pca.transform(X_test) #where X_test is a collection of images for testing, should be similar to your features.

想法是,fit_transform 是一个两步过程,包括拟合 PCA,然后相应地转换数据集。