提问人:John David 提问时间:8/25/2023 更新时间:8/26/2023 访问量:30
如何使用skikit-learn将选定的特征面投影到测试数据上?
How to project chosen Eigen Faces onto test data using skikit-learn?
问:
背景:
我想用 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], :]
问题:
要将特征面投影到测试数据上,有这个 .但包含所有主成分。我只想将 EigenFaces 投影到训练数据上。如何实现此目的?我唯一的选择是获取原始特征面数组并手动将其与训练数据相乘吗?Skikit-learn没有提供任何内置的方法吗?
我注意到这个问题有,但文档没有表明它可以按照我想要的方式使用。trainingProjected = pca.transform(trainingData)
pca
[1,3,5]
pca.fit_transform()
答:
所以我最终只是用 .np.dot(trainingData, selectedPrincipalComponents.transpose())
pca.transform(trainingData)
评论