したがって、linalg.eigまたはlinalg.svdを使用してPCAを計算できます。同じデータが供給されると、それぞれが異なる主成分/固有ベクトルと固有値を返します(私は現在Irisデータセットを使用しています)。
ここまたはPCAをアイリスデータセットに適用した他のチュートリアルを見ると、固有値がであることがわかります[2.9108 0.9212 0.1474 0.0206]
。このeig
方法では、使用する固有値/ベクトルの異なるセットが得られますが、これらの固有値を合計すると、次元の数(4)に等しくなり、各コンポーネントがどの程度貢献しているかを調べるために使用できます。全分散。
返される固有値を取るlinalg.eig
ことはできません。たとえば、返される値はです[9206.53059607 314.10307292 12.03601935 3.53031167]
。この場合の分散の割合は[0.96542969 0.03293797 0.00126214 0.0003702]
です。この別のページには、(「コンポーネントによって説明される変動の割合は、その固有値を固有値の合計で割ったものにすぎません。」)と書かれています。
各次元によって説明される分散は一定でなければならないので(私は思う)、これらの比率は間違っています。したがって、すべてのチュートリアルで使用される値である、によって返される値を使用すると、各ディメンションから正しい変動率を取得できますが、によって返される値をそのように使用できないsvd()
のはなぜかと思います。eig
返された結果は変数を投影するための有効な方法であると思いますが、各変数によって説明される分散の正しい比率を取得できるように変数を変換する方法はありますか?つまり、このeig
方法を使用しても、各変数の分散の比率を維持できますか?さらに、このマッピングは固有値でのみ実行できるので、実際の固有値と正規化された固有値の両方を持つことができますか?
長い記事でごめんなさい。(::)
これは、これまでに得たものです。あなたがこの行を読んだだけではないと仮定します。