0

統計ツールボックスで関数 pca を使用する方法を学んでいます。以下の簡単な例を試してみると、エラーが返されましたが、何か問題が見つかりませんか?

pca_test_2=[1 1 1 1 1 ; 1.9 2.1 2 2 1.8]

私はそれらを転置して乗算して取得します:

pca_test_2=pca_test_2*pca_test_2';

>> [coeff,score,latent]=pca(pca_test_2);
??? Undefined function or method 'pca' for input arguments of type 'double'.

私は見ましたが、そのようなエラーを解決する方法を説明するものを見つけることができませんか?

ツールボックスは確実にインストールされています。共分散行列で pcacov を使用すると、(別のデータ セットに対して) 機能しますか?

誰かが私が間違っていることを説明してもらえますか?

同じデータ セットの svd で同じデータを使用すると、それも機能しますか?

[u s v]=svd(pca_test_2)

  u =

  -0.4537   -0.8912
  -0.8912    0.4537


  s =

  24.2493         0
        0    0.0107


  v =

  -0.4537   -0.8912
  -0.8912    0.4537

アドバイスに従って、princomp() を使用して再度実行しました。以下を参照してください。

ただし、結果を scd の結果と比較すると、まだ少し混乱しています。「coeff」の「u」が同じでないのはなぜですか? (しかし、それらは明らかに似ています)。

潜在が s の対角に等しくないのはなぜですか? 明らかにそれらは完全に異なっています (スケーリングのことだと思いますが、latent の 2 番目の固有値がゼロであることを考えると、どのスケーリングが使用されたかを確認するのは難しいですか?)

[usv]=svd(pca_test_3)

あなた=

  -0.4537   -0.8912
  -0.8912    0.4537

s =

  24.2493         0
        0    0.0107

v =

  -0.4537   -0.8912
  -0.8912    0.4537

[係数、スコア、潜在]=princomp(pca_test_2)

係数 =

   0.4525    0.8918
   0.8918   -0.4525

スコア =

  -5.3040         0
   5.3040         0

潜在 =

  56.2658
        0
4

1 に答える 1

3

を呼び出すだけなので、 または のpcaいずれかを使用できます。ここを参照してください。princompprincomppca

SVD と PCA は関連していますが、同じではありません。データ セットに適用される PCA は、基本的に、平均中心のデータ セットまたは共分散行列の固有ベクトルの SVD です。そしてここで述べたように、共分散行列の固有値の平方根は特異値です。MATLAB PCA 関数はsvd、特定の場合とeig他の場合に使用します。

" Undefined function or method 'pca'..." エラーの原因はおそらく、変数が呼び出されているか、パスのどこかにpca別の変数があるためです。複数の関数があるかどうかを確認し、別の変数があるかどうかを確認してくださいpca.m。より一般的なテストは、見つかったオブジェクトのタイプ (ファイル、変数など) をコーディングする番号を与えるものです。which -all pcawhos pcaexist('pca')

于 2013-10-29T18:26:09.723 に答える