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:
[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?