我正在使用 C++ 和 OpenCV 3.0。
我有一个训练数据矩阵,其中包含我从一些图像(trainData)中提取的特征。这个矩阵的大小是 2750x1104,因为我有 2750 张图像(正面和负面),每张有 1104 个特征。我有其他带有标签的 2750x1 矩阵(trainLabels)。
- trainData:2750 张图像 x 1104 个特征。
- trainLabels : 2750 张图片 x 每列 1 个标签
有了这些信息,我想训练一个 SVM,并且我想评估使用 PCA(主成分分析)、LDA(线性判别分析)和两者组合的性能。我已经毫无问题地应用了 PCA,但是当我使用 LDA 时,我获得了SVM 不能用作输入的 2750x1(投影)矩阵。
我使用了这个链接,但他们不使用 SVM。
这是代码:
LDA lda(trainData, trainLabels, num_components);
Mat eigenvectors = lda.eigenvectors();
Mat projected = lda.project(trainData);
我选择num_components为 1,因为我有两个班级(人与无人)。
这些是我的结果:
- 特征向量:1104 行 x 1 列
- 预计:2750 行 x 1 列
据我所知,特征向量应该是 1104x1104 和投影2750x1104 所以可以使用矩阵来训练 SVM投影。
我不知道我的代码是否真的错了,也许我没有正确理解 LDA 的工作原理。如果是这样,你能给我一些建议吗?事实上,我可以用 LDA 训练 SVM 吗?
提前致谢。