【问题标题】:C++ - framework for computing PCA (other than armadillo)C++ - 计算 PCA 的框架(犰狳除外)
【发布时间】:2012-11-20 19:13:30
【问题描述】:

我有一个大约 200000 数据点的大型数据集,其中每个数据点都包含 132 特征。所以基本上我的数据集是200000 x 132

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

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

您能否向我推荐另一个没有大小/内存限制的 PCA 计算框架?

或者,如果您以前使用犰狳进行 PCA 计算并遇到此问题,您能告诉我您是如何解决的吗?

【问题讨论】:

  • 是否可以将您的数据集划分为更小的子集,然后汇总结果?
  • 我不知道如何组合来自不同 PCA 步骤的结果。你知道这样做的方法吗?
  • 好吧,另一个框架对你没有帮助,你可以尝试使用这种奇怪形状的矩阵的唯一方法是,如果 double 未能避免数值舍入错误,则使用四精度或更高精度
  • 你不能找到 132 x 132 的协方差矩阵,然后是所有或前几个特征向量,如 [PCA](en.wikipedia.org/wiki/Principal_component_analysis] ?

标签: c++ pca armadillo


【解决方案1】:

您可能需要在犰狳中启用64 bit integers,用于存储元素总数等。

具体来说,编辑文件 包括/armadillo_bits/config.hpp 并取消注释该行:// #define ARMA_64BIT_WORD。 在 3.4 版中,这应该在第 59 行附近。

或者,您可以在程序中包含 Armadillo 标头之前定义 ARMA_64BIT_WORD,例如:

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

请注意,您的 C++ 编译器必须能够处理 64 位整数。现在大多数编译器都有它。

【讨论】:

  • 顺便说一句,如果这不起作用,则可能是底层 LAPACK 功能存在问题。在这种情况下,您不妨试试svd_econ 函数。
  • 我收到以下错误:error: svd_econ(): failed to converge
  • 这通常意味着问题是不适定的或解决方案在数值上是可用的(即 SVD 不能通过 LAPACK 实现)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
相关资源
最近更新 更多