python - 将 PCA 应用于一个样本

标签 python machine-learning scikit-learn computer-vision pca

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

  • 训练集有 1600 张尺寸为 300x300 的图像,因此每张图像有 90000 个特征。
  • 为了加快训练速度,我使用 n_components = 50
  • 应用 PCA
  • 测试集有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'

我使用 Python 3,scikit-learn 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,您(几乎可以肯定)将数据嵌入到不同的低维表示中并具有不同的特征集。

关于python - 将 PCA 应用于一个样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55933306/

相关文章:

python - App 引擎中的记录器实体

python - 在 DBSCAN 中打开并行处理

python - 在 XGBClassifier 中设置 booster

python - 使用 Scikit Learn 进行 Unigram 分析

python - 使用特定列估算 scikit-learn 中的分类缺失值

python - sklearn : Hyperparameter tuning by gradient descent?

python - 常规模式“^ ab | cd $”和^(ab | cd)$有什么区别?

python - ThreadPoolExecutor 中的 worker 并不是真正的守护进程

Python:UnicodeDecodeError: 'utf-8' 编解码器无法解码位置 0 的字节 0x80:无效的起始字节

apache-spark - 将数据存储到 PySpark(Azure - DataBricks)中的数据库非常慢