我正在使用标准 svd 函数在 python 中实现 PCA 算法,即
u, s, v = svd(sigma)
原始空间有4800维,即sigma是一个4800*4800的矩阵。
维度似乎不是太大,但我总是在 svd 函数中遇到“内存错误”。我的电脑是32位的windows 7。
那么问题是什么?以及 svd 算法可以解决的典型特征维度是什么?
谢谢!
你声明了标准的 svd 函数——但是在 python 中没有一个标准的地方,你可以使用 numpy、scipy 或其他几个地方的一个(这就是为什么“命名空间是一个好主意”)。
从基本原则 4800*4800=23,040,000 即 2300 万个条目,如果这些条目中的每一个都是一个字节(我对此表示怀疑),那么您将为每个矩阵使用 23MB 并且看起来您正在返回 3 个结果,所以原始文件是 23*4 = 92MB,但您几乎可以肯定会使用 float 或 double 将其乘以 4 或 8 以放弃 1GB而没有任何中间结果... Win7/32 的最大内存映射仅为低于 3 GB,(如果您安装了那么多或更多),以适应操作系统、驱动程序、图形等。您会发现某些实现比其他实现更有效,并且更能容忍需要使用虚拟内存。
由于 python 可以在许多平台上运行,从微型(例如 RaspberryPi)或嵌入式解决方案通过各种 PC 配置,例如 512 MB DOS 机器或具有 32 GB 内存的 Linux 64 位到单个超级计算机或作为超级计算工作的一组机器集群,因此您不太可能找到一个简单的“这适用于高达 NxM 的矩阵”图。