0

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

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

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

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

PS:我使用的代码:

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 
4

1 回答 1

1

我会这样说:

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

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

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

于 2015-07-21T10:59:42.077 回答