【问题标题】:OpenCV 2.4.3 PCA class - when number of samples is less than number of dimensionsOpenCV 2.4.3 PCA 类 - 当样本数小于维数时
【发布时间】:2013-02-23 08:50:32
【问题描述】:

我正在尝试使用 OpenCv 中的 PCA 类在我的 C++ 应用程序中执行主成分分析操作。我是 OpenCV 新手,遇到了问题,希望有人能提供帮助。

我正在尝试使用 Matlab 和 PCA 类的演示示例来检查答案 当我使用 2*10 数据数组和参数(CV_PCA_DATA_AS_COL) 时,这里我有两个维度,所以我希望有 2 个特征向量,每个特征向量有 2 个元素,这可以正常工作,结果与MATLAB。

但是在使用 10*2 数据数组时(通常当样本数小于维数时),我得到 (2*10) 特征向量数组。即:10 个特征向量,每个特征向量有 2 个元素。这不是预期的,也不是 Matlab 给出的结果(Matlab 给出 10*10 的特征向量矩阵)。

我不知道为什么会得到这些结果,因此我无法将数据投影到我的应用程序的主要组件上,有什么帮助吗?

P.S:我使用的代码:

Mat Mean ;
Mat H(10, 2, CV_32F); // then the matrix is filled by data
    PCA pca(H,Mean,CV_PCA_DATA_AS_COL,0) ;
pca.operator()(H,Mean,CV_PCA_DATA_AS_COL,0) ;
    cout<<pca.eigenvectors.rows // gives 2 instead of 10
    cout<<pca.eigenvectors.cols // gives 10 

【问题讨论】:

  • 你能发布你正在使用的 C++ 代码吗?
  • 也许这是一个关于 CV_PCA_DATA_AS_COL 与 CV_PCA_DATA_AS_ROW 的问题?例如。我已经成功地使用 opencv 的 pca 进行人脸检测,其中行作为图像的数量,cols 作为每个图像的总元素数,展平为一维数组。
  • 代码:Mat Mean;垫 H(2, 10, CV_32F); // 然后用数据填充矩阵 PCA pca(H,Mean,CV_PCA_DATA_AS_COL,0) ; pca.operator()(H,Mean,CV_PCA_DATA_AS_COL,0) ; cout

标签: opencv pca


【解决方案1】:

我会这样说:

如果样本数小于数据维度,则保留组件数将被限制在样本数。

我们在 uni 为力学科目做了 3x3 PCA,一些非线性控制算法也使用了类似的方法——我的记忆模糊不清,但它可能与关于伪逆和非方阵的假设有关......

一旦你深入研究了这个理论——网络搜索“样本少于维度的 pca”——它很快就会变得一团糟!

【讨论】:

    猜你喜欢
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 2018-08-27
    • 2022-06-27
    • 2019-09-19
    • 2018-05-26
    • 1970-01-01
    相关资源
    最近更新 更多