我正在尝试使用R中的Boruta包进行特征选择。问题是我的功能集太大(70518功能),因此数据帧太大(2Gb)并且无法由Boruta包处理立刻。我想知道我是否可以将数据框分成几组,每组包含少量的功能?这听起来有点奇怪,因为我不确定算法是否可以正确识别权重,如果不存在所有特征。 如果没有,如果有人能提出另一种方法,我将非常感激。
答案 0 :(得分:0)
我认为在这种情况下你最好的可能是首先尝试过滤掉一些低信息(例如〜零差异)或高度相关的功能。
caret package有some useful functions to help with this。
例如,findCorrelation()
可用于轻松删除多余功能:
dat <- cor(dat, method='spearman')
dat[is.na(dat)] <- 0
features_to_ignore <- findCorrelation(dat, cutoff=0.75, verbose=FALSE)
dat <- dat[,-features_to_ignore]
这将删除Spearman相关系数为0.75或更高的所有要素。
答案 1 :(得分:0)
我首先要问你为什么认为这甚至可以起作用?在这种情况下,不仅是p >> n
,还有p >>>>>> n
。你总是会发现虚假的联想。更重要的是,即使你能做到这一点(比如通过在云计算服务中租用足够大的机器,这是我建议的方法),你会看到一个荒谬的计算量,因为计算的复杂性构建单个决策树的是O(n * v log(v))
,其中n
是记录数,v
是每个记录中字段的数量。构建RF对每棵树都需要那么多。
您可能想要从头开始重新考虑问题,而不是解决上述问题。你真的试图在这做什么?你能回到第一原则并重新思考吗?