主成分分析に関するウィキペディアの記事には、
マトリックスX T Xを形成することなくのSVDを計算する効率的なアルゴリズムが存在するため、SVDの計算は、少数のコンポーネントのみが必要な場合を除き、データマトリックスから主成分分析を計算する標準的な方法になりました。
誰かがこの記事で話している効率的なアルゴリズムを教えてもらえますか?参照はありません(この計算方法を提案している記事へのURLまたは引用は良いでしょう)。
主成分分析に関するウィキペディアの記事には、
マトリックスX T Xを形成することなくのSVDを計算する効率的なアルゴリズムが存在するため、SVDの計算は、少数のコンポーネントのみが必要な場合を除き、データマトリックスから主成分分析を計算する標準的な方法になりました。
誰かがこの記事で話している効率的なアルゴリズムを教えてもらえますか?参照はありません(この計算方法を提案している記事へのURLまたは引用は良いでしょう)。
回答:
SVDの計算の背後にある主な機能は、QRアルゴリズムです。一般的な行N列の行列Aの特異値分解を計算する多くの異なるアルゴリズムがあると述べました。(IntelのMKLのドキュメントから)ここで入手できる問題の優れた回路図は次のとおりです。
ユースケースに応じてわかるように、さまざまなアプローチがあります(ルーチンの命名規則については、こちらをご覧ください)。これは、たとえば、Householder削減がGivens回転よりも高額になるマトリックス形式があるためです(QRを取得する2つの「明白な」方法を挙げます)。この問題に関する標準的なリファレンスは、GolubとVan Loanのマトリックス計算です(少なくとも第3版を使用することをお勧めします)。Åも見つけました。Björckの最小二乗問題に対する数値解法そのことに非常に優れたリソース。SVDは本の主要な焦点ではありませんが、SVDの使用をコンテキスト化するのに役立ちます。
問題について一般的なアドバイスを1つ与えなければならない場合、既に数値線形代数のいくつかのクラスを正常に取得し、何をしているのかがわかっている場合を除き、独自のSVDアルゴリズムを記述しないでください。直感に反するように聞こえますが、実際には、多くの問題が発生する可能性があり、最終的に(せいぜい)次善の実装(間違っていない場合)になります。そこ問題に関するいくつかの非常に良い無料のスイートには、(例えば。アイゲンは、アルマジロとTrilinosは、いくつかの名前を付けます。)
svds
)は、切り捨てられた固有分解(eigs
)ルーチンのラッパーとして切り捨てられたSVD関数を使用するだけです。