1

PCAを使用したトレーニングセットの次元を縮小しようとしています。 私は2つのアプローチに遭遇しました。ここPCAを使用した次元削減MATLAB

[V,U,eigen]=pca(train_x); 
eigen_sum=0; 
for lamda=1:length(eigen) 
    eigen_sum=eigen_sum+eigen(lamda,1); 
    if(eigen_sum/sum(eigen)>=0.90) 
      break; 
    end  

end 
train_x=train_x*V(:, 1:lamda); 

、私は単に元のセットの90%を説明する主成分によって決定機能の低い量のトレーニングセットを再構成する固有値行列を使用します。私たちは、元の訓練の主成分表現としてトレーニングセットを取る、つまり

train_x=U(:,1:lamda); 

私が見つけた別の方法がに変わり、最後の行を、保存、ほとんど同じですいくつかの機能lamdaを設定します。

どちらの方法も同様の結果を出すようですが(サンプルテストの誤差)、微妙な違いがあります。

私の質問は正しい方法ですか?

答えて

1

回答は、あなたのデータとあなたがしたいことによって異なります。

変数名を使用する。一般的には、pcaの出力が

U = train_x * V 

を維持することを期待するのは簡単です。しかし、あなたのデータはすでに各コンポーネントから平均値を取り除い特に場合は、正規化されている場合にのみ真です。そうでない場合は、1が期待できること

U = train_x * V - mean(train_x * V) 

されており、その点では、あなたが削除またはそれを処理する前に、あなたのデータの平均値を維持したいの天気は、アプリケーションに依存します。

また、あなたが処理する前に平均値を削除した場合でも、いくつかの小さな違いがあるかもしれないということは注目に値しますが、それは周りのポイントの精度誤差

((train_x * V) - U) ./ U ~~ 1.0e-15 

フローティングされ、このエラーが安全に

を無視することができます
+0

返信いただきありがとうございます。フォローアップ: 1)私はリッジ回帰を行うためにデータを使用します。 2)PCA段階の後、リッジ回帰および残りの部分の前にノーマライズします。 しかし、平均の存在は、正規化を行わなくても線形回帰に影響を与えるべきではありません。 – Drakhlur

+0

はい、理論的には、ゼロ以外の平均データは線形回帰だけを相殺します。オリジナルのコンポーネントの手段は、 'train_x * V'コンポーネントの手段と同じではないということだけを考慮する必要があります。そして、あなたがそれを念頭に置いている限り、正規化の残りの部分はうまくいくはずです –

関連する問題