Comment comparer les performances des méthodes de sélection des fonctionnalités?

10

Il existe plusieurs approches de sélection de caractéristiques / sélection de variables (voir par exemple Guyon et Elisseeff, 2003 ; Liu et al., 2010 ):

  • méthodes de filtrage (par exemple, basées sur la corrélation, basées sur l'entropie, basées sur l'importance aléatoire des forêts),
  • les méthodes d'encapsulation (par exemple, la recherche avant, la recherche d'escalade), et
  • méthodes intégrées où la sélection des fonctionnalités fait partie de l'apprentissage du modèle.

De nombreux algorithmes publiés sont également implémentés dans les outils d'apprentissage automatique comme R, Python, etc.

Quelle serait une méthode appropriée pour comparer différents algorithmes de sélection d'entités et pour sélectionner la meilleure méthode pour un problème / ensemble de données donné? Une autre question serait de savoir s'il existe des mesures connues qui mesurent les performances des algorithmes de sélection des fonctionnalités?

hopfk
la source

Réponses:

4

C'est un problème difficile et les chercheurs font beaucoup de progrès.

Si vous recherchez une sélection de fonctionnalités supervisée , je recommanderais LASSO et ses variantes. L'évaluation de l'algorithme est très simple avec un apprentissage supervisé: les performances de la métrique que vous choisissez sur les données de test.

Deux avertissements majeurs de LASSO sont que (1) les fonctionnalités sélectionnées ne détecteront pas automatiquement une interaction, vous devez donc créer toutes vos fonctionnalités a priori (c'est-à-dire avant de les exécuter dans le modèle) et (2) LASSO n'identifiera pas les non - relations linéaires (par exemple, une relation quadratique ).

Une façon d'essayer de dépasser ces deux mises en garde consiste à utiliser Gradient Boosted Machines qui sélectionne automatiquement les fonctionnalités. Il convient de noter que les propriétés statistiques du GBM sont un peu plus ambiguës que celles du LASSO.

Si vous recherchez une sélection de fonctionnalités non supervisée, il semble qu'il existe une approche de régularisation similaire utilisée par ces chercheurs, mais l'évaluation dans ce cas particulier devient moins évidente. Les gens essaient beaucoup de choses différentes comme PCA / SVD ou K-Means qui, en fin de compte, essaieront de trouver une approximation linéaire des données.

Dans ce cas, les mesures typiques de performance sont l'erreur de reconstruction ou le RMSE des clusters.

En termes de logiciels, R et Python ont tous deux GBM, LASSO, K-Means, SVD et PCA. GLMNET et XGBoost dans R et Sklearn pour Python sont les bibliothèques pertinentes.

franciscojavierarceo
la source
1

Je considère toujours la sélection des fonctionnalités comme une étape vers un résultat final.

Ci-dessous, je mélange en quelque sorte la sélection des fonctionnalités et la réduction de la dimensionnalité, ce qui pourrait avoir des objectifs et peut être confondu.

Quelques utilisations typiques:

  • réduction des calculs dans le machine learning: la qualité de la sélection est un facteur du résultat final de l'apprentissage et aussi, évidemment, la rapidité de réalisation de cet apprentissage

  • visualisation / compréhension des données, où vous combinez éventuellement plusieurs dimensions. C'est bien quand ça ne cache pas des trucs intéressants, et quand c'est compréhensible

  • simplification des résultats d'apprentissage, toujours pour les rendre compréhensibles (par exemple analyse des causes profondes). Bon si simple mais toujours suffisant en terme de qualité

  • contrôler l'ajustement, comme le suggère la réponse précédente

  • ...

Donc, je ne pense pas qu'il y ait de règle générale (comme toujours en ML), mais c'est un problème au cas par cas.

Juste une croyance personnelle ...

Michael Hooreman
la source
0

Cela dépend beaucoup de la situation spécifique et du problème que vous souhaitez résoudre. Il existe des règles générales, par exemple les méthodes de wrapper sont plus flexibles et plus sujettes au sur-ajustement.

Les performances de sélection des fonctionnalités peuvent être évaluées par les performances globales de la tâche d'apprentissage, par exemple, on peut sélectionner des fonctionnalités avec différentes méthodes, puis utiliser ces différents ensembles de fonctionnalités pour la classification et comparer la précision des classificateurs obtenus.

Un autre facteur important dans certains scénarios comme certaines applications biologiques est l'interprétabilité des caractéristiques sélectionnées et les résultats, par exemple dans un problème de regroupement, la signification des caractéristiques sélectionnées et des grappes résultantes est une mesure très importante des performances.

Pissenlit
la source
0

Vous devrez exécuter un ensemble de tests artificiels, en essayant de détecter les caractéristiques pertinentes en utilisant différentes méthodes tout en sachant à l'avance quels sous-ensembles de variables d'entrée affectent la variable de sortie.

Une bonne astuce serait de conserver un ensemble de variables d'entrée aléatoires avec des distributions différentes et de vous assurer que vos algos de sélection de fonctionnalités les marquent comme non pertinents.

Une autre astuce serait de s'assurer qu'après permutation des lignes, les variables marquées comme pertinentes cessent d'être classées comme pertinentes.

Ce qui précède s'applique aux approches de filtrage et d'encapsulation.

Veillez également à traiter les cas lorsque, pris séparément (un par un), les variables ne montrent aucune influence sur la cible, mais lorsqu'elles sont prises conjointement, elles révèlent une forte dépendance. Un exemple serait un problème XOR bien connu (consultez le code Python):

import numpy as np
import matplotlib.pyplot as plt
from sklearn.feature_selection import f_regression, mutual_info_regression,mutual_info_classif

x=np.random.randn(5000,3)
y=np.where(np.logical_xor(x[:,0]>0,x[:,1]>0),1,0)

plt.scatter(x[y==1,0],x[y==1,1],c='r',marker='x')
plt.scatter(x[y==0,0],x[y==0,1],c='b',marker='o')
plt.show()
print(mutual_info_classif(x, y)) 

Production:

Illustration XOR Python 3

[0. 0. 0,00429746]

Ainsi, une méthode de filtrage vraisemblablement puissante (mais univariée) (calcul des informations mutuelles entre les variables d'entrée et de sortie) n'a pu détecter aucune relation dans l'ensemble de données. Alors que nous savons avec certitude qu'il s'agit d'une dépendance à 100% et que nous pouvons prédire Y avec une précision de 100% en connaissant X.

Une bonne idée serait de créer une sorte de référence pour les méthodes de sélection des fonctionnalités, est-ce que quelqu'un veut participer?

Anatoly Alekseev
la source