由网友(太过傲年轻就是资本)分享简介:我正在尝试使用OpenCV中的PCA类在我的C++应用程序中执行主成分分析操作。我是OpenCV新手,遇到问题,希望有人能帮上忙。我正在尝试在MatLab和PCA类上使用一个演示示例来检查答案当我使用2*10数据数组和参数(CV_PCA_DATA_AS_COL)时,我在这里有两个维度,所以我希望有两个特征向量,每个特...![如何在OpenCV中使用基于深度学习的边缘检测](https://p.xsw88.cn/allimgs/daicuo/20230903/4269.png)
我正在尝试使用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中使用基于深度学习的边缘检测](https://p.xsw88.cn/allimgs/daicuo/20230903/4269.png)
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主成分分析,一些非线性控制算法也使用了类似的方法-我的记忆力很模糊,但这可能与关于伪逆和非方矩阵的假设有关...
一旦你深入研究这个理论--网络搜索‘样本少于维度的主成分分析’--它很快就会变得一团糟!
相关推荐
最新文章