Python 对一个样本应用主成分分析

Python 对一个样本应用主成分分析,python,machine-learning,scikit-learn,computer-vision,pca,Python,Machine Learning,Scikit Learn,Computer Vision,Pca,我目前正在从事一个机器学习的图像识别项目 列车组有1600个图像,尺寸为300x300,因此每张图像有90000个特征 为了加快训练,我应用PCA,使用n_分量=50 测试集有450个图像,我可以在这个测试集中成功地测试模型 现在,我想预测一幅由网络摄像头拍摄的图像。问题是,我应该对该图像应用PCA吗 如果我不应用PCA,我会得到ValueError:X.shape[1]=90000应该等于50,即训练时的特征数 如果我应用PCA,我会得到ValueError:n_components=5

我目前正在从事一个机器学习的图像识别项目

  • 列车组有1600个图像,尺寸为300x300,因此每张图像有90000个特征
  • 为了加快训练,我应用PCA,使用
    n_分量=50
  • 测试集有450个图像,我可以在这个测试集中成功地测试模型
现在,我想预测一幅由网络摄像头拍摄的图像。问题是,我应该对该图像应用PCA吗

  • 如果我不应用PCA,我会得到
    ValueError:X.shape[1]=90000应该等于50,即训练时的特征数
  • 如果我应用PCA,我会得到
    ValueError:n_components=50必须介于0和min之间(n_样本,n_特征)=1,且svd_solver='full'

我使用Python 3,scikit学习0.20.3,这是我应用PCA的方式:

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

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

你需要考虑PCA所做的事情:

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

需要注意的是,“缩减”特征集中的每个特征都是原始特征的线性组合,其中对于给定数量的新特征(
n_components
),它们是最大化新空间中保留的原始空间变化的特征集

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

# X_test - your untransformed test set

X_test_reduced = pca.transform(X_test)

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

是的,您需要应用pca,遵循在训练和测试期间对数据执行相同操作的原则

然而,关键是你不能“再培训”/“重新适应PCA”。使用主成分分析

其思想是,
fit_transform
是一个两步过程,包括拟合主成分分析,然后相应地转换数据集

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