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,我会得到
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.