2012-11-20 73 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