如何使用skikit-learn将选定的特征面投影到测试数据上?

How to project chosen Eigen Faces onto test data using skikit-learn?

提问人:John David 提问时间:8/25/2023 更新时间:8/26/2023 访问量:30

问:

背景:
我想用 Python 做人脸识别。之前,在 Matlab 中,我大致使用以下代码实现了人脸识别:

[EigVec, projec, eigenVal] = myPCA(TrainingDataFaces);
prinComps = [1, 3, 5];
dimensionReduced = TrainingData'*EigVec(:,prinComps);%project it onto the face space to reduce dimension
model = NaiveBayes.fit(dimensionReduced, classesData);
ProjectedTestData = TestData' * EigVec(:,prinComps);%project it onto the face space to reduce dimension  
r = model.predict(ProjectedTestData(1,:));  

正如你所看到的,我有可用的,这给了我足够的信息,让我可以选择多少个主成分。我需要选择特定的主成分,我选择.
然后,我可以将选定的主成分与训练数据相乘,得到降维矩阵。
EigVec[1,3,5]

尝试使用 Skikit-learn:
在尝试使用 Skikit-learn同样的事情时,我看到尽管它提供了 ,这只允许指定第一个主成分。但是,如果我使用然后使用,则可以选择特定的主成分。
我需要能够选择特定的主成分。
pca = PCA(n_components=n_components).fit(X_train)npca=PCA().fit(X_train)eigenfaces = self.pca.components_[[1,3,5], :]

问题:
要将特征面投影到测试数据上,有这个 .但包含所有主成分。我只想将 EigenFaces 投影到训练数据上。如何实现此目的?我唯一的选择是获取原始特征面数组并手动将其与训练数据相乘吗?Skikit-learn没有提供任何内置的方法吗?
我注意到这个问题有,但文档没有表明它可以按照我想要的方式使用。
trainingProjected = pca.transform(trainingData)pca[1,3,5]pca.fit_transform()

python scikit-learn pca 特征向量

评论


答:

0赞 John David 8/26/2023 #1

所以我最终只是用 .np.dot(trainingData, selectedPrincipalComponents.transpose())pca.transform(trainingData)