TP – Régression Linéaire
1. Introduction
Le but de cet article est de s’entraîner à implémenter une algèbre linéaire (avec des équations fournies) et d’explorer certaines propriétés de la régression linéaire.
2. Definition
L’objectif de la régression simple (resp. multiple) est d’expliquer une variable à l’aide d’une variable (resp. plusieurs variables ).
La variable est appelée variable dépendante, ou variable à expliquer et les variables sont appelées variables indépendantes, ou variables explicatives.
Un résumé de lecture théorique
Importation des librairies.
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use(['ggplot'])
Nous considérons un problème de régression linéaire de la forme.
Avce sont les entrées et les observations bruyantes ( le terme ). Le vecteur de parametre paramétrise la fonction. Nous supposons d’avoir un jeu de données .
Nous allons définir notre jeu de données d’entraîtenement (training set en anglais) comme et les cibles d’entraînement par respectivement.
Dans ce tutoriel, nous souhaitons trouver les bons parametres .
# Define training set
X = np.array([-3, -1, 0, 1, 3]).reshape(-1,1) # 5x1 vector, N=5, D=1
y = np.array([-1.2, -0.7, 0.14, 0.67, 1.67]).reshape(-1,1) # 5x1 vector
# Plot the training set
plt.figure()
plt.plot(X, y, 'o', markersize=10)
plt.xlabel("$x$")
plt.ylabel("$y$");
3. Maximum Likelihood (où Maximum de vraisemblance)
Nous commencerons par l’estimation du maximum de vraisemblance des paramètres θ. Dans l’estimation du maximum de vraisemblance, nous trouvons les paramètres qui maximisent la vraisemblance.
L’estimateur du maximum de vraisemblance est un estimateur statistique utilisé pour inférer les paramètres de la loi de probabilité d’un échantillon donné en recherchant les valeurs des paramètres maximisant la fonction de vraisemblance. Un estimateur est une statistique permettant d’évaluer un paramètre inconnu relatif à une loi de probabilité (comme son espérance ou sa variance).
.
J’avais mentioné dans un précedent poste introduit en machine learning un lien de la demontration de definie par: avec .
Evaluons l’estimation du maximum de vraisemblance pour un ensemble de données d’apprentissage.
def max_lik_estimate(X, y):
# X: N x D matrix of training inputs
# y: N x 1 vector of training targets/observations
# returns: maximum likelihood parameters (D x 1)
N, D = X.shape
theta_ml = np.linalg.solve(X.T @ X, X.T @ y)
return theta_ml
# get maximum likelihood estimate
theta_ml = max_lik_estimate(X,y)
Nous maintenant faire une préduction utilisant le résultat trouver de l’estimateur du maximum de vraisemblance.
def predict_with_estimate(Xtest, theta):
# Xtest: K x D matrix of test inputs
# theta: D x 1 vector of parameters
# returns: prediction of f(Xtest); K x 1 vector
prediction = Xtest @ theta
return prediction
Regardons maintenant le résultat
# define a test set
Xtest = np.linspace(-5,5,100).reshape(-1,1) # 100 x 1 vector of test inputs
# predict the function values at the test points using the maximum likelihood estimator
ml_prediction = predict_with_estimate(Xtest, theta_ml)
# plot
plt.figure()
plt.plot(X, y, 'o', markersize=10)
plt.plot(Xtest, ml_prediction)
plt.xlabel("$x$")
plt.ylabel("$y$");
Ainsi on peut se poser les questions suivantes: - Est ce que la solution obetue ci-dessu semble-t-elle raisonable ? - En modifiant les valeurs de θ, comment les fonctions correspondantes changent-elle ? -En modifiant la variable à expliquer , qules changements observe–on ?
Examinons maintenant un ensemble d’apprentissage différent, où nous ajoutons 2.0 à chaque valeur y, et calculons l’estimation du maximum de vraisemblance.
ynew = y + 2.0
plt.figure()
plt.plot(X, ynew, '*', markersize=10)
plt.xlabel("$x$")
plt.ylabel("$y$");
# get maximum likelihood estimate
theta_ml = max_lik_estimate(X, ynew)
print(theta_ml)
# define a test set
Xtest = np.linspace(-5,5,100).reshape(-1,1) # 100 x 1 vector of test inputs
# predict the function values at the test points using the maximum likelihood estimator
ml_prediction = predict_with_estimate(Xtest, theta_ml)
# plot
plt.figure()
plt.plot(X, ynew, 'o', markersize=10)
plt.plot(Xtest, ml_prediction)
plt.xlabel("$x$")
plt.ylabel("$y$");
Le suite en construction!
Great tuto by Marc Deisenroth (english version)