2012-11-20 75 views
2

框架我有一个大的数据集,其中每个数据点包含132特征周围200000数据点。所以基本上我的数据集是200000 x 132C++ - 用于计算PCA(比犰狳等)

我已经使用armadillo framework做了所有的计算。然而,我试图做PCA分析,但是我收到一个内存错误,我不知道这是由于我的RAM内存(8 GB RAM)还是由于框架本身造成的限制。

我收到以下错误:requested size is too large

你能推荐我要PCA计算另一个框架,没有大小/内存limtations?

或者,如果您以前使用的犰狳的PCA计算和遇到过这个问题,你能告诉我你是如何设法解决它?

+0

你的程序是64位的吗? –

+0

是的,它是64位的。 – Simon

+0

是否可以将数据集划分为更小的子集,然后汇总结果? –

回答

1

您可能需要启用内犰狳使用64 bit integers,其被用于存储元件的总数量等

具体而言,编辑文件 包括/ armadillo_bits/config.hpp 和取消注释:// #define ARMA_64BIT_WORD。 在3.4版本,这应该是近线59

或者,您可以包括在你的程序中的犰狳头部之前定义ARMA_64BIT_WORD,如:

#define ARMA_64BIT_WORD 
#include <armadillo> 
#include <iostream> 
... 

请注意,你的C++编译器必须能够处理64位整数。大多数编译器这些天都有它。

+0

中所述的全部或前几个特征向量,如果不起作用,则可能是底层LAPACK函数的问题在这种情况下,你可能想尝试[svd_econ](http://arma.sourceforge.net/docs.html#svd_econ)函数。 – mtall

+0

我收到以下错误:'error:svd_econ():failed to converge ' – Simon

+0

它通常意味着问题不适合或解决方案在数值上不稳定(即,不能通过LAPACK执行SVD)。 – mtall