Pré-requis¶
Python est le langage de programmation préféré des Data Scientistes. Ils ont besoin d’un langage facile à utiliser, avec une disponibilité décente des bibliothèques et une grande communauté. Les projets ayant des communautés inactives sont généralement moins susceptibles de mettre à jour leurs plates-formes. Mais alors, pourquoi Python est populaire en Data Science ?
Python est connu depuis longtemps comme un langage de programmation simple à maîtriser, du point de vue de la syntaxe. Python possède également une communauté active et un vaste choix de bibliothèques et de ressources. Comme résultat, vous disposez d’une plate-forme de programmation qui est logique d’utiliser avec les technologies émergentes telles que l’apprentissage automatique (Machine Learning) et la Data Science.
Langage Python et ses Librairies¶
Python est un langage de programmation puissant et facile à apprendre. Il dispose de structures de données de haut niveau et permet une approche simple mais efficace de la programmation orientée objet. Parce que sa syntaxe est élégante, que son typage est dynamique et qu’il est interprété, Python est un langage idéal pour l’écriture de scripts quand on fait de l’apprentissage automatique et le développement rapide d’applications dans de nombreux domaines et sur la plupart des plate-formes.
Installation de Python et Anaconda¶
L’installation de Python peut-être un vrai challenge. Déjà il faut se décider entre les versions 2.X et 3.X du langage, par la suite, choisir les librairies nécessaires (ainsi que les versions compatibles) pour faire de l’apprentissage automatique (Machine Learning); sans oublier les subtilités liées aux différents Systèmes d’exploitation (Windows, Linux, Mac…) qui peuvent rendre l’installation encore plus “douloureuse”.
Dans cette partie nous allons installer pas à pas un environnement de développement Python en utilisant Anaconda[^1]. A l’issue de cette partie, nous aurons un environnement de développement fonctionnel avec les librairies (packages) nécessaires pour faire de l’apprentissage automatique (Machine Learning).
Qu’est ce que Anaconda ?
L’installation d’un environnement Python complet peut-être assez complexe. Déjà, il faut télécharger Python et l’installer, puis télécharger une à une les librairies (packages) dont on a besoin. Parfois, le nombre de ces librairies peut-être grand. Par ailleurs, il faut s’assurer de la compatibilité entre les versions des différents packages qu’on a à télécharger. Bref, ce n’est pas amusant!
Alors Anaconda est une distribution Python. À son installation, Anaconda installera Python ainsi qu’une multitude de packages dont vous pouvez consulter la liste. Cela nous évite de nous ruer dans les problèmes d’incompatibilités entre les différents packages. Finalement, Anaconda propose un outil de gestion de packages appelé Conda. Ce dernier permettra de mettre à jour et installer facilement les librairies dont on aura besoin pour nos développements.
Téléchargement et Installation de Anaconda
Note: Les instructions qui suivent ont été testées sur Linux/Debian. Le même processus d’installation pourra s’appliquer pour les autres systèmes d’exploitation.
Pour installer Anaconda sur votre ordinateur, vous allez vous rendre sur le site officiel depuis lequel l’on va télécharger directement la dernière version d’Anaconda. Prenez la version du binaire qu’il vous faut :
Choisissez le système d’exploitation cible (Linux, Windows, Mac, etc…)
Sélectionnez la version 3.X (à l’heure de l’écriture de ce document, c’est la version 3.8 qui est proposée, surtout pensez à toujours installer la version la plus récente de Python), compatible (64 bits ou 32 bits) avec l’architecture de votre ordinateur.
Après le téléchargement, si vous êtes sur Windows, alors rien de bien compliqué double cliquez sur le fichier exécutable et suivez les instructions classique d’installation d’un logiciel sur Windows.
Si par contre vous êtes sur Linux, alors suivez les instructions qui suivent:
Ouvrez votre terminal et rassurez vous que votre chemin accès est celui dans lequel se trouve votre fichier d’installation.
Exécutez la commande: $ bash Anaconda3-2020.02-Linux-x86_64.sh, rassurez vous du nom du fichier d’installation, il peut changer selon la version que vous choisissez.
Après que l’installation se soit déroulée normalement, éditez le fichier caché .bashrc pour ajouter le chemin d’accès à Anaconda. Pour cela exécutez les commandes suivantes:
$ cd ~
$ gedit .bashrc
Ajoutez cette commande à la dernière ligne du fichier que vous venez d’ouvrir
export PATH= ~/anaconda3/bin:$PATH
Maintenant que c’est fait, enregistrez le fichier et fermez-le. Puis exécutez les commandes suivantes
$ conda init
$ Python
Pour ce qui est de l’installation sur Mac, veuillez suivre la procédure d’installation dans la documentation d’Anaconda.
Il existe une distribution appelée Miniconda qui est un programme d’installation minimal gratuit pour conda. Il s’agit d’une petite version bootstrap d’Anaconda qui inclut uniquement conda, Python, les packages dont ils dépendent, et un petit nombre d’autres packages utiles.
Terminons cette partie en nous familiarisant avec quelques notions de la programmation Python.
Première utilisation de Anaconda
La distribution Anaconda propose deux moyens d’accéder à ses fonctions: soit de manière graphique avec Anaconda-Navigator, soit en ligne de commande (depuis Anaconda Prompt sur Windows, ou un terminal pour Linux ou MacOS). Sous Windows ou MacOs, démarrez Anaconda-Navigator dans le menu des programmes. Sous Linux, dans un terminal, tapez la commande : $ anaconda-navigator (cette commande est aussi disponible dans le prompt de Windows). Anaconda-Navigator propose différents services (déjà installés, ou à installer). Son onglet Home permet de lancer le service désiré. Les principaux services à utiliser pour développer des programmes Python sont :
Spyder
IDE Python
Jupyter notebook et jupyter lab : permet de panacher des cellules de commandes Python (code) et des cellules de texte (Markdown).
Pour la prise en main de Python nous allons utiliser jupyter lab.
Prise en main de Python¶
Nous avons préparé un notebook qui nous permettra d’aller de zèro à demi Héros en Python. Le notebook se trouve ici.
Python pour les debutants : Notions de bases du python¶
Les nombres avec Python!¶
Dans cette partie, nous allons tout apprendre comment utiliser les nombres sur Python.
Nous allons couvrir les points suivants :
Les types de nombres sur Python
Arithmetique de base sur les nombres
Différences entre Python 2 et 3
Assignation d’objets dans Python
Les types de nombres¶
Python a plusieurs “types” de nombres. Nous nous occuperons principalement des entiers (integers) et des nombres à virgule flottante (float).
Le type entier (integer) représente des nombres entiers, positifs ou negatifs. Par exemple: 7 et -1 sont des integers.
Le type flottant (float) de Python est facile à identifier parce que les nombres sont représentés avec la partie décimal (Attention, ici les nombre decimaux sont representer avec un point et non la virgule comme habituellement en langue française), ou alors avec le signe exponentiels (reprensenter par e) pour représenter les puissances de 10. Par exemple, 2.0 et -2.1 sont des nombres de type flottant. 2e3 ( 2 fois 10 à la puissance 3) est aussi un nombre de type flottant en Python.
Voici un tableau des deux types que nous manipulerons le plus dans ce cours:
Exemples |
Type |
---|---|
1, 4, -2, 100 |
Integers |
1.4, 0.3, -0.5, 2e2, 3e2 |
Floating-point numbers (float) |
Voyons maintenant, quelques examples d’arithmétique simples que l’on peux appliquer sur ses elements.
Arithmétique
# Addition de 1 et 3 = 4
1+3
4
# Soustraction de 1 dans 3 = 2
3-1
2
# Multiplication de 2 par 2 = 4
2*2
4
# Division de 5 par 2 = 2.5 (remaquez qu'on a la un flottant)
5/2
2.5
# Puissances. 2 a la puissances 3 = 8
2**3
8
#la racine carree peut se calculer de la même manière = 2.0
4**0.5
2.0
Ordre de priorite¶
# Voyons quel ordre de priorite python fais sur les operteurs
2 + 10 * 10 + 3 # avec ceci nous obtenons un resultats errone = 105
105
# Avec des parenthèse nous pouvons garder le contrôle de ces priorités
(2+10) * (10+3)
156
Les variables¶
Maintenant que nous savons comment utiliser python en mode calculette, nous pouvons créer des variables et leur assigner des valeurs comme des nombres. Notons que l’utilisation des variables sur python est un tout petit peu different que ce qui ce passe dans d’autre langage de programmation. Contrairement a d’autre language, python utilise une technique de typage faible. Les variables ne sont pas declarees a l’avance avant l’untilisation.
Il suffit d’un simple signe égal = pour assigner un nom à une variable. Voyons quelques exemples pour détailler la façon de faire.
# Créons un objet nommé "x" et "y" et nous leur assignons la valeur 5 et .2 respectivement
x = 5 # ici la variable x est de type integer
y = .2 # ici la variable y est de type flottant (notons que 0.2 peut aussi s'ecrire .2 tout simplement)
Maintenant, nous pouvons appeler x or y dans un script Python qui les traitera comme le nombre 5 ou .2 respectivement
# additionner des objets
x+y
5.2
# Ré-assignation
x = 10
# Vérification
x
10
# Nous utilisons x pour assigner x de nouveau
x = x + x
# Vérification
x
20
# Incrementation par 1 (on peux aussi incrementer avec n'importe quel nombre)
x = x+1
x
21
#Autre syntaxe pour incrementer une variable
x += 1
x
22
#Decrementation par 1
x = x -1
x
21
#Autre syntaxe pour decrementer une variable
x -= 1
x
20
#Nous pouvons aussi multiplier l'ancienne valeur de x par un quelconque nombre.
x *=2
x
40
#Nous pouvons aussi diviser l'ancienne valeur de x par un quelconque nombre.
x /=2
x
20.0
NB: Toutes les operations que nous venons de voir s’applique aussi sur les flottants
Tout de meme, voici quelques règles à respecter pour créer un nom de variable :
Les noms ne doivent pas commencer par un nombre.
Pas d’espace dans les noms, utilisez _ à la place
Interdit d’utiliser les symboles suivants : ’”,<>/?|()!@#$%^&*~-+
C’est une bonne pratique (PEP8) de mettre les noms en minuscules
Les noms de variables permettent de conserver et manipuler plusieurs valeurs de façon simple avec Python.
# Utilisez toujours des noms explicites pour mieux suivre ce que fait votre code !
prix_vente = 280
prix_unitaire = 150
benefice = prix_vente - prix_unitaire
# Visualiser le benefice !
benefice
130
Les Bases Mathématiques pour l’Apprentissage Automatique¶
Dans cette section, nous allons présenter les notions mathématiques essentielles à l’apprentissage automatique (machine learning). Nous n’aborderons pas les théories complexes des mathématiques afin de permettre aux débutants (en mathématiques) ou mêmes les personnes hors du domaine mais intéressées à l’apprentissage automatique de pouvoir en profiter.
Algèbre linéaire et Analyse¶
Définition d’espaces vectoriels. Un espace vectoriel est un triplet \((V, +, *)\) formé d’un ensemble \(V\) muni de deux lois,
qui vérifient:
\(\text{ associativité de } + : \forall\ u,v, w \in V, \quad (u+v)+w=u+(v+w)\)
\(\text{ commutativité de } + : \forall\ u,v\in V,\quad u+v=v+u\)
\(\text{ existence d'élément neutre pour } + : \exists~ e \in V : \forall\ u \in V, \quad u+e=e+u=u\)
\(\text{ existence d'élément opposé pour } + : \forall \ u \in V, \exists ~ v \in V :u+v=v+u=0. \text{ On note } v=-u \text{ et } v \text{ est appelé l'opposé de } u\)
\(\text{ existence de l'unité pour } * : \exists~ e \in \mathbb{K} \text{ tel que } \forall\ u\in V,\quad e*u=u\)
\(\text{ associativité de } * : \forall\ (\lambda_1, \lambda_2, u) \in \mathbb{K} \times \mathbb{K}\times V,\quad (\lambda_1 \lambda_2)* u =\lambda_1*(\lambda_2 * u)\)
\(\text{ somme de vecteurs (distributivité de * sur +)} : \forall\ (\lambda, u, v) \in \mathbb{K}\times V\times V, \quad\lambda*(u+v)=\lambda * u+\lambda * v\)
: \(\forall\ (\lambda_1, \lambda_2, u) \in \mathbb{K} \times \mathbb{K}\times V,\quad (\lambda_1+\lambda_2) * u=\lambda_1 * u +\lambda_2 * u.\)
\(\forall\ u \in V, \exists~ c_1, \dots, c_n \in \mathbb{K}\) tels que \(\displaystyle u = \sum_{i=1}^{n}c_i b_i\) (On dit que \(\mathcal{B}\) est \(\textbf{une famille génératrice}\) de \(V\)).
\(\displaystyle \forall\ \lambda_1, \dots, \lambda_n \in \mathbb{K}, \quad\sum_{i=1}^{n}\lambda_i b_i=0\Longrightarrow \lambda_i = 0 \quad\forall\ i\). (On dit que les éléments de \(\mathcal{B}\) sont linéairement indépendants).
(2)¶\[\begin{split}\mathbf{u}=\begin{bmatrix} c_1\\c_2\\ \vdots\\ c_n \end{bmatrix}.\end{split}\]Définition. Le nombre d’éléments dans une base d’un espace vectoriel est appelé dimension de l’espace vectoriel.
Matrices: Soit \(\mathbb{K}\) un corps commutatif. Une matrice en mathématiques à valeurs dans \(\mathbb{K}\) est un tableau de nombres, où chaque nombre est un élément de \(\mathbb{K}\). Chaque ligne d’une telle matrice est un vecteur (élément d’un \(\mathbb{K}\)-espace vectoriel). Une matrice est de la forme:
On note aussi \(\mathbf{M}=\big{(}a_{ij}\big{)}_{1\le i\le m, 1\le j\le n}\).
(4)¶\[\begin{aligned} \mathbf{M}_{ij} = \sum_{\ell=1}^{n}a_{i\ell}b_{\ell j}, \text{ pour tout } i \text{ et } j.\end{aligned}\]Important.
Le produit \(\mathbf{AB}\) est possible si et seulement si le nombre de colonnes de \(\mathbf{A}\) est égal au nombre de lignes de \(\mathbf{B}\).
Dans ce cas, \(\mathbf{AB}\) a le même nombre de lignes que \(\mathbf{A}\) et le même nombre de colonnes que \(\mathbf{B}\).
Un autre point important à noter est que le produit matriciel n’est pas commutatif (\(\mathbf{AB}\) n’est pas toujours égal à \(\mathbf{BA}\)).
Exemple. Soient les matrices \(\mathbf{A}\) et \(\mathbf{B}\) définies par:
Le nombre de colonnes de la matrice \(\mathbf{A}\) est égal au nombre de lignes de la matrice \(\mathbf{B}\).
Le produit \(\mathbf{BA}\) n’est cependant pas possible.
(7)¶\[\begin{split}\mathbf{A}+ \mathbf{C} = \begin{bmatrix} 2+(-2) & -3+(-7) & 0+3\\ 5+5 &11+10 & 5+5\\ 1+12& 2+9 & 3+3 \end{bmatrix}=\begin{bmatrix} 0 & -10 & 3\\ 10 &21 & 10\\ 13& 11 & 6 \end{bmatrix}, \text{ et pour tout } \lambda \in \mathbb{R}, \quad \lambda \mathbf{B} = \begin{bmatrix} \lambda & 3 \lambda\\ -5 \lambda & \lambda\\ \lambda & 2\lambda \end{bmatrix}.\end{split}\]
Soit \(\mathbf{A}=(a_{ij})_{1\le i\le n, 1\le j\le n}\) une matrice carrée d’ordre \(n\). Soit \(\mathbf{A}_{i,j}\) la sous-matrice de \(\mathbf{A}\) obtenue en supprimant la ligne \(i\) et la colonne \(j\) de \(\mathbf{A}\). On appelle déterminant (au développement suivant la ligne \(i\)) de \(\mathbf{A}\) et on note \(\operatorname{det}(\mathbf{A})\), le nombre
avec le déterminant d’une matrice carrée de taille \(2\times 2\) donné par:
Pour tous \(\mathbf{u}, \mathbf{v}\in E\), \(f(\mathbf{u}+\mathbf{v})=f(\mathbf{u})+f(\mathbf{v})\).
Pour tout \((\lambda, \mathbf{u}) \in \mathbb{K}\times E\), \(f(\lambda \mathbf{u})=\lambda f(\mathbf{u})\).
(10)¶\[\begin{split}\begin{aligned} id_E: \quad &(E, \mathcal{C})\rightarrow (E, \mathcal{B}):\\ & x \mapsto x\quad .\end{aligned}\end{split}\]Cette matrice est notée \(P_{\mathcal{B}}^{\mathcal{C}}\) et on a \(P_{\mathcal{B}}^{\mathcal{C}}:=Mat_{\mathcal{C},\mathcal{B}}(id_E)\).
(11)¶\[\begin{split}\mathcal{B}=\left( \begin{bmatrix} 1\\0\\0 \end{bmatrix},\begin{bmatrix} 0\\1\\0 \end{bmatrix},\begin{bmatrix} 0\\0\\1 \end{bmatrix} \right) \text{ et } \mathcal{C}=\left( \begin{bmatrix} -1\\2\\3 \end{bmatrix},\begin{bmatrix} 0\\1\\5 \end{bmatrix},\begin{bmatrix} 0\\0\\1 \end{bmatrix} \right),\end{split}\]on a \(P_{\mathcal{B}}^{\mathcal{C}} = \begin{bmatrix} -1&0&0\\ 2&1&0\\ 3&5&1 \end{bmatrix}\) (c’est-à-dire qu’on exprime les vecteurs de \(\mathcal{C}\) dans \(\mathcal{B}\) pour former \(P_{\mathcal{B}}^{\mathcal{C}}\)).
- \(\mathbf{U}\) est une matrice unitaire (sur \(\mathbb{K}\)) de taille \(m\times m\).
- \(\mathbf{V}^*\) est l’adjoint (conjugué de la transposée) de \(\mathbf{V}\), matrice unitaire (sur \(\mathbb{K}\)) de taille \(n\times n\)
\(\mathbf{\Sigma}\) est une matrice de taille \(m\times n\) dont les coefficients diagonaux sont les valeurs singulières de \(\mathbf{M}\), i.e, les racines carrées des valeurs propres de \(\mathbf{M}^*\mathbf{M}\) et tous les autres coefficients sont nuls.
Cette factorisation est appelée la décomposition en valeurs singulières de \(\mathbf{M}\). Important. Si la matrice \(\mathbf{M}\) est de rang \(r\), alors
- les \(r\) premières colonnes de \(\mathbf{U}\) sont les vecteurs singuliers à gauche de \(\mathbf{M}\)
les \(r\) premières colonnes de \(\mathbf{V}\) sont les vecteurs singuliers à droite de \(\mathbf{M}\)
les \(r\) premiers coefficients strictement positifs de la diagonale de \(\mathbf{\Sigma}\) sont les valeurs singulières de \(\mathbf{M}\) et tous les autres coefficients sont nuls.
telle que, \(\forall ( \lambda_1, \lambda_2, \mathbf{u}, \mathbf{v}, \mathbf{w}) \in \mathbb{R}\times\mathbb{R}\times V\times V \times V,\)
\(\langle\mathbf{u}, \mathbf{v}\rangle = \langle\mathbf{v}, \mathbf{u}\rangle\)(symétrie)
\(\langle\lambda_1 \mathbf{u}+\lambda_2 \mathbf{v}, \mathbf{w}\rangle = \lambda_1\langle \mathbf{u},\mathbf{w}\rangle +\lambda_2\langle \mathbf{v},\mathbf{w}\rangle\) (linéarité à gauche)
\(\langle\mathbf{u}, \lambda_1 \mathbf{v}+\lambda_2 \mathbf{w}\rangle = \lambda_1\langle \mathbf{u},\mathbf{v}\rangle +\lambda_2\langle \mathbf{u},\mathbf{w}\rangle\) (linéarité à droite)
\(\langle\mathbf{u}, \mathbf{u}\rangle \geq 0 \qquad\) (positive)
\(\langle\mathbf{u}, \mathbf{u}\rangle = 0 \implies \mathbf{u}=0 \qquad\) (définie)
\(\|\lambda\mathbf{u}\| = |\lambda| \times \|\mathbf{u}\|\)
\(\|\mathbf{u} + \mathbf{v} \| \leq \|\mathbf{u}\| + \|\mathbf{u}\| + \|v\|\)(inégalité triangulaire)
Remarque 2 Si \(\big{<}.,.\big{>}\) est un produit scalaire sur \(V\), alors \(\big{<}.,.\big{>}\) induit une norme sur \(V\). En effet,
(16)¶\[\begin{split}\begin{aligned} \|.\|_{\big{<}.,.\big{>}}:\quad&V\rightarrow{\mathbb{R_{+}}}\\ & \mathbf{u}\mapsto \|\mathbf{u}\|=\sqrt{\big{<}\mathbf{u},\mathbf{u}\big{>}}\end{aligned}\end{split}\]
(17)¶\[\begin{split}\begin{aligned} \rho:\quad &V\times V\rightarrow{\mathbb{R}}\\ &(\mathbf{u},\mathbf{v})\mapsto \sum_{i=1}^{n}u_iv_i ,\end{aligned}\end{split}\]
(18)¶\[\begin{split}\begin{aligned} \mu:\quad &V\rightarrow{\mathbb{R}_+}\\ &\mathbf{u}\mapsto \sqrt{\sum_{i=1}^{n}u_i^2},\end{aligned}\end{split}\]sont respectivement un produit scalaire et une norme sur \(V\). Il faut remarquer que \(\forall\ \mathbf{u} \in V, \quad \mu(\mathbf{u})=\sqrt{\rho(\mathbf{u},\mathbf{u})}\).
(19)¶\[\begin{split}\begin{aligned} \mu_p:\quad &V\rightarrow{\mathbb{R}_+}\\ &\mathbf{u}\mapsto \bigg{(}\sum_{i=1}^{n}|u_i|^p\bigg{)}^{\frac{1}{p}},\end{aligned}\end{split}\]est une norme sur \(V\) appelée norme \(p\).
(20)¶\[\begin{split}\begin{aligned} &\bullet \quad d(x,y) = d(y,x) \text{ (symétrie)}\\ &\bullet \quad d(x,y) = 0 \Longrightarrow x=y\text{ (séparation)}\\ &\bullet \quad d(x,y) \le d(x,z)+d(z,y) \text{ (inégalité triangulaire)}\end{aligned}\end{split}\]
Exemples de distances.¶
\(\bullet\)
\(\bullet\)
(23)¶\[\begin{split}\begin{aligned} d_{Minkowski}:\quad &\mathbb{R}^n\times \mathbb{R}^n\rightarrow{\mathbb{R}_+}\nonumber \\ &(\mathbf{u}, \mathbf{v})\mapsto \bigg{(}\sum_{i=1}^{n}|u_i-v_i|^p\bigg{)}^{\frac{1}{p}}, p\ge 1. \end{aligned}\end{split}\]Espaces métriques.
où \(I\) est une partie infinie de \(\mathbb{N}\). On dit que la suite \((u)_n\) converge vers \(u^*\in E\) si pour tout \(\epsilon>0\) il existe \(N \in \mathbb{N}\) tels que:
En d’autres termes, la suite \((u)_n\) converge vers \(u^*\in E\) si pour tout \(\epsilon>0\), il existe un entier \(N\in \mathbb{N}\) tel que pour tout \(n>N\), \(u_n\) est contenu dans la boule \(\mathcal{B}_{\epsilon}\) centrée en \(u^*\) et de rayon \(\epsilon\).
Calcul du gradient (dérivation).¶
- Fonctions polynomiales.La dérivée de la fonction \(f(x)=a_nx^n+a_{n-1}x^{n-1}+\dots + a_1x+a_0\), avec les \(a_i\) des constantes, est \(f'(x)=na_nx^{n-1}+(n-1)a_{n-1}x^{n-2}+\dots+a_1\).
- Fonction exponentielle de base :math:`e`.La dérivée de la fonction \(f(x)=\exp(x)\) est la fonction \(f\) elle-même, i.e, \(\frac{\mathrm{d}\exp}{\mathrm{d}x}(x)=\exp(x)\).
- Fonctions trigonométriques.\(\frac{\mathrm{d}\cos}{\mathrm{d}x}( x)=-\sin x\) et \(\frac{\mathrm{d} \sin}{dx}(x)=\cos x\).
- Fonction logarithme népérien.\(\frac{\mathrm{d} \ln}{\mathrm{d}x} (x) = \frac{1}{x}\).
- \((u+v)' = u'+v'\)
- \((uv)' = uv'+u'v\)
\((\lambda u)' = \lambda u'\)
(28)¶\[\begin{aligned} \lim_{h\rightarrow 0} \frac{f(\mathbf{a}+h)-f(\mathbf{a})-L(h)}{\|h\|}=0.\end{aligned}\]Si \(f\) est différentiable en tout point de \(\mathcal{O}\), on dit que \(f\) est différentiable sur \(\mathcal{O}\).
(29)¶\[\begin{aligned} \lim_{h\rightarrow 0}\frac{f(a_1, a_2, \dots, a_j+h, \dots, a_n)-f(\mathbf{a})}{h} \text{ est finie.}\end{aligned}\]La dérivée partielle par rapport à la variable \(x_j\) de \(f\) en \(\mathbf{a}\) est notée \(\frac{\partial f}{\partial x_j}(\mathbf{a})\).
(30)¶\[\begin{split}\begin{bmatrix} \frac{\partial f_1}{\partial x_1} & \frac{\partial f_1}{\partial x_2} &\dots & \frac{\partial f_1}{\partial x_n}\\[0.2cm] \frac{\partial f_2}{\partial x_1} & \frac{\partial f_2}{\partial x_2} &\dots & \frac{\partial f_2}{\partial x_n}\\ \vdots&\vdots& & \vdots\\\vspace{0.2cm} \frac{\partial f_p}{\partial x_1} & \frac{\partial f_p}{\partial x_2} &\dots & \frac{\partial f_p}{\partial x_n} \end{bmatrix}\end{split}\]est appelée la matrice jacobienne de \(f\), notée \(\mathbf{J}_f\) ou \(\mathbf{J}(f)\).
- \(f(\mathbf{x})=\big{<}\mathbf{x},\mathbf{x}\big{>}=\mathbf{x}^T\mathbf{x}\). Le gradient de \(f\) est \(\nabla f(\mathbf{x})=2\mathbf{x}\)
- \(f(\mathbf{x})=\mathbf{A}\mathbf{x}+\mathbf{b}\), avec \(\mathbf{A}\) une matrice et \(\mathbf{b}\) un vecteur. On a \(Df(\mathbf{x})=\mathbf{A}.\)
Dérivées de fonctions composées.¶
(31)¶\[\frac{\mathrm{d} f}{\mathrm{d} x} = \frac{\mathrm{d} g}{\mathrm{d} h}\frac{\mathrm{d} h}{\mathrm{d} x}\]Formule de dérivée totale.
(32)¶\[\frac{\mathrm{d} f\left(x, u_{1}, \ldots, u_{n}\right)}{\mathrm{d} x}=\frac{\partial f}{\partial x}+\frac{\partial f}{\partial u_{1}} \frac{\mathrm{d} u_{1}}{\mathrm{d} x}+\frac{\partial f}{\partial u_{2}} \frac{\mathrm{d} u_{2}}{\mathrm{d} x}+\ldots+\frac{\partial f}{\partial u_{n}} \frac{\mathrm{d} u_{n}}{\mathrm{d} x}=\frac{\partial f}{\partial x}+\sum_{i=1}^{n} \frac{\partial f}{\partial u_{i}} \frac{\mathrm{d} u_{i}}{\mathrm{d} x}.\]
(33)¶\[\begin{split}\begin{array}{l} f :\mathbb{R}^{k} \rightarrow\mathbb{R}^{m} \\ \mathbf{x} \mapsto f(\mathbf{x}) \end{array} \begin{array}{l} g :\mathbb{R}^{n} \rightarrow\mathbb{R}^{k} \\ \mathbf{x} \mapsto g(\mathbf{x}) \end{array}\end{split}\]où \(\mathbf{x}=(x_1,\dots,x_n)\) , \(f(\mathbf{x}) = (f_1(\mathbf{x}),\dots,f_m(\mathbf{x}))\) et \(g(\mathbf{x}) = (g_1(\mathbf{x}),\dots,g_k(\mathbf{x}))\).
Le gradient de \(f(g(\mathbf{x}))\) est défini comme suit:
Probabilités¶
\(0 \leq \operatorname{\mathbb{P}}(A) \leq 1,\) pour tout événement \(A \subseteq \Omega\);
\(\operatorname{\mathbb{P}}(A)=\sum_{\{\omega\} \in A} \operatorname{\mathbb{P}}(\omega),\) pour tout événement \(A\);
\(\operatorname{\mathbb{P}}(\Omega)=\sum_{A_{i}} \operatorname{\mathbb{P}}(A_{i})=1,\) avec les \(A_{i} \subseteq \Omega\) une partition de \(\Omega\).
Proposition. Soient \(A\) et \(B\) deux événements,
\(\operatorname{Si} A\) et \(B\) sont incompatibles, \(\operatorname{\mathbb{P}}(A \cup B)=\operatorname{\mathbb{P}}(A)+\operatorname{\mathbb{P}}(B).\)
\(\operatorname{\mathbb{P}}\left(A^{c}\right)=1-\operatorname{\mathbb{P}}(A)\), avec \(A^{c}\) le complémentaire de \(A\).
\(\operatorname{\mathbb{P}}(\emptyset)=0.\)
\(\operatorname{\mathbb{P}}(A \cup B)=\operatorname{\mathbb{P}}(A)+\operatorname{\mathbb{P}}(B)-\operatorname{\mathbb{P}}(A \cap B).\)
::: {.center}
Axiome 1: \(0\leq \operatorname{\mathbb{P}}(A)\leq 1\), pour tout événement \(A\);
Axiome 2: Pour toute suite d’événements \((A_i)_{i\in \operatorname{\mathbf{N}}}\), deux à deux incompatibles,
(35)¶\[\operatorname{\mathbb{P}}\left(\bigcup_{i \in \operatorname{\mathbf{N}}} A_{i}\right)=\sum_{i \in \operatorname{\mathbf{N}}} \operatorname{\mathbb{P}}\left(A_{i}\right);\]Axiome 3: \(\operatorname{\mathbb{P}}(\Omega) = 1.\) ::
\(\mathrm{NB}:\) Les événements \(\left(A_{i}\right)_{i \in \operatorname{\mathbf{N}}}\) sont deux à deux incompatibles, si pour tous \(i \neq j, A_{i} \cap A_{j}=\emptyset\).
Indépendance et conditionnement.¶
(36)¶\[\operatorname{\mathbb{P}}(B \mid A)=\frac{\operatorname{\mathbb{P}}(A \cap B)}{\mathbb{P}(A)}.\]L’équation [prob_condit] peut aussi s’écrire comme \(\mathbb{P}(A \cap B)=\mathbb{P}(B \mid A) \mathbb{P}(A)\).
(37)¶\[\mathbb{P}(B)=\sum_{i \in I} \mathbb{P}\left(B|A_{i}\right)\mathbb{P}\left(A_{i}\right).\]La formule des probabilités totales permet de servir les étapes de l’expérience aléatoire dans l’ordre chronologique. Proposition. Formule de Bayes généralisée
(38)¶\[\mathbb{P}(A_{i}|B)=\frac{ \mathbb{P}\left(B|A_{i}\right)\mathbb{P}\left(A_{i}\right)}{\sum_{i \in I} \mathbb{P}\left(B|A_{i}\right)\mathbb{P}\left(A_{i}\right)}.\]
Variables aléatoires.¶
Une variable qui ne prend qu’un nombre dénombrable de valeurs est dite discrète (par exemple le résultat d’une lancée d’une pièce de monnaie, …), sinon, elle est dite continue (par exemple le prix d’un produit sur le marché au fil du temps, distance de freinage d’une voiture roulant à 100 km/h).
Variable aléatoire discrète¶
(41)¶\[\mathbb{E}[X] = \sum_{k=0}^{\infty} k \mathbb{P}[X = k].\]
Pour toute fonction \(g\),
et l’écart-type de \(X\) est la racine carrée de sa variance. $$
(44)¶\[\mathbb{P}[Y=1]=p, \quad \mathbb{P}[Y=0]=q=1-p.\qquad \operatorname{Avec } p \in [0, 1].\]
On dit alors que \(Y\) suit une loi de Bernoulli de paramètre \(p,\) notée \(\mathcal{B}(p)\). La v.a. \(Y\) a pour espérance \(p\) et pour variance \(p(1-p) .\) En effet,
et
Schéma de Bernoulli :
Chaque épreuve a deux issues : succès \([S]\) ou échec \([E]\).
Pour chaque épreuve, la probabilité d’un succès est la même, notons \(\mathbb{P}(S) = p\) et \(\mathbb{P}(E) = q = 1 - p.\)
Les \(n\) épreuves sont indépendantes : la probabilité d’un succès ne varie pas, elle ne dépend pas des informations sur les résultats des autres épreuves.
Variable aléatoire continue¶
Contrairement aux v.a. discrètes, les v.a. continues sont utilisées pour mesurer des grandeurs “continues” (comme distance, masse, pression…). Une variable aléatoire continue est souvent définie par sa densité de probabilité ou simplement densité. Une densité \(f\) décrit la loi d’une v.a \(X\) en ce sens:
et
. On en déduit qu’une densité doit vérifier
.
(50)¶\[\mathbb{E}[X]=\int_{\mathbb{R}}^{} xf(x)dx.\]
(51)¶\[f(x) = \frac{1}{\sigma\sqrt{2\pi}}\exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right), \quad \forall\ x \in \mathbb{R}.\]Quand \(\mu=0 \quad \text{et} \quad \sigma = 1\), on parle de loi normale centrée et réduite.
Loi des grands nombres¶
Considérons une suite \(\left(X_{n}\right)_{n \geq 1}\) de v.a. indépendantes et de même loi. Supposons que ces v.a. ont une espérance, \(m\) et une variance, \(\sigma^{2}\).
(54)¶\[\bar{X_n} = \frac{X_1+\dots + X_n}{n}.\]On sait d’ores et déjà que la moyenne empirique a pour espérance \(m\) et pour variance \(\frac{\sigma^2}{n}\). Ainsi, plus \(n\) est grand, moins cette v.a. varie. A la limite, quand \(n\) tend vers l’infini, elle se concentre sur son espérance, \(m\). C’est la loi des grands nombres.
Théorème central limite Le Théorème central limite est très important en apprentissage automatique. Il est souvent utilisé pour la transformation des données surtout au traitement de données aberrantes.
(55)¶\[\mathbb{P}\left(a \leq \frac{\bar{X}_{n}-m}{\sigma / \sqrt{n}} \leq b\right) \longrightarrow \int_{a}^{b} \frac{1}{\sqrt{2 \pi}} e^{-x^{2} / 2} \mathrm{d} x.\]On dit que \(\displaystyle \frac{\bar{X}_{n}-m}{\sigma / \sqrt{n}}\) converge en loi vers la loi normale \(\mathcal{N}(0,1)\).
Intervalles de confiance¶
Soit \(X\) un caractère (ou variable) étudié sur une population, de moyenne \(m\) et de variance \(\sigma^2\). On cherche ici à donner une estimation de la moyenne \(m\) de ce caractère, calculée à partir de valeurs observées sur un échantillon \((X_1, ..., X_n)\). La fonction de l’échantillon qui estimera un paramètre est appelée estimateur, son écart-type est appelé erreur standard et est noté SE. L’estimateur de la moyenne \(m\) est la moyenne empirique:
D’après les propriétés de la loi normale, avec un erreur \(\alpha = 5\%\) quand \(n\) est grand on sait que
(58)¶\[\mathbb{P}\left[\bar{X_n}-2\sigma/ \sqrt{n}\leq m\leq \bar{X_n}+2\sigma/ \sqrt{n}\right] = 1- \alpha = 0.954\]Ce qui peut se traduire ainsi: quand on estime \(m\) par \(\bar{X_n}\), l’erreur faite est inférieure à \(2\sigma/ \sqrt{n}\), pour \(95,4\%\) des échantillons. Ou avec une probabilité de \(95,4\%\), la moyenne inconnue \(m\) est dans l’intervalle \(\left[\bar{X_n}-2\sigma/ \sqrt{n},\ \bar{X_n}+2\sigma/ \sqrt{n}\right]\).
(59)¶\[\mathbb{P}\left[Z\geq z\right] = \alpha\]Le fractile inférieur d’ordre \(\alpha\) de la loi \(Z\) est le réel \(z\) qui vérifie
(60)¶\[\mathbb{P}\left[Z\leq z\right] = \alpha.\]Quand l’écart-type théorique de la loi du caractère \(X\) étudié n’est pas connu, on l’éstime par l’écart-type empirique \(s_{n-1}\). Comme on dispose d’un grand échantillon, l’erreur commise est petite. L’intervalle de confiance, de niveau de confiance \(1-\alpha\) devient :
(61)¶\[\left[\bar{x}_{n}-z_{\alpha / 2} \frac{s_{n-1}}{\sqrt{n}}, \ \bar{x}_{n}+z_{\alpha / 2} \frac{s_{n-1}}{\sqrt{n}}\right]\]où
(62)¶\[s_{n-1}^{2}=\frac{1}{n-1} \sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)^{2}.\]
Estimations paramétriques¶
(63)¶\[\begin{split}\begin{array}{l} \Theta \rightarrow\left\{P_{\theta}, \theta \in \Theta\right\} \\ \theta \mapsto P_{\theta} \end{array}\end{split}\]est injective.
Dans le cas contraire, on dit que l’estimateur \(T\) est biaisé et on appelle biais la quantité \(\mathbb{E}_{\theta}[T] - g(\theta)\).
Généralement \(\mathbf{x}\) est un vecteur \(\left(x_{1}, \ldots, x_{n}\right)\) d’observations \((n\) étant le nombre d’entre elles). Un exemple important est le cas où \(x_{1},\ldots, x_{n}\) forme un \(n\)-échantillon c’est à dire lorsque que \(x_{1}, \ldots, x_{n}\) sont i.i.d. On peut alors regarder des propriétés asymptotiques de l’estimateur, c’est-à-dire en faisant tendre le nombre d’observations \(n\) vers \(+\infty\). Dans ce cas, il est naturel de noter \(T = T_n\) comme dépendant de \(n\). On a alors la définition suivante :
Définition.
\(T_n\) est un estimateur consistant de \(g(\theta)\) si pour tout \(\theta \in \Theta\), \(T_n\) converge en probabilité vers \(g(\theta)\) sous \(P_{\theta}\) lorsque \(n\to\infty\).
(64)¶\[R(T_n,g(\theta)) = \mathbb{E}_{\theta}[(T_n - g(\theta))^2].\]
Estimation par la méthode des moments¶
Considérons un échantillon \(\mathbf{x} = (x_1,\dots,x_n)\). Soit \(f = (f_1,\dots,f_k)\) une application de \(\mathcal{X}\) dans \(\mathbb{R}^k\) tel que le modèle \(\{\mathbb{P}_{\theta},\theta\in\Theta\}\) est identifiable si l’application \(\Phi\)
est injective. On définit l’estimateur \(\hat{\theta}_n\) comme la solution dans \(\Theta\) (quand elle existe) de l’équation
Souvent, lorsque \(\mathcal{X}\subset \mathbb{R},\) on prend \(f_i(x) = x^i\) et \(\Phi\) correspond donc au ième moment de la variable de \(X_i\) sous \(\mathbb{P}_{\theta}\). Ce choix justifie le nom donné à la méthode. Voici quelques exemples d’estimateurs bâtis sur cette méthode.
(67)¶\[\hat{m}_{n}=\bar{X}_{n} \text { et } \hat{m}_{n}^{2}+\hat{\sigma}_{n}^2=\frac{1}{n} \sum_{i=1}^{n} X_{i}^{2},\]c’est-à-dire
(68)¶\[\hat{\theta}_{n}=\left(\bar{X}_{n},\ \frac{1}{n} \sum_{i=1}^{n}\left(X_{i}-\bar{X}_{n}\right)^{2}\right).\]L’estimateur est consistant mais l’estimateur de la variance est biaisé.
Estimation par maximum de vraisemblance¶
(69)¶\[\begin{split}\begin{array}{l} \Theta \rightarrow\mathbb{R}_+ \\ \theta \mapsto \mathbb{P}(\theta,\ \mathbf{x}) \end{array}\end{split}\]On appelle estimateur du maximum de vraisemblance de \(\theta\), tout élément \(\hat{\theta}\) de \(\Theta\) maximisant la vraisemblance, c’est à dire vérifiant
(70)¶\[\hat{\theta} = \arg \underset{\theta\in\Theta}{\max}\ \mathbf{P}(\theta,\ \mathbf{x})\]
Considérons le cas typique où \(\mathbf{x}=\left(x_{1}, \ldots, x_{n}\right),\) les \(x_{i}\) formant un \(n\)-échantillon de loi \(Q_{\theta_{0}}\) où \(Q_{\theta_{0}}\) est une loi sur \(\mathcal{X}\) de paramètre inconnu \(\theta_{0} \in \Theta \subset\) \(\mathbb{R}^{k} .\) On suppose en outre que pour tout \(\theta \in \Theta, Q_{\theta}\) est absolument continue par rapport à une mesure \(\nu\) sur \(\mathcal{X}\). Dans ce cas, en notant
et en prenant \(\mu=\nu^{\otimes n}\) on a la vraisemblance qui s’écrit sous la forme
et donc
avec la convention \(\log (0)=-\infty .\)
(74)¶\[q(\theta, x)=\theta^{x}(1-\theta)^{1-x}=(1-\theta) \exp \left[x \log \left(\frac{\theta}{1-\theta}\right)\right]\]et donc l’estimateur du maximum de vraisemblance doit maximiser dans l’intervalle [0,1].
(75)¶\[\log \left(\theta^{S_{n}}(1-\theta)^{n-S_{n}}\right)=S_{n} \log \left(\frac{\theta}{1-\theta}\right)+n \log (1-\theta)\]avec \(S_n = \sum_{i} x_i\) ce qui conduit à \(\hat{\theta}_{n}=\bar{\mathbf{x}}\) en résolvant l’équation \(\nabla \log(q(\theta, x)) = 0\).