web-dev-qa-db-fra.com

Sélection des fonctionnalités à l'aide de MRMR

J'ai trouvé deux façons d'implémenter MRMR pour la sélection des fonctionnalités en python. La source du papier contenant la méthode est: 

https://www.dropbox.com/s/tr7wjpc2ik5xpxs/doc.pdf?dl=0

Ceci est mon code pour l'ensemble de données.

import numpy as np
import pandas as pd
from sklearn.datasets import make_classification

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

X, y = make_classification(n_samples=10000,
                           n_features=6,
                           n_informative=3,
                           n_classes=2,
                           random_state=0,
                           shuffle=False)

# Creating a dataFrame
df = pd.DataFrame({'Feature 1':X[:,0],
                                  'Feature 2':X[:,1],
                                  'Feature 3':X[:,2],
                                  'Feature 4':X[:,3],
                                  'Feature 5':X[:,4],
                                  'Feature 6':X[:,5],
                                  'Class':y})


y_train = df['Class']
X_train = df.drop('Class', axis=1)

Méthode 1: Appliquer MRMR à l'aide de pymrmr

Contient MID et MIQ

Qui est publié par l'auteur Le lien est https://github.com/fbrundu/pymrmr

import pymrmr

pymrmr.mRMR(df, 'MIQ',6)

['Feature 4', 'Feature 5', 'Feature 2', 'Feature 6', 'Feature 1', 'Caractéristique 3']

ou courir en utilisant la deuxième voie

pymrmr.mRMR(df, 'MID',6)

['Feature 4', 'Feature 6', 'Feature 5', 'Feature 2', 'Feature 1', 'Caractéristique 3']

Ces deux méthodes, sur le jeu de données ci-dessus, donnent cette 2 sortie. Un autre auteur sur GitHub affirme que vous pouvez utiliser sa version pour appliquer la méthode MRMR. Cependant, lorsque je l'utilise pour le même ensemble de données, le résultat est différent. 

Méthode 2: Appliquer MRMR à l'aide de MIFS

Lien Github

https://github.com/danielhomola/mifs

import mifs

for i in range(1,11):

    feat_selector = mifs.MutualInformationFeatureSelector('MRMR',k=i)
    feat_selector.fit(X_train, y_train)

    # call transform() on X to filter it down to selected features
    X_filtered = feat_selector.transform(X_train.values)

    #Create list of features
    feature_name = X_train.columns[feat_selector.ranking_]


    print(feature_name)

Et si vous exécutez l'itération ci-dessus pour toutes les valeurs différentes de i, il ne sera pas temps que les deux méthodes produisent réellement le même résultat de sélection d'entités.

Quel semble être le problème ici ?

5
user9238790

Vous devrez probablement contacter soit les auteurs du document d'origine et/ou le propriétaire du dépôt Github pour obtenir une réponse finale, mais les différences proviennent probablement du fait que vous comparez 3 algorithmes différents (malgré le nom). .

Redondance minimale Algorithmes de pertinence maximale sont en réalité une famille d’algorithmes de sélection de caractéristiques dont l’objectif commun est de sélectionner des caractéristiques qui sont éloignées les unes des autres tout en conservant une corrélation "élevée" avec la variable de classification.

Vous pouvez mesurer cet objectif en utilisant des mesures d’information mutuelle, mais la méthode spécifique à suivre (c.-à-d. Que faire avec les scores calculés? Dans quel ordre? Quelles autres méthodes de post-traitement seront utilisées? ...) sera différent de Un auteur à un autre - même dans le document, ils vous proposent deux implémentations différentes, MIQ et MID.

Ma suggestion serait donc de choisir simplement l'implémentation avec laquelle vous êtes le plus à l'aise (ou mieux, celle qui produit de meilleurs résultats dans votre pipeline après une validation appropriée), et d'indiquer simplement quelle source spécifique avez-vous choisi et pourquoi. 

0
carrdelling