首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >主成分函数索引

主成分函数索引
EN

Stack Overflow用户
提问于 2014-03-26 23:08:00
回答 1查看 124关注 0票数 0

我一直在尝试使用Incanter的principal-components函数来进行主成分分析,并且似乎在使用它时偏离了轨道。我从PCA教程中找到了一些样本数据,并想在上面练习:

代码语言:javascript
复制
(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,下面的代码就可以提取前两个主组件了

代码语言:javascript
复制
     (def pca (principal-components fooMatrix))
     (def components (:rotation pca))
     (def pc1 (sel components :cols 0))
     (def pc2 (sel components :cols 1)) 

然后,可以将数据投影到主成分上。

代码语言:javascript
复制
     (def principal1 (mmult fooMatrix pc1)) 
     (def principal2 (mmult fooMatrix pc2))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-27 03:32:54

看看索引API。我相信你只是想要(incanter.core/matrix data)。以下是Incanter矩阵函数的选项。也许A2是你感兴趣的。

代码语言:javascript
复制
(def A (matrix [[1 2 3] [4 5 6] [7 8 9]])) ; produces a 3x3 matrix
(def A2 (matrix [1 2 3 4 5 6 7 8 9] 3)) ; produces the same 3x3 matrix
(def B (matrix [1 2 3 4 5 6 7 8 9])) ; produces a 9x1 column vector

使用您的数据的示例:

代码语言:javascript
复制
user=> (use '[incanter core stats charts datasets])
nil
user=>(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)])
user=>(def fooMatrix (matrix data 2))
user=>(principal-components fooMatrix)
{:std-dev (1.3877785387777999 0.27215937850413047), :rotation  A 2x2 matrix
 -------------
-7.07e-01 -7.07e-01 
-7.07e-01  7.07e-01 
}

哇哦。嵌套矢量结构消失了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22674923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档