我一直在尝试使用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),以便将其作为 Incanter 函数的输入principal-components
。为简单起见,我们将新矩阵称为 fooMatrix。
一旦构造了这个矩阵 fooMatrix,下面的代码应该可以提取前两个主成分
(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))