是的,正如 Thomas 指出的那样,基本上 PCA 和相关技术是进行降维的工具。这个想法是通过只获取最重要的信息并将其映射到低维子空间来对抗"curse of dimensionality"。在这个子空间中,您可以使用更简单的技术对数据进行实际分类或聚类。
你可以从简单的K nearest neighbors 到Support Vector Machines 来做分类。为此,您还需要数据的标签。
让我们尝试使用 kNN 的最简单的方法(不一定是最好的方法):
现在,为了执行分类,您需要另一个带有实际标签的向量。假设您有 100 个 16x16 像素的图像。在这 100 个中,您有 10 个数字“0”,10 个数字“2”等等。
拍摄图像并将其设为 1x1600 的矢量。同时创建一个带有“标签”的 100x1 向量。在matlab中是这样的:
labels = kron([0:1:9],ones(1,10))
现在将 PCA 应用于您的数据(假设每个图像是矩阵 sampleimgs 的一列 - 所以 256x100 矩阵),您也可以这样做
带 svd:
[coeff,scores]= pca(sampleimgs');
要将它们发送到您想要的低维空间(例如 R^2) - 所以只选择前两个主要成分:
scatter(scores(:,1),scores(:,2))
现在您可以对这些应用 K-NN 并在将新传入图像newimg 发送到同一 PC 子空间后对其进行分类:
mdl = ClassificationKNN.fit(scores(1:100,[1 2]),labels);
%get the new image:
newimgmap = coef(:,1:2)'*newimg
result = predict(mdl,newimgmap)
希望对你有帮助。