Optimisation aux moindres carrés

Introduction aux modèles linéaires en Python

Jason Vestuto

Data Scientist

Minimums de la RSS

Graphique des valeurs RSS en ordonnée selon la pente en abscisse, formant une parabole ouverte vers le haut, avec un minimum près de slope=25

En posant la dérivée de RSS par rapport à la pente égale à zéro, et avec un peu de calcul :

  • $a_1 = covariance(x, y) / variance(x) $
  • $a_0 = mean(y) - a_1 \times mean(x) $
Introduction aux modèles linéaires en Python

Optimisé avec Numpy

Expressions Numpy de la pente et de l'ordonnée à l'origine optimales

x_mean = np.mean(x)
y_mean = np.mean(y)
x_dev = x - x_mean
y_dev = y - y_mean
a1 = np.sum( x_dev * y_dev ) / np.sum( x_dev**2 )
a0 = y_mean - (a1*x_mean)
Introduction aux modèles linéaires en Python

Optimisé avec Scipy

from scipy import optimize
x_data, y_data  = load_data()
def model_func(x, a0, a1):
    return a0 + (a1*x)
param_opt, param_cov = optimize.curve_fit(model_func, x_data, y_data)
a0 = param_opt[0]  # a0 est l'ordonnée à l'origine dans y = a0 + a1*x
a1 = param_opt[1]  # a1 est la pente                 dans y = a0 + a1*x
Introduction aux modèles linéaires en Python

Optimisé avec Statsmodels

from statsmodels.formula.api import ols
x_data, y_data = load_data()
df = pd.DataFrame(dict(x_name=x_data, y_name=y_data))
model_fit = ols(formula="y_name ~ x_name", data=df).fit()
y_model = model_fit.predict(df)
x_model = x_data
a0 = model_fit.params['Intercept']
a1 = model_fit.params['x_name']
Introduction aux modèles linéaires en Python

Passons à la pratique !

Introduction aux modèles linéaires en Python

Preparing Video For Download...