0

OpenCv で PCA クラスを使用して、C++ アプリケーションで主成分分析操作を実行しようとしています。私はOpenCVを初めて使用し、問題を抱えています。誰かが助けてくれれば幸いです。

Matlab と PCA クラスの両方でデモの例を試して、2*10 データ配列とパラメーターを使用している場合の回答を確認しています(CV_PCA_DATA_AS_COL)。ここでは 2 つの次元があるため、それぞれ 2 つの固有ベクトルがあると予想されますには 2 つの要素があり、これは期待どおり正常に機能し、Matlab と同じ結果が得られました。

しかし、10*2 データ配列を使用している間 (通常、サンプル数が次元数より少ない場合)、固有ベクトルの (2*10) 配列を取得します。つまり、それぞれ 2 つの要素を持つ 10 個の固有ベクトル。これは予期されていないことであり、Matlab によって与えられた結果ではありません (Matlab は固有ベクトルの 10*10 行列を与えます)。

なぜこれらの結果が得られたのかわかりません。これにより、アプリケーションの主要コンポーネントにデータを投影できません。何か助けはありますか?

PS:私が使用したコード:

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 
4

1 に答える 1

1

私は次のように述べます。

サンプル数がデータ次元よりも少ない場合、保持されるコンポーネントの数はサンプル数で固定されます。

大学で力学の主題に対して 3x3 PCA を行いました。また、いくつかの非線形制御アルゴリズムでも同様のアプローチが使用されました。

理論を掘り下げると、ウェブ検索の「次元よりも少ないサンプルの pca」 - すぐに面倒になります。

于 2015-07-21T10:59:42.077 に答える