Maison >développement back-end >Tutoriel Python >Sélection de fonctionnalités avec l'algorithme IAMB : une plongée décontractée dans l'apprentissage automatique

Sélection de fonctionnalités avec l'algorithme IAMB : une plongée décontractée dans l'apprentissage automatique

Patricia Arquette
Patricia Arquetteoriginal
2024-11-16 14:24:03461parcourir

Voici donc l'histoire : j'ai récemment travaillé sur un devoir scolaire du professeur Zhuang impliquant un algorithme plutôt sympa appelé Couverture de Markov à association incrémentale (IAMB). Maintenant, je n'ai pas de formation en science des données ou en statistiques, c'est donc un nouveau territoire pour moi, mais j'aime apprendre quelque chose de nouveau. Le but ? Utilisez IAMB pour sélectionner des fonctionnalités dans un ensemble de données et voir comment cela affecte les performances d'un modèle d'apprentissage automatique.

Nous passerons en revue les bases de l'algorithme IAMB et l'appliquerons à l'Ensemble de données sur le diabète des Indiens Pima à partir des ensembles de données de Jason Brownlee. Cet ensemble de données suit les données de santé des femmes et indique si elles sont diabétiques ou non. Nous utiliserons l'IAMB pour déterminer quelles caractéristiques (comme l'IMC ou les niveaux de glucose) sont les plus importantes pour prédire le diabète.

Qu'est-ce que l'algorithme IAMB et pourquoi l'utiliser ?

L'algorithme IAMB est comme un ami qui vous aide à nettoyer une liste de suspects dans un mystère : il s'agit d'une méthode de sélection de fonctionnalités conçue pour sélectionner uniquement les variables qui comptent vraiment pour prédire votre cible. Dans ce cas, l’objectif est de savoir si quelqu’un souffre de diabète.

  • Phase Forward : Ajoutez des variables fortement liées à la cible.
  • Phase en arrière : supprimez les variables qui n'aident pas vraiment, en vous assurant que seules les plus cruciales sont laissées.

En termes plus simples, IAMB nous aide à éviter l'encombrement de notre ensemble de données en sélectionnant uniquement les fonctionnalités les plus pertinentes. Ceci est particulièrement pratique lorsque vous souhaitez garder les choses simples, améliorer les performances du modèle et accélérer le temps de formation.

Source : Algorithmes pour la découverte de couvertures de Markov à grande échelle

Qu’est-ce que cette histoire d’Alpha et pourquoi est-ce important ?

C'est ici que alpha entre en jeu. En statistiques, alpha (α) est le seuil que nous fixons pour décider de ce qui est « statistiquement significatif ». Dans le cadre des instructions données par le professeur, j'ai utilisé un alpha de 0,05, ce qui signifie que je souhaite conserver uniquement les fonctionnalités qui ont moins de 5% de chances d'être associées aléatoirement à la variable cible. Ainsi, si la valeur p d'une caractéristique est inférieure à 0,05, cela signifie qu'il existe une association forte et statistiquement significative avec notre cible.

En utilisant ce seuil alpha, nous nous concentrons uniquement sur les variables les plus significatives, en ignorant celles qui ne réussissent pas notre test de « signification ». C'est comme un filtre qui conserve les fonctionnalités les plus pertinentes et élimine le bruit.

Mise en pratique : utilisation de l'IAMB sur l'ensemble de données sur le diabète des Indiens Pima

Voici la configuration : l'ensemble de données sur le diabète des Indiens Pima comporte des caractéristiques de santé (tension artérielle, âge, taux d'insuline, etc.) et notre objectif, Résultat (si quelqu'un est diabétique).

Tout d'abord, nous chargeons les données et les vérifions :

import pandas as pd
# Load and preview the dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv'
column_names = ['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI', 'DiabetesPedigreeFunction', 'Age', 'Outcome']
data = pd.read_csv(url, names=column_names)
print(data.head())

Implémentation d'IAMB avec Alpha = 0,05

Voici notre version mise à jour de l'algorithme IAMB. Nous utilisons des valeurs p pour décider quelles caractéristiques conserver, de sorte que seules celles dont les valeurs p sont inférieures à notre alpha (0,05) sont sélectionnées.

import pingouin as pg
def iamb(target, data, alpha=0.05):
    markov_blanket = set()
    # Forward Phase: Add features with a p-value < alpha
    for feature in data.columns:
        if feature != target:
            result = pg.partial_corr(data=data, x=feature, y=target, covar=markov_blanket)
            p_value = result.at[0, 'p-val']
            if p_value < alpha:
                markov_blanket.add(feature)
    # Backward Phase: Remove features with p-value > alpha
    for feature in list(markov_blanket):
        reduced_mb = markov_blanket - {feature}
        result = pg.partial_corr(data=data, x=feature, y=target, covar=reduced_mb)
        p_value = result.at[0, 'p-val']
        if p_value > alpha:
            markov_blanket.remove(feature)
    return list(markov_blanket)

# Apply the updated IAMB function on the Pima dataset
selected_features = iamb('Outcome', data, alpha=0.05)
print("Selected Features:", selected_features)

Lorsque j'ai exécuté cette opération, cela m'a donné une liste affinée de caractéristiques qui, selon l'IAMB, étaient les plus étroitement liées aux résultats du diabète. Cette liste permet de affiner les variables dont nous avons besoin pour construire notre modèle.

Selected Features: ['BMI', 'DiabetesPedigreeFunction', 'Pregnancies', 'Glucose']

Test de l'impact des fonctionnalités sélectionnées par IAMB sur les performances du modèle

Une fois que nous avons sélectionné nos fonctionnalités, le test réel compare les performances du modèle avec toutes les fonctionnalités par rapport aux fonctionnalités sélectionnées par IAMB. Pour cela, j'ai opté pour un simple modèle Gaussian Naive Bayes car il est simple et fonctionne bien avec les probabilités (ce qui correspond à toute l'ambiance bayésienne).

Voici le code pour entraîner et tester le modèle :

from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score, f1_score, roc_auc_score

# Split data
X = data.drop('Outcome', axis=1)
y = data['Outcome']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Model with All Features
model_all = GaussianNB()
model_all.fit(X_train, y_train)
y_pred_all = model_all.predict(X_test)

# Model with IAMB-Selected Features
X_train_selected = X_train[selected_features]
X_test_selected = X_test[selected_features]

model_iamb = GaussianNB()
model_iamb.fit(X_train_selected, y_train)
y_pred_iamb = model_iamb.predict(X_test_selected)

# Evaluate models
results = {
    'Model': ['All Features', 'IAMB-Selected Features'],
    'Accuracy': [accuracy_score(y_test, y_pred_all), accuracy_score(y_test, y_pred_iamb)],
    'F1 Score': [f1_score(y_test, y_pred_all, average='weighted'), f1_score(y_test, y_pred_iamb, average='weighted')],
    'AUC-ROC': [roc_auc_score(y_test, y_pred_all), roc_auc_score(y_test, y_pred_iamb)]
}

results_df = pd.DataFrame(results)
display(results_df)

Résultats

Voici à quoi ressemble la comparaison :

Feature Selection with the IAMB Algorithm: A Casual Dive into Machine Learning

L'utilisation uniquement des fonctionnalités sélectionnées par IAMB a légèrement amélioré la précision et d'autres mesures. Ce n’est pas un énorme progrès, mais le fait que nous obtenions de meilleures performances avec moins de fonctionnalités est prometteur. De plus, cela signifie que notre modèle ne repose pas sur du « bruit » ou des données non pertinentes.

Points clés à retenir

  • IAMB est idéal pour la sélection de fonctionnalités : il aide à nettoyer notre ensemble de données en se concentrant uniquement sur ce qui compte vraiment pour prédire notre cible.
  • Moins, c'est souvent plus : Parfois, moins de fonctionnalités nous donnent de meilleurs résultats, comme nous l'avons vu ici avec une légère amélioration de la précision du modèle.
  • Apprendre et expérimenter sont la partie amusante : Même sans une expérience approfondie en science des données, se lancer dans des projets comme celui-ci ouvre de nouvelles façons de comprendre les données et l'apprentissage automatique.

J'espère que cela donne une introduction conviviale à IAMB ! Si vous êtes curieux, essayez-le : c'est un outil pratique dans la boîte à outils d'apprentissage automatique, et vous constaterez peut-être des améliorations intéressantes dans vos propres projets.

Source : Algorithmes pour la découverte de couvertures de Markov à grande échelle

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn