在R中的非常大的数据集上执行PCA
我在CSV文件中有一个非常大的训练集(~2Gb).该文件太大而无法直接读入内存(read.csv()使计算机停止运行)我希望使用PCA减小数据文件的大小.问题是(据我所知)我需要将文件读入内存以运行PCA算法(例如,princomp()).
我已经尝试过bigmemory包来作为big.matrix读取文件,但是princomp不能在big.matrix对象上运行,它看起来不像big.matrix可以转换成类似data.frame的东西. 有没有办法在我丢失的大型数据文件上运行princomp? 我是R的相对新手,所以对于经验丰富的用户来说,其中一些可能是显而易见的(道歉). 谢谢你的任何信息. 解决方法
我解决它的方法是迭代计算样本协方差矩阵.通过这种方式,您只需要任何时间点的数据子集.只需读取数据的一个子集就可以使用readLines来完成,在readLines中打开与文件的连接并迭代读取.该算法看起来像(这是一个两步算法):
计算每列的平均值(假设是变量) >打开文件连接(con = open(…)) 计算协方差矩阵: >打开文件连接(con = open(…)) 当你有协方差矩阵时,只需用covmat = your_covmat调用princomp,princomp将跳过自己计算协方差矩阵. 通过这种方式,您可以处理的数据集远远大于可用的RAM.在迭代期间,存储器使用大致是块所占用的存储器(例如1000行),之后存储器使用限于协方差矩阵(nvar * nvar加倍). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |