Vous êtes sur la page 1sur 33

Introduction

Principe
Code en python
Code en R

Estimation non paramétrique des lois par noyaux


gaussiens et simulation
KDE

DEHMANE Malak
LACHGER Abderrazzak
AHMITO Meriem
AKIL Hajar
RAJAFALLAH Mouhcine

ENSAM-Casablanca

March 21, 2024

1 / 32
Introduction
Principe
Code en python
Code en R

Table de Matières

1 Introduction

2 Principe

3 Code en python

4 Code en R

2 / 32
Introduction
Principe
Code en python
Code en R

Table of Contents

1 Introduction

2 Principe

3 Code en python

4 Code en R

3 / 32
Introduction
Principe
Code en python
Code en R

Introduction
Au lieu de fixer des paramètres spécifiques pour décrire la
distribution des données, l’estimation non paramétrique utilise des
techniques plus flexibles qui s’adaptent aux données elles-mêmes,
comme l’exemple de l’estimation par noyau gaussien.

4 / 32
Introduction
Principe
Code en python
Code en R

Table of Contents

1 Introduction

2 Principe

3 Code en python

4 Code en R

5 / 32
Introduction
Principe
Code en python
Code en R

KDE

Définition
the kernel density estimation (KDE) est une méthode non
paramétrique utilisée pour estimer la densité de probabilité d’une
variable aléatoire. L’estimation de la densité est obtenue en
superposant des fonctions noyaux (ou kernels) centrées sur chaque
point de données, puis en les pondérant pour obtenir une
estimation continue

propriétés
la fonction Kernel doit être positive, symétrique,décroissante

6 / 32
Introduction
Principe
Code en python
Code en R

KDE
idée du principe
Le principe de la Kernel Density Estimation (KDE) repose sur la
construction d’une estimation continue de la densité de probabilité
d’une variable aléatoire à partir d’un ensemble fini d’observations
en utilisant cette formule :
n  
ˆ 1 X x − Xi
f (x) = K
n·h h
i=1

Où :
fˆ(x) est l’estimation de la densité de probabilité à
l’emplacement x.
K est une fonction noyau.
h est la largeur de la bande.
7 / 32
Introduction
Principe
Code en python
Code en R

Figure: Fonction de densité de


divers noyau avec en 2D
Figure: Fonction de densité de
divers noyau avec en 3D

8 / 32
Introduction
Principe
Code en python
Code en R

La largeur de bande optimale h

Choix de la bande h
Le choix de la largeur de bande a une influence significative sur la
fonction (KDE). La largeur de bande h contrôle le degré de lissage
de l’estimation de la densité. Une valeur plus grande de h produit
une estimation plus lisse, tandis qu’une valeur plus petite de h
donne une estimation plus granulaire avec plus de détails. Cela
signifie qu’une large valeur de h rendra la fonction de densité
estimée plus ”plate” et moins sensible aux variations locales des
données, tandis qu’une petite valeur de h la rendra plus ”pointue”
et plus sensible aux fluctuations des données.

8 / 32
Introduction
Principe
Code en python
Code en R

Mean Integrated Squared Error (MISE)

Définition de la MISE
La Mean Integrated Squared Error (MISE) est une mesure
couramment utilisée pour évaluer la performance de la Kernel
Density Estimation (KDE) et pour choisir la largeur de bande
optimale h par validation croisée. La formule de la MISE est la
suivante :
Z  2
MISE(h) = fˆ(x) − f (x) dx

Où :
fˆ(x) est l’estimation de la densité de probabilité.
f (x) est la vraie densité de probabilité sous-jacente.

9 / 32
Introduction
Principe
Code en python
Code en R

L’intégration est effectuée sur tout l’espace des observations.


La MISE mesure la moyenne des erreurs quadratiques entre la
densité de probabilité estimée fˆ(x) et la vraie densité de
probabilité f (x) sur tout l’espace des observations.

10 / 32
Introduction
Principe
Code en python
Code en R

Problème

On ne sait pas la vraie


densité de probabilité f (x)!

11 / 32
Introduction
Principe
Code en python
Code en R

Règle de Silverman

Définition de la règle de Silverman


Afin de résoudre ce problème, l’une des approches les plus
couramment utilisées est la règle de Silverman, qui est une
méthode de sélection automatique de la largeur de bande
basée sur les propriétés des données. La formule de la règle de
Silverman pour le choix de h est la suivante :
 1
4 5
h= ·σ
3n

Où :
n est le nombre d’observations dans l’échantillon.
σ est l’écart-type des données.

12 / 32
Introduction
Principe
Code en python
Code en R

Table of Contents

1 Introduction

2 Principe

3 Code en python

4 Code en R

13 / 32
Introduction
Principe
Code en python
Code en R

Graphique

14 / 32
Introduction
Principe
Code en python
Code en R

Remaque
La représentation mathématique du noyau gaussien est :

(xi − x)2
 
1
√ · exp −
2πbandwidth2 2bandwidth2

15 / 32
Introduction
Principe
Code en python
Code en R

Code Python

import numpy as np
import matplotlib . pyplot as plt

def gauss_kernel ( xi , x , bandwidth ) :


return (1 / np . sqrt (2 * np . pi * bandwidth **2) ) *
np . exp ( -( xi - x ) **2 / (2 * bandwidth **2) )

def kde ( data , xi , bandwidth ) :


kde_result = np . zeros_like ( xi )
for i , xi_val in enumerate ( xi ) :
for data_point in data :
kde_result [ i ] += gauss_kernel ( xi_val ,
data_point , bandwidth )
kde_result [ i ] /= len ( data ) * bandwidth
return kde_result

16 / 32
Introduction
Principe
Code en python
Code en R

Code Python

np . random . seed (0)


dataSource = [93 , 93 , 96 , 100 , 101 , 102 , 102]
xiData = np . linspace (88 , 107 , 1000)

bandwidth = 2

kde_result = kde ( dataSource , xiData , bandwidth )

plt . figure ( figsize =(10 , 6) )


for data_point in dataSource :
gaussian_kernel = 0.115 * gauss_kernel ( xiData ,
data_point , bandwidth )
plt . plot ( xiData , gaussian_kernel , color = ’ orange ’ ,
linestyle = ’ -- ’)

17 / 32
Introduction
Principe
Code en python
Code en R

Code Python

plt . plot ( xiData , kde_result , label = ’ KDE ’ , color = ’ blue ’


, linewidth =2)
plt . scatter ( dataSource , np . zeros_like ( dataSource ) ,
label = ’ Observations ’ , color = ’ red ’ , alpha =0.5)

plt . title ( ’ Estimation de d e n s i t par noyau gaussien (


KDE ) ’)
plt . xlabel ( ’ D o n n e s ’)
plt . ylabel ( ’ D e n s i t ’)
plt . legend ()
plt . grid ( True )
plt . show ()

18 / 32
Introduction
Principe
Code en python
Code en R

19 / 32
Introduction
Principe
Code en python
Code en R

Explication de code

1. Importation des bibliothèques nécessaires :


import numpy as np
import matplotlib . pyplot as plt

numpy est une bibliothèque Python utilisée pour effectuer des


opérations numériques, tandis que matplotlib.pyplot est utilisé
pour créer des graphiques.

20 / 32
Introduction
Principe
Code en python
Code en R

Explication de code

2. Définition de la fonction de noyau gaussien :


def gauss_kernel ( xi , x , bandwidth ) :
return (1 / np . sqrt (2 * np . pi * bandwidth **2) ) *
np . exp ( -( xi - x ) **2 / (2 * bandwidth **2) )

Cette fonction calcule la valeur du noyau gaussien pour un point


xi, un point de données x et une largeur de bande (bandwidth)
donnée. Elle implémente la formule mathématique du noyau
gaussien.

21 / 32
Introduction
Principe
Code en python
Code en R

Explication de code
3. Définition de la fonction pour effectuer l’estimation de densité
par noyau (KDE) :
def kde ( data , xi , bandwidth ) :
kde_result = np . zeros_like ( xi )
for i , xi_val in enumerate ( xi ) :
for data_point in data :
kde_result [ i ] += gauss_kernel ( xi_val ,
data_point , bandwidth )
kde_result [ i ] /= len ( data ) * bandwidth
return kde_result

Cette fonction prend les données (data), la plage de valeurs pour


l’estimation (xi) et la largeur de bande (bandwidth) comme
arguments. Elle itère sur chaque point de la plage de valeurs et
calcule la densité de chaque point en utilisant la fonction de noyau
gaussien.
22 / 32
Introduction
Principe
Code en python
Code en R

Explication de code

4. Génération de données d’échantillon :


np . random . seed (0)
dataSource = [93 , 93 , 96 , 100 , 101 , 102 , 102]
xiData = np . linspace (88 , 107 , 1000)

Ceci génère des données d’échantillon (dataSource) et une plage de


valeurs pour l’estimation (xiData) à l’aide de la fonction linspace
de numpy. La fonction seed assure la reproductibilité des résultats.

23 / 32
Introduction
Principe
Code en python
Code en R

Explication de code

5. Définition de la largeur de bande pour KDE :


bandwidth = 2

La largeur de bande (bandwidth) est définie pour contrôler la


souplesse de l’estimation de densité.

24 / 32
Introduction
Principe
Code en python
Code en R

Explication de code

6. Exécution de l’estimation de densité par noyau (KDE) :


kde_result = kde ( dataSource , xiData , bandwidth )

L’estimation de densité par noyau est effectuée en appelant la


fonction kde avec les données d’échantillon, la plage de valeurs et
la largeur de bande.

25 / 32
Introduction
Principe
Code en python
Code en R

Explication de code

7. Tracé du graphique KDE et des fonctions de noyau gaussien


individuelles :
plt . figure ( figsize =(10 , 6) )
for data_point in dataSource :
gaussian_kernel = 0.115 * gauss_kernel ( xiData ,
data_point , bandwidth )
plt . plot ( xiData , gaussian_kernel , color = ’ orange ’ ,
linestyle = ’ - - ’)
plt . plot ( xiData , kde_result , label = ’ KDE ’ , color = ’
blue ’ , linewidth =2)

26 / 32
Introduction
Principe
Code en python
Code en R

Explication de code

plt . scatter ( dataSource , np . zeros_like ( dataSource ) ,


label = ’ Observations ’ , color = ’ red ’ , alpha =0.5)

plt . title ( ’ Estimation de d e n s i t par noyau gaussien (


KDE ) ’)
plt . xlabel ( ’ D o n n e s ’)
plt . ylabel ( ’ D e n s i t ’)
plt . legend ()
plt . grid ( True )
plt . show ()

Cette partie du code trace le graphique KDE ainsi que les fonctions
de noyau gaussien individuelles pour chaque point de données.
Enfin, il ajoute un titre, des étiquettes d’axe, une légende et affiche
le graphique.

27 / 32
Introduction
Principe
Code en python
Code en R

Table of Contents

1 Introduction

2 Principe

3 Code en python

4 Code en R

28 / 32
Introduction
Principe
Code en python
Code en R

Graphique

29 / 32
Introduction
Principe
Code en python
Code en R

Code en R

30 / 32
Introduction
Principe
Code en python
Code en R

Code en R

31 / 32
Introduction
Principe
Code en python
Code en R

Merci Pour Votre Attention

Merci Pour Votre Attention

32 / 32

Vous aimerez peut-être aussi