データの縮小版を入手するには、MatlabでSVDを使用する必要があります。 私は、関数svds(X,k)
がSVDを実行し、最初のk個の固有値と固有ベクトルを返すことを読んだ。ドキュメントには、データを正規化する必要があるかどうかは記載されていません。 正規化とは、平均値の減算と標準偏差による除算の両方を意味します。SVDを適用する前にデータセンタリングを実行する必要がありますか?
私がPCAを実装したとき、私はこのようにして正規化していました。しかし、matlab関数pca()
を使用するときは、暗黙的に正規化を実行するcov()
を使用して共分散行列を計算するので、この関数が必要ないことはわかっています。
ですから、質問はです。私は、SVDによってn次元データをk次元データに縮小するのに有効な投影行列が必要です。列車データのデータ正規化(したがって、新たに予測される新しいデータへの正規化)を実行する必要がありますか? ありがとう
基本的に私はスパースベクトルを持っています。私は、訓練セットからいくつかの投影行列を「学習」して、訓練データとテストデータの両方を縮小することに使用したいと考えています。これらの投影されたベクトルは、SVM分類器(もちろん列車とテストのために)に供給されなければならない。 あなたが言ったことによると、私は列車を引く必要はなく、列車ベクトルの平均をテストすることができます。私は? – user2614596
あなたが分類器にそれらを与えるならば、私は通常、縮尺そのものが関連する機能ではないが、これは私たちが何も知らないあなたのデータに依存します。これにより、SVMの安定化に役立つ機能からのスケーリングの影響が取り除かれます。この側面をよく説明しているbremen_mattの回答を参照してください。 – Florian
svds()を使用することによって、Uの次元は、トレーニングデータの数をk!テストデータを1行n列のベクトルから1行n列のベクトルに変換しないので何か問題があります – user2614596