我在python中使用标准的svd函数实现PCA算法,即
u, s, v = svd(sigma)
原始空间有4800个维度,即西格玛是4800 * 4800矩阵。
维度似乎不是太大,但我总是在svd函数中遇到“内存错误”。我的电脑是32位Windows 7.
那么问题是什么?什么是svd算法可以解决的典型特征维度?
谢谢!
答案 0 :(得分:2)
你陈述标准的svd函数 - 但是从python中没有标准的那个你可以使用numpy,scipy或其他几个地方的函数(这就是为什么“命名空间是一个好主意”< / em>的)。
从基本原则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机器或Linux 64位,32 GB RAM到一台超级计算机或作为超级计算集群的机器集群,因此您不太可能找到一个简单的“这适用于高达NxM的矩阵”。