私はprincipal-components
Incanter の関数を使用して PCA を実行しようとしましたが、それを使用するのに軌道に乗っていないようです。PCA チュートリアルからオンラインでいくつかのサンプル データを見つけて、それを練習したいと思いました。
(def data [[0.69 0.49] [-1.31 -1.21] [0.39 0.99] [0.09 0.29] [1.29 1.09]
[0.49 0.79] [0.19 (- 0 0.31)] [(- 0 0.81) (- 0 0.81)]
[(- 0 0.31) (- 0 0.31)] [(- 0 0.71) (- 0 1.01)]])
PCA を実装する最初の試みで、ベクトルを Incanter の行列関数に渡そうとしましたが、あまりにも多くの引数を渡していることに気付きました。この時点で、上記で定義したネストされたベクトル構造を試すことにしましたが、このルートは避けたいと思います。
data
Incanter の function への入力として受け入れられるように、マトリックス (Incanter) に変換するにはどうすればよいでしょうかprincipal-components
。簡単にするために、新しい行列を fooMatrix と呼びましょう。
この行列 fooMatrix が作成されると、次のコードが機能して最初の 2 つの主成分が抽出されます。
(def pca (principal-components fooMatrix))
(def components (:rotation pca))
(def pc1 (sel components :cols 0))
(def pc2 (sel components :cols 1))
次に、データを主成分に射影することができます。
(def principal1 (mmult fooMatrix pc1))
(def principal2 (mmult fooMatrix pc2))