OpenCV 2.4.3主元分析类-当样本数量少于维度数量时数量、维度、样本、OpenCV

由网友(太过傲年轻就是资本)分享简介:我正在尝试使用OpenCV中的PCA类在我的C++应用程序中执行主成分分析操作。我是OpenCV新手,遇到问题,希望有人能帮上忙。我正在尝试在MatLab和PCA类上使用一个演示示例来检查答案当我使用2*10数据数组和参数(CV_PCA_DATA_AS_COL)时,我在这里有两个维度,所以我希望有两个特征向量,每个特...

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

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

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

我不知道为什么会有这些结果,因此我无法在我的应用程序中投影主成分数据,有什么帮助吗?

如何在OpenCV中使用基于深度学习的边缘检测

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 

推荐答案

我这样说:

如果样本数小于数据维度,则保留的组件数将固定在样本数。

我们在大学做了力学科目的3x3主成分分析,一些非线性控制算法也使用了类似的方法-我的记忆力很模糊,但这可能与关于伪逆和非方矩阵的假设有关...

一旦你深入研究这个理论--网络搜索‘样本少于维度的主成分分析’--它很快就会变得一团糟!

阅读全文

相关推荐

最新文章