【问题标题】:Is this the right way of projecting the training set into the eigespace? MATLAB这是将训练集投影到 eigespace 的正确方法吗? MATLAB
【发布时间】:2014-02-21 00:47:33
【问题描述】:

我使用以下方法计算了 PCA:

function [signals,V] = pca2(data) 
[M,N] = size(data); 
data = reshape(data, M*N,1);
% subtract off the mean for each dimension 
mn = mean(data,2); 
data = bsxfun(@minus, data, mean(data,1));     
% construct the matrix Y 
Y = data'*data / (M*N-1); 
[V D] = eigs(Y, 10);   % reduce to 10 dimension
% project the original data 
signals = data * V;

我的问题是:

“信号”是训练集到特征空间的投影吗?

我在“Amir Hossein”代码中看到,上述代码中的“数据”“居中图像向量”需要通过乘以特征空间基来投影到“面部空间”中。我真的不明白为什么使用居中的图像向量进行投影? “信号”还不够分类吗?

【问题讨论】:

  • 您的每个人脸是在“数据”矩阵中存储为行还是列?在任何一种情况下,您在第 3 行的重塑都出现错误。也许向我们展示“pca2”的代码。我怀疑“信号”是您的代码的预计版本,但我不确定。回到我身边,我可以更好地帮助你。仅供参考,您可能会发现此 tutorial 对于理解 PCA 以及间接地了解 eigenfaces 技术的工作原理很有用。
  • @lightalchemist:上面的代码是针对“pca2”的,它是我用来查找 PCA 的函数的名称。我正在这样使用它-stackoverflow.com/questions/21474331/…
  • @lightalchemist :您提供的教程链接显示 404 错误!既然你告诉我我必须只有一个特征空间,我该如何标记面 1(+1 类)和其他面(-1 类)的投影?stackoverflow.com/questions/21426842/…
  • 这个链接应该可以工作:tutorial
  • 看,你从所有样本的协方差矩阵的前导特征向量中计算出一个单一的投影矩阵。然后将每个样本(在减去平均向量之后)与这个投影矩阵相乘以获得它的新表示。您的样本的这些投影版本现在将代表您的面孔。如果人脸具有标签/类别)1,则其投影样本将采用相同的标签/类别。有关为什么需要均值中心以及 PCA 为何有效的详细信息,请查看我在上面提供的教程。

标签: matlab computer-vision svm face-recognition pca


【解决方案1】:

通过信号,我假设您的意思是问我们为什么要从图像的原始矢量形式中减去平均值。

如果您考虑 PCA;它试图在数据变化最大的地方为您提供最佳方向。但是,由于您的图像可能仅包含正值,因此这些像素将始终为正值,这会误导,尤其是您的第一个也是最重要的特征向量。您可以搜索有关二阶矩矩阵的更多信息。但我会分享一个糟糕的油漆图像来解释它。对不起我的画。

请忽略星星的大小;

星星:您的数据

红线:特征向量;

正如您在 2D 中很容易看到的那样,将数据居中可以为您的主成分提供更好的方向。如果您跳过这一步,您的第一个特征向量将偏向均值并导致较差的结果。

【讨论】:

    猜你喜欢
    • 2018-06-22
    • 2021-07-08
    • 1970-01-01
    • 2020-01-12
    • 2014-02-21
    • 1970-01-01
    • 2019-05-23
    • 2013-09-25
    • 1970-01-01
    相关资源
    最近更新 更多