correction image

master
Ludovic CASTIGLIA 4 months ago
parent f9e642987f
commit c57a1c0ae2

@ -45,17 +45,17 @@
</br></br>
À l'initialisation, nous allons créer un espace orthonormé avec m dimension (le nombre de coordonner des exemples). Et nous allons remplir cet espace avec un certain nombre de sous-espace à déterminer en fonction des cas d'utilisations (ces espaces sont tous de tailles égaux et sont eux aussi orthonormé). Ensuite, lors de la phase d'entraînement, il suffit d'ajouter les points dans les différents sous-espaces en fonction de leurs coordonnées. Pour trouver le sous-espace si vos sous-espaces sont dans une liste, vous pouvez calculer l'index avec cette formule:<br/>
Soit t, la taille d'un sous-espace et nb, le nombre de sous-espace dans une dimension:
<img src="./rapport/formuleIdx.png"/><br/>
</br><img src="./rapport/formuleIdx.png"/><br/>
Dans le cas de ce programme, les sous-espaces sont stockés dans un tenseur et les coordonnées du sous-espace d'un point sont données par la division euclidienne de toutes les coordonnées du point par t.
</br></br>
Une fois toutes les données ajoutées dans le modèle, il est temps de lui demander la valeur de nouveau point. Pour cela, l'algorithme va trouver dans quel sous-espace le point serait, s'il existait dans sa mémoire. Puis il vérifie s'il a assez de points dans ce sous-espace dans une distance (dont on parlera plus tard). Si c'est le cas alors il calcule les distances avec ces points et il retourne les n plus faibles. Sinon on trouve les sous-espaces à proximité et on recommence jusqu'à avoir assez de points. Cela permet de grandement réduire le nombre de calcul de distance entre points pour trouver les n points les plus proches.
<br/></br>
Concernant la distance, elle est calculée en fonction des coordonnées du point que l'on veut deviner, de la taille du sous-espace et en fonction de son centre. Cette distance doit être la plus grande possible (pour capter le plus de point) tout en ne sortant en aucun point du sous-espace (pour être sûr de réellement trouver les points les plus proches). Cette distance peut être calculée de la façon suivante:</br>
<image src="./rapport/rayon.png"/>
<image src="./rapport/rayon.png"/></br>
<i>dist = t/2 - max(ABx,ABy) + t * nbSousEspaceAutour</i></br>
À noter que c'est un exemple en 2d, le même calcule peut-être généralisé pour un nombre m de dimension.<br/>
Dans le cas de ce programme, je n'ai pas utilisé cette distance à la place, j'ai utilisé cette formule qui me garantis de ne jamais sortir de l'espace et qui est plus simple à calculer:
<image src="./rapport/rayon2.png"></br>
</br><image src="./rapport/rayon2.png"></br>
<i>dist = t * nbSousEspaceAutour</i>
</br><br/>
Je vais maintenant vous expliquer l'algorithme qui me permet de trouver les sous-espaces autour d'un sous-espace. On appelle une fonction <i>findCoordAround</i> qui vas appeler <i>getCoordDifférente</i> pour tous les nombres entre 0 et la distance des sous-espaces autour. <i>getCoordDifférente</i> quant à elle, va appeler <i>getCompletVariationOfCoord</i> pour tout tableau de coordonner avec pour valeurs que des valeurs unique entre -la distance autour et +la distance autour. <i>getCompletVariationOfCoord</i> va appeler <i>getPermutationOfCoord</i> pour toutes les coordonnées qui possède les coordonners passé en paramètre puis comble les coordonners avec les valeurs ordonnées de ses coordonners. Enfin <i>getPermutationOfCoord</i> vas ajouter dans une liste de sous-espaces toutes les permutations des coordonners passé en entrée.

Loading…
Cancel
Save