Vous êtes sur la page 1sur 4

TP3_sujet

May 11, 2023

1 TP 3 : Régression Linéaire

Supposons que l’on ait 2 variables statistiques 𝑥 et 𝑦 sur une même population. Lorsque l’on place
les points de coordonnées (𝑥𝑗 , 𝑦𝑗 ) (c’est ce que l’on appelle une représentation en nuage de points),
il est possible que ces points soient alignés. Réaliser une régression linéaire, c’est trouver la droite
s’approchant au mieux de ces points. Nous préciserons ce que signifie cette phrase au cours de ce
TP.
Ce genre d’approximation a plusieurs avantages : trouver des constantes physiques, estimer la
précision d’un capteur, prolonger les données.
[ ]: import numpy as np
import matplotlib.pyplot as plt

1.1 Chute d’un corps

On réalise l’expérience suivante. À 𝑡 = 0s, on lache une masse 𝑚 d’une hauteur initiale ℎ0 devant
une règle graduée. L’expérience est filmée, et la caméra enregistre 60 images par secondes. Mal-
heureusement, la vidéo est mal cadrée et il manque le début de la chute. De plus, on a oublié de
noter la hauteur initiale. L’objectif de cette partie est de retrouver ℎ0 à partir de la fin de la série.

Temps (s) 0.1 0.117 0.133 0.15 0.167 0.183 0.2 0.217
Position (m) 0.412 0.377 0.336 0.289 0.238 0.180 0.118 0.0496

[ ]: t = np.array([0.1,0.11666667, 0.13333333, 0.15, 0.16666667, 0.18333333, 0.2, 0.


↪21666667])

y = np.array([0.412, 0.376575, 0.3357, 0.289375, 0.2376, 0.180375, 0.1177, 0.


↪049575])

N = len(y)

[ ]: plt.figure()

plt.xlabel('Temps (s)')
plt.ylabel('Position (m)')
plt.show()

1
1. À partir du PFD, établir l’équation de chute du corps. On négligera le frottement de l’air
devant la pesanteur.
2. Mettre l’équation obtenue sous la forme 𝑦 = 𝑎𝑥 + 𝑏, où 𝑥 est une variable que l’on définira
3. Compléter la définition de x
4. Jouer avec les paramètres a et b pour obtenir une droite approximant la série
5. On definit l’erreur de l’approximation ainsi :
𝑁
2
𝑓(𝑎, 𝑏) = ∑ (𝑦𝑗 − (𝑎𝑥𝑗 + 𝑏))
𝑗=1

Compléter la ligne relative à la définition de l’erreur et donner l’erreur associée à votre ap-
proximation.
[ ]: x =

a =
b =

def erreur(a,b):
rep=0
for j in range(N):
rep+=0 #???
return rep

plt.figure()
plt.plot(x,y,'o',label='Données')
plt.plot([0.01,0.0484],[a*0.01+b,a*0.0484+b],label='Approximation')
plt.plot([],[],'w',label='Erreur : {:.5f} m$^2$'.format(erreur(a,b)))
plt.xlabel('$x$ (SII)')
plt.ylabel('Position (m)')
plt.legend()
plt.show()

L’erreur définie précédemment est appelée erreur quadratique. Géométriquement, il s’agit de la


somme des distances verticales des points de données à la droite d’approximation élevées au carré.
L’objectif de la régression linéaire est de trouver les valeurs de a et b qui minimisent l’erreur
quadratique. Mathématiquement, on doit résoudre les 2 équations suivantes :

grad(𝑒)(𝑎, 𝑏) = (0, 0)

Avec grad(𝑒) le gradient de l’erreur. Il s’agit de la généralisation de la dérivée pour des fonctions à
plusieurs variables. On montre que les valeurs des 𝑎 et 𝑏 qui vérifient cette équation sont :

𝐶𝑜𝑣(𝑥, 𝑦)
𝑎=
𝑉 (𝑥)

𝑏 = 𝑦 ̄ − 𝑎𝑥 ̄
6. Compléter les lignes ci-dessous pour calculer les caractéristiques de 𝑥 et 𝑦.

2
[ ]: moy_x =
moy_y =

var_x = 0
var_y = 0
cov_xy = 0
for j in range(N):
var_x+=
var_y+=
cov_xy+=

7. Caculer les coefficients de la régression linéaire


[ ]: a = cov_xy/var_x
b = moy_y-a*moy_x

print(a,b)

1.2 Étude des vagues

L’étude du champs de vague a des intérêt dans de nombreux domaines. Celle-ci est menée générale-
ment par des données in-situ, ainsi que des modèles numériques. Ces derniers doivent être validés.
[ ]: # Charger les données
serie_sim = np.load('wave_sim.npy')
serie_obs = np.load('wave_obs.npy')
N= len(serie_obs)

[ ]: plt.figure()
plt.plot(serie_sim,label='Simulation')
plt.plot(serie_obs,'.',label='Données bouée')
plt.xlabel('Temps (unité arbitraire)')
plt.ylabel('$H_{m0}$ (m)')
plt.legend()
plt.show()

Les résultats du modèle numérique donnent des résultats proches des données in-situ. Un des
moyens de vérifier sa performance constiste à vérifier que la régression linéaire s’approche de la
fonction identité 𝑦 = 𝑥.
La première étape consiste à vérifier que les points sont alignés. L’une des caractéristiques qui
caractérise cet alignement est le coefficient de corrélation :
Cov(𝑥, 𝑦)
𝑟=
𝜎𝑥 𝜎𝑦

Ce coefficient est compris entre -1 et 1. Son signe indique la croissance ou décroissance de la


régression. Plus sa valeur est proche de 1, plus les points sont alignés.

3
8. Compléter les lignes ci-dessous pour calculer le coefficient de corrélation
[ ]: # Coefficient de corrélation

moy_obs =
moy_sim =
var_obs =
var_sim =
cov =

print('r = {:.2f}'.format(cov/np.sqrt(var_obs*var_sim)))

[ ]: # Nuage de point
plt.figure()

plt.xlabel('$H_{m0}$ observé (m)')


plt.ylabel('$H_{m0}$ simulé (m)')
plt.show()

9. Commenter la valeur du coefficient obtenu, en particulier avec la figure ci-dessus


10. Utiliser la formule ci-dessus pour calculer les coefficents de la régression linéaire. On identifiera
quelle série joue quel rôle dans l’équation 𝑦 = 𝑎𝑥 + 𝑏.
[ ]: a =
b =

print('sim = {:.2f}*obs + {:.2f}'.format(a,b))

[ ]: # Regression linéaire
plt.figure()
plt.plot(serie_obs,serie_sim,'.')
plt.plot([0,7],[a*0+b,a*7+b])
plt.xlabel('$H_{m0}$ observé (m)')
plt.ylabel('$H_{m0}$ simulé (m)')
plt.show()

11. Commenter la régression obtenue

Vous aimerez peut-être aussi