【发布时间】:2016-10-20 17:00:16
【问题描述】:
这个问题扩展了this post,与machine learningfeature selection 过程有关,其中我有一个大的特征矩阵,我想通过测量feature selection 之间的correlation每对特征和响应之间的外积,因为我将使用random forest 或boosting classifier。
特征数约为 60,000,响应数约为 2,200,000。
考虑到无限的内存,最快的解决方法可能是生成一个matrix,其中列是所有功能对的外部产品,并使用cor 中的matrix 来对抗响应。作为一个更小的维度示例:
set.seed(1)
feature.mat <- matrix(rnorm(2200*100),nrow=2200,ncol=100)
response.vec <- rnorm(2200)
#generate indices of all unique pairs of features and get the outer products:
feature.pairs <- t(combn(1:ncol(feature.mat),2))
feature.pairs.prod <- feature.mat[,feature.pairs[,1]]*feature.mat[,feature.pairs[,2]]
#compute the correlation coefficients
res <- cor(feature.pairs.prod,response.vec)
但是对于我的真实尺寸feature.pairs.prod 是 2,200,000 x 1,799,970,000,显然无法存储在内存中。
所以我的问题是,是否以及如何在合理的计算时间内获得所有相关性?
我在想也许将feature.pairs.prod 分解为适合内存的块,然后在它们之间执行cor 和response.vec 一次将是最快的,但我不确定如何自动测试在R 我需要这些块的尺寸。
另一种选择是apply 在feature.pairs 之上的一个函数,它将计算外积,然后在它和response.vec 之间计算cor。
有什么建议吗?
【问题讨论】:
-
从某种意义上说,这非常相似,最合理的解决方案是我的第一个建议是将 feature.pairs.prod 矩阵分解为块并循环它们。不过,给定 feature.mat,是否有一种 R 方法可以从我的系统资源中计算出块大小?
标签: r memory matrix correlation memory-efficient