OpenCV 2.4.3 PCA类 - 当样本数小于维数时

时间:2013-03-07 22:49:55

标签: opencv pca

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

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

但是在使用10 * 2数据阵列时(通常当样本数小于维数)时,我得到(2 * 10)eiegnvector数组。即: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 

1 个答案:

答案 0 :(得分:1)

我说如下:

如果样本数小于数据维度,那么保留的组件数量将被限制为样本数量。

我们为uni的机械主题做了3x3 PCA,也有一些非线性控制算法使用了类似的方法 - 我的记忆很模糊,但它可能与关于伪逆和非平方矩阵的假设有关...

一旦你深入研究理论 - 网络搜索'pca的样本少于维度' - 它会变得很乱!

相关问题