From 4dc669162899194691d9e24723de7f3ff7607193 Mon Sep 17 00:00:00 2001 From: ExtraDev <scott.birner@gmail.com> Date: Sun, 12 Dec 2021 18:20:36 +0100 Subject: [PATCH] =?UTF-8?q?Pr=C3=A9pration=20du=20rendu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 ++- readme.md | 42 +++++++++--------- src/C/descente_radiant | Bin 186840 -> 186840 bytes src/C/equation.c | 5 +++ src/C/equation.h | 5 +++ src/C/group.c | 4 ++ src/C/group.h | 5 +++ src/C/main.c | 9 ++++ src/Python/{display.py => meilleur_droite.py} | 0 .../{plot_groups.py => validation_croisee.py} | 0 src/droite_nuage_0_1_A.vec | Bin 14 -> 14 bytes src/droite_nuage_0_1_B.vec | Bin 14 -> 14 bytes src/droite_nuage_0_2_A.vec | Bin 14 -> 14 bytes src/droite_nuage_0_2_B.vec | Bin 14 -> 14 bytes src/droite_nuage_1_2_A.vec | Bin 14 -> 14 bytes src/droite_nuage_1_2_B.vec | Bin 14 -> 14 bytes src/droite_nuage_complet_A.vec | Bin 14 -> 14 bytes src/droite_nuage_complet_B.vec | Bin 14 -> 14 bytes src/points_Y.vec | Bin 246 -> 246 bytes 19 files changed, 52 insertions(+), 23 deletions(-) rename src/Python/{display.py => meilleur_droite.py} (100%) rename src/Python/{plot_groups.py => validation_croisee.py} (100%) diff --git a/.gitignore b/.gitignore index cd660cb..39823a7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ *.pdf *.o -*.out \ No newline at end of file +*.out +*.vec +__pycache__/ +.vscode \ No newline at end of file diff --git a/readme.md b/readme.md index 59ff6c8..0e40519 100644 --- a/readme.md +++ b/readme.md @@ -12,7 +12,7 @@ Dans le cadre du cours de mathématiques en technologie de l’information nous En effet, le but est de mettre en pratique les connaissances acquises durant le premier semestre 2021 qui portait sur les fonctions, dérivées, minimum et maximum d'une fonction et optimisation de celles-ci. -Plus précisément, notre objectif dans ce travail est de trouver la meilleur droite passant par un nuage de point(x,y) généré de manière pseudo aléatoire sur un plan 2D. +Plus précisément, notre objectif dans ce travail est de trouver la meilleure droite passant par un nuage de point(x,y) généré de manière pseudo aléatoire sur un plan 2D. Ci-dessous un exemple du résultat attendu: @@ -21,11 +21,11 @@ Ci-dessous un exemple du résultat attendu: # Solution analytique ## Minimisation de la fonction de coût -En premier lieux, nous avons cherchons à minimiser la fonction de coût (Erreur quadratique): +En premier lieux, nous avons cherché à minimiser la fonction de coût (Erreur quadratique): E(a,b) = $\sum_{j=1}^N (a * x_{j} + b - y_{j})^2$ -En résolvant le système de deux équations à deux inconnues. Ce sont avec ces équations que nous allons pouvoir réaliser notre solutions numérique. +En résolvant le système de deux équations à deux inconnues. Ce sont avec ces équations que nous allons pouvoir réaliser notre solution numérique. Nous allons d'abord chercher la dérivée en **a** et en **b** de la fonction de cout. @@ -41,9 +41,9 @@ a : $\sum{({ax_{j}}^2 + bx_{j} - x_{j}y_{j})} = a\sum{{x_{j}}^2} + b\sum{x_{j}} b : $\sum{(ax_{j} + b_{j} - y_{j})} = a\sum{x_{j}} + \sum{}b\ - \sum{y_{j}} = a\sum{x_{j}} + Nb - \sum{y_{j}} = 0$ -Afin d'obtenir une formule **a** et **b** ayant que des constantes en paramètre (nos sommes de points), il faut résoudre ce sytème à deux equations. +Afin d'obtenir une formule **a** et **b** ayant que des constantes en paramètre (nos sommes de points), il faut résoudre ce système à deux équations. -Pour nous symplifier dans l'écriture des fonctions et par la suite dans notre code, on va définir les sommes par des variables: +Pour nous simplifier dans l'écriture des fonctions et par la suite dans notre code, on va définir les sommes par des variables: $A = \sum{{x_{j}}^2}$ @@ -85,7 +85,7 @@ $a = \frac{-BD + CN}{AN - {B}^2}$ $a = \frac{CN - BD}{AN - {B}^2}$ -On a alors obtenu **a**, il nous reste plus qu'a l'insérer dans la formule de **b**, pour obtenir **b** sans variable. +On a alors obtenu **a**, il nous reste plus qu'à l'insérer dans la formule de **b**, pour obtenir **b** sans variable. On obtient: @@ -94,16 +94,16 @@ $b = -a\frac{B}{N} + \frac{D}{N} = -(\frac{CN - BD}{AN - {B}^2})\frac{B}{N} + \ $b = -(\frac{CNB - {B^2}D}{{AN^2} - {B^2}N}) + \frac{D}{N}$ ## Vérifications -On peux tester nos deux formules dans un excel par exemple pour s'assurer de la justesse des transformation. +On peut tester nos deux formules dans un tableur pour s'assurer de la justesse des transformations. -On vas donc génerer un nuage de points suivant une droite, puis calculer nos deux formules en rentrant comme paramètre les differentes sommes de points. +On va donc générer un nuage de points suivant une droite, puis calculer nos deux formules en rentrant comme paramètre les differentes sommes de points. -ce qui vas nous donner un premier resultat (Solution analitique a et b) que l'on peut comparer avec l'équation de la courbe de tendance lineaire calculée par excel. +ce qui va nous donner un premier résultat (Solution analytique a et b) que l'on peut comparer avec l'équation de la courbe de tendance linéaire calculée par le tableur.  -On compart donc que les deux resultats sont identiques sur la base d'affichage des nombres a virgules obtenu. -De cette façon, nous avons pû confirmer la qualité de nos calculs, mais aussi de s'avoir à quoi s'attendre en therme de résultat par la suite. +On compare donc que les deux résultats sont identiques sur la base d'affichage des nombres a virgules obtenu. +De cette façon, nous avons pu confirmer la qualité de nos calculs, mais aussi savoir à quoi s'attendre en terme de résultat par la suite. À partir de ce moment là, on en a déduit que les équations obtenues en **A** et **B** sont correcte. @@ -117,7 +117,7 @@ Nous parlons de points pseudo aléatoire car, ils sont en réalité générés a En effet, de cette façon on s'assure que la droite que nous souhaitons retrouver ressemble à celle qui a permis de générer les points aléatoire... ## Descente de gradient -Pour trouver la meilleure droite passant par le nuage de points, nous devont appliquer la descente de gradient. En effet, c'est cette formule qui nous permettra de retrouver l'ordonnée à l'origine ainsi que la pente de la meilleur droite. +Pour trouver la meilleure droite passant par le nuage de points, nous devons appliquer la descente de gradient. En effet, c'est cette formule qui nous permettra de retrouver l'ordonnée à l'origine ainsi que la pente de la meilleure droite. Sur notre nuage de points nous avons appliqué la formule suivante : @@ -143,23 +143,21 @@ $\lambda$ = 0,001 N = Nombre de point -Et nous nous sommes arrêté quand le $\epsilon$ était inférieur à 0.001 ce qui représente environ 385 itération sur 30 points. - ## Validation du modèle de régression -La validation croisée consiste à valider la descente de dradient de notre droite sur plusieurs échantillons de données. +La validation croisée consiste à valider la descente de gradient de notre droite sur plusieurs échantillons de données. -Il a donc fallu en premier temps séparer de manière aléatoire notre nuage de points en trois groupes distincts. Par la suite, le calcule de la descente du gradient est appliqué sur chacun des groupe. Le but de cette opération est de retrouvé dans chacun des groupes des droites similaires à celle trouvée au départ avec le nuage complet. Cela a pour but de valider nos résultats! +Il a donc fallu dans un premier temps séparer de manière aléatoire notre nuage de points en trois groupes distincts. Par la suite, le calcule de la descente du gradient est appliqué sur chacun des groupe. Le but de cette opération est de retrouvé dans chacun des groupes des droites similaires à celle trouvée au départ avec le nuage complet. {width=400px} ## Erreur quadratique -L'erreur quadratique va nous donner un indice de précision dans le calcul de la descente de gradient. Plus la valeur de l'erreur quadratique est petite, mieux c'est. +L'erreur quadratique va nous donner un indice de précision dans le calcul de la descente de gradient. Plus la valeur de l’erreur quadratique est petite plus grande est la précision. En voici la formule : E(a,b) = $\sum_{j=1}^N (a * x_{j} + b - y_{j})^2$ # Résultats -Comme nous avons pu le voir dans les figures précédentes, nous avons obtenu des résultats concluents. J'entends pas là que aussi bien la droite obtenue sur la descente de gradient avec le nuage complet **et** les droits obtenues sur la validation croisée se ressemble et semblent juste au niveau de nos nuage de points. +Comme nous avons pu le voir dans les figures précédentes, nous avons obtenu des résultats concluants. J'entends par là qu'aussi bien la droite obtenue sur la descente de gradient avec le nuage complet **et** les droites obtenues sur la validation croisée se ressemble et semblent juste au niveau de nos nuages de points. Voici un tableau des données obtenues: @@ -178,14 +176,14 @@ Voici un tableau des données obtenues: | Groupe 0-2 et G1 | -0.024588; -0.042307 | 2.104142 | | Groupe 1-2 et G0 | 0.024588; 0.042307 | 0.654723 | -On peut constater une différence de précision au niveau de l'erreur quadratique. En effet, l'erreur quadratique obtenue pendant la validation croisée par chacun des groupes sont bien plus petites que cette optenue sur le nuage complet. On peut en déduire qu'il est préférable de réaliser la descente de gradient sur des lots données pas trop volumineux et de vérifier l'écart de chacun des résultats afin de s'assurer que le résultat obtenu soit le plus juste possible. +On peut constater une différence de précision au niveau de l'erreur quadratique. En effet, l'erreur quadratique obtenue pendant la validation croisée par chacun des groupes sont plus petites que cette obtenue sur le nuage complet. On peut en déduire qu'il est préférable de réaliser la descente de gradient sur des lots données pas trop volumineux et de vérifier l'écart de chacun des résultats afin de s'assurer que le résultat obtenu soit le plus juste possible. \newpage # Conclusion -Pour conclure, nous sommes parvenu à retrouvé la meilleure droite passant par un nuage de point aléatoire. Ce qui était l'objectif final ce travail. Ce qui veut dire que les étapes intermédiaire pour arriver à ce point sont fonctionnels, à savoir: **la minisation de la fonction de coup** et la **descente de gradient**. Nous avons également pu faire une partie analyse des résultats via l'**erreur quadratique** et on peut donc en déduire que les résultats trouvé sont plutôt satisfaisant. +Pour conclure, nous sommes parvenus à retrouver la meilleure droite passant par un nuage de point aléatoire en utilisant la régression linéaire et la méthode de la descente de gradient. Ce qui était l'objectif final ce travail. Ce qui veut dire que les étapes intermédiaires pour arriver à ce point sont fonctionnels, à savoir: **la minimisation de la fonction de coup** et la **descente de gradient**. Nous avons également pu faire une partie analyse des résultats via l'**erreur quadratique**. -En revanche, nous avons un soucis dans notre solution numérique. En effet, nous avons réussir à faire ce tp sur un nombre de point aléatoire inférieur à 40... Au dela, nous avons des résultats biaisé pour la descente de gradient. Par exemple: -nan; inf. Malheureusement nous ne sommes pas parvenu à savoir d'où provenait l'erreur et cela n'ou a empêché de faire cette étude sur un plus grand nombre de points. +En revanche, nous avons un soucis dans notre solution numérique. En effet, nous avons réussi à faire ce tp sur un nombre de point aléatoire inférieur à 40... Au-delà, nous avons des résultats biaisés pour la descente de gradient. Par exemple: -nan; inf. Malheureusement, nous ne sommes pas parvenus à savoir d'où provenait l(es)'erreur(s) et cela nous a empêché de faire cette étude sur un plus grand nombre de points. # Remerciements -Nous tenions à remercier M. Malaspinas pour nous avoir donné un TP aussi agréable et constructif à réaliser et cela avec des technologies de pointe tel que le C. Un remerciement spécial aussi pour M. (l'assistant) qui est parvenu à répondre à nos questions de manière très pédagogique et ce en dévulgarissant le plus possible la problématique. \ No newline at end of file +Nous tenions à remercier M. Malaspinas pour nous avoir donné un TP aussi agréable et constructif à réaliser et cela avec des technologies de pointe tel que le C. Un remerciement spécial aussi pour M. El Kharroubi qui est parvenu à répondre à nos questions de manière très pédagogique et ce, en dé-complexifiant le plus possible le sujet. \ No newline at end of file diff --git a/src/C/descente_radiant b/src/C/descente_radiant index 8930ad567b019b84b6f8ac177ea6d18249bff619..ebca517c1a6fd1741a4b18ea1007ec6ab3d93924 100755 GIT binary patch delta 2787 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 bwtu|Bbex%S{q&tTn9P|N7EJ$igXtLn>eG~7 delta 2777 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 diff --git a/src/C/equation.c b/src/C/equation.c index aaaf2e5..ea434a1 100644 --- a/src/C/equation.c +++ b/src/C/equation.c @@ -1,3 +1,8 @@ +/** + * Author; Rivier Nicolas & Birner Scott + * Date: 12.12.2021 + */ + #include "equation.h" double get_random_between_0_and_1() { diff --git a/src/C/equation.h b/src/C/equation.h index e53f6cb..d9f2319 100644 --- a/src/C/equation.h +++ b/src/C/equation.h @@ -1,3 +1,8 @@ +/** + * Author; Rivier Nicolas & Birner Scott + * Date: 12.12.2021 + */ + #ifndef _EQUATION_H #define _EQUATION_H #include <stdio.h> diff --git a/src/C/group.c b/src/C/group.c index 91f7bb4..43ffe5b 100644 --- a/src/C/group.c +++ b/src/C/group.c @@ -1,3 +1,7 @@ +/** + * Author; Rivier Nicolas & Birner Scott + * Date: 12.12.2021 + */ #include "group.h" void create_group(group_t *group, point_t* points, int n_points, int n_groups) { diff --git a/src/C/group.h b/src/C/group.h index 02b60f1..a944b65 100644 --- a/src/C/group.h +++ b/src/C/group.h @@ -1,3 +1,8 @@ +/** + * Author; Rivier Nicolas & Birner Scott + * Date: 12.12.2021 + */ + #ifndef _GROUP_H #define _GROUP_H #include "equation.h" diff --git a/src/C/main.c b/src/C/main.c index d493f8e..f46cdb4 100644 --- a/src/C/main.c +++ b/src/C/main.c @@ -1,3 +1,8 @@ +/** + * Author; Rivier Nicolas & Birner Scott + * Date: 12.12.2021 + * Description: main program of optimisation TP + */ #include <stdio.h> #include <stdlib.h> #include <math.h> @@ -166,6 +171,10 @@ int main(int argc, char* argv[]) { free(groupe_0_2); free(groupe_1_2); + free(G0); + free(G1); + free(G2); + destroy_vector(&points_X); destroy_vector(&points_Y); destroy_vector(&droite_nuage_complet_A); diff --git a/src/Python/display.py b/src/Python/meilleur_droite.py similarity index 100% rename from src/Python/display.py rename to src/Python/meilleur_droite.py diff --git a/src/Python/plot_groups.py b/src/Python/validation_croisee.py similarity index 100% rename from src/Python/plot_groups.py rename to src/Python/validation_croisee.py diff --git a/src/droite_nuage_0_1_A.vec b/src/droite_nuage_0_1_A.vec index 842287c2b65b171ec3da9cfa73420a787ff35a9d..8dd6313642f0a3ac8e4a0efac8b807f9b183fec5 100644 GIT binary patch literal 14 VcmZSNU}RumVEGtVap(M7djJ#31g!u7 literal 14 VcmZSNU}Rum2;9@`#$Nfs9sm$h1CRg! diff --git a/src/droite_nuage_0_1_B.vec b/src/droite_nuage_0_1_B.vec index d605680f9da71044bb0e249177aab3f4d8a4e11b..a7896710fb3c0e40e7b9daeb48c5c473a36711aa 100644 GIT binary patch literal 14 VcmZSNU}RumNMZ<7K3eq59smrg13dr$ literal 14 VcmZSNU}Rum*u1TL!Hq-r>;V|91wsG- diff --git a/src/droite_nuage_0_2_A.vec b/src/droite_nuage_0_2_A.vec index 842287c2b65b171ec3da9cfa73420a787ff35a9d..8dd6313642f0a3ac8e4a0efac8b807f9b183fec5 100644 GIT binary patch literal 14 VcmZSNU}RumVEGtVap(M7djJ#31g!u7 literal 14 VcmZSNU}Rum2;9@`#$Nfs9sm$h1CRg! diff --git a/src/droite_nuage_0_2_B.vec b/src/droite_nuage_0_2_B.vec index d605680f9da71044bb0e249177aab3f4d8a4e11b..a7896710fb3c0e40e7b9daeb48c5c473a36711aa 100644 GIT binary patch literal 14 VcmZSNU}RumNMZ<7K3eq59smrg13dr$ literal 14 VcmZSNU}Rum*u1TL!Hq-r>;V|91wsG- diff --git a/src/droite_nuage_1_2_A.vec b/src/droite_nuage_1_2_A.vec index 0dd17b5089658a6648a904d9467706fd6f8b3b6f..fc8326971cfee7d483994aaa6976115c83fba559 100644 GIT binary patch literal 14 VcmZSNU}RumxFY#4DoEwMJpdDC1M~m@ literal 14 VcmZSNU}RumnBTo%b%4kRdjJ#%1QP%N diff --git a/src/droite_nuage_1_2_B.vec b/src/droite_nuage_1_2_B.vec index 7d1939eb347492d27dc4c7a3b5a2f127c9cc565a..0ea757e1b0812a2558fa89bfeaa83e94781d0870 100644 GIT binary patch literal 14 VcmZSNU}Rum@S1b=(A(74_5c>-1q1*9 literal 14 VcmZSNU}Rum=sG{UWgYJwdjJ)c1X%z8 diff --git a/src/droite_nuage_complet_A.vec b/src/droite_nuage_complet_A.vec index 1f987f5e25a128a813f8e9d298805eb6639a7c6c..f37d847d7bbee2c52b6effc3555c2f66d30ce771 100644 GIT binary patch literal 14 VcmZSNU}Rum&|b(<n>ypYJpc}A1BU<r literal 14 VcmZSNU}RumnEXpfZldZ3djJvA1FZl6 diff --git a/src/droite_nuage_complet_B.vec b/src/droite_nuage_complet_B.vec index dfa3216ad6eca45a34825b194a1207d2a3bb214e..e685d0fc743016fbf8d5be248223d15566b0cf48 100644 GIT binary patch literal 14 VcmZSNU}RumcqUpVY3lgM9smz611tal literal 14 VcmZSNU}RumICYEdLqPmpdjJ*y1aJTV diff --git a/src/points_Y.vec b/src/points_Y.vec index e0e7802bef5ad1f280daa51fb11e8b5dd9c1424f..6a003741cf0ebb6897d662c5fc95d39df72da083 100644 GIT binary patch literal 246 zcmZSNkYj*>5B4zDteGHi6UKLdiaVr%!9ROrFkpuAnc(tg&wv02lrI3KVSEuNU&H}o zzA&5*HZ~0=F9tPN$^mSRu_RQT6qJ^O(lStWa!^_kYA%dcfT~l5iYr0YDLViF1Curt literal 246 zcmZSNkYiwAFb0Fi_6%U~!5+*tehj5Q+s~Q_0w3+uz~CEH9fQN!Ga$g?02WSTg7P__ zd_D(=K3)f~u?#{E5OW2g>V%;3qEK2Ks!jqbF9GL6^vgi?%R|NGptKBBy#iET5h|_# LrB$HjE5Z2yy{boi -- GitLab