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.
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 une personne souffre de diabète.
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
C'est ici que alpha entre en jeu. En statistiques, alpha (α) est le seuil que nous fixons pour décider de ce qui est considéré comme « 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.
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())
Voici notre version mise à jour de l'algorithme IAMB. Nous utilisons valeurs p pour décider quelles fonctionnalités 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 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 fonctionnalités 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']
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 est lié à l'ensemble de 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)
Voici à quoi ressemble la comparaison :
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 s'appuie pas sur du « bruit » ou sur des données non pertinentes.
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
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3