对 double 类型的二维向量进行 PCA 计算

PCA computation on 2D vectors of type double

我正在尝试 运行 数据集上的 PCA,我已将其从文件存储到二维向量中,如下所示:

std::vector<std::vector<double> > tmpVec;
while(std::getline(file, numStream))
{
    std::istringstream buffer(numStream);
    std::vector<double> line((std::istream_iterator<double>(buffer)),
                         std::istream_iterator<double>());
    tmpVec.push_back(line);
    i++;
}

现在我需要对此进行 运行 PCA,根据我的理解,我需要将其转换为类型 cv::Mat。这是按如下方式完成的:

cv::Mat dst(row, col, CV_64F, &tmpVec);

然后我 运行 主成分分析为:

cv::PCA pca(dst, cv::Mat(), CV_PCA_DATA_AS_ROW, 2);

当我尝试在 PCA 计算后在屏幕上打印出来时,我得到了垃圾值。 我只需要弄清楚如何 运行 在二维双向量上进行主成分分析。 对此有任何帮助或为我指明正确的方向都会很棒。 提前致谢。

这个:

cv::PCA pca(dst, cv::Mat(), CV_PCA_DATA_AS_ROW, 2);

期望cv::Mat以连续数据作为输入,std::vector<std::vector<double> > tmpVec;

不满足

试一试:

cv::Mat tmp;
while(std::getline(file, numStream))
{
    ...
    cv::Mat m = cv::Mat(line).t();  // we need a row-vec
    tmp.push_back(m);
}
cv::PCA pca(tmp, cv::Mat(), CV_PCA_DATA_AS_ROW, 2);