将 PCA 应用于一个样本
Applying PCA to one sample
我目前正在使用机器学习进行图像识别项目。
- 训练集有 1600 张大小为 300x300 的图像,因此每张图像有 90000 个特征。
- 为了加快训练速度,我应用 PCA
n_components = 50
- 测试集有450张图片,我可以在这个测试集中测试模型成功。
现在,我想预测网络摄像头拍摄的单张图像。问题是我应该对那个图像应用 PCA 吗?
- 如果我不应用 PCA,我会得到
ValueError: X.shape[1] = 90000 should be equal to 50, the number of features at training time
- 如果我应用 PCA,我得到
ValueError: n_components=50 must be between 0 and min(n_samples, n_features)=1 with svd_solver='full'
我用的是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,然后相应地转换数据集。
我目前正在使用机器学习进行图像识别项目。
- 训练集有 1600 张大小为 300x300 的图像,因此每张图像有 90000 个特征。
- 为了加快训练速度,我应用 PCA
n_components = 50
- 测试集有450张图片,我可以在这个测试集中测试模型成功。
现在,我想预测网络摄像头拍摄的单张图像。问题是我应该对那个图像应用 PCA 吗?
- 如果我不应用 PCA,我会得到
ValueError: X.shape[1] = 90000 should be equal to 50, the number of features at training time
- 如果我应用 PCA,我得到
ValueError: n_components=50 must be between 0 and min(n_samples, n_features)=1 with svd_solver='full'
我用的是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.
实际上要对测试集执行相关转换,您需要执行以下操作:
# 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,然后相应地转换数据集。