Optimisation aux moindres carrés

Introduction à la modélisation linéaire en Python

Jason Vestuto

Data Scientist

Minimum de la RSS

Tracé des valeurs RSS en ordonnée selon la pente en abscisse, formant une parabole tournée vers le haut, 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 à la modélisation linéaire 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 à la modélisation linéaire 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 à la modélisation linéaire 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 à la modélisation linéaire en Python

Passons à la pratique !

Introduction à la modélisation linéaire en Python

Preparing Video For Download...