我在使用OpenCV进行主成分分析(PCA)。我感兴趣的情况的构造函数输入是:
PCA(InputArray data, InputArray mean, int flags, double retainedVariance);
关于InputArray ‘data’,文档指出适当的标志应该是:
CV_PCA_DATA_AS_ROW 表示输入样本存储为矩阵行。CV_PCA_DATA_AS_COL 表示输入样本存储为矩阵列。
我的问题与术语“样本”的使用有关,我不确定在这个上下文中“样本”是什么意思。
例如,假设我有4组数据,为了说明方便,我们将它们标记为A-D。现在每组A到D都有8个元素。然后它们在Mat变量中设置为我将使用的InputArray,如下所示:
问题是,哪一种情况是正确的:
- 我的组是样本?
- 我的数据元素是样本?
另一种问法是:
- 我有4个样本(CV_PCA_DATA_AS_COL)
- 还是我有4组,每组8个样本(CV_PCA_DATA_AS_ROW)
?
作为一个猜测,我会选择CV_PCA_DATA_AS_COL(即我有4个样本) – 但这只是我的想法… 在我了解正确的术语之前,似乎“样本”这个词可以适用于这两种推理方式。
回答:
啊…
所以答案是通过逆向推理PCA::project步骤的文档找到的…
Mat PCA::project(InputArray vec)
vec – 输入向量;必须具有与PCA阶段使用的输入数据相同的维度和布局,即,如果指定了CV_PCA_DATA_AS_ROW,那么vec.cols==data.cols(向量维度)
即“样本”相当于“组”,元素是“维度”。
(而且我的猜测是正确的:)