Académique Documents
Professionnel Documents
Culture Documents
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
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
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()
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+=
print(a,b)
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(𝑥, 𝑦)
𝑟=
𝜎𝑥 𝜎𝑦
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()
[ ]: # 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()