• Aucun résultat trouvé

Partie IV. Implémentation logicielle

7.3 Réflexions sur les fichiers de données et de résultats

Les fichiers de données. Lorsque nous avons commencé à programmer le calcul de chirotopes, nous avons choisi d’utiliser notre propre format. Les fichiers n’étaient alors composés presque ex- clusivement que des coordonnées des points. Ce format était simple à utiliser aussi bien pour la création des fichiers que pour leur lecture par un programme informatique. Cependant, nous nous sommes aperçus lors de l’utilisation pratique que des informations importantes n’étaient pas pré- sentes dans ces fichier, telles que les identifiants des différents échantillons ou les compositions des classes des experts. Nous avons alors décidé d’utiliser un format employé dans la communauté des morphométriciens qui est celui de Morphologika. Ce format est à la fois facile d’utilisation et contient toutes les informations dont nous avons besoin.

Les fichiers de résultats. Dans un premier temps, nous avons choisi d’utiliser un fichier de résul- tat par échantillon où chaque ligne correspondait à un (d+1)-uplet de points. Sur chaque ligne nous

7.3. RÉFLEXIONS SUR LES FICHIERS DE DONNÉES ET DE RÉSULTATS 139

indiquions les indices des d +1 points suivi du signe du (d+1)-uplet. Chaque fichier était donc com- posé de¡ n

d +1¢ lignes. Ce format était pratique pour tester les programmes sur des jeux de données

composés de peu d’échantillons constitués de peu de points.

Comme nos jeux de données réels étaient composés de centaines d’échantillons, nous avons alors choisi de rassembler les chirotopes de tous les échantillons dans un seul fichier. Chaque ligne correspond à un échantillon et contient le chirotope de l’échantillon sous forme d’un vecteur. Ainsi chaque ligne est composée de¡ n

d +1¢ signes séparés par des espaces pour rendre la lecture du fichier

plus simple. En particulier, ce format est pratique pour déterminer visuellement si un (d +1)-uplet est fixe puisque dans ce cas là, tous les signes de la colonne correspondant à ce (d +1)-uplet sont égaux.

Par contre, notre dernier jeu de données est composé de 60 échantillons avec 133 landmarks par échantillon. Le fichier est alors composée de 60 lignes chacune contenant¡133

4 ¢ = 12 457 445 signes. Ainsi pour ces données, le fichier résultat contenant les chirotopes est composé de 60·¡133

4 ¢ signes et pèse environ 1,4 Go. En plus du problème de stockage du fichier, la lecture d’un fichier aussi lourd par un programme informatique demande du temps et de la place en mémoire. Pour diminuer la taille du fichier on aurait pu trouver un codage permettant de diminuer le nombre de caractères à utiliser, mais un tel codage n’aurait pas permis de diminuer à la fois le temps pour la lecture du fichier et l’espace occupée sur la mémoire vive. Or nous avons remarqué qu’en pratique, la ma- jorité des (d +1)-uplets sont fixes. Nous avons alors décidé de stocker l’ensemble des chirotopes en utilisant trois fichiers. Le premier fichier indique si un (d +1)-uplet est fixe ou non en stockant une valeur 0 ou 1 pour chaque (d +1)-uplet. Le deuxième fichier permet de stocker les signes des (d +1)-uplets fixes. Comme un (d +1)-uplet est fixe si le signe de cet uplet est le même pour chaque échantillon, il suffit de stocker un seul signe par (d +1)-uplet fixe. Le troisième fichier sert à stocker les (d +1)-uplets non-fixes et est le seul à contenir autant de lignes que d’échantillons. Avec ce sys- tème, nous obtenons un premier fichier qui pèse environ 24 Mo (il y a 9 781 446 (d+1)-uplets fixes), un deuxième fichier qui pèse environ 19 Mo et un troisième fichier ne pesant plus qu’environ 306 Mo. Ainsi on diminue par près de cinq la place occupée en mémoire. De plus, les calculs des pro- grammes sont bien plus rapides puisqu’ils ne se font que sur les (d +1)-uplets non-fixes et n’utilise en fait que le troisième fichier.

Il est important de noter que le calcul des chirotopes n’est pas ralenti par ce système de stockage en trois fichiers puisqu’il est possible de savoir si un (d +1)-uplet est fixe ou non pendant le calcul des chirotopes. En effet, lors du calcul du chirotope du premier échantillon, on stocke en mémoire le chirotope du premier échantillon et une valeur binaire égale à “Vrai” pour chaque (d +1)-uplet. Ensuite pour chaque autre échantillon, après le calcul du signe d’un (d +1)-uplet, on compare ce signe avec celui du premier échantillon. Si les signes sont différents, on affecte la valeur “Faux” à la variable binaire correspondant à ce (d +1)-uplet. A la fin des calculs des chirotopes, ces variables binaires nous permettent de remplir le premier des trois fichiers et nous permettent de déterminer simplement dans quel fichier doivent être stockés les signes.

CHAPITRE

8

Implémentation du reste de la

méthode

8.1 Calcul de l’ensemble des bases fixes issues d’ordres sur les

coordonnées des points

Dans cette section, nous allons présenter le programme permettant de calculer l’ensemble des bases fixes issues d’ordres sur les coordonnées des points.

Dans le Chapitre 3, nous avons trouvé une caractérisation (Théorèmes 3.10 et 3.11) des confi- guration d’ordres fixes de trois ordres totaux. Nous avons également prouvé dans la Proposition 3.3 qu’en étudiant les extensions linéaires d’une configuration d’ordres, nous pouvions déterminer si la configuration d’ordres est fixe ou non.

Nous allons reprendre l’exemple que nous avons utilisé dans la Section 3.1.2. On considère un jeu de données composé de dix landmarks anatomiques 3D relevés par des experts sur 305 crânes (voir Figure 8.1). Ces points sont pris dans un repère où l’axe~x va de la droite du crâne vers la gauche, l’axe~y va de la base du crâne vers le sommet du crâne et l’axe ~z va de l’avant du crâne vers l’arrière du crâne. Comme ces landmarks proviennent de crânes, nous pouvons définir des relations anatomiques qui vont se modéliser par des relations d’ordre sur les coordonnées des landmarks.

Les configurations d’ordres sont représentés sur les Figures 8.2 et 8.3. En prennant par exemple E = {1,5,9,10}, nous obtenons alors la configuration d’ordres suivante.

9 <x1 <x10 et 9 <x5 <x10

5 <y9 <y1 et 5 <y10 <y1

1 <z9 et 1 <z10 et 5 <z9 et 5 <z10

Nous avons vu dans la Section 3.1.2 que cette configuration d’ordres est fixe, ce qui signifie que pour ce jeu de données le quadruplet de landmarks {1, 5, 9, 10} forme une base fixe.

Notre objectif est alors d’écrire un programme qui à partir de trois relations ordres <x, <y et

<z sur {1, . . . , n}, permet de calculer toutes les configurations fixes de trois ordres sur des sous-

ensembles de taille quatre de {1, . . . , n} qui respectent ces relations. 141

FIGURE8.1 – Position des 10 landmarks

8

9

y

x

1

2

4

10

3

7

5

6

FIGURE8.2 – Représentation des ordres sur une

vue de face

2

y

z

8

5

9

4

3

10

1

6

7

FIGURE8.3 – Représentation des ordres sur une

vue de profil

Nous avons choisi de représenter chaque relation d’ordre par une matrice de taille n × n. Nous noterons respectivement Rx, Ry et Rzles matrices des relations <x, <y et <zsur {1, . . . , n}. On code

la relation <xde la façon suivante : pour tout (i , j ) ∈ {1,...,n}2si i <x j alors Rx(i , j ) est égal à 1 et si

j <xi alors Rx(i , j ) est égal à -1. Si par contre i et j ne sont pas comparables par relation d’ordre <x

et que i 6= j , alors Rx(i , j ) est égal à 0. On procède de la même façon pour construire les deux autres

matrices Ry et Rz. Pour chaque relation d’ordre, la matrice est donc symétrique. Ainsi, la relation

d’ordre est codée entièrement sur la partie triangulaire inférieure (ou triangulaire supérieure) de la matrice.

Pour tout sous-ensembleE de de taille quatre de {1,...,n}, le premier ordre de la configuration C sur E est codé par la sous-matrice carrée RC

x de Rx de taille 4 × 4 dont les lignes et les colonnes

correspondent aux éléments deE . En procédant de la même façon pour les relations <y et <z, on

obtient un codage de chaque configuration de trois ordres sur des sous-ensembles de taille quatre de {1, . . . , n} qui respectent les relations <x, <yet <zpar trois matrices RCx , RCy et RzC de taille 4 × 4.

8.1. CALCUL DE L’ENSEMBLE DES BASES FIXES ISSUES D’ORDRES SUR LES COORDONNÉES

DES POINTS 143

Exemple. On noteD la configuration sur {1,2,7,9} en utilisant les relations d’ordre donnée pré- cédemment.D est égale à la configuration

9 <x1 <x2 et 7 <x1 <x2 7 <y9 <y1 et 7 <y9 <y2 1 <z7 <z9 et 2 <z7 <z9 On obtient alors : RxD=      2 −1 1 1 1 2 1 1 −1 −1 2 0 −1 −1 0 2      RyD=      2 0 1 1 0 2 1 1 −1 −1 2 −1 −1 −1 1 2      RDz =      2 0 −1 −1 0 2 −1 −1 1 1 2 −1 1 1 1 2     

D’après la Proposition 3.3, une configuration est non-fixe si et seulement si il existe une exten- sion linéaire de cette configuration qui est non-fixe. Ainsi nous allons calculer toutes les extensions linéaires jusqu’à ce qu’on en trouve une qui soit non-fixe.

Pour calculer les extensions linéaires d’une configurationC sur E , on remplace récursivement dans chacune des matrices RCx , RCy et RCz , chaque valeur égale à 0 par la valeur 1 puis par la valeur -1, à condition que ce remplacement respecte l’inégalité triangulaire. Plus précisément, pour tout couple (i , j ) ∈ E2, si la valeur RxC(i , j ) vaut zéro cela signifie que i et j ne sont pas comparable dans <x restreint àE . Lorsque l’on souhaite remplacer la valeur de RxC(i , j ) par la valeur 1, on souhaite

rajouter dans <xrestreint àE la relation i <x j . En rajoutant cette condition il faut veiller à ce que

l’inégalité triangulaire ne soit pas violée, c’est-à-dire qu’il n’existe pas d’élément k deE tel que

k <xi et j <xk. Avant de remplacer la valeur de RxC(i , j ) par la valeur 1, il faut donc vérifier qu’il

n’existe pas d’élément k deE tel que RxC(k, i ) = 1 et RxC(k, j ) = −1.

Exemple. En remplaçant les 0 par des 1 ou des -1 en respectant l’inégalité triangulaire, on obtient par exemple les matrices suivantes :

     2 −1 1 1 1 2 1 1 −1 −1 2 −1 −1 −1 1 2           2 1 1 1 −1 2 1 1 −1 −1 2 −1 −1 −1 1 2           2 −1 −1 −1 1 2 −1 −1 1 1 2 −1 1 1 1 2     

Ces matrices correspondent à l’extension linéaire de la configuration d’ordresD sur {1,2,7,9} suivante :

7 <x9 <x1 <x2

7 <y9 <y2 <y1

1 <z2 <z7 <z9

Il ne nous reste plus qu’à voir comment déterminer si une extension linéaire est fixe ou non-fixe. Pour cela on se base sur le Théorème 3.11. Celui-ci nous indique qu’une extension linéaire surE est non-fixe si et seulement si il existe un ordre <iparmi les ordres <x, <yet <z et un élément e ∈ E

tels que e soit extrémal de <irestreint àE et que les deux autres ordres restreint à E \e forment une

de deux ordres totaux sur un ensembleE0de taille trois est non-fixe si et seulement si il existe un élément deE0qui n’est extrémal dans aucun des deux ordres. Cela revient à tester s’il existe un ordre <iparmi les ordres <x, <y et <z, un élément e ∈ E extrémal de <i restreint àE et un élément a de

E \ e tels que a ne soit extrémal dans aucun des deux autres ordres restreint à E \ e.

Exemple. Dans cette extension linéaire, on a l’élément 7 qui est extrémal (minimal en l’occur- rence) dans l’ordre <x restreint à {1, 2, 7, 9}. Or les restrictions de <y et <z à {1, 2, 9} = {1,2,7,9} \ 7

sont égales à 9 <y2 <y1 et 1 <z2 <z9. L’élément 2 n’est extrémal dans aucune de ces deux restric-

tions, ainsi la configuration linéaireD est non-fixe.

8.2 Caractérisation forte de classes

Dans la Section 6.2.2, nous avons vu que pour obtenir une discrimination forte d’une classe, nous commençons par trier les (d +1)-uplets de points selon leur taux de discriminabilité, puis nous cherchons des paramètres pour discriminer cette classe et son complémentaire, chacun sous forme d’une “boule”. Plus précisément, pour obtenir une discrimination forte d’une classe nous cherchons un sous-ensemble de (d +1)-uplets de points D (le plus petit possible pour plus de sim- plicité), un entier q strictement supérieur à la moitié de la taille deD (le “rayon des deux boules” est alors égal à #D − q) et deux listes d’ensembles de signes T et T (“centres des boules”).

Or dans la Section 6.5, nous avons expliqué que nous calculons les paramètres d’une carac- térisation forte du couple (C ,C ) à partir d’une matrice binaire A. La liste d’ensembles de signes

T est fixée avant de calculer cette matrice binaire. Chaque ligne de cette matrice correspond à un

(d+1)-uplet B de B(E ) et chaque colonne correspond à un chirotope χ de M . Dans cette matrice, le coefficient correspondant au (d+1)-uplet B et au chirotope χ (noté Aχ,B) est égal à 1 si et seulement si le chirotopeχ serait mal classé par notre méthode en prenant D = {B}.

La recherche des paramètres d’une caractérisation forte du couple (C ,C ) revient à chercher sous-ensemble de lignesD tel que la somme des coefficients de ces lignes soit strictement infé- rieure à #D/2 pour chaque colonne. Si on trouve un tel sous-ensemble de lignes, en notant max le maximum des sommes des colonnes, on prend alors q = #D − max. On rappelle que la liste T s’obtient en prenant pour chaque (d+1)-uplet B de D le complémentaire de T (B) (c’est-à-dire pour tout B ∈ D, T (B) = {−,0,+}\T (B)).

Pour facilité la recherche des paramètres, on réduit le nombre de lignes de la matrice A en se restreignant aux (d+1)-uplets dont le taux de discriminabilité est supérieur à une certaine valeur de seuil (généralement fixé à 0,7). En effet, les (d +1)-uplets dont le taux de discriminabilité est faible correspondent dans la matrice à des lignes constituées de nombreuses valeurs égales à 1. De plus, on ordonne les lignes restante de la matrice A selon le taux de discriminabilité des (d +1)-uplets par ordre décroissant. On ordonne également des colonnes de la matrice selon le nombre de 1 que contiennent les colonnes par ordre décroissant.

Comme le maximum des sommes des colonnes max est strictement inférieur à #D/2, si #D = 2k − 1 la plus grande valeur que peut prendre max est k − 1 et si #D = 2k la plus grande valeur que peut prendre max est également k − 1. On se contente alors de tester les ensembles de lignes de taille impaire. On cherche un ensembleD le plus petit possible donc on va tester les ensembles par