Этот вопрос расширяет this post, относящийся к процедуре machine learning
feature 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
является 2200000 по 1,799,970,000, которые, очевидно, не могут быть сохранены в памяти.
Так что мой вопрос в том, как и как можно получить все корреляции в разумное время вычислений?
Я думал, что, возможно разрушение feature.pairs.prod
на куски, которые помещаются в памяти, а затем сделать cor
между ними и response.vec
один в то время, будет самым быстрым, но я не уверен, как автоматически проверить в R
каких размерах я нужны эти куски.
Другой вариант заключается в apply
функция над feature.pairs
, которая будет вычислять внешний продукт, а затем cor
между этим и response.vec
.
Любые предложения?
Это очень похоже в том смысле, что наиболее разумным решением является мое первое предложение в том, чтобы разбить матрицу feature.pairs.prod на куски и зацикливать на них. Есть ли способ R определить размер куска из ресурсов моей системы, учитывая feature.mat? – dan