Boruta 特征选择(在 R 中)是否考虑了变量之间的相关性?

机器算法验证 r 特征选择 随机森林 博鲁塔
2022-03-30 11:08:01

我在 R 和特征选择方面有点新手,并且尝试了 Boruta 包来选择(减少)我的变量数量(n = 40)。我认为这种方法也考虑了变量之间可能存在的相关性,但是,(选择的 20 个变量中)有两个是高度相关的,另外两个是完全相关的。这是正常的吗?Boruta 方法不应该将两者之一归类为不重要的吗?

3个回答

... ,两个(选择的 20 个变量中的)高度相关,另外两个完全相关。这是正常的吗?Boruta 方法不应该将两者之一归类为不重要的吗?

是的,这很正常。Boruta 倾向于找到与响应变量相关的所有特征。严格地说,如果在给定一些其他预测变量的情况下不是条件独立的(或者什么都不给定,这仅意味着不独立) ,则称yxiyxiyxiy

考虑这个简单的例子:

set.seed(666)
n <- 100
x1 <- rnorm(n)
x2 <- x1 + rnorm(n,sd=0.5)
x3 <- rnorm(n)
y <- x2 + rnorm(n) 

您会看到,然后相关,因为不是独立的。您还看到然后不独立于无关的变量,因为:y=x2+noisex2yyx2x2=x1+noiseyx2yx3

  • y是独立的x3
  • y的情况下是条件独立的x3x1
  • y是条件独立给定的x3(x1,x2)

然后 Boruta 找到了预期的结果:

> library(Boruta)
> Boruta(data.frame(x1,x2,x3), y)
Boruta performed 30 iterations in 2.395286 secs.
 2 attributes confirmed important: x1, x2.
 1 attributes confirmed unimportant: x3.

之间存在高度相关性,但 Boruta 并不介意:x1x2

> cor(x1,x2)
[1] 0.896883

它在于算法的本质。让我们假设我们有两个强相关的有意义的特征X1X2

从论文http://arxiv.org/abs/1106.5112(The All Relevant Feature Selection using Random Forest, Miron B. Kursa, Witold R. Rudnicki)我们可以对 boruta 算法做一个简短的描述:

“为了解决这个问题,我们开发了一种算法,它提供了选择重要属性的标准。​​该算法源于随机森林的精神——我们通过向系统添加更多随机性来应对问题。基本思想非常简单:我们制作系统的随机副本,将副本与原始系统合并并为该扩展系统构建分类器。为了评估原始系统中变量的重要性,我们将其与随机变量的重要性进行比较。只有重要性较高的变量比随机变量更重要。”

本质上,Boruta 算法在一组原始和随机特征上训练一个随机森林。训练期间的这个随机森林,就像每个随机森林一样,只在每个节点上看到所有特征的一个子集。因此,有时在为当前节点选择变量时它不会在之间进行选择,并且它不能更喜欢两个变量中的一个。X1X2X1X2

这就是 Boruta 不能将变量之一分类为不重要的原因。必须修改底层的随机森林算法,以始终在每个节点上及其随机阴影变量然后,随机森林通常可以例如选择变量,这将导致 Boruta 选择变量并拒绝(这里被拒绝,因为的重要性高于X1X2X1X2X^1X^2X1X^2X1X2X2X^2X2

是的,这很正常。Boruta 算法丢弃对分类器没有价值的属性,留下“所有相关”的属性集,其中可能包括相关的属性。将其与“最小最优”集(不应包含相关)进行对比。

那么,为什么要使用这种方法进行特征选择呢?您可能会发现原始论文中的这句话很有用:

查找所有相关属性,而不仅仅是非冗余属性,其本身可能非常有用。特别是,当人们有兴趣了解与感兴趣的主题相关的机制时,这是必要的,而不是仅仅建立一个黑盒预测模型。

例如,在处理癌症背景下的基因表达测量结果时,识别与癌症相关的所有基因对于完全理解该过程是必要的,而最小优化的一组基因可能更适合作为遗传标记。

因此,如果您的主要目标是了解预测变量和结果之间的因果关系,那么仅考虑最优变量集可能会使您误入歧途,您需要研究所有相关的变量集。

但是,如果您正在寻找适合的有效模型,则最好使用最小最优集。