La sélection des caractéristiques de Boruta (dans R) prend-elle en compte la corrélation entre les variables?

8

Je suis un peu novice en R et en sélection de fonctionnalités, et j'ai essayé le package Boruta pour sélectionner (diminuer) mon nombre de variables (n = 40). Je pensais que cette méthode prenait également en compte la corrélation possible entre les variables, cependant, deux (parmi les 20 variables sélectionnées) sont fortement corrélées, et deux autres sont complètement corrélées. Est-ce normal? La méthode Boruta n'aurait-elle pas dû classer l'un des deux comme sans importance?

Charlotte
la source

Réponses:

10

..., deux (parmi les 20 variables sélectionnées) sont fortement corrélées et deux autres sont complètement corrélées. Est-ce normal? La méthode Boruta n'aurait-elle pas dû classer l'un des deux comme sans importance?

Oui c'est normal. Boruta a tendance à trouver toutes les caractéristiques pertinentes pour la variable de réponse . Rigoureusement parlant, une variable prédictive est considérée comme pertinente pour si et ne sont pas conditionnellement indépendants compte tenu de certaines autres variables prédictives (ou étant donné rien, ce qui signifierait simplement que et ne sont pas indépendants).yxiyxiyxiy

Considérez cet exemple simple:

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

Vous voyez que , alors est pertinent pour , car et ne sont pas indépendants. Vous voyez également que et alors n'est pas indépendant de . La seule variable non pertinente pour est , car:y=x2+noisex2yyx2x2=x1+noiseyx2yx3

  • y et sont indépendantsx3
  • y et sont conditionnellement indépendants étant donnéx3x1
  • y et sont conditionnellement indépendants étant donnéx3(x1,x2)

Ensuite, Boruta trouve le résultat attendu:

> 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.

Il existe une forte corrélation entre et , mais Boruta n'y voit pas d'inconvénient:x1x2

> cor(x1,x2)
[1] 0.896883
Stéphane Laurent
la source
7

Cela réside dans la nature de l'algorithme. Supposons que nous avons deux caractéristiques significatives et qui sont fortement corrélées.X1X2

Dans l'article http://arxiv.org/abs/1106.5112 (The All Relevant Feature Selection using Random Forest, Miron B. Kursa, Witold R. Rudnicki), nous pouvons prendre une brève description de l'algorithme boruta:

"Pour faire face à ce problème, nous avons développé un algorithme qui fournit des critères de sélection d'attributs importants. L'algorithme découle de l'esprit de la forêt aléatoire - nous faisons face aux problèmes en ajoutant plus de caractère aléatoire au système. L'idée essentielle est très simple: nous créer une copie aléatoire du système, fusionner la copie avec l'original et créer le classificateur de ce système étendu. Pour évaluer l'importance de la variable dans le système d'origine, nous la comparons avec celle des variables aléatoires. Seules les variables dont l'importance est plus élevée que celles des variables randomisées sont considérées comme importantes. "

Essentiellement, l'algorithme de Boruta entraîne une forêt aléatoire sur l'ensemble des fonctionnalités originales et randomisées. Cette forêt aléatoire pendant l'entraînement, comme chaque forêt aléatoire, ne voit qu'un sous-ensemble de toutes les fonctionnalités à chaque nœud. Par conséquent, parfois, il n'aura pas le choix entre et lors du choix de la variable pour le nœud actuel et il ne peut pas préférer l'une des deux variables et à l'autre.X1X2X1X2

C'est la raison pour laquelle Boruta ne peut pas classer une des variables et comme sans importance. Il faudrait modifier l'algorithme de forêt aléatoire sous-jacent pour toujours voir et avec leurs variables aléatoires et à chaque nœud. Ensuite, la forêt aléatoire pourrait souvent par exemple sélectionner les variables et ce qui conduirait Boruta à sélectionner la variable et à rejeter . (Ici, est rejeté parce que a une importance plus élevée que )X1X2X1X2X^1X^2X1X^2X1X2X2X^2X2

MaxBenChrist
la source
Comment
Si vous connaissez Python / pandas.DataFrames, vous pouvez trouver une solution ici: stackoverflow.com/questions/15772009/…
MaxBenChrist
3

Oui c'est normal. L'algorithme de Boruta rejette des attributs qui n'ont aucune valeur pour le classificateur, laissant l'ensemble d'attributs «tout pertinent», qui peut très bien inclure des attributs corrélés. Comparez cela à l'ensemble «minimal-optimal» (qui ne devrait pas contenir de corrélations).

Alors pourquoi utiliser cette méthode pour la sélection des fonctionnalités? Vous pouvez trouver cette citation de l' article original utile:

Trouver tous les attributs pertinents, au lieu des seuls non redondants, peut être très utile en soi. En particulier, cela est nécessaire lorsque l'on souhaite comprendre les mécanismes liés au sujet d'intérêt, au lieu de simplement construire un modèle prédictif de boîte noire.

Par exemple, lorsqu'il s'agit de résultats de mesures de l'expression génique dans le contexte d'un cancer, l'identification de tous les gènes liés au cancer est nécessaire pour une compréhension complète du processus, alors qu'un ensemble minimal et optimal de gènes pourrait être plus utile comme marqueurs génétiques.

Donc, si votre objectif principal est de comprendre les liens de causalité entre les prédicteurs et les résultats, le fait de considérer uniquement l'ensemble optimal de variables peut vous induire en erreur et vous devez étudier l'ensemble tout-pertinent.

Cependant, si ce que vous cherchez est un modèle efficace pour s'adapter, il vaut mieux utiliser l'ensemble minimal-optimal.

Óskar Halldórsson Holm
la source