Guide de l`utilisateur Toolbox pour l`estimation de structures d

Transcription

Guide de l`utilisateur Toolbox pour l`estimation de structures d
Guide de l’utilisateur
Toolbox pour l’estimation
de structures d’indépendance conditionnelle
de processus multivariés gaussiens
(Matlab)
Fanny ROCHE, Aude COSTARD
Sommaire
1 Comment utiliser la Toolbox
1.1 Préparer l’environnement de travail . . . . . . . . . . . . . . . . . . . . . .
1.2 Comment appliquer les méthodes . . . . . . . . . . . . . . . . . . . . . . .
4
4
4
2 Description des méthodes d’estimation et des fonctions associées
2.1 Méthodes Asymptotic Bayesian initialized by Graphical Lasso (A. Costard)
2.1.1 Method_ABiGlasso . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.2 Method_ABiGlasso_Max . . . . . . . . . . . . . . . . . . . . . . .
2.1.3 Method_ABiGlasso_Loop . . . . . . . . . . . . . . . . . . . . . . .
2.1.4 Method_ABiGlasso_MaxLoop . . . . . . . . . . . . . . . . . . . .
2.1.5 Method_ABiGlasso_RI . . . . . . . . . . . . . . . . . . . . . . . .
2.1.6 Fonctions associées . . . . . . . . . . . . . . . . . . . . . . . . . . .
ABiGlasso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ABiGlasso_from_graph . . . . . . . . . . . . . . . . . . . . . . . .
distrib_normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
findLambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
kG_calc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lambda_domain . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lambdaMax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
log_distrib_normal . . . . . . . . . . . . . . . . . . . . . . . . . . .
Marrelec_fct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
neighbors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Méthode Bayesian Adaptive Graphical Lasso (H. Wang) . . . . . . . . . .
2.2.1 Method_BayesGLassoGDP . . . . . . . . . . . . . . . . . . . . . .
2.2.2 Fonctions associées . . . . . . . . . . . . . . . . . . . . . . . . . . .
BayesGlassoGDP . . . . . . . . . . . . . . . . . . . . . . . . . . . .
bayesian_thresholding . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Méthode Graphical Lasso ADMM (Alternating Direction Method of Multipliers) (S. Boyd) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
covsel_from_mat . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 Méthodes GGMselect (C. Giraud) . . . . . . . . . . . . . . . . . . . . . . .
2.4.1 Method_GGMselect_R . . . . . . . . . . . . . . . . . . . . . . . .
2.4.2 Method_GGMselect_myFam_R . . . . . . . . . . . . . . . . . . .
2.5 Méthode SIN (M. Drton) . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.1 Method_sinUG_R . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6 Méthodes de seuillages . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
edge_thresh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
par_corr_thresh . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
6
7
9
12
14
17
19
19
21
23
24
25
26
27
28
29
30
31
31
33
33
34
1
35
35
37
37
39
41
41
44
44
45
3 Description des fonctions d’évaluation des méthodes
3.1 Fonctions "Outils" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
comp_graphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MLEg_fct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
plotGraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
sorted_profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Simulation d’un processus multivarié gaussien dont la structure d’indépendance conditionnelle est connue . . . . . . . . . . . . . . . . . . . . . . . .
simu_data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
simu_mat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
significant_thresh . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
47
47
47
49
50
51
53
53
53
55
Introduction
Les domaines hétéroclites que sont la génétique, les neurosciences, les réseaux de capteurs,
les interactions sociales... ont pour point commun l’étude de phénomènes pouvant être
modélisés par des processus multivariés gaussiens. Pour comprendre ces différents phénomènes, une approche repose sur l’estimation de la structure d’indépendance conditionnelle
du processus étudié.
Nous avons rassemblé dans une Toolbox différentes méthodes d’estimation pour des
processus multivariés gaussiens. Cette Toolbox contient également une méthodes permettant de générer des processus multivariés gaussiens avec une structure d’indépendance
conditionnelle choisie pour évaluer les performances des différentes méthodes.
Ce guide explique comment utiliser les méthodes de cette Toolbox.
Ce guide rassemble les méthodes suivantes :
• la méthode de l’Asymptotic Bayesian initilized by Graphical Lasso (ABiGlasso) [1]
• la méthode du Bayesian Graphical Lasso (BAGlasso) [2]
• la méthode du Graphical Lasso [3, 4]
• la méthode GGMselect [5]
• la méthode SIN [6]
• deux méthodes de seuillage classiques : le seuillage par nombre d’arêtes et le seuillage
par valeur minimale en valeur absolue des valeurs de corrélation partielle.
3
Chapitre 1
Comment utiliser la Toolbox
1.1
Préparer l’environnement de travail
Premièrement, ajouter le dossier avec tous ses sous-dossiers sous Matlab. Pour ce faire, il
faut cliquer sur : file/Set Path... puis cliquer sur la case Add with Subfolders... et
ensuite sélectionner le dossier Toolbox.
Cliquer sur Save puis enfin sur Close.
Vous pouvez maintenant accéder aux fonctions de la Toolbox quelque soit le dossier
dans lequel vous travaillez.
Important : Pour appliquer certaines méthodes, il faut bien veiller à avoir le logiciel
R ainsi que les packages nécessaires (SIN et GGMSelect). Il faut également veiller à bien
posséder la Toolbox Statistics de Matlab.
1.2
Comment appliquer les méthodes
Il est vivement conseillé d’utiliser comme script le modèle : fichier Demo.m. Il suffit alors
de modifier le nom du fichier comportant le jeu de données ainsi que le paramètre dataInfo.
ATTENTION au format des données. Nous travaillons avec des données p × n dans
les exemples fournis ! Il est donc nécessaire de penser à calculer la transposée des données
afin de pouvoir calculer la matrice de covariance S. Il vous faut également bien penser à
renseigner le nombre d’échantillons n de votre jeu de données. Ce paramètre est facilement
récupérable en écrivant :
n = size(data,2) ;
Comment gérer les paramètres facultatifs : Par défaut, les méthodes présentant
des paramètres facultatifs vont s’exécuter avec les valeurs des paramètres par défaut sélectionnés. Cependant, vous pouvez modifier ces valeurs en indiquant le nom du paramètre
que vous souhaitez modifier entre ’quote’, puis la nouvelle valeur que vous lui affectez.
Par exemple si vous souhaitez modifier la valeur du paramètre e et choisir 5 au lieu de 3 dans
la méthode "Method_ABiGlasso_RI" (cette méthode a été choisie arbitrairement et ce
principe s’applique pour n’importe quelle fonction présentant des paramètres facultatifs),
ou encore si vous voulez modifier deux paramètres, il vous suffit d’écrire :
4
1
M et h o d_ A Bi G la s s o_ R I (S ,n , ’e ’ ,5) ; % modification d ’ un seul
paramètre , ici e
M et h o d_ A Bi G la s s o_ R I (S ,n , ’e ’ ,5 , ’ dataInfo ’ , ’ toto ’) ; % modifications
de 2 paramètres : e et dataInfo
Remarque : l’ordre des paramètres facultatifs n’est pas important.
Ceci ne s’applique que pour les méthodes possédant des paramètres facultatifs. Pour
toutes les autres, il vous suffit de modifier les valeurs renseignées directement dans l’appel
des fonctions en modifiant les codes que nous vous fournissons dans la Toolbox.
Une fois que tout cela a bien été pris en compte, vous pouvez alors appliquer la méthode
de votre choix parmi les différentes méthodes présentées dans cette Toolbox.
Remarque : il est possible d’accéder à une description de toutes les fonctions ainsi que
de leurs paramètres d’entrée et de sortie directement depuis Matlab en tapant :
help ma_fonction.
5
Chapitre 2
Description des méthodes d’estimation
et des fonctions associées
Pour toutes les méthodes dont le nom est sous la forme Method_nomDeLaMethode,
la sortie de la fonction est une structure matlab. Cette structure a un premier champ
input qui contient les paramètres d’entrée de la fonction et un deuxième champ output
qui contient les sorties (estimée de la structure d’indépendance conditionnelle, temps de
calcul, . . . ). Les temps de calcul se trouvent dans un sous champ time, les estimées des
structures et des matrices dans un sous champs results et les informations complémentaires
dans un sous champ info.
2.1
Méthodes Asymptotic Bayesian initialized by Graphical Lasso (A. Costard)
Cette méthode de l’Asymptotic Bayesian initialized by Graphical Lasso se compose de
plusieurs variantes (ou sous-méthodes) d’estimation de structures d’indépendance conditionnelle de processus gaussiens multivariés :
• la méthode de base Method_ABiGlasso dont l’identifiant est base
• la méthode avec comparaison des graphes du voisinage de la solution du Graphical
lasso la plus probable Method_ABiGlasso_Max dont l’identifiant est max
• la méthode itérative avec comparaison des graphes du voisinage du graphe le plus
probable à l’itération précédente Method_ABiGlasso_Loop dont l’identifiant est loop
• la méthode Method_ABiGlasso_Loop avec initialisation par la solution du Graphical
lasso la plus probable Method_ABiGlasso_MaxLoop dont l’identifiant est max_loop
• la méthode avec réduction d’intervalle Method_ABiGlasso_RI dont l’identifiant est
ri.
Les variantes ABiGlasso fournissent des scores sur les graphes comparés, ces scores sont
sauvegardés dans la structure de résultats dans le champ output.results
6
2.1.1
Method_ABiGlasso
Prototype de la fonction :
function [ data_base ] = Method_ABiGlasso (S , n )
Cette méthode génère un sous-ensemble de graphes à partir des voisinages de solutions
du Graphical Lasso. Ces solutions sont obtenues pour différentes valeurs du paramètre
de pénalisation allant de la valeur nulle jusqu’à la valeur au-delà de laquelle les graphes
solutions sont vides. La solution de cette méthode est le graphe le plus probable sur ce
sous-ensemble.
Les paramètres d’entrée :
S : matrice de covariance empirique.
n : nombre d’observations / nombre d’échantillons de chaque variable.
Paramètres facultatifs :
• e : paramètre de voisinage, i.e. le nombre maximal d’arêtes utilisé pour créer
le voisinage d’un graphe, c’est-à-dire l’ensemble des graphes qui diffèrent d’au
plus e arêtes par rapport au graphe d’origine. Par défaut, cette valeur vaut 3.
• lambda_step : pas entre deux lambdas consécutifs. Par défaut, cette valeur vaut
0.1.
• kG_read : entier permettant de déterminer si il y a des données à lire pour le
calcul des kG (car la lecture est plus rapide que de refaire les calculs à chaque
fois pour des petites valeurs de p (<6)). Par défaut, cette valeur vaut 1 (on lit
les données s’il y en a).
• dataInfo : identifiant du jeu de données traité utilisé dans les noms des fichiers
générés. Par défaut cette valeur vaut ’_base’ et si l’utilisateur donne son propre
identifiant ’Id’, la valeur devient ’Id_base’.
• Results_path : chemin permettant d’accéder à l’endroit où on stocke les résultats. Une valeur par défaut est fixée (.../Toolbox/Results/) mais l’utilisateur
est libre de la modifier à sa guise.
• verbose : entier permettant d’afficher ou non des informations à l’utilisateur tout
au long des calculs (étapes, avancement des étapes,...). Par défaut cette valeur
vaut 1 (on affiche les informations).
• save_struct : entier permettant de déterminer si on sauvegarde la structure solution ou pas. Par défaut, cette valeur vaut 0 (on ne sauvegarde pas la structure).
Le paramètre de sortie :
data_base : structure contenant l’ensemble des données calculées par la fonction (cf explications en début de chapitre).
Remarque sur les paramètres facultatifs : se reporter à l’explication dans le chapitre
1 pour savoir comment les modifier.
7
Fonctions appelées : Cette méthode fait appel aux fonctions suivantes :
• ABiGlasso
• lambda_domain
• MLEg_fct
Plus de détails sur la fonction : Cette fonction se compose des étapes suivantes :
1. initialisation de l’intervalle de lambdas à parcourir par calcul du lambda maximal
avec la fonction lambda_domain.
2. calcul des graphes les plus probables pour ces lambdas à l’aide de la fonction ABiGlasso.
3. sauvegarde des résultats si souhaité.
Exemple d’application :
Après avoir chargé un jeu de données et calculé la matrice de covariance associée, on peut
alors appliquer la méthode de l’Asymptotic Bayesian initialized by Graphical Lasso de la
manière suivante :
1
3
5
% chargement du jeu de données
data = load ( ’ dataset_demo . txt ’) ;
% mise en place des paramètres nécessaires à l ’ utilisation de la
méthode
S = cov ( data ’) ; % matrice de covariance empirique
n = size ( data ,2) ; % nombre d ’ échantillons du jeu de données
dataInfo = ’ dataset_demo ’;
7
% Méthode ABiGlasso
[ data_base ] = Method_ABiGlasso (S ,n , ’ dataInfo ’ , dataInfo , ’ verbose ’
9
,0) ;
11
13
graphId_base = data_base . output . results . best_graph . graphId ; % on
récupère le graphId obtenu
score_base = data_base . output . results . best_graph . score ; % on
récupère le score
plotGraph ( graphId_base ) ; % on trace le graphe
title ( ’ solution méthode de base ’) ;
Et on obtient alors le résultat suivant pour ce jeu de données en particulier :
8
Figure 2.1 – graphe obtenu avec la Method_ABiGlasso
2.1.2
Method_ABiGlasso_Max
Prototype de la fonction :
1
function [ data_max ] = M e t h o d _ A B i G l a s s o _ M a x (S , n )
Cette méthode est une variante de l’Asymptotic Bayesian method initialized by Graphical Lasso. Elle génère un sous-ensemble de graphes qui est le voisinage de la solution
du Graphical Lasso la plus probable. La solution est le graphe le plus probable sur ce
sous-ensemble.
Les paramètres d’entrée :
S : matrice de covariance empirique.
n : nombre d’observations / nombre d’échantillons de chaque variable.
Paramètres facultatifs :
• e : paramètre de voisinage, i.e. le nombre maximal d’arêtes utilisé pour créer le
voisinage d’un graphe, c’est-à-dire l’ensemble des graphes qui diffèrent d’au plus
e arêtes par rapport au graphe d’origine. La valeur par défaut est fixée à 3.
• lambda_step : pas entre deux lambdas consécutifs. La valeur par défaut est fixée
à 0.1.
• kG_read : entier permettant de déterminer si on a des données à lire pour le
calcul des kG (car la lecture est plus rapide que de refaire les calculs à chaque
fois pour des petites valeurs de p (<6)). La valeur par défaut est fixée à 1 (on
lit les données s’il y en a).
9
• dataInfo : identifiant du jeu de données traité utilisé dans les noms des fichiers
générés.Par défaut cette valeur vaut ’_max’ et si l’utilisateur donne son propre
identifiant ’Id’, la valeur devient ’Id_max’.
• Results_path : chemin permettant d’accéder à l’endroit où on stocke les résultats. Une valeur par défaut est fixée (.../Toolbox/Results/) mais l’utilisateur
est libre de la modifier à sa guise.
• verbose : entier permettant d’afficher ou non des informations à l’utilisateur tout
au long des calculs (étapes, avancement des étapes,...). Par défaut cette valeur
vaut 1 (on affiche les informations).
• save_struct : entier permettant de déterminer si on sauvegarde la structure solution ou pas. Par défaut, cette valeur vaut 0 (on ne sauvegarde pas la structure).
Le paramètre de sortie :
data_max : structure contenant l’ensemble des données calculées par la fonction (cf explications en début de chapitre).
Remarque sur les paramètres facultatifs : se reporter à l’explication dans le chapitre
1 pour savoir comment les modifier.
Fonctions appelées : Cette méthode fait appel aux fonctions suivantes :
• ABiGlasso
• lambda_domain
• lambdaMax
• MLEg_fct
Plus de détails sur la fonction : Cette fonction se compose des étapes suivantes :
1. initialisation de l’intervalle de lambdas à parcourir par calcul du lambda maximal
initial.
2. calcul de l’ensemble optimal des lambdas grâce à la fonction lambdaMax.
3. calcul des scores des graphes obtenus pour les lambdas optimaux et des scores de
leurs voisins à l’aide de la fonction ABiGlasso.
4. sauvegarde des résultats si souhaité.
Exemple d’application :
Après avoir chargé un jeu de données et calculé la matrice de covariance empirique associée,
on peut alors appliquer la méthode de l’Asymptotic Bayesian initialized by Graphical
Lasso avec comparaison des graphes du voisinage de la solution du Graphical lasso la plus
probable. On obtient un graphe avec un score maximal de la manière suivante :
10
1
3
5
% chargement du jeu de données
data = load ( ’ dataset_demo . txt ’) ;
% calcul des paramètres nécessaires à l ’ utilisation de la méthode
S = cov ( data ’) % la matrice de covariance empirique
n = size ( data ,2) ; % nombre d ’ échantillons
dataInfo = ’ dataset_demo ’;
7
9
11
13
% Méthode ABiGlasso avec recherche d ’ intervalle
[ data_max ] = M e t h o d_ A B i G l a s s o _ M a x (S ,n , ’ dataInfo ’ , dataInfo ) ;
graphId_max = data_max . output . results . best_graph . graphId ; % on
récupère le graphId obtenu
score_max = data_max . output . results . best_graph . score ; % on
récupère le score
plotGraph ( graphId_max ) ; % on trace le graphe
title ( ’ solution méthode max ’) ;
On obtient alors le résultat suivant pour ce jeu de données en particulier :
Figure 2.2 – graphe obtenu avec Method_ABiGlasso_Max
11
2.1.3
Method_ABiGlasso_Loop
Prototype de la fonction :
1
function [ data_loop ] = M e t h o d _ A B i G l a s s o _ L o o p (S , n )
Cette méthode est une variante de l’Asymptotic Bayesian method initialized by Graphical Lasso. C’est une méthode itérative. Elle est initialisée par le voisinage d’un graphe
solution du Graphical lasso ayant deux fois moins d’arêtes que le graphe complet. A chaque
itération, on cherche le graphe le plus probable sur le voisinage du graphe solution de l’itération précédente. La convergence est atteinte lorsque le graphe le plus probable de l’itération
courante est le même que celui de l’itération précédente. La solution est le graphe obtenu
lors de la dernière itération.
Les paramètres d’entrée :
S : matrice de covariance empirique.
n : nombre d’observations / nombre d’échantillons de chaque variable.
Paramètres facultatifs :
• e : paramètre de voisinage, i.e. le nombre maximal d’arêtes utilisé pour créer le
voisinage d’un graphe, c’est-à-dire l’ensemble des graphes qui diffèrent d’au plus
e arêtes par rapport au graphe d’origine. La valeur par défaut est fixée à 3.
• lambda_step : pas entre deux lambdas consécutifs. La valeur par défaut est fixée
à 0.1.
• kG_read : entier permettant de déterminer si on a des données à lire pour le
calcul des kG (car la lecture est plus rapide que de refaire les calculs à chaque
fois pour des petites valeurs de p (<6)). La valeur par défaut est fixée à 1 (on
lit les données s’il y en a).
• dataInfo : identifiant du jeu de données traité utilisé dans les noms des fichiers
générés.Par défaut cette valeur vaut ’_loop’ et si l’utilisateur donne son propre
identifiant ’Id’, la valeur devient ’Id_loop’.
• Results_path : chemin permettant d’accéder à l’endroit où on stocke les résultats. Une valeur par défaut est fixée (.../Toolbox/Results/) mais l’utilisateur
est libre de la modifier à sa guise.
• verbose : entier permettant d’afficher ou non des informations à l’utilisateur tout
au long des calculs (étapes, avancement des étapes,...). Par défaut cette valeur
vaut 1 (on affiche les informations).
• save_struct : entier permettant de déterminer si on sauvegarde la structure solution ou pas. Par défaut, cette valeur vaut 0 (on ne sauvegarde pas la structure).
Le paramètre de sortie :
data_loop : structure contenant l’ensemble des données calculées par la fonction (cf explications en début de chapitre).
12
Remarque sur les paramètres facultatifs : se reporter à l’explication dans le chapitre
1 pour savoir comment les modifier.
Fonctions appelées : Cette méthode fait appel aux fonctions suivantes :
• ABiGlasso_from_graph
• covsel_from_mat
• lambda_domain
• MLEg_fct
Plus de détails sur la fonction : Cette fonction se compose des étapes suivantes :
1. initialisation de l’intervalle de lambdas à parcourir par calcul du lambda maximal
initial.
2. calcul de l’ensemble optimal des lambdas par méthode de dichotomie afin de pouvoir
calculer le graphe initial pour lequel on va chercher le voisinage (on cherche un graphe
avec deux fois moins d’arêtes que le graphe complet).
3. on calcule les scores du graphe initial et de son voisinage. Le graphe ayant le plus
fort score est utilisé comme le graphe initial dans l’itération suivante. Ceci est répété
jusqu’à obtenir que le graphe avec le score le plus élevé soit le graphe initial.
4. sauvegarde des résultats si souhaité.
Exemple d’application : Après avoir chargé un jeu de données et calculé la matrice de
covariance associée, on peut alors appliquer la méthode de l’Asymptotic Bayesian initialized
by Graphical Lasso itérative avec comparaison des graphes du voisinage du graphe le plus
probable à l’itération précédente :
1
3
5
% chargement du jeu de données
data = load ( ’ dataset_demo . txt ’) ;
% calcul des paramètres nécessaires pour appliquer la méthode
S = cov ( data ’) ; % matrice de covariance empirique
n = size ( data ,2) ; % nombre d ’ échantillons du jeu de données
dataInfo = ’ dataset_demo ’;
7
9
11
13
% Méthode ABiGlasso avec bouclage
[ data_loop ] = M e t h o d _ A B i G l a s s o _ L o o p (S ,n , ’ dataInfo ’ , dataInfo ) ;
graphId_loop = data_loop . output . results . best_graph . graphId ; % on
récupère le graphId obtenu
score_loop = data_loop . output . results . best_graph . score ; % on
récupère le score
plotGraph ( graphId_loop ) ; % on trace le graphe
title ( ’ solution méthode loop ’) ;
On obtient alors le résultat suivant pour ce jeu de données en particulier :
13
Figure 2.3 – graphe obtenu avec Method_ABiGlasso_Loop
2.1.4
Method_ABiGlasso_MaxLoop
Prototype de la fonction :
1
function [ data_max_loop ] = M e t h o d _ A B i G l a s s o _ M a x L o o p (S , n )
Cette méthode est une variante de l’Asymptotic Bayesian method initialized by Graphical Lasso. C’est une méthode itérative. Elle est initialisée par le voisinage de la solution du
Graphical Lasso la plus probable. A chaque itération, on cherche le graphe le plus probable
sur le voisinage du graphe solution de l’itération précédente. La convergence est atteinte
lorsque le graphe le plus probable de l’itération courante est le même que celui de l’itération
précédente. La solution est le graphe obtenu lors de la dernière itération.
Les paramètres d’entrée :
S : matrice de covariance empirique.
n : nombre d’observations / nombre d’échantillons de chaque variable.
Paramètres facultatifs :
• e : paramètre de voisinage, i.e. le nombre maximal d’arêtes utilisé pour créer le
voisinage d’un graphe, c’est-à-dire l’ensemble des graphes qui diffèrent d’au plus
e arêtes par rapport au graphe d’origine. La valeur par défaut est fixée à 3.
• lambda_step : pas entre deux lambdas consécutifs. La valeur par défaut est fixée
à 0.1.
• kG_read : entier permettant de déterminer si on a des données à lire pour le
calcul des kG (car la lecture est plus rapide que de refaire les calculs à chaque
14
fois pour des petites valeurs de p (<6)). La valeur par défaut est fixée à 1 (on
lit les données s’il y en a).
• dataInfo : identifiant du jeu de données traité utilisé dans les noms des fichiers
générés.Par défaut cette valeur vaut ’_max_loop’ et si l’utilisateur donne son
propre identifiant ’Id’, la valeur devient ’Id_max_loop’.
• Results_path : chemin permettant d’accéder à l’endroit où on stocke les résultats. Une valeur par défaut est fixée (.../Toolbox/Results/) mais l’utilisateur
est libre de la modifier à sa guise.
• verbose : entier permettant d’afficher ou non des informations à l’utilisateur tout
au long des calculs (étapes, avancement des étapes,...). Par défaut cette valeur
vaut 1 (on affiche les informations).
• save_struct : entier permettant de déterminer si on sauvegarde la structure solution ou pas. Par défaut, cette valeur vaut 0 (on ne sauvegarde pas la structure).
Le paramètre de sortie :
data_max_loop : structure contenant l’ensemble des données calculées par la fonction
(cf explications en début de chapitre).
Remarque sur les paramètres facultatifs : se reporter à l’explication dans le chapitre
1 pour savoir comment les modifier.
Fonctions appelées : Cette méthode fait appel aux fonctions suivantes :
• ABiGlasso_from_graph
• covsel_from_mat
• lambda_domain
• lambdaMax
• MLEg_fct
Plus de détails sur la fonction : Cette fonction se compose des étapes suivantes :
1. initialisation de l’intervalle de lambdas à parcourir par calcul du lambda maximal
initial.
2. calcul de l’ensemble optimal des lambdas grâce à la fonction lambdaMax. La graphe
initial est le graphe solution du Graphical lasso pour le plus petit lambda optimal.
3. on calcule les scores du graphe initial et de son voisinage. Le graphe ayant le plus
fort score est utilisé comme le graphe initial dans l’itération suivante. Ceci est répété
jusqu’à obtenir que le graphe avec le score le plus élevé soit le graphe initial.
4. sauvegarde des résultats si souhaité.
15
Exemple d’application : Après avoir chargé un jeu de données et calculé la matrice de
covariance associée, on peut alors appliquer la méthode de l’Asymptotic Bayesian initialized
by Graphical Lasso itérative avec comparaison des graphes du voisinage du graphe le plus
probable à l’itération précédente avec initialisation par le graphe solution du Graphical
lasso le plus probable :
1
3
5
% chargement du jeu de données
data = load ( ’ dataset_demo . txt ’) ;
% calcul des paramètres nécessaires pour appliquer la méthode
S = cov ( data ’) ; % matrice de covariance empirique
n = size ( data ,2) ; % nombre d ’ échantillons du jeu de données
dataInfo = ’ dataset_demo ’;
7
9
11
13
% Méthode ABiGlasso avec bouclage sur la solution du Graphical
lasso la plus probable
[ data_max_loop ] = M e t h o d _ A B i G l a s s o _ M a x L o o p (S ,n , ’ dataInfo ’ ,
dataInfo ) ;
graphId_loop = data_max_loop . output . results . best_graph . graphId ; %
on récupère le graphId obtenu
score_loop = data_max_loop . output . results . best_graph . score ; % on
récupère le score
plotGraph ( graphId_loop ) ; % on trace le graphe
title ( ’ solution méthode max loop ’) ;
On obtient alors le résultat suivant pour ce jeu de données en particulier :
Figure 2.4 – graphe obtenu avec Method_ABiGlasso_MaxLoop
16
2.1.5
Method_ABiGlasso_RI
Prototype de la fonction :
1
function [ data_ri ] = M e th o d_ A B iG l as s o_ R I (S , n )
Cette méthode est une variante de l’Asymptotic Bayesian method initialized by Graphical Lasso. Elle réduit l’ensemble des paramètres de pénalisation (lambdas) utilisé pour
générer le sous-ensemble de graphes. Elle ne garde que les lambdas pour lesquels la différence d’arêtes entre la solution du Graphical lasso et son voisin le plus probable est
inférieure à e. La solution est le graphe le plus probable sur ce sous-ensemble.
Les paramètres d’entrée :
S : matrice de covariance empirique.
n : nombre d’observations / nombre d’échantillons de chaque variable.
Paramètres facultatifs :
• eRI : paramètre de voisinage pour la recherche de lambdas (i.e. le nombre maximal d’arêtes en plus ou en moins tolérées sur notre nouveau graphe par rapport
à notre graphe de départ lorsque l’on calcule l’intervalle de lambdas adapté au
problème). Par défaut, cette valeur vaut 3.
• e : paramètre de voisinage, i.e. le nombre maximal d’arêtes utilisé pour créer
le voisinage d’un graphe, c’est-à-dire l’ensemble des graphes qui diffèrent d’au
plus e arêtes par rapport au graphe d’origine. Par défaut, cette valeur vaut 3.
• lambda_step : pas entre deux lambdas consécutifs. Par défaut, cette valeur vaut
0.1.
• kG_read : entier permettant de déterminer si il y a des données à lire pour le
calcul des kG (car la lecture est plus rapide que de refaire les calculs à chaque
fois pour des petites valeurs de p (<6)). Par défaut, cette valeur vaut 1 (on lit
les données s’il y en a).
• dataInfo : identifiant du jeu de données traité utilisé dans les noms des fichiers
générés.Par défaut cette valeur vaut ’_ri’ et si l’utilisateur donne son propre
identifiant ’Id’, la valeur devient ’Id_ri’.
• Results_path : chemin permettant d’accéder à l’endroit où on stocke les résultats. Une valeur par défaut est fixée (.../Toolbox/Results/) mais l’utilisateur
est libre de la modifier à sa guise.
• verbose : entier permettant d’afficher ou non des informations à l’utilisateur tout
au long des calculs (étapes, avancement des étapes,...). Par défaut cette valeur
vaut 1 (on affiche les informations).
• save_struct : entier permettant de déterminer si on sauvegarde la structure solution ou pas. Par défaut, cette valeur vaut 0 (on ne sauvegarde pas la structure).
Le paramètre de sortie :
data_ri : structure contenant l’ensemble des données calculées par la fonction (cf explications en début de chapitre).
17
Remarque sur les paramètres facultatifs : se reporter à l’explication dans le chapitre
1 pour savoir comment les modifier.
Fonctions appelées : Cette méthode fait appel aux fonctions suivantes :
• ABiGlasso
• findLambda
• lambda_domain
• MLEg_fct
Plus de détails sur la fonction : Cette fonction se compose des étapes suivantes :
1. initialisation de l’intervalle de lambdas à parcourir par calcul du lambda maximal
avec la fonction lambda_domain.
2. calcul de l’intervalle adapté des lambdas avec la fonction findLambda.
3. calcul des graphes les plus probables pour ces lambdas à l’aide de la fonction ABiGlasso.
4. sauvegarde des résultats si souhaité.
Exemple d’application :
Après avoir chargé un jeu de données et calculé la matrice de covariance associée, on peut
alors appliquer la méthode de l’Asymptotic Bayesian initialized by Graphical Lasso avec
réduction d’intervalle de la manière suivante :
1
3
5
% chargement du jeu de données
data = load ( ’ dataset_demo . txt ’) ;
% mise en place des paramètres nécessaires à l ’ utilisation de la
méthode
S = cov ( data ’) ; % matrice de covariance empirique
n = size ( data ,2) ; % nombre d ’ échantillons du jeu de données
dataInfo = ’ dataset_demo ’;
7
% Méthode ABiGlasso avec recherche d ’ intervalle
[ data_ri ] = Me t ho d _A B i Gl a ss o _ RI (S ,n , ’ dataInfo ’ , dataInfo , ’ verbose ’
9
,0) ;
11
13
graphId_ri = data_ri . output . results . best_graph . graphId ; % on
récupère le graphId obtenu
score_ri = data_ri . output . results . best_graph . score ; % on récupère
le score
plotGraph ( graphId_ri ) ; % on trace le graphe
title ( ’ solution méthode RI ’) ;
Et on obtient alors le résultat suivant pour ce jeu de données en particulier :
18
Figure 2.5 – graphe obtenu avec la Method_ABiGlasso_RI
2.1.6
Fonctions associées
ABiGlasso
Prototype de la fonction :
1
function [ graphs_star , score_max , lambda_star , other_graphs ,
list_scores ] = ABiGlasso (S ,n ,e , pen_parameters , kG_read ,W , dataInfo ,
Results_path , verbose )
Cette fonction a pour but de calculer à partir d’un jeu de données et de paramètres bien
définis quels sont le ou les graphes les plus probables ainsi que les scores d’un sous-groupe
de graphes.
Les paramètres d’entrée :
S : matrice de covariance empirique.
n : nombre d’observations / nombre d’échantillons de chaque variable.
e : paramètre de voisinage du graphe, i.e. le nombre maximal d’arêtes utilisé pour créer le
voisinage d’un graphe, c’est-à-dire un ensemble de graphes qui diffèrent d’au plus e
arêtes par rapport au graphe d’origine.
pen_parameters : ensemble des lambdas à tester.
kG_read : entier permettant de déterminer si on a des données à lire pour le calcul des
kG (car la lecture est plus rapide que de refaire les calculs à chaque fois pour des
petites valeurs de p (<6)).
W : matrice d’Isserlis de S.
19
dataInfo : identifiant du jeu de données traité utilisé dans les noms des fichiers générés.
Results_path : chemin permettant d’accéder à l’endroit où on stocke les résultats. Une
valeur par défaut est fixée (.../Toolbox/Results/) mais l’utilisateur est libre de la
modifier à sa guise.
verbose : entier permettant d’afficher ou non des informations à l’utilisateur tout au long
des calculs (étapes, avancement des étapes,...). Par défaut cette valeur vaut 1 (on
affiche les informations).
Les paramètres de sortie :
graphs_star : liste des graphes les plus probables.
score_max : le score maximal des graphes.
lambda_star : liste des lambdas associés aux graphes les plus probables.
other_graphs : liste de tous les graphes explorés sous forme de chaîne de caractères.
list_scores : liste des scores correspondants aux graphes explorés.
Fonctions appelées : Cette méthode fait appel aux fonctions suivantes :
• covsel_from_mat
• Marrelec_fct
• neighbors
• plotGraph
Plus de détails sur la fonction : Cette fonction est composée des étapes suivantes :
1. calcul de la solution du Graphical Lasso pour tous les lambdas en paramètre à l’aide
de la fonction covsel_from_mat.
2. génération d’un ensemble de graphes contenant les graphes obtenus par le graphical
lasso et leurs voisins à l’aide de la fonction neighbors.
3. calcul du score de tous les graphes de l’ensemble généré à l’étape précédente grâce à
la fonction Marrelec_fct.
4. on stocke tous les graphes explorés dans other_graphs et leur score dans list_scores.
5. ensuite on sélectionne les graphes les plus probables.
Remarque : Cette fonction est appelée dans les fonctions suivantes :
• Method_ABiGlasso
• Method_ABiGlasso_Max
• Method_ABiGlasso_RI
20
ABiGlasso_from_graph
Prototype de la fonction :
1
function [ graphs_star , graphs_scores , explored_graphs ] =
A B i G l a s s o _ f ro m _ g r a p h (S ,n ,e , given_graph , graphs_scores , explored_graphs ,
kG_read ,W , dataInfo , Results_path , verbose )
Cette fonction a pour but de calculer à partir d’un graphe donné quel est le graphe
voisin le plus probable.
Les paramètres d’entrée :
S : matrice de covariance empirique.
n : nombre d’observations / nombre d’échantillons de chaque variable.
e : paramètre de voisinage, i.e. le nombre maximal d’arêtes utilisé pour créer le voisinage
d’un graphe, c’est-à-dire l’ensemble des graphes qui diffèrent d’au plus e arêtes par
rapport au graphe d’origine.
given_graph : graphe dont on doit calculer le voisin le plus probable.
graphs_scores : dictionnaire contenant le score de tous les graphes explorés.
explored_graphs : dictionnaire contenant tous les graphes explorés.
kG_read : entier permettant de déterminer si on a des données à lire pour le calcul des
kG (car la lecture est plus rapide que de refaire les calculs à chaque fois pour des
faibles valeurs de p (<6)).
W : matrice d’Isserlis de S.
dataInfo : identifiant du jeu de données traité utilisé dans les noms des fichiers générés.
Results_path : chemin permettant d’accéder à l’endroit où on stocke les résultats. Une
valeur par défaut est fixée (.../Toolbox/Results/) mais l’utilisateur est libre de la
modifier à sa guise.
verbose : entier permettant d’afficher ou non des informations à l’utilisateur tout au long
des calculs (étapes, avancement des étapes,...). Par défaut cette valeur vaut 1 (on
affiche les informations).
Les paramètres de sortie :
graphs_star : liste des graphes les plus probables.
graphs_scores : dictionnaire contenant les scores des graphes mis à jour.
explored_graphs : dictionnaire contenant tous les graphes explorés mis à jour.
Fonctions appelées : Cette méthode fait appel aux fonctions suivantes :
• Marrelec_fct
• neighbors
21
Plus de détails sur la fonction : Cette fonction est composée des étapes suivantes :
1. calcul des voisins du graphe à l’aide de la fonction neighbors.
2. calcul du score de chaque voisin du graphe initial grâce à la fonction Marrelec_fct.
3. sélection du graphe le plus probable que l’on stocke dans un dictionnaire (graphs_star).
Remarque : Cette fonction est appelée dans les fonctions suivantes :
• Method_ABiGlasso_Loop
• Method_ABiGlasso_MaxLoop
22
distrib_normal
Prototype de la fonction :
1
function [ res ] = distrib_normal ( mu , sigma , x0 , dim )
Cette fonction a pour but de calculer la fonction de densité pour une distribution
normale Np (µ, Σ) :
fv (x) =
1
p
1
(2π) 2 .|Σ| 2
exp(− 12 (x − µ)T Σ−1 (x − µ))
où V est l’ensemble des p noeuds du graphe, µ est la moyenne de la répartition et Σ
est la matrice de covariance.
Les paramètres d’entrée :
mu : moyenne de la répartition.
Sigma : matrice de covariance.
x0 : vecteur variable de notre calcul. C’est une réalisation de la variable aléatoire X qui
suit la loi normale Np (µ, Σ) (dans notre cas x).
dim : nombre de lignes ou de colonnes de Σ, donc dans notre cas le nombre de noeuds p.
Le paramètre de sortie :
res : la fonction de densité correspondant à la distribution normale choisie, ie fv (x).
Remarque : Cette fonction est appelée dans la fonction suivante :
• Marrelec_fct
23
findLambda
Prototype de la fonction :
1
function [ lambdaMinEnd , lambdaMaxEnd ,W , it_fl ] = findLambda (S ,n , eRI
, lambdaMaxInit , kG_read , verbose )
Cette fonction a pour but de calculer les bornes de l’intervalle de lambdas dans lequel
la solution ABiGlasso est proche de la solution du Graphical Lasso. Cela se fait par encadrement de la borne maximale et de la borne minimale de l’intervalle des lambdas par
dichotomie.
Les paramètres d’entrée :
S : matrice de covariance empirique.
n : nombre d’observations / nombre d’échantillons de chaque variable.
eRI : paramètre de voisinage pour la recherche de lambdas (i.e. le nombre maximal
d’arêtes en plus ou en moins tolérées sur notre nouveau graphe par rapport à notre
graphe de départ lorsque l’on calcule l’intervalle de lambdas adapté au problème).
lambdaMaxInit : le lambda maximal de départ renvoyé par la fonction lambda_domain.
kG_read : entier permettant de déterminer si on a des données à lire pour le calcul des
kG (car la lecture est plus rapide que de refaire les calculs à chaque fois pour des
valeurs de p faibles (<6)).
verbose : entier permettant d’afficher ou non des informations à l’utilisateur tout au long
des calculs (étapes, avancement des étapes,...). Par défaut cette valeur vaut 1 (on
affiche les informations).
Les paramètres de sortie :
lambdaMinEnd : lambda minimum final (borne gauche de l’intervalle de lambdas).
lambdaMaxEnd : lambda maximum final (borne droite de l’intervalle de lambdas).
W : matrice d’Isserlis de S.
it_fl : le nombre d’itérations jusqu’à ce qu’il y ait convergence.
Fonctions appelées : Cette méthode fait appel aux fonctions suivantes :
• covsel_from_mat
• Marrelec_fct
• neighbors
Remarque : Cette fonction est appelée dans la fonction suivante :
• Method_ABiGlasso_RI
24
kG_calc
Prototype de la fonction :
1
function kG = kG_calc ( kG ,p , graphs , kG_read , verbose )
Cette fonction a pour but de mettre à jour le dictionnaire contenant les kG. Pour cela,
soit des données existent déjà et on vient les lire (cela permettant d’économiser du temps),
soit il n’y a rien ou on ne veut pas lire les données, et on fait l’intégralité des calculs. Par
défaut, s’il y a des données à lire, on les lit plutôt que de refaire les calculs.
Les paramètres d’entrée :
kG : dictionnaire contenant les kG.
p : nombre de variables.
graphs : dictionnaire contenant les graphes sous forme de vecteurs.
kG_read : entier permettant de déterminer si on a des données à lire pour le calcul des
kG (car la lecture est plus rapide que de refaire les calculs à chaque fois pour des
valeurs faibles de p (<6)).
verbose : entier permettant d’afficher ou non des informations à l’utilisateur tout au long
des calculs (étapes, avancement des étapes,...). Par défaut cette valeur sera à 1 (on
affiche les informations).
Le paramètre de sortie :
kG : dictionnaire contenant les kG mis à jour.
Remarque : Cette fonction est appelée dans les fonctions suivantes :
• Marrelec_fct
25
lambda_domain
Prototype de la fonction :
1
function [ lambda_max ] = lambda_domain (S , lambda_step )
Cette fonction a pour but de calculer le lambda maximal pour lequel il est encore utile
de mener à bien les calculs. Au-delà de ce lambda, les graphes sont vides.
Les paramètres d’entrée :
S : matrice de covariance empirique.
lambda_step : pas entre deux lambdas consécutifs.
Le paramètre de sortie :
lambda_max : lambda maximal calculé.
Fonction appelée : Cette méthode fait appel à la fonction suivante :
• covsel_from_mat
Remarque : Cette fonction est appelée dans les fonctions suivantes :
• Method_ABiGlasso
• Method_ABiGlasso_Max
• Method_ABiGlasso_Loop
• Method_ABiGlasso_MaxLoop
• Method_ABiGlasso_RI
26
lambdaMax
Prototype de la fonction :
1
function [ pen_parameters ,W , lambdas_max ] = lambdaMax (S ,n ,
lambdaMaxInit , lambda_step , kG_read ,W , Results_path , verbose )
Cette fonction a pour but de calculer l’ensemble de lambdas nécessaires à notre étude.
Pour cela, on recherche les lambdas pour lesquels on obtient des graphes qui ont un score
maximal (score retourné par la fonction Marrelec_fct).
Les paramètres d’entrée :
S : matrice de covariance empirique.
n : nombre d’observations / nombre d’échantillons de chaque variable.
lambdaMaxInit : lambda maximal de départ renvoyé par la fonction lambda_domain.
lambda_step : pas entre deux lambdas consécutifs.
kG_read : entier permettant de déterminer si on a des données à lire pour le calcul des
kG (car la lecture est plus rapide que de refaire les calculs à chaque fois pour des
valeurs faibles de p(<6)).
W : la matrice d’Isserlis de S.
Results_path : chemin permettant d’accéder à l’endroit où on stocke les résultats. Une
valeur par défaut est fixée (.../Toolbox/Results/) mais l’utilisateur est libre de la
modifier à sa guise.
verbose : entier permettant d’afficher ou non des informations à l’utilisateur tout au long
des calculs (étapes, avancement des étapes,...). Par défaut cette valeur vaut 1 (on
affiche les informations).
Les paramètres de sortie :
pen_parameters : ensemble des lambdas à tester.
W : matrice d’Isserlis de S.
lambdas_max : lambdas correspondant aux graphes avec un score maximal.
Fonctions appelées : Cette méthode fait appel aux fonctions suivantes :
• covsel_from_mat
• Marrelec_fct
Remarque : Cette fonction est appelée dans les fonctions suivantes :
• Method_ABiGlasso_Max
• Method_ABiGlasso_MaxLoop
27
log_distrib_normal
Prototype de la fonction :
function [ res ] = l og_ di st rib _n or mal ( mu , sigma , x0 )
1
Cette fonction a pour but de calculer le logarithme de la fonction de densité pour une
distribution normale Np (µ, Σ) :
fv (x) =
1
p
1
(2π) 2 .|Σ| 2
exp(− 12 (x − µ)T Σ−1 (x − µ))
où V est l’ensemble des p nœuds du graphe, µ est la moyenne de la répartition et Σ est
la matrice de covariance. Contrairement à la fonction , le ratio 1 p est ignoré (considéré
(2π) 2
égal à 1).
Les paramètres d’entrée :
mu : moyenne de la répartition.
Sigma : matrice de covariance.
x0 : vecteur variable de notre calcul. C’est une réalisation de la variable aléatoire X qui
suit la loi normale Np (µ, Σ) (dans notre cas x).
dim : nombre de lignes ou de colonnes de Σ, donc dans notre cas le nombre de nœuds p.
Le paramètre de sortie :
res : le logarithme de la fonction de densité correspondant à la distribution normale choisie, i.e. log (fv (x)).
Remarque : Cette fonction est appelée dans la fonction suivante :
• Marrelec_fct
28
Marrelec_fct
Prototype de la fonction :
1
function [ score , W ] = Marrelec_fct (S ,n , graphs ,W , kG_read , verbose )
Cette fonction a pour but de calculer le score de chaque graphe contenu dans le dictionnaire graphs indiqué en paramètre de la fonction.
Les paramètres d’entrée :
S : matrice de covariance empirique.
n : nombre d’observations / nombre d’échantillons de chaque variable.
graphs : dictionnaire contenant les graphes sous forme de vecteurs.
W : matrice d’Isserlis de S.
kG_read : entier permettant de déterminer si on a des données à lire pour le calcul des
kG (car la lecture est plus rapide que de refaire les calculs à chaque fois pour des
valeurs faibles de p(<6)).
verbose : entier permettant d’afficher ou non des informations à l’utilisateur tout au long
des calculs (étapes, avancement des étapes,...). Par défaut cette valeur vaut 1 (on
affiche les informations).
Les paramètres de sortie :
score : dictionnaire contenant tous les scores des graphes.
W : matrice d’Isserlis de S.
Cette fonction fait appel à la fonction kG_calc
Fonctions appelées : Cette méthode fait appel aux fonctions suivantes :
• kG_calc
• distrib_normal
• log_distrib_normal
Remarque : Cette fonction est appelée dans les fonctions suivantes :
• ABiGlasso
• ABiGlasso_from_graph
• findLambda
• lambdaMax
29
neighbors
Prototype de la fonction :
1
function G = neighbors ( G_init ,e , verbose )
Cette fonction a pour but de calculer tous les graphes voisins du graphe mis en entrée
en fonction du nombre maximal d’arêtes en plus ou en moins tolérées, et renvoie tous les
voisins dans une matrice.
Les paramètres d’entrée :
G_init : vecteur correspondant au graphe initial dont on veut chercher le voisinage.
e : paramètre de voisinage, i.e. le nombre maximal d’arêtes utilisé pour créer le voisinage
d’un graphe, c’est-à-dire l’ensemble des graphes qui diffèrent d’au plus e arêtes par
rapport au graphe d’origine.
verbose : entier permettant d’afficher ou non des informations à l’utilisateur tout au long
des calculs (étapes, avancement des étapes,...). Par défaut cette valeur vaut 1 (on
affiche les informations).
Le paramètre de sortie :
G : matrice dont chaque ligne représente le support (matrice d’adjacence vectorisée) d’un
graphe voisin du graphe initial exprimé en paramètre d’entrée de la fonction.
Remarque : Cette fonction est appelée dans les fonctions suivantes :
• ABiGlasso
• ABiGlasso_from_graph
• findLambda
30
2.2
2.2.1
Méthode Bayesian Adaptive Graphical Lasso (H.
Wang)
Method_BayesGLassoGDP
Prototype de la fonction :
1
function [ data_bayes ] = M e t h o d _ B a y e s G L a s s o G D P (S , n )
Cette méthode est celle proposée par H. Wang [2] pour estimer la structure d’indépendance conditionnelle d’un processus multivarié gaussien. Elle estime la matrice de précision
en utilisant une approche bayésienne pour estimer les paramètres de pénalisation du Graphical lasso puis la matrice des corrélations partielles associée est seuillée pour obtenir un
graphe. C’est ce graphe qui est l’estimée de la structure d’indépendance conditionnelle.
Les paramètres d’entrée :
S : matrice de covariance empirique.
n : nombre d’observations / nombre d’échantillons de chaque variable.
paramètres facultatifs :
• loop : nombre d’itérations. Cette valeur est fixée à 1000 par défaut mais est
modifiable.
• thresh : seuil pour le calcul de la matrice. Ce seuil est fixé à 0.5 par défaut mais
est modifiable.
• dataInfo : identifiant du jeu de données traité utilisé dans les noms des fichiers
générés. Par défaut cette valeur vaut ’_BAG’ et si l’utilisateur donne son
propre identifiant ’Id’, la valeur devient ’Id_BAG’.
• Results_path : chemin permettant d’accéder à l’endroit où on stocke les résultats. Une valeur par défaut est fixée mais (.../Toolbox/Results/) l’utilisateur
est libre de la modifier à sa guise.
• save_struct : entier permettant de déterminer si on sauvegarde la structure solution ou pas. Par défaut, cette valeur vaut 0 (on ne sauvegarde pas la structure).
Le paramètre de sortie :
data_BAG : structure contenant l’ensemble des données calculées par la fonction.
Remarque sur les paramètres facultatifs : se reporter à l’explication en début de
chapitre pour savoir comment les modifier.
Fonctions appelées : Cette méthode fait appel aux fonctions suivantes :
• BayesGlassoGDP
• bayes_thresholding
31
Remarque : Lors de l’appel de la fonction BayesGlassoGDP, les paramètres burnin
et nmc prennent les valeurs par défaut de, respectivement, 1000 et 2000. Ces valeurs
correspondent à celles prises par Hao Wang lors de l’utilisation de son code.
Exemple d’application : Après avoir chargé le jeu de données et calculé la matrice de
covariance correspondante, on peut appliquer la méthode du Bayesian Adaptive Graphical
Lasso comme pour l’exemple suivant :
1
3
5
7
9
11
% chargement du jeu de données
data = load ( ’ dataset_demo . txt ’) ;
% calcul des paramètres nécessaires pour l ’ application de la
méthode
S = cov ( data ’) ; % matrice de covariance empirique
n = size ( data ,2) ; % nombre d ’ échantillons
% % Méthode Bayesian Adaptive Glasso
[ data_BAG ] = Method_BAGlasso (S , n ) ;
graphId_GAG = data_BAG . output . graph ; % on récupère le graphId
obtenu
figure () ;
plotGraph ( graphId_BAG ) ; % on trace le graphe
title ( ’ Graphe le plus probable trouvé avec la méthode du Bayesian
Adaptive Graphical Lasso ’) ;
On obtient alors le résultat suivant :
Figure 2.6 – graphes obtenus avec la méthode du Bayesian Adaptive Graphical Lasso
Cette méthode fait intervenir des tirages aléatoires de matrices suivant une loi de Wishart. Il paraît donc logique que le résultat obtenu ne soit pas à 100% le même à chaque
fois. Il est donc possible d’obtenir la figure de droite (cf ci-dessus) avec une probabilité d’environ 6%. Cependant, le graphe le plus probable obtenu est bien celui de gauche (environ
70%).
32
2.2.2
Fonctions associées
BayesGlassoGDP
Prototype de la fonction :
function [ Sig_save , C_save , lambda ] = BayesGLassoGDP (S ,n , Sig ,C ,
burnin , nmc )
Cette fonction est issue d’un article rédigé par Hao Wang [2] et a été récupérée et
utilisée comme telle. Aucune modification n’a été apportée.
Les paramètres d’entrée :
S : matrice de covariance "pondérée" (multipliée par le nombre d’échantillons).
n : nombre d’observations / nombre d’échantillons de chaque variable.
Sig : matrice de covariance empirique.
C : matrice de précision.
burnin : nombre d’itérations de "chauffe".
nmc : nombre d’itérations pour l’étape de Monte-Carlo.
Les paramètres de sortie :
Sig_save : matrices de covariance à chaque itération de l’étape de Monte-Carlo.
C_save : matrices de précision à chaque itération de l’étape de Monte-Carlo.
lambda : lambdas conservés.
Si vous voulez plus d’informations sur cette fonction, veuillez vous référer à l’article [2]
de la bibliographie (cf à la fin du document) ou directement au code https://www.msu.
edu/~haowang/RESEARCH/Bglasso/bglasso.html.
Remarque : ATTENTION : ici les matrices de concentration sont notées C alors que
dans nos notations, ces matrices sont notées K.
Pour notre part, nous l’utilisons dans la fonction Method_BAGlasso.
33
bayesian_thresholding
Prototype de la fonction :
1
function gamma_est = b a y e s i a n _ t h r e s h o l d i n g ( Pi ,S ,n , loop , thresh )
Cette fonction a pour but de calculer une matrice dont les zéros correspondent aux
arêtes manquantes du graphe. Pour cela, on fait de nombreux tirages aléatoires de matrices de concentration K suivant une loi de Wishart pour lesquelles on calcule la matrice
des corrélations partielles associée. On calcule ensuite le rapport entre la matrice des corrélations partielles obtenue après utilisation de la fonction Bayes_GlassoGDP et la moyenne
des matrices des corrélations partielles issues des itérations que l’on a vues ; et on seuille
ce rapport pour obtenir la matrice en question.
Les paramètres d’entrée :
Pi : matrice des corrélations partielles.
S : matrice de covariance empirique.
n : nombre d’observations / nombre d’échantillons de chaque variable.
loop : nombre d’itérations. Cette valeur est normalement fixée à 1000 mais l’utilisateur
sera libre de la modifier.
thresh : seuil fixé à 0.5 normalement, mais ici aussi l’utilisateur est libre de le modifier.
Le paramètre de sortie :
G_est : la matrice de sortie de la fonction dont les zéros correspondent aux arêtes manquantes du graphe.
Remarque importante : Pour utiliser cette fonction, et donc mettre en place cette
méthode d’extraction de la structure d’indépendance d’un processus, il est nécessaire de
posséder la Toolbox Statistics de Matlab.
Cette fonction est appelée dans la méthode Method_BAGlasso
34
2.3
Méthode Graphical Lasso ADMM (Alternating Direction Method of Multipliers) (S. Boyd)
covsel_from_mat
Prototype de la fonction :
1
function [K , ~] = covsel_from_mat (S , lambda , rho , alpha )
L’objectif de cette fonction est de déterminer quelle est la matrice parcimonieuse K
qui optimise l’expression suivante à partir de la matrice de covariance empirique et du
paramètre de pénalisation λ choisi.
K̂ = arg max{tr(SK) − log(det K) + λ.kKk1 }
K
Les paramètres d’entrée :
S : matrice de covariance empirique.
lambda : λ choisi pour le calcul.
rho : paramètre lagrangien.
alpha : paramètre d’over-relaxation (entre 1.0 et 1.8).
Le paramètre de sortie :
K : matrice parcimonieuse permettant de maximiser l’expression voulue.
Plus de détails sur la fonction : Cette fonction a été établie à partir d’un code issu
d’un article de Stephen Boyd [4] que nous avons librement modifié afin de l’adapter à nos
paramètres. La fonction initiale se nomme covsel et son prototype est le suivant :
1
function [K , history ] = covsel (D , lambda , rho , alpha )
où lambda, rho et alpha sont les mêmes que pour notre fonction à nous covsel_from_mat
mais où D représente la matrice des données du problème. Pour plus d’informations sur la
fonction initiale et la démarche faite par Stephen Boyd, veuillez vous référer à ses travaux
[4] ou directement au code de la fonction : http://www.stanford.edu/~boyd/papers/
admm/covsel/covsel.html.
Remarque : il est également possible d’obtenir ce code directement sous Matlab en tapant :
1
grabcode ( ’ http :// www . stanford . edu /~ boyd / papers / admm / covsel / covsel
. html ’)
35
Remarque : Cette fonction est appelée dans les fonctions suivantes :
• ABiGlasso
• findLambda
• lambda_domain
• lambdaMax
Remarque générale : Lors de son utilisation comme méthode à part entière, nous
utilisons indifféremment covsel et covsel_from_mat. Les deux nous renvoient le même
résultat et sont totalement équivalentes. Pour obtenir ensuite le graphe associé à notre jeu
de données, il faut alors mettre K sous forme logique. Vous devez alors écrire ceci :
1
AdjMat = logical ( K ) ;
G = AdjMat - eye ( p ) ;
où G est la matrice correspondant au graphe résultat et eye(p) la matrice identité de taille
p.
Exemple d’application : Pour appliquer cette méthode, il est nécessaire de charger un
jeu de données, mais il n’est pas obligatoire de calculer la matrice de covariance. On peut
alors tester cette méthode de la manière suivante :
2
4
6
8
% % Méthode Glasso via ADMM
[K , history ] = covsel (D ’ ,0.2 ,1 ,1) ;
AdjMat = logical ( K ) ; % on calcule la matrice d ’ adjacence
% calcul du graphe correspondant
G_boyd = AdjMat - eye ( p ) ;
figure () ;
plotGraph ( G_boyd ) ; % on trace le graphe ( car on est dans le cas
où il y a 6 noeuds )
title ( ’ solution méthode du Graphical Lasso via ADMM pour un
lambda de 0.31 ’) ;
On obtient alors les résultats suivants :
Le graphe obtenu avec cette méthode dépend totalement du lambda choisi en paramètre
de la fonction. Si celui-ci n’est pas adapté, alors il sera impossible d’obtenir un résultat
correct (comme c’est le cas sur le graphe de droite de la figure par exemple). Afin de trouver
un lambda adapté, il existe des méthodes, comme par exemple la validation croisée, qui ne
sont pas développées ici.
36
(a) lambda = 0.31
(b) lambda = 0.01
Figure 2.7 – graphes obtenus avec la méthode du Graphical Lasso ADMM pour différentes
valeurs de lambda
2.4
Méthodes GGMselect (C. Giraud)
Cette méthode utilise le package GGMselect de R. Il est donc nécessaire de bien l’installer.
Pour cela, il vous suffit de taper : install.packages(’GGMselect’) sous le logiciel R. Il
faut au préalable avoir installé R.
2.4.1
Method_GGMselect_R
Prototype de la fonction
function [ data_GGMselect ] = Met ho d_ GGM se le ct_ R (X , chosen_family ,
varargin )
Cette méthode a pour but de calculer le graphe parmi une famille de graphes donnée
en paramètre le graphe qui minimise l’erreur quadratique moyenne de prédiction avec
pénalisation. Cette famille donnée en paramètre doit faire partie des familles traitées par
Giraud dans son article [5].
Les paramètres d’entrée :
X : matrice p × n contenant les données que l’on souhaite étudier
chosen_family : chaîne de caractère identifiant la famille de graphes choisie (parmi C01,
LA, EW et QE).
Paramètres facultatifs :
• dataInfo : identifiant du jeu de données traité utilisé dans les noms des fichiers
générés. Par défaut cette valeur vaut ’_GGMselect’ et si l’utilisateur donne
son propre identifiant ’Id’, la valeur devient ’Id_GGMselect’.
• Results_path : chemin permettant d’accéder à l’endroit où on stocke les résultats. Une valeur par défaut est fixée mais (.../Toolbox/Results/) l’utilisateur
est libre de la modifier à sa guise.
37
• verbose : entier permettant d’afficher ou non des informations à l’utilisateur tout
au long des calculs (étapes, avancement des étapes,...). Par défaut cette valeur
vaut 1 (on affiche les informations).
• save_struct : entier permettant de déterminer si on sauvegarde la structure solution ou pas. Par défaut, cette valeur vaut 0 (on ne sauvegarde pas la structure).
Le paramètre de sortie :
data_GGMselect : structure contenant l’ensemble des données calculées et sauvegardées par la fonction.
Remarque : Cette méthode fait appel à un script R (comp_families.R) qui utilise la
fonction selectFast du package GGMselect du logiciel R. Si vous voulez plus d’information
sur cette fonction, vous pouvez vous référer au document [5] de la référence ou alors aller directement sur la documentation du package : cran.r-project.org/web/.../GGMselect/
GGMselect.pdf.
Exemple d’application : Si on s’intéresse à un graphe issue d’une famille en particulier,
par exemple ’C01’, on peut alors appliquer cette méthode de la manière suivante :
1
3
% chargement du jeu de données
data = load ( ’ dataset_demo . txt ’) ;
% mise en place des paramètres nécessaires à l ’ utilisation de la
méthode
dataInfo = ’ dataset_demo ’;
5
7
9
% Méthode utilisant GGMselect
[ data_GGMselect ] = Me th od _GG Ms el ect _R ( data , ’ C01 ’ , ’ dataInfo ’ ,
dataInfo , ’ verbose ’ ,0) ;
graph_GGMselect = data_GGMselect . output . results . graph ; % on
récupère le graphe obtenu
plotGraph ( graph_GGMselect ) ; % on trace le graphe
title ( ’ solution methode GGMselect pour famille C01 ’) ;
On obtient alors le résultats suivant pour cette famille en particulier (cf graphe de
gauche). Et si on choisit une autre famille, comme par exemple ’LA’, on obtient le résultat
suivant (cf graphe de droite).
38
(a) Graphe solution famille ’C01’
(b) Graphe solution famille ’LA’
Figure 2.8 – Graphes solution de la méthode GGMselect pour différentes familles
2.4.2
Method_GGMselect_myFam_R
Cette méthode utilise le package GGMselec de R. Il est donc nécessaire de bien l’installer.
Pour cela, il vous suffit de taper : install.packages(’GGMselect’) sous le logiciel R.
Prototype de la fonction
function [ d a t a _ G G M s e l e c t _m y F a m ] = M e t h o d _ G G M s e l e c t _ m y F a m _ R (X ,
myFam , varargin )
Cette méthode a pour but de calculer le graphe, parmi une famille de graphes que
l’on renseigne en paramètre, qui minimise l’erreur quadratique moyenne de prédiction avec
pénalisation. La famille renseignée en paramètre doit au préalable avoir été mise sous la
forme d’une matrice à 3 dimensions où la 3ème dimension représente le nombre de matrices
à 2 dimensions contenues dans notre famille.
Les paramètres d’entrée :
X : matrice p × n contenant les données que l’on souhaite étudier
myFam : matrice à 3 dimensions contenant les matrices d’adjacences des graphes de notre
famille.
Paramètres facultatifs :
• dataInfo : identifiant du jeu de données traité utilisé dans les noms des fichiers
générés. Par défaut cette valeur vaut ’_GGMselect_myFam’ et si l’utilisateur donne son propre identifiant ’Id’, la valeur devient ’Id_GGMselect_myFam’.
• Results_path : chemin permettant d’accéder à l’endroit où on stocke les résultats. Une valeur par défaut est fixée mais (.../Toolbox/Results/) l’utilisateur
est libre de la modifier à sa guise.
• verbose : entier permettant d’afficher ou non des informations à l’utilisateur tout
au long des calculs (étapes, avancement des étapes,...). Par défaut cette valeur
vaut 1 (on affiche les informations).
39
• save_struct : entier permettant de déterminer si on sauvegarde la structure solution ou pas. Par défaut, cette valeur vaut 0 (on ne sauvegarde pas la structure).
Les paramètres de sortie :
data_GGMselect : structure contenant l’ensemble des données calculées et sauvegardées par la fonction.
Remarque : Cette méthode fait appel à un script R (my_family.R) qui utilise la fonction selectMyFam du package GGMselect de R. Si vous voulez plus d’information sur
cette fonction, vous pouvez vous référer au document [5] de la référence ou alors aller directement sur la documentation du package : cran.r-project.org/web/.../GGMselect/
GGMselect.pdf.
Exemple d’application : On peut par exemple choisir comme famille le voisinage d’un
graphe en particulier. On peut alors appliquer cette méthode sur un jeu de données en
particulier afin de trouver le graph associé parmi les graphes contenus dans notre famille
en écrivant ceci :
1
3
% chargement du jeu de données
data = load ( ’ dataset_demo . txt ’) ;
% mise en place des paramètres nécessaires à l ’ utilisation de la
méthode
dataInfo = ’ dataset_demo ’;
5
7
9
11
13
15
17
% creation de la famille
G_init = [0 0 0 1 1 1 1 0 0 1 0 0 1 0 1]; % on choisit un graphe
initial
G_mat = neighbors ( G_init ,3 ,1) ; % on calcule son voisinage
N = size ( G_mat ,1) ; % nombre de voisins
myFam = zeros (6 ,6 , N ) ; % on met en place notre matrice en 3
dimensions
idx = logical ( tril ( ones (6) , -1) ==1) ;
% on remplit la matrice
for i =1: N
mat = zeros (6) ;
mat ( idx ) = G_mat (i ,:) ;
mat = mat + mat ’;
myFam (: ,: , i ) = mat ;
end
19
21
23
% Méthode utilisant GGMselect
[ d a t a _ G G M s e l e c t _ m y F a m ] = M e t h o d _ G G M s e l e c t _ m y F a m _ R ( data , myFam , ’
dataInfo ’ , dataInfo , ’ verbose ’ ,0) ;
g r a p h _ G G M s e l e c t _ m y F a m = d a t a _ G G M s e l e c t _ m y F a m . output . results . graph
; % on récupère le graphe obtenu
plotGraph ( g r a p h _ G G M s e l e c t _ m y F a m ) ; % on trace le graphe
title ( ’ solution methode GGMselect_myFam ’) ;
On obtient alors le résultat suivant pour notre voisinage en particulier et notre jeu de
données :
40
Figure 2.9 – Graphe obtenu pour notre famille en particulier
2.5
2.5.1
Méthode SIN (M. Drton)
Method_sinUG_R
Cette méthode utilise le package ’SIN’ de R. Il est donc nécessaire de bien l’installer. Pour
cela, il vous suffit de taper : install.packages(’SIN’) sous le logiciel R.
Prototype de la fonction :
1
function [ data_SIN ] = Method_sinUG_R (S ,n , varargin )
Cette méthode a pour fonction de calculer deux graphes qui correspondent à un encadrement du graphe correspondant exactement à nos données. Pour cela, on calcule la
matrice des p-valeurs associée à notre jeu de données puis on la seuille avec deux seuils
différents pour obtenir deux graphes : le premier correspond au graphe qui ne contient que
les arêtes significatives, et le deuxième correspond à un graphe pour lequel on ne retire
que les arêtes non-significatives, c’est-à-dire que l’on conserve les arêtes significatives et
indéterminées.
Les paramètres d’entrée :
S : matrice de covariance empirique.
n : nombre d’observations que l’on considère / nombre d’échantillons de chaque variable.
Paramètres facultatifs :
41
• dataInfo : identifiant du jeu de données traité utilisé dans les noms des fichiers
générés. Par défaut cette valeur vaut ’_SIN’ et si l’utilisateur donne son propre
identifiant ’Id’, la valeur devient ’Id_SIN’.
• Results_path : chemin permettant d’accéder à l’endroit où on stocke les résultats. Une valeur par défaut est fixée mais (.../Toolbox/Results/) l’utilisateur
est libre de la modifier à sa guise.
• low_thresh : le seuil au-dessus duquel on considère que les arêtes ne sont plus
significatives. La valeur par défaut est de 0.01.
• high_thresh : le seuil au-dessus duquel on considère que les arêtes sont nonsignificatives. La valeur par défaut est fixée à 0.90.
• verbose : entier permettant d’afficher ou non des informations à l’utilisateur tout
au long des calculs (étapes, avancement des étapes,...). Par défaut cette valeur
vaut 1 (on affiche les informations).
• save_struct : entier permettant de déterminer si on sauvegarde la structure solution ou pas. Par défaut, cette valeur vaut 0 (on ne sauvegarde pas la structure).
Les paramètres de sortie :
data_GGMselect : structure contenant l’ensemble des données calculées et sauvegardées par la fonction.
Remarque sur les paramètres facultatifs : se reporter à l’explication plus haut pour
savoir comment les modifier.
Cette méthode se compose des étapes suivantes :
1. On écrit les données de notre problème dans le fichier texte qui va être lu par le script
R.
2. On exécute le script R qui calcule la matrice des p-valeurs (à l’aide de la méthode
sinUG de R).
3. On récupère la matrice obtenue et on la seuille de deux manières.
4. On récupère les deux graphes voulus.
Remarque : La fonction sinUG du package ’SIN’ de R ne s’applique que pour des graphes
non orientés. Elle prend en entrée la matrice de covariance ainsi que le nombre d’échantillons et retourne la matrice des p-valeurs associée.
Si vous voulez plus d’informations sur la fonction, vous pouvez vous référer au document
suivant : http://cran.r-project.org/web/packages/SIN/SIN.pdf.
Exemple d’application Cette méthode est toute simple à appliquer, il suffit de renseigner le jeu de données dont vous souhaitez approximer le graphe et appliquer la méthode.
On peut donc par exemple écrire :
42
% chargement du jeu de données
S = cov ( data ’) ; % matrice de covariance empirique
n = size ( data ,2) ; % nombre d ’ échantillons du jeu de
1
3
données
5
data = load ( ’ dataset_demo . txt ’) ;
% mise en place des paramètres nécessaires à l ’
utilisation de la méthode
dataInfo = ’ dataset_demo ’;
7
% Méthode utilisant sinUG
[ data_SIN ] = Method_sinUG_R (S ,n , ’ dataInfo ’ , dataInfo , ’
9
verbose ’ ,0) ;
11
13
15
17
graph_S = data_SIN . output . results . graph . S ;
graph_SI = data_SIN . output . results . graph . SI ; % on
récupère les graphes obtenus
figure () ;
subplot (2 ,1 ,1) ;
plotGraph ( graph_S ) ; % on trace le graphe S
title ( ’ G_S : graphe avec aretes significatives ’) ;
subplot (2 ,1 ,2) ;
plotGraph ( graph_SI ) ; % on trace le graphe SI
title ( ’ G_SI : graphe avec aretes significatives et
indeterminees ’) ;
19
On obtient alors, pour cet exemple précis les résultats suivants :
(a) G_S
(b) G_SI
Figure 2.10 – graphes S et SI obtenus avec Method_sinUG_R
43
2.6
Méthodes de seuillages
edge_thresh
prototype de la fonction :
function [ G ] = edge_thresh (S , n_edges )
L’objectif de cette fonction est d’obtenir un graphe par seuillage du nombre d’arêtes.
Cette méthode va donc calculer la matrice des corrélations partielles et conserver les arêtes
dont le coefficient correspondant est le plus élevé. Le nombre d’arêtes que l’on conserve est
fixé à l’avance par l’utilisateur.
Les paramètres d’entrée :
S : matrice de covariance empirique.
n_edges : nombre d’arêtes que l’on souhaite dans le graphe.
Le paramètre de sortie :
G : matrice correspondant au graphe solution.
Remarque : Cette méthode est utile quand on veut utiliser des métriques sensibles au
nombre d’arêtes pour comparer des graphes.
Exemple d’application : On peut tester la méthode après avoir chargé le jeu de données
et calculé la matrice de covariance correspondante. On peut alors faire le test de la manière
suivante :
1
3
5
% Méthode du nombre maximal d ’ arêtes
figure () ;
G_edge_number = edge_thresh (S ,7) ; % on récupère le graphe obtenu
plotGraph ( G_edge_number ) ; % on le trace
title ( ’ Graphe obtenu par la méthode du nombre d arêtes souhaitées
sur le graphe ( ici 7 arêtes ) ’) ;
On obtient alors les résultats suivants pour différents nombres d’arêtes sur ce jeu de
données en particulier.
44
(a) 7 arêtes
(b) 9 arêtes
Figure 2.11 – Graphes obtenus avec la méthode du nombre d’arêtes du graphe
par_corr_thresh
prototype de la fonction :
1
function [ G ] = par_corr_thresh (S , thresh )
L’objectif de cette fonction est d’obtenir un graphe en seuillant la matrice des corrélations partielles empirique.
Les paramètres d’entrée :
S : matrice de covariance empirique.
thresh : seuil au dessous duquel on considère qu’une arête dans le graphe n’a pas lieu
d’être.
Le paramètre de sortie :
G : matrice correspondant au graphe solution.
Exemple d’application : Pour tester cette méthode, il nous faut charger le jeu de
données puis calculer la matrice de covariance correspondante. On peut alors appliquer la
méthode de la manière suivante :
1
3
figure () ;
G_thresh = par_corr_thresh (S ,0.1) ; % on récupère le graphe
résultat avec un seuil de 0.1 ( ici )
plotGraph ( G_thresh ) ; % on trace le graphe
title ( ’ graphe obtenu par méthode du seuillage de la matrice des
corrélations partielles pour un seuil de 0.1 ’) ;
On obtient alors les résultats suivants (pour différentes valeurs du seuil) :
45
(a) seuil de 0.1
(b) seuil de 0.02
Figure 2.12 – Graphes obtenus avec la méthode du seuillage direct de la matrice des
corrélations partielles pour différentes valeurs du seuil
46
Chapitre 3
Description des fonctions d’évaluation
des méthodes
3.1
Fonctions "Outils"
Ces fonctions permettent d’évaluer les performances des méthodes d’estimation ou de visualiser les résultats obtenus.
comp_graphs
Prototype de la fonction :
function [ specificity , sensitivity , MCC , HD ] = scores ( G_test , G_ref )
Cette fonction fournit des mesures permettant de savoir si deux graphes sont proches
en terme de nombre d’arêtes et comment ils diffèrent.
Les paramètres d’entrée :
G_test : graphe à tester.
G_ref : graphe de référence.
Les paramètres de sortie :
specificity : spécificité.
sensitivity : sensibilité.
MCC : Matthews Correlation Coefficient.
HD : distance de Hamming.
Toutes ces mesures permettent d’évaluer la ressemblance entre le graphe test et le graphe
de référence.
Remarque : Cette fonction n’est appelée dans aucune autre fonction mais peut être
utile à tout moment pour vérifier si notre graphe est bien adapté ou pourquoi il ne l’est
pas. Elle peut par ailleurs être applicable dans n’importe quelle méthode d’estimation de
structure d’indépendance, et non pas seulement dans la méthode ABiGlasso.
47
Exemple d’application : Cette méthode a pour but de calculer des mesures permettant
de déterminer si notre graphe est fidèle ou non au graphe de référence auquel il doit
"ressembler". Voici un exemple de cette fonction : dans un premier temps nous prenons
comme graphe test le graphe de référence et dans un deuxième temps un graphe ayant 2
arêtes de plus.
1
3
5
% creation des graphes
G_ref = [0 0 0 1 1 1 1 0 0 1 0 0 1 0 1];
G_test = [0 0 1 1 1 1 1 0 0 1 0 0 1 1 1];
% calcul des metriques
[ specificity_ref , sensitivity_ref , MCC_ref , HD_ref ] = comp_graphs (
G_ref , G_ref ) ; % calcul des métriques avec G_ref en graphe de test
[ specificity_test , sensitivity_test , MCC_test , HD_test ] =
comp_graphs ( G_ref , G_ref ) ; % calcul des métriques avec G_test en graphe
de test
7
9
11
% affichage des résultats
disp ([ ’ Specificity : ’ num2str ( specificity_ref ) ’ ’ num2str (
specificity_test ) ]) ;
disp ([ ’ Sensitivity : ’ num2str ( sensitivity_ref ) ’ ’ num2str (
sensitivity_test ) ]) ;
disp ([ ’ MCC : ’ num2str ( MCC_ref ) ’ ’ num2str ( MCC_test ) ]) ;
disp ([ ’ HD : ’ num2str ( HD_ref ) ’ ’ num2str ( HD_test ) ]) ;
(a) graphe référence
(b) graphe test
Figure 3.1 – Graphes comparés avec la fonction comp_graphs
On obtient alors les résultats suivants :
Pour un graphe identique au graphe de Pour un graphe différent du graphe de référéférence (graphe (a)) :
rence (ici le graphe (b)) :
• Specificity : 1
• Specificity : 0.75
• Sensitivity : 1
• Sensitivity : 1
• MCC : 1
• MCC : 0.7638
• HD :0
• HD : 2
48
MLEg_fct
Prototype de la fonction :
function [ Sigma_est ]= MLEg_fct (S , Adj )
Cette fonction a pour but d’estimer la matrice de covariance dont l’inverse respecte la
structure d’indépendance conditionnelle donnée par Adj à partir de la matrice de covariance
empirique à l’aide de la méthode du maximum de vraisemblance.
Les paramètres d’entrée :
S : matrice de covariance empirique.
Adj : la matrice d’adjacence du graphe.
Le paramètre de sortie :
Sigma_est : matrice de covariance estimée par la méthode du maximum de vraisemblance (MLE).
Remarque : Cette fonction est appelée dans les fonctions suivantes :
• Method_ABiGlasso
• Method_ABiGlasso_lambda_max
• Method_ABiGlasso_loop
• Method_ABiGlasso_RI
49
plotGraph
Prototype de la fonction :
1
function [] = plotGraph ( graph )
Cette fonction a pour but de tracer le graphe mis en paramètre de la fonction. Mais
cela n’est possible que pour des graphes à six noeuds.
Le paramètre d’entrée :
graph : graphe que l’on souhaite tracer. Ce dernier peut être sous la forme d’une matrice,
d’un vecteur ou d’une chaîne de caractères.
Les paramètres de sortie : ∅
Exemple d’application : Cette fonction est utilisée sur tous les exemples d’application des méthodes. Vous pouvez donc vous y reporter si vous voulez avoir un exemple
d’utilisation.
50
sorted_profile
Prototype de la fonction :
1
function [ graphs_ord , list_ord ] = sorted_profile ( other_graphs ,
list_scores )
Cette fonction a pour but de classer les scores des graphes par ordre décroissant et
ensuite de tracer le profil des scores de chaque graphe en fonction de l’indice de celui-ci
une fois classé. Elle n’est utilisable qu’avec les résultats obtenus à partir des méthodes
ABiGlasso.
Les paramètres d’entrée :
other_graphs : liste de tous les graphes explorés non classée.
list_scores : liste des scores correspondants à tous les graphes explorés non classée.
Les paramètres de sortie :
graphs_ord : liste des graphes explorés classée par scores décroissants.
list_ord : liste des scores des graphes classée par ordre décroissant.
Remarque : Cette fonction est utile pour visionner la répartition des scores et voir s’il
y a vraiment un graphe qui s’impose ou s’il y a de nombreux graphes similaires en terme
de probabilité.
Exemple d’application : Un exemple possible d’application est de comparer les différentes variantes de l’Asymptotic Bayesian method initialized by Graphical Lasso. On trace
alors les différents profils de scores pour les variantes de la façon suivante :
1
3
5
7
9
11
13
% calcul des profils de scores
figure () ;
subplot (4 ,1 ,1) ;
[ graphs_ord_base , scores_ord_base ]= sorted_profile ( data_base . output
. results . other_graphs . graphs , data_base . output . results . other_graphs .
scores ) ;
title ( ’ profil ordonne des scores des 100 graphes les plus probables pour
la methode de base ( cf . graphs_ ord_ base ) ’) ;
subplot (4 ,1 ,2) ;
[ graphs_ord_lmax , scores_ord_lmax ]= sorted_profile ( data_lmax . output
. results . other_graphs . graphs , data_lmax . output . results . other_graphs .
scores ) ;
title ( ’ profil ordonne des scores des 100 graphes les plus probables pour
la methode lambda max ( cf . graphs_ ord_ lmax ) ’) ;
subplot (4 ,1 ,3) ;
[ graphs_ord_loop , scores_ord_loop ]= sorted_profile ( data_loop . output
. results . other_graphs . graphs , data_loop . output . results . other_graphs .
scores ) ;
title ( ’ profil ordonne des scores des 100 graphes les plus probables pour
la methode loop ( cf . graphs_ ord_ loop ) ’) ;
51
15
17
subplot (4 ,1 ,4) ;
[ graphs_ord_ri , scores_ord_ri ]= sorted_profile ( data_ri . output .
results . other_graphs . graphs , data_ri . output . results . other_graphs . scores
);
title ( ’ profil ordonne des scores des 100 graphes les plus probables pour
la methode RI ( cf . graphs_ ord_ ri ) ’) ;
On obtient alors la figure suivante :
Figure 3.2 – Figure obtenue pour comparer les profils de scores des 4 variantes d’ABiGlasso
On peut donc voir qu’il y a vraiment des graphes qui s’imposent par rapport aux autres
pour ce jeu de données et que beaucoup ont un score nul, et ce pour les quatre variantes.
52
3.2
Simulation d’un processus multivarié gaussien dont
la structure d’indépendance conditionnelle est connue
Dans cette partie, nous allons voir comment simuler un processus multivarié gaussien ayant
une structure d’indépendance conditionnelle connue afin de vérifier que nos méthodes sont
efficaces et nous redonnent bien la structure d’indépendance conditionnelle attendue. Pour
cela, nous avons mis en place deux fonctions permettant d’une part de simuler des matrices
théoriques (matrices de covariance, de corrélations, des corrélations partielles, de précision)
à partir d’une structure d’indépendance conditionnelle donnée, et d’autre part, de simuler
un processus multivarié gaussien à partir de la matrice de covariance théorique.
simu_data
Prototype de la fonction :
1
function [ X ] = simu_data (S , n )
Cette fonction a pour but de simuler un processus multivarié gaussien de n observations
à partir d’une matrice de covariance S. Ce processus est de moyenne nulle.
Les paramètres d’entrée :
S : matrice de covariance.
n : nombre d’observations / nombre d’échantillons de chaque variable.
Le paramètre de sortie :
X : processus multivarié gaussien (matrice de la forme n×p où p est le nombre de variables
du problème).
simu_mat
Prototype de la fonction :
1
function [K ,S ,C , Pi ] = simu_mat ( AdjMat , thresh )
Le but de cette fonction est de simuler la matrice de covariance théorique ainsi que la
matrice de concentration, de corrélation et des corrélations partielles suivant une certaine
structure d’indépendance conditionnelle que nous renseignons en paramètre (AdjMat).
Les paramètres d’entrée :
AdjMat : matrice donnant la structure de graphe à partir de laquelle on veut faire la
simulation de matrices.
thresh : valeur non nulle minimale en valeur absolue pour la corrélation partielle. Ce seuil
peut être fixé aléatoirement, mais on peut aussi calculer le seuil au-dessus duquel la
valeur de corrélation partielle est significativement non nulle en appliquant la fonction
significant_thresh.
53
Les paramètres de sortie :
K : matrice de concentration théorique.
S : matrice de covariance théorique.
C : matrice de corrélation théorique.
Pi : matrice des corrélations partielles théorique.
54
significant_thresh
Prototype de la fonction :
1
function pi_max = si gn if ica nt _t hre sh ( alpha ,n , p )
Cette fonction a pour objectif de donner le seuil au-dessus duquel une corrélation partielle (en valeur absolue) est considérée comme significativement non nulle.
Les paramètres d’entrée :
n : nombre d’observations / nombre d’échantillons de chaque variable.
p : nombre de variables.
paramètre facultatif : alpha : risque de faux positif. Par défaut la valeur est fixée à 0.01
Les paramètres de sortie :
pi_max : corrélation partielle minimale (en valeur absolue) pour laquelle la corrélation
partielle (en valeur absolue) est significativement non nulle.
Remarque : Cette fonction n’est pas appelée lors de la simulation des matrices à l’aide
de la fonction simu_mat mais peut cependant être utile pour trouver le seuil le mieux
adapté lors de la simulation de matrices avec la fonction simu_mat.
55
Exemple pour simuler un processus gaussien multivarié dont la
structure d’indépendance conditionnelle est connue
Pour simuler un processus multivarié gaussien dont la structure d’indépendance conditionnelle est connue, il faut appliquer les fonctions présentées précédemment. Il faut tout
d’abord commencer par créer un graphe représentant la structure d’indépendance conditionnelle que l’on souhaite, puis générer des matrices correspondant à ce graphe avec la
fonction simu_mat. Ensuite, à partir de ces matrices, il faut générer, avec la fonction
simu_data, un processus que nous allons alors pouvoir utiliser pour tester les méthodes.
Exemple :
1
% % on veut simuler un jeu de donnees avec 2000 observations
n = 2000; % nombre d ’ observations
3
5
7
% % creation du graphe de reference a partir duquel on simule un
jeu de donnees
graph_ref = [ 0 0 0 0 1 1; 0 0 1 1 0 0 ; 0 1 0 1 0 0 ; 0 1 1 0 1
0 ; 1 0 0 1 0 1 ; 1 0 0 0 1 0];
% % simulation des matrices
[~ , S ] = simu_mat ( graph_ref ,0.2) ; % on prendra thresh = 0.2 par
defaut
9
11
% % simulation d ’ un jeu de donnees
X = simu_data (S , n ) ;
Remarque : On peut également tracer le graphe de référence afin de pouvoir le comparer
au graphe estimé avec une des méthodes pour une vérification visuelle.
56
Bibliographie
[1] A. Costard. Estimation de la structure d ?indépendance conditionnelle d ?un réseau de
capteurs. Application à l ?imagerie médicale. PhD thesis, Université de Grenoble, 2014.
[2] H. Wang. Bayesian graphical lasso models and efficient posterior computation. Bayesian
Analysis, 7 :771–790, 2012.
[3] J. Friedman, T. Hastie, and R. Tibshirani. Sparse inverse covariance estimation with
the Graphical lasso. Biostatistics, 9 :432–441, 2008.
[4] S. Boyd, N. Parikh, E. Chu, B. Peleato, and J. Eckstein. Distributed optimization and
statistical learning via the alternating direction method of multipliers. Foundations
and Trends in Machine Learning, 3 :1–122, 2010.
[5] C. Giraud, S. Huet, and N. Verzelen. Graph selection with ggmselect. Statistical
Applications in Genetics and Molecular Biology, 11 :1544–6115, 2012.
[6] M. Drton and M.D. Perlman. A sinful approach to gaussian graphical model selection.
Journal of Stastical planning and inference, 138 :1179–1200, 2008.
[7] G. Marrelec and H. Benali. Asymptotic Bayesian structure learning using graph supports for Gaussian graphical models. Journal of Multivariate Analysis, 97 :1451–1466,
2006.
57