Linear Regression - Score R2
1. 2. Le modèle
2. 3. Calcul du R2 : Calcul de SS_res
3. 4. Calcul du R2 : Calcul de SS_tot
4. 5. Calcul du score R2
2. 3. Calcul du R2 : Calcul de SS_res
3. 4. Calcul du R2 : Calcul de SS_tot
4. 5. Calcul du score R2
1. 2. Le modèle
Données observées
np.random.seed(0)
x = np.random.rand(20, 1) * 10
y = (3 * x + np.random.randn(20, 1) * 5).reshape(-1, 1)
Données observées + Prédictions
model = LinearRegression()
model.fit(x, y)
y_prod = model.predict(x)
plt.scatter(x, y)
plt.plot(x, y_pred, c='green')
2. 3. Calcul du R2 : Calcul de SS_res
Données observées + Prédictions + Résidus
for i in range(len(x)):
plt.plot([x[i][0], x[i][0]], [y[i][0], y_pred[i][0]], color='red', linestyle='--', lw=2)
plt.scatter(x, y, s=80, c='k', zorder=1)
plt.plot(x, y_pred, c='green', lw=3, label='Modèle linéaire')
SS_Res = Somme des carrés des différences entre les valeurs observées et les valeurs prédites
SS_res = np.sum(y - y_pred)**2
671.2521396628815
3. 4. Calcul du R2 : Calcul de SS_tot
Moyenne des valeurs observées
mean_y = np.mean(y)
17.476609455664523
SS_tot = Somme des carrés des différences entre les valeurs observées et la moyenne
SS_tot = np.sum((y - mean_yd)**2)
2501.892933572625
Données observées + Différence à la moyenne
for i in range(len(x)):
plt.plot([x[i][0], x[i][0]], [y[i][0], mean_y], color='blue', linestyle='--', lw=2)
plt.scatter(x, y, s=80, c='k', zorder=1)
plt.axline(mean_y, color='blue', label='Moyenne de y', linestyle='-', lw=2)
4. 5. Calcul du score R2
SS_res = 671.25
SS_tot = 2501.89
R2 = 0.731702292030397
SS_tot = 2501.89
R2 = 0.731702292030397
Calcul du score R2 avec Sklearn
from sklearn.metrics import r2_score
r2 = r2_score(y, y_pred)
0.731702292030397