• Aucun résultat trouvé

2.8 Conclusions

3.1.5 Les Algorithmes

Nous confrontons notre méthode à 5 autres algorithmes. Ces autres algorithmes sont disponibles dans la librairieigraph [98], disponibles en python, R et C. Cette bibliothèque numérique a une bonne visibilité, et est largement utilisée par les acteurs de la détection de communautés, d’où ce choix. Dans la suite, nous détaillons succinctement les algorithmes auxquels nous nous sommes confrontés.

Leading Eigenvector (LE)

Il s’agit d’un algorithme proposé par Newman dans [32], qui cherche à optimiser la mesure de modularité d’un graphe via le vecteur propre dominant d’une matrice qui dépend à la fois du graphe et de la modularité.

Dans les faits, pour un réseau G = (V, E) donné, |V | = n, |E| = m, on crée une matrice B, telle que :

B = A − P

avec A la matrice d’adjacence du graphe, et P telle que :

Pi,j =

didj

2m,

di étant le degré du noeud i. Cette matrice P est la matrice de probabilité qu’une arête

existe entre i et j dans le graphe s’il ne possède aucune structure en communautés. L’intérêt de la matrice B est qu’elle permet d’exprimer sous forme matricielle la modularité de ce graphe dans le cas d’une bipartition : si l’on note s le vecteur caractérisant une bipartition, c’est-à-dire un partitionnement à deux classes – appelons-les C1 et C2é–, en ayant s sous la forme :

s(i) = 

1 si i ∈ C1 −1 si i ∈ C2

alors la mesure de modularité de cette bipartition s’écrit simplement en fonction de B :

Q = 1

4ms

TBs.

Le but de Newman est donc de résoudre      argmax s∈Rn 1 4ms TBs s.t. ∀i ∈ {1, ..., n}, s(i) ∈ {−1, 1}

Si l’on enlève la contrainte sur les coordonnées de s, le vecteur qui maximise cette équation est le vecteur propre associé à la plus grande valeur propre de B. Et on obtient le vecteur ne possédant que des 1 et des -1 qui approche au plus ce vecteur propre en appliquant la fonction “signe” au-dit vecteur propre. L’algorithme qui en découle est donné par l’Algorithme 4. La définition de la fonction bipart est précisée dans l’Algorithme 5.

Algorithm 4: :Leading Eigenvector Algorithm Data: A ∈ Rn×n une matrice d’adjacence. Result: C une partition de {1...n}.

begin

Calculer B;

return C = bipart(B); end

Les matrices BC1 et BC2 de l’Algorithme 5 sont définies de la manière suivante : Soit C ⊂ V une classe de cardinal nC, alors la matrice BC ∈ RnC×nC est

∀i, j ∈ C, BCi,j = Bi,j − δ(i, j)

X

t∈C

Bi,t

avec δ(i, j) le symbole de Kröenecker (=1 si i = j, 0 sinon).

Cette matrice permet de calculer le gain de modularité obtenu pour une bipartition de C dans le graphe total.

Pour résumer en quelques mots, il s’agit d’un algorithme récursif qui cherche à optimiser la modularité d’une bipartition via une approche spectrale.

Louvain (LV)

Cet algorithme, que nous avons déjà rencontré Section 1.3, est expliqué en détails dans l’article [29]. Pour rappel, étant donné un graphe G = (V, E) l’algorithme de Louvain

Algorithm 5: :Fonction récursive bipart Data: B ∈ Rn×n une matrice symétrique. Result: C une partition de {1...n}. begin

v ← vecteur propre dominant de B; C1 ← {i : v(i) ≥ 0}; C2 ← {i : v(i) < 0}; s ← e ∈ Rn; s(C2) ← −1; ∆ ← sTBs; if ∆ ≤ 0 then return C = {C1∪ C2}; else

return C = {bipart(BC1), bipart(BC2)}; end

end

démarre avec comme point de départ la structure triviale ayant une communauté par noeud. Ensuite, l’algorithme fonctionne comme suit :

— Pour chaque noeud, on trouve la communauté telle que l’ajout de ce noeud dans cette communauté va augmenter le plus la mesure de modularité. On s’arrête lorsque la situation est stable, c’est-à-dire que pour chaque noeud, la communauté à laquelle il appartient est la meilleure possible en terme de modularité.

— On crée alors un méta-graphe : dans ce nouveau graphe, chaque communauté du graphe initial devient un méta-noeud, les arêtes à l’intérieur d’une même com- munauté deviennent des “self-loop” –id est des arêtes ayant le même sommet à ses deux extrémités – de poids égal à la somme des poids des arêtes internes à la communautés, et les arêtes inter-communauté sont sommées – c’est-à-dire que s’il existe deux arêtes de poids 1 entre la communauté C1 et la communauté C2, on

aura dans le nouveau graphe une arête de poids 2 entre les noeuds C1 et C2.

— On réapplique le processus précédent à ce méta-graphe, etc.

Le processus s’arrête naturellement lorsque le méta-graphe passé en entrée du processus est tel que la meilleure configuration est la structure en communautés ayant une communauté par méta-noeud.

Fast&Greedy (FG)

Il s’agit de l’Algorithme 1 introduit Section 1.2.2. Pour rappel, il s’agit d’un processus qui fusionne les communautés en cherchant à maximiser la mesure de modularité de Newman et Girvan. Cet algorithme part du point de départ où chaque élément est une communauté. Il est dit “fast" car il s’agit d’une version optimisée (les détails concernant ces optimisations sont développés dans [63]) permettant un calcul très efficace de l’algorithme initial “greedy" – glouton.

Edge Betweenness (EB)

Il s’agit d’un algorithme de hiérarchisation ascendant développé dans [42], basé sur une mesure de centralité des arêtes. Cette centralité est calculée comme suit :

Pour tous les couples de sommets dans le graphe, on trouve le(s) plus court(s) chemin(s) de l’un à l’autre. Si k est le nombre de plus courts chemins entre les deux sommets, on attribue le poids de k1 à toutes les arêtes d’un même chemin. Ainsi, chaque arête possède un poids par plus court chemin. La mesure de centralité d’une arête est alors la somme de ces poids. Un exemple est donné à la Figure 3.1.

L’algorithme du Edge Betweenness permet de construire un dendrogramme de la façon suivante :

— On crée le graphe réduit correspondant au graphe de base dans lequel on a supprimé l’arête ayant la plus forte centralité.

— On calcule la centralité des arêtes dans ce graphe réduit. — On répète jusqu’à ce qu’il n’y ai plus d’arêtes

On construit le dendrogramme en partant de la situation où chaque noeud est une communauté, puis en mettant d’abord en relation les deux sommets liés par la dernière arête supprimée, puis les deux sommets ou groupes de sommets liés par l’avant dernière arête supprimée, etc. et ce jusqu’à mettre en relation les groupes de sommets liés par la première arête supprimée.

Pour choisir le niveau du dendrogramme qui va définir la structure en communautés, on calcule la modularité de Newman des structures correspondant à chaque niveau, et on renvoie celle qui a la plus forte modularité.

Walktrap (WT)

L’idée directrice de cet algorithme, présenté dans [2], est d’utiliser les marches aléatoires pour détecter les communautés. Si au cours d’une marche aléatoire on se retrouve sur

l’un ou l’autre des sommets d’une même communauté, cela ne doit pas fondamentalement changer la suite de la marche, car des sommets d’une même communauté doivent avoir à peu près la même “vision” du reste du graphe. Cette “vision” est explicitée par une matrice de transition. Plus concrètement, en notant A la matrice d’adjacence, D la matrice des degrés, et P la matrice de transition du graphe telle que P = D−1A, les auteurs s’intéressent à la matrice de transition après un temps t suffisamment long pour contenir suffisamment d’information sur le graphe, mais suffisamment court pour que Pt ne soit pas impactée par le fait qu’à l’infini, la probabilité de se trouver sur un sommet i ne dépend que du degré de i. Les auteurs choisissent par défaut t = 4.

A partir de cette matrice Pt, les auteurs définissent une distance entre les sommets. Ils traduisent le postulat stipulant que “si deux sommets appartiennent à la même communauté, ils ont la même vision du reste du graphe” par le fait que les deux lignes correspondant à ces sommets dans Ptdoivent être proches. Ils définissent donc la distance

Figure 3.1 : Calcul des mesures de centralité des 5 arêtes du graphe. Dans les dix figures ayant deux sommets en rouge, on affiche le poids des arêtes lié au(x) plus court(s) chemin(s) existant entre les deux sommets en rouge. par exemple, dans la figure colonne 1 ligne 2, on calcule les poids liés aux plus courts chemins entre a et e. Il existe deux plus courts chemins entre ces sommets, on va donc attribuer un poids de 1/2 aux arêtes dans chacun de ces chemins. L’arête (a,b) apparaissant dans les deux chemins, elle a un poids de 2 × 1/2 = 1. Dans la figure colonne 4 ligne 3, on affiche les centralité des arêtes, obtenues en sommant tous les poids.

entre deux sommets i et j de la manière suivante : r(i, j) = v u u t n X k=1 (Pt i,k− Ptj,k)2 D(k, k) .

Cette distance est, selon eux, d’autant plus faible que les sommets appartiennent à la même communauté. Ils étendent ensuite cette distance aux groupes de sommets de manière directe, en définissant pour un groupe de sommets C la valeur PtC,j = 1

|C| X

i∈C

Pti,j. Cette distance leur permet de définir une mesure de qualité d’un partitionnement C = {C1, ..., Cp} d’un ensemble V = {1, ..., n} : σ = 1 n X C∈C X i∈C r(i, C)2

Une fois tous ces objets définis, il ne reste plus qu’à appliquer l’algorithme à proprement parler. Il s’agit d’un algorithme de hiérarchisation ascendante. On part du partionnement possédant une classe par noeud, puis on fusionne itérativement les classes dont la fusion diminue le plus la mesure σ, jusqu’à ce que tous les éléments soient dans la même classe. Cette technique va aboutir en un dendrogramme, et comme pour l’algorithme du Edge Betweenness, on va retourner le partitionnement correspondant au niveau du dendrogramme qui maximise la modularité de Newman.