Sélection de fonctionnalités avec Random Forests

16

J'ai un ensemble de données avec principalement des variables financières (120 fonctionnalités, 4k exemples) qui sont pour la plupart hautement corrélées et très bruyantes (indicateurs techniques, par exemple), donc je voudrais sélectionner environ 20-30 max pour une utilisation ultérieure avec la formation de modèle (classification binaire - augmentation Diminution).

Je pensais à utiliser des forêts aléatoires pour le classement des fonctionnalités. Est-ce une bonne idée de les utiliser récursivement? Par exemple, disons qu'au premier tour, je laisse tomber le pire 20%, le deuxième aussi et ainsi de suite jusqu'à ce que j'obtienne le nombre de fonctionnalités souhaité. Dois-je utiliser la validation croisée avec RF? (C'est intuitif pour moi de ne pas utiliser CV car c'est à peu près ce que RF fait déjà.)

De plus, si je choisis des forêts aléatoires, dois-je les utiliser comme classificateurs pour le binaire ou le régresseur pour l'augmentation / la diminution réelle afin d'obtenir des importances de fonctionnalités?

Soit dit en passant, les modèles que j'aimerais essayer après la sélection des fonctionnalités sont les suivants: SVM, réseaux de neurones, régressions pondérées localement et forêt aléatoire. Je travaille principalement en Python.

Lmao
la source
2
souhaite se connecter pour échanger des informations. je travaille sur quelque chose de similaire
user670186
y a-t-il une raison pour laquelle personne n'a suggéré d'utiliser simplement l' built-inattribut de RandomForestClassifier dans sklearnappelé feature_importances_....? Vous le verrez dans le lien.
Candic3
Méfiez-vous car cela multicollinearitypeut fausser l'importance des fonctionnalités et la sélection des fonctionnalités. vérifier ici
Candic3
Méfiez-vous des algorithmes par défaut: parrt.cs.usfca.edu/doc/rf-importance/index.html
Tim

Réponses:

12

Pour la sélection des fonctionnalités, nous avons besoin d'une fonction de notation ainsi que d'un méthode de recherche pour optimiser la fonction de notation.

Vous pouvez utiliser RF comme méthode de classement des fonctionnalités si vous définissez un score d'importance pertinent. RF sélectionnera les fonctionnalités basées sur l'aléatoire avec la méthode de remplacement et groupera chaque sous-ensemble dans un sous-espace séparé (appelé sous-espace aléatoire). Une fonction de notation importante pourrait être basée sur l'attribution de la précision de chaque arbre pour chaque entité dans ce sous-espace aléatoire. Ensuite, vous effectuez cette opération pour chaque arbre distinct. Étant donné que la source de génération des sous-espaces est aléatoire, vous pouvez définir un seuil pour calculer le score d'importance.

Sommaire:

Étape 1 : Si l'entité X2 apparaît dans 25% des arbres, notez-la. Sinon, ne pensez pas à classer la fonctionnalité car nous ne disposons pas d'informations suffisantes sur ses performances

Étape 2 : Maintenant, attribuez le score de performance de chaque arbre dans lequel X2 apparaît à X2 et faites la moyenne du score. Par exemple: perf (Tree1) = 0,85 perf (Tree2) = 0,70 perf (Tree3) = 0,30

Ensuite, l'importance de la fonction X2 = (0,85 + 0,70 + 0,30) / 3 = 0,6167

Vous pouvez envisager un paramètre plus avancé en incluant la profondeur de séparation de la fonction ou la valeur de gain d'informations dans l'arbre de décision. Il peut y avoir plusieurs façons de concevoir une fonction de notation basée sur des arbres de décision et des RF.

Concernant la méthode de recherche , votre méthode récursive semble raisonnable pour sélectionner les mieux classées.

Enfin, vous pouvez utiliser RF soit comme classificateur, soit comme modèle de régression pour sélectionner vos fonctionnalités, car les deux vous fourniraient un score de performance. Le score est indicatif car il est basé sur les échantillons OOB hors sac et vous ne pouvez pas envisager la validation croisée dans un cadre plus simple.

soufanom
la source
Merci pour la contribution. Je voulais souligner cela (0.85+0.70+0.30)/3 = 0.6167.
Hendy
5
Si vous travaillez avec python, vous pouvez directement utiliser l'importance variable calculée dans sklearn lors de l'appel d'une forêt aléatoire.
Scratch
5

J'ai un ensemble de données avec principalement des variables financières (120 fonctionnalités, 4k exemples) qui sont pour la plupart hautement corrélées et très bruyantes (indicateurs techniques, par exemple), donc je voudrais sélectionner environ 20-30 max pour une utilisation ultérieure avec la formation de modèle (classification binaire - augmentation Diminution).

Les exemples 4k ne sont vraiment pas suffisants pour estimer quelque chose de très sophistiqué - vous devez utiliser les modèles les plus simples possibles (régression linéaire / logistique, svm linéaire) et un petit nombre de variables

Étant donné que vos données sont bruyantes et corrélées, l'ACP est probablement votre meilleur pari [il identifie efficacement les signaux communs faisant la moyenne sur les indicateurs individuels]

La régularisation L2 (pour un modèle linéaire) aidera également à faire la moyenne du bruit [par exemple, si vous avez n copies bruyantes du même signal, la régularisation l2 encouragera les poids à être identiques - en faisant la moyenne de ces n variables]

seanv507
la source