1

PCAを使用して機能を抽出しようとしています。今度は、StackExchangeからMATLABというコードを取得しました。以下に示すように、PCAの後に最も関連性の高い上位100個の機能を選択します。コードを実行すると、最初のステートメントで固有値が既にソートされていることがわかりました。なぜそれを降順に並べ替える必要があるのでしょうか?PCA後にどの機能が抽出されましたか?

[eigenvectors, projected_data, eigenvalues] = princomp(proteingene); 
[foo, feature_idx] = sort(eigenvalues, 'descend'); 
selected_projected_data = projected_data(:, feature_idx(1:100)); 

もう一つの問題は、私の機能セットに応じて、projected_data変数は、これは、これらの機能はあまり意味を持たないことを意味し、0の値を持つ列(機能)を示しています。私は正しい?

最後の質問は、PCAで抽出された機能はどれですか。

+0

@beakerがコードへのリンクを追加しました – girl101

答えて

2

最初の ステートメントでは固有値が既にソートされていました。なぜそれを降順に並べ替える必要があるのでしょうか?

デフォルトでは、princompがこれを行うため、再度ソートする必要はありません。ただし、princompは非推奨の関数になりました。したがって、組み込み関数PCAを使用する必要があります。

私は、コードの作成者に完全性のための並べ替えの呼び出しが含まれていると推測できるので、彼が何をしているのかはわかります(並べ替えはfeature_idxを返します)。 次のコードスニペットは、例えば、同じ結果を達成したが、読者のためではないとして明確である:PCAを学ぶ人のため

[eigenvectors, projected_data, eigenvalues] = princomp(proteingene); 
selected_projected_data = projected_data(:, 1:100); 

は、1何をん:100意味ですか?

もう一つの問題は、私の機能セットに応じて、projected_data 変数は、これは、これらの機能はあまり意味を持たないことを意味し 0の値を持つ列(機能)を示しています。私は正しい?私は安全な答えは、対応する固有値あなたは、コードあなたの場合には、eigenvalue(feature_idx)を見ることであることを確認することができます0に近い値を持っている場合、あなたの特徴はあまり意味を持たないと言うことだと思います

投稿されました。エントリが0の列(フィーチャ)は、単にスペースの特定の次元にまたがっていないことを意味します。それらを標準の実ベクトル空間のベクトルと考えることができます。

最後の質問は、どのような機能がPCAで抽出された であったのでしょうか?

これらはprojected_dataで与えられます!その変数には、固有ベクトルの方向に沿って投影されたデータが含まれています。 あなたは、特徴抽出は実際にはPCA分解の上にある解釈であることがわかります。 PCAはフィーチャを「抽出」しません。単にデータを記述するベクトルベースを変更します(視覚的説明here参照)。ベースは、proteingeneの固有ベクトルで構成されます。 "抽出"機能を使用するには、projected_dataのどの列が関連しているかを判断する必要があります。コード例では、100個のフィーチャが特定の問題に対する重要性を判断する基準なしに、任意に「抽出」されました。あなたのデータproteingeneが100未満の寸法を持っている場合

selected_projected_data = projected_data(:, feature_idx(1:100)); 

は実際には、あなたも、それはPCAを使用してから100の特徴を抽出しようとするとエラーが出ると思います。

関連する問題