OpenCV 3.0 で C++ を使用しています。
いくつかの画像から抽出した機能を含むトレーニング データ マトリックスがあります ( trainData )。それぞれ 1104 個の特徴を持つ 2750 個の画像 (正と負) があるため、このマトリックスのサイズは 2750x1104 です。ラベル ( trainLabels ) を持つ 2750x1 の他のマトリックスがあります。
- trainData : 2750 画像 x 1104 特徴。
- trainLabels : 2750 画像 x 列ごとに 1 ラベル
この情報を使用して SVM をトレーニングし、PCA (主成分分析)、LDA (線形判別分析)、および両方の組み合わせを使用してパフォーマンスを評価したいと考えています。問題なく PCA を適用しましたが、LDA を使用すると、SVM が入力として使用できない2750x1 ( projected ) の行列が得られます。
このリンクを使用しましたが、SVM を採用していません。
これはコードです:
LDA lda(trainData, trainLabels, num_components);
Mat eigenvectors = lda.eigenvectors();
Mat projected = lda.project(trainData);
num_componentsを 1 として選択しました。これは、2 つのクラス (人物と人物なし) があるためです。
そして、これらは私の結果です:
- 固有ベクトル: 1104 行 x 1 列
- 投影: 2750 行 x 1 列
私が理解している限り、固有ベクトルは 1104x1104 で射影された 2750x1104 である必要があるため、SVM は射影された行列でトレーニングできます。
コードが本当に間違っているかどうかはわかりません。LDA がどのように機能するかを正しく理解していない可能性があります。もしそうなら、私にいくつかのヒントを教えてもらえますか?実際、LDA を使用して SVM をトレーニングできますか?
前もって感謝します。