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

问题描述 投票:0回答:1

背景:
我想用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),但这只允许指定第一个

n
主成分。但如果我使用
pca=PCA().fit(X_train)
,然后使用
eigenfaces = self.pca.components_[[1,3,5], :]
,我可以选择特定的主成分。
我需要能够选择特定的主成分。

问题:

要将特征脸投影到测试数据上,有这个 trainingProjected = pca.transform(trainingData)
。但

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

python scikit-learn pca eigenvector
1个回答
0
投票
np.dot(trainingData, selectedPrincipalComponents.transpose())

而不是

pca.transform(trainingData)
    

© www.soinside.com 2019 - 2024. All rights reserved.