Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • orestis.malaspin/math_tech_info
  • jerome.chetelat/math_tech_info
  • julien.borel/math_tech_info
  • xavier.perret/math_tech_info
  • ilias.nhairi/math_tech_info
  • julien.seemulle/math_tech_info
  • michael.elkharro/math_tech_info
  • fabien.lometti/math_tech_info
  • guillaum.pin/math_tech_info
  • quentin.rod/math_tech_info
  • simon.cirilli/math_tech_info
11 results
Select Git revision
Show changes
Commits on Source (43)
......@@ -2,6 +2,7 @@ image: omalaspinas/pandoc:latest
variables:
GIT_SUBMODULE_STRATEGY: recursive
GIT_SSL_NO_VERIFY: 'true'
before_script:
##
......@@ -36,6 +37,7 @@ build_only:
- make
- make deploy
- rsync -avzz mti ur1bg_malas@ur1bg.ftp.infomaniak.com:web/malaspinas/
build_artifacts:
script:
......
......@@ -736,7 +736,8 @@ On peut assez facilement se convaincre que si $\lambda$ est suffisamment petit,
peut se voir dans la @fig:gradient.
![Suite d'étapes pour la descente de gradient. En bleu on voit les courbes de niveaux (les courbes où $f(\vec x)$ est constante). Source: Wikipedia
<https://bit.ly/2Fhvn7p>](https://upload.wikimedia.org/wikipedia/commons/f/ff/Gradient_descent.svg){#fig:gradient width=70%}
<https://bit.ly/2Fhvn7p>](figs/Gradient_descent.svg){#fig:gradient
width=70%}
---
......
......@@ -4,5 +4,5 @@ Remerciements
Je voudrais remercier (par ordre alphabétique) les étudiants du cours
qui ont contribué à améliorer ce polycopié. En espérant que cette liste
continuera à s’allonger avec les années. Merci à Messieurs
Borel, Cirilli, El Kharroubi, Gay-Balmaz, Ibanez, Lovino, Rod, Seemüller, Sousa, et Sutter. Je voudrais également remercier A. Malaspinas pour sa relecture et ses corrections.
Borel, Cirilli, El Kharroubi, Gay-Balmaz, Ibanez, Lovino, N'Hairi, Perret, Pin, Rod, Seemüller, Sousa, et Sutter. Je voudrais également remercier A. Malaspinas pour sa relecture et ses corrections.
STYLES := css/tufte-css/tufte.css \
css/pandoc.css \
css/pandoc-solarized.css \
css/tufte-extra.css
OPTIONS = --toc
OPTIONS += --filter=pandoc-numbering
OPTIONS += --filter=pandoc-crossref
......@@ -25,7 +20,7 @@ SOURCES := $(filter-out 08_notes.md, $(SOURCES))
all: cours.pdf cours.html
# %.tex: %.md
# pandoc -s $(OPTIONS) $(PDFOPTIONS) -o $@ $<
# pandoc -s $(OPTIONS) $(PDFOPTIONS) -o $@ $< --metadata-file metadata.yaml
cours.pdf: $(CLASS_SOURCES)
pandoc -s $(OPTIONS) $(PDFOPTIONS) -o $@ $^ --metadata-file metadata.yaml
......
File added
File added
......@@ -74,7 +74,7 @@ Ces deux intégrales se résolvent par partie. Pour la partie $(1)$, on obtient
&=\left.\frac{2}{\pi j^2}\cos(jx)\right|_{-\pi}^0,\nonumber\\
&=\frac{4}{\pi j^2}\left(1-(-1)^j\right).
\end{align}
De même pour la partier (2), on trouve
De même pour la partie (2), on trouve
$$
(2)=\frac{4}{\pi j^2}\left(1-(-1)^j\right).
$$
......@@ -109,7 +109,7 @@ Exercice +.#
Développer en série de Fourier la fonction $2\pi$-périodique suivante
\begin{equation}
f(x)=\sin\left(\frac{x}{2}\right),\ x\in[0,2\pi).
f(x)=\sin\left(\frac{x}{2}\right),\ x\in[-\pi,\pi).
\end{equation}
Corrigé +.#
......@@ -130,7 +130,7 @@ Exercice +.#
Développer en série de Fourier la fonction $2\pi$-périodique suivante
\begin{equation}
f(x)=\cos\left(\frac{x}{2}\right),\ x\in[0,2\pi).
f(x)=\cos\left(\frac{x}{2}\right),\ x\in[-\pi,\pi).
\end{equation}
Corrigé +.#
......@@ -216,7 +216,7 @@ Corrigé +.#
En utilisant la formule
$$
f[n]=\sum_{k=0}^{N-1}\hat f[n]e^{2\pi ink/N},
f[n]=\frac{1}{N}\sum_{k=0}^{N-1}\hat f[k]e^{2\pi ink/N},
$$
on peut calculer la TFD de $\hat f=\{2, -1-i, 0, -1+i\}$ avec $N=4$.
On obtient donc
......@@ -225,7 +225,8 @@ f[0]=\hat f[0]+\hat f[1]+\hat f[2]+\hat f[3]=0.
$$
Et ainsi de suite on obtient
\begin{align}
f[1]&=\hat f[0]+\hat f[1]e^{\pi i/2}+\hat f[2]e^{\pi i}+\hat f[3]e^{3\pi i/2}=2+i(-1-i)+(-i)(-1+i)=4,\\
\hat f[2]&=f[0]+f[1]e^{\pi i}+f[2]e^{2\pi i}+f[3]e^{3\pi i}=2+(-1)(-1-i)-1(-1+i)=4,\\
\hat f[3]&=f[0]+f[1]e^{3\pi i/2}+f[2]e^{3\pi i}+f[3]e^{9\pi i/2}=2-i(-1-i)+i(-1+i)=0.
f[1]&=\frac{1}{4}(\hat f[0]+\hat f[1]e^{\pi i/2}+\hat f[2]e^{\pi i}+\hat
f[3]e^{3\pi i/2})=\frac{1}{4}(2+i(-1-i)+(-i)(-1+i))=1,\\
\hat f[2]&=\frac{1}{4}(f[0]+f[1]e^{\pi i}+f[2]e^{2\pi i}+f[3]e^{3\pi i})=\frac{1}{4}(2+(-1)(-1-i)-1(-1+i))=1,\\
\hat f[3]&=\frac{1}{4}(f[0]+f[1]e^{3\pi i/2}+f[2]e^{3\pi i}+f[3]e^{9\pi i/2})=\frac{1}{4}(2-i(-1-i)+i(-1+i))=0.
\end{align}
This diff is collapsed.
---
author:
- Orestis Malaspinas
title: Mathématiques en technologie de l'Information
- "Orestis Malaspinas"
title: "Mathématiques en technologie de l'Information"
autoSectionLabels: false
autoEqnLabels: true
eqnPrefix:
......
......@@ -29,9 +29,9 @@ include-before: <script src="css/prism.js"></script>
# Objectif
Réaliser un programme permettant de réaliser une régression linéaire
à une dimension à l'aide de la méthode de la descente de gradient.
Tester ce programme sur des données synthétiques afin de valider
* Réaliser un programme permettant de réaliser une régression linéaire
à l'aide de la méthode de la descente de gradient.
* Tester ce programme sur des données synthétiques (générées aléatoirement) afin de valider
votre implémentation.
# Travail à réaliser
......@@ -45,8 +45,8 @@ Afin de *valider* votre implémentation, il faut d'abord
est aisé.
On va chercher "la meilleure droite"
passant par un ensemble de points $\{(x_j, y_j)\}_{j=1}^N$.
Comme on l'a vu en cours, on cherche à minimiser la fonction
passant par un ensemble de points $\{(x_j, y_j)\}_{j=1}^N$ (Ex pour $N=3\ :\ \{(x_1,y_1), (x_2, y_2), (x_3, y_3)\}_{j=1}^3$).
Comme on l'a vu en cours, on cherche à minimiser la fonction de coût (erreur quadratique)
$$
E(a,b)=\sum_{j=1}^N(a\cdot x_j + b - y_j)^2.
$$
......@@ -58,14 +58,17 @@ on peut trouver la valeur de $a$ et $b$ pour n'importe quel
ensemble de points $\{(x_j, y_j)\}_{j=1}^N$.
Votre premier exercice sera de trouver l'expression de $a$
et $b$ en fonction de $\{(x_j, y_j)\}_{j=1}^N$.
et $b$ en fonction de $\{(x_j, y_j)\}_{j=1}^N$ analytiquement (avec un papier
et un crayon). En d'autres termes, on cherche une formule pour $a$ et une
pour $b$ ne dépendant que des valeurs des points $(x_j, y_j)$.
### Solution numérique
En prenant comme référence la solution ci-dessus,
il faut à présent implémenter la méthode de la descente de gradient
pour minimiser $E(a,b)$.
En partant d'une pente $a_0$ et d'une ordonnée à l'origine $b_0$,
En partant d'une pente $a_0$ et d'une ordonnée à l'origine $b_0$ (choisies aléatoirement),
il faut itérativement construire de meilleures approximations
$$
\vectwo{a_{i+1}}{b_{i+1}}=\vectwo{a_i}{b_i}-\lambda \cdot \vec\nabla E(a_i, b_i),
......@@ -79,18 +82,16 @@ où $\varepsilon>0$ est la précision souhaitée.
### Test
Afin de tester votre programme, vous devez générer un nuage de points.
Pour contrôler au mieux ce qui se passe, il est recommandé
de générer des points aléatoirement le long d'une droite,
et de bruiter un peu le résultat. Vous choisissez
$x_j$ entre deux bornes de votre choix (p.ex. 0 et 10)
puis tirez un certain nombre de $x_j$. A partir de là
vous construisez $y_j$ comme
Afin de tester votre programme, vous devez générer un nuage de points $\{(x_j, y_j)\}_{j=1}^N$ aléatoirement.
Pour contrôler au mieux ce qu'il se passe, il est recommandé
de générer ces points aléatoirement le long d'une droite de pente $c$ et une ordonnée à l'origine $d$ que vous choisirez,
et de bruiter un peu le résultat. Pour générer aléatoirement un point $(x_j, y_j)$, vous choisissez
$x_j$ entre deux bornes de votre choix (p.ex. 0 et 1)
puis, à partir de là vous construisez $y_j$ comme
$$
y_j=c\cdot x_j+d + r_j,
$$
où $|r_j|$ est un "petit" nombre aléatoire devant $(c\cdot x_j+d)$, et $c$ et $d$
(la pente et l'ordonnée à l'origine de votre droite) sont choisis par vos soins.
où $|r_j|$ est un "petit" nombre aléatoire devant $(c\cdot x_j+d)$.
Il faut vous assurer que la solution analytique et la solution numérique
soient très proches (à $\varepsilon$ près) et qu'elles soient également assez proches
......@@ -103,6 +104,16 @@ Faites également varier la valeur maximale de $|r_j|$. Que se passe-t-il
quand $|r_j|$ devient trop grand? N'hésitez pas à représenter
graphiquement vos résultats.
**Important** : Pour des raisons de pertes de précision obtenus après des calculs itératifs sur des nombres à virgule flottante.
Vous devrez choisir des valeurs avec les contraintes suivantes :
$$\begin{aligned}
x_j &\in\ [0,1]\\
c,d &\in\ )0,1]
\end{aligned}
$$
(Note : En pratique le domaine de nos données n'est pas restraint. On effectue donc une normalisation de nos données avant et après le calcul des paramètres de notre modèle.)
## Validation du modèle de régression
Lorsqu'on réalise une régression, on *modélise*
......@@ -117,11 +128,11 @@ Il en existe un grand nombre de variantes, ici nous n'en verrons qu'une.
Il s'agit ici de vérifier si le $a$ et le $b$ que nous avons
déterminés sont des valeurs qui continueraient à être correctes
si on ajoutait de nouveaux points à notre ensemble $\{(x_j, y_j)\}_{j=1}^N$.
si on ajoutait de nouveaux points à notre ensemble $\{(x_j, y_j)\}_{j=1}^N$ (issues du même phénomène).
Il est souvent peu pratique de générer de nouveaux points, on se contente
donc de diviser notre jeu de données en plusieurs partie. Une partie
des points sera utilisée pour *entraîner* notre modèle (déterminer
un $a$ et un $b$) l'autre partie sera utilisée pour tester le modèle,
un $a$ et un $b$) l'autre partie sera utilisée pour *tester* le modèle,
on calculera l'erreur effective $E(a,b)$ par rapport à cette seconde
partie des points.
......@@ -155,11 +166,15 @@ mais n'hésitez pas à développer.
Le code doit être réalisé en C (afin de vous entraîner). La visualisation peut être
faite avec l'outil de votre choix. Python avec la librairie *matplotlib* peut-être un bon choix.
Le rapport doit être écrit en **Markdown** ou **LaTeX** (ou une combinaison des
deux avec Pandoc).
Vous **devez** faire ce travail par groupe de 2 et aucune exception ne sera faite.
Vous devez rendre le rapport sur `cyberlearn`. Le code doit être dans un repo git public
dont vous mettrez l'url sur `cyberlearn`. N'oubliez pas de bien spécifier le nom
des deux membres du groupe dans le rapport et dans le code. Je devrais pouvoir
compiler et exécuter votre projet (pensez évidemment à créer un `Makefile`).
Le travail doit être rendu **au plus tard le 13.12.2021 à 23h59**.
La note est une combinaison de la note du code et du rapport.
......@@ -173,3 +188,4 @@ pendant les séance pour poser des questions et n'attendez pas le dernier moment
La rédaction du rapport est également une tâche complexe et il s'agit de ne pas bâcler
sa réalisation. C'est un exercice qui vous sera utile lorsque vous devrez écrire votre
mémoire pour votre travail de bachelor.