Régression linéaire multiple
Dans l'article précédent, nous avons exploré la régression linéaire simple, qui nous a aidés à comprendre comment une caractéristique (variable indépendante) affecte une cible (variable dépendante). Cependant, les problèmes du monde réel sont souvent plus complexes. Par exemple, lors de la prédiction du prix des maisons, nous ne pouvons pas nous contenter de regarder la superficie de la maison ; nous devons également prendre en compte plusieurs facteurs tels que le nombre de chambres, l'emplacement géographique et l'âge de la maison. À ce stade, nous avons besoin de :Régression linéaire multiple。
En termes simples, la régression linéaire multiple est une extension naturelle de la régression linéaire simple. Elle nous permet d'analyser simultanément l'influence deplusieurs variables indépendantessur une variable dépendante. Cet article vous emmènera de zéro à une compréhension complète des concepts de base, des principes mathématiques, des méthodes d'implémentation et des applications pratiques de la régression linéaire multiple.
1. Qu'est-ce que la régression linéaire multiple ?
1.1 Concepts fondamentaux
La régression linéaire multiple est une méthode statistique utilisée pour établir une relation linéaire entreplusieurs variables indépendantes(également appelées caractéristiques, variables explicatives) etune variable dépendante continue(également appelée cible, variable de réponse).
Une métaphore parlante :Imaginez que vous êtes un chef, ajustant le goût d’une soupe (la cible). La régression linéaire simple, c’est comme ajuster la salinité en utilisant uniquement la quantité de sel. La régression linéaire multiple, c’est comme contrôler en même temps les quantités de sel, de sucre, de piment, de sauce soja et d’autres assaisonnements (caractéristiques) afin de déterminer globalement le goût final de la soupe. La régression multiple vous permet d’analyser la contribution spécifique de chaque assaisonnement au goût.
1.2 Formule du modèle
L’expression mathématique du modèle de régression linéaire multiple est la suivante :
y = β₀ + β₁x₁ + β₂x₂ + ... + βₙxₙ + ε
Décomposons chaque partie de cette formule :
| Symbole | Name | Signification |
|---|---|---|
y |
Variable dépendante | La valeur cible que nous voulons prédire (par ex., le prix d’une maison). |
x₁, x₂, ..., xₙ |
Variable indépendante | Caractéristiques utilisées pour prédirey(par ex., surface, nombre de chambres, ancienneté de la maison). |
β₀ |
Terme d’interception | Lorsque toutes les variables indépendantes valent 0,yla valeur prédite de référence. |
β₁, β₂, ..., βₙ |
Coefficient de régression | Le poids de chaque variable indépendantexᵢ. Cela indique :Lorsque les autres caractéristiques restent inchangées,xᵢpour chaque augmentation de 1 unité de cette variable,yla variation moyenne de la cibleβᵢvaut ce nombre d'unités.C'est le cœur de l'analyse de régression multiple. |
ε |
Terme d'erreur | Fluctuation aléatoire que le modèle ne peut pas expliquer (par exemple, erreur de mesure, facteurs inconnus). |
Exemple d'interprétation de la formule :Supposons que nous prédisions le prix d'une maison (y), le modèle est :房价 = 50000 + 3000 * 面积 + 10000 * 卧室数 - 2000 * 房龄
β₀ = 50000β₀ : Théoriquement, le prix de base d'une « maison » avec une surface de 0, 0 chambre et un âge de la maison de 0.β₁ = 3000β₁ : Avec le nombre de chambres et l'ancienneté de la maison inchangés, pour chaque mètre carré de surface supplémentaire, le prix de la maison augmente en moyenne de 3000 yuan.β₂ = 10000β₂ : Avec la surface et l'ancienneté de la maison inchangées, une chambre supplémentaire augmente le prix de la maison en moyenne de 10000 yuan.β₃ = -2000β₃ : Avec la surface et le nombre de chambres inchangés, pour chaque année supplémentaire d'ancienneté de la maison, le prix de la maison diminue en moyenne de 2000 yuan.
2. Comment « entraîner » un modèle de régression linéaire multiple ?
« Entraîner » un modèle consiste essentiellement à trouver un ensemble de coefficients de régression optimaux à partir de nos données existantes,(β₀, β₁, ..., βₙ)afin que les valeurs prédites par le modèle soient aussi proches que possible des valeurs réelles. Ce processus est généralement réalisé au moyen dela méthode des moindres carrés.
2.1 Objectif : minimiser la fonction de perte
Nous utilisons lasomme des carrés des résidus (RSS)comme fonction de perte pour mesurer l'erreur de prédiction du modèle.RSS = Σ(yᵢ - ŷᵢ)²où,yᵢest la i-èmeivaleur réelle,ŷᵢest la prédiction du modèle pour le i-èmeiéchantillon.
L'objectif d'entraînement est de trouver un ensemble de coefficients qui minimise la valeur du RSS.
2.2 Processus de résolution (forme matricielle)
Lorsque le nombre de caractéristiques est grand, l'utilisation d'opérations matricielles peut représenter et résoudre le modèle plus efficacement. Le modèle peut s'écrire comme suit :Y = Xβ + εoù :
Yy est un vecteur colonne contenant toutes les valeurs cibles.XX est la matrice de conception. La première colonne est généralement entièrement composée de 1 (correspondant au terme d'interceptionβ₀), et chaque colonne suivante correspond à une caractéristique.ββ est un vecteur colonne contenant tous les coefficients de régression.εε est le vecteur des termes d'erreur.
Par dérivation des moindres carrés, la solution optimale (solution sous forme fermée) des coefficientsβpeut être obtenue comme suit :β = (XᵀX)⁻¹XᵀYCette formule est théoriquement parfaite, mais en programmation réelle, nous utilisons généralement des bibliothèques d'optimisation numérique (telles quescikit-learn) pour calculer efficacement et de manière stable. Il gère automatiquement des opérations complexes telles que l'inversion de matrice.
3. Implémentation de la régression linéaire multiple en Python
Utilisons une bibliothèque populaire d'apprentissage automatique à travers un exemple completscikit-learnpour construire un modèle de régression linéaire multiple.
3.1 Configuration de l'environnement et chargement des données
Tout d'abord, assurez-vous que les bibliothèques nécessaires sont installées, puis chargez un jeu de données d'exemple.
Exemple
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.datasets import fetch_california_housing # Un jeu de données multivarié classique
# Charger le jeu de données California housing
california = fetch_california_housing()
df = pd.DataFrame(california.data, columns=california.feature_names)
df['MedHouseVal'] = california.target # Ajouter la colonne cible : valeur médiane des logements
print("Dimensions du jeu de données :", df.shape)
print("\n"Les 5 premières lignes des données :")
print(df.head())
print("\n"Description des caractéristiques :")
print(california.DESCR[:500]) # Afficher une partie de la description
3.2 Exploration et prétraitement des données
Avant la modélisation, il est crucial de comprendre la situation de base des données.
Exemple
print(df.info())
print("\n"Description statistique de base :")
print(df.describe())
# 2. Diviser en caractéristiques (X) et cible (y)
X = df.drop('MedHouseVal', axis=1) # Matrice de caractéristiques : contient toutes les colonnes sauf le prix des maisons
y = df['MedHouseVal'] # Vecteur cible : prix des maisons
# 3. Diviser en ensemble d'entraînement et ensemble de test (70% entraînement, 30% test)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
print(f"\n"Échantillons de l'ensemble d'entraînement : {X_train.shape)
3.3 Créer, entraîner et évaluer le modèle
Maintenant, nous créons un modèle de régression linéaire, nous l'ajustons ("fit") avec les données d'entraînement, et évaluons sa performance sur l'ensemble de test.
Exemple
model = LinearRegression()
# 2. Entraîner le modèle (ajuster les données)
model.fit(X_train, y_train)
# 3. Utiliser le modèle entraîné pour faire des prédictions
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)
# 4. Évaluer les performances du modèle
# Erreur quadratique moyenne (MSE) - plus elle est faible, mieux c'est
train_mse = mean_squared_error(y_train, y_train_pred)
test_mse = mean_squared_error(y_test, y_test_pred)
# Coefficient de détermination (R²) - plus proche de 1, mieux c'est, indiquant un pouvoir explicatif plus fort
train_r2 = r2_score(y_train, y_train_pred)
test_r2 = r2_score(y_test, y_test_pred)
print("=== Évaluation des performances du modèle ===")
print(f"MSE de l'ensemble d'entraînement : {train_mse:.4f}, R² : {train_r2:.4f}")
print(f"MSE de l'ensemble de test : {test_mse:.4f}, R² : {test_r2:.4f}")
# 5. Afficher les paramètres appris du modèle
print("\n"=== Paramètres du modèle ===")
print(f"Ordonnée à l'origine (β₀) : {model.intercept_:.4f}")
print("Coefficients de régression (β₁, β₂, ...):")
for feature, coef in zip(X.columns, model.coef_):
print(f" {feature}: {coef:.4f}")
3.4 Interprétation des résultats et visualisation
Comprendre la signification des coefficients et des métriques d'évaluation.
Exemple
plt.figure(figsize=(8, 6))
plt.scatter(y_test, y_test_pred, alpha=0.5)
plt.plot([y.min(), y.max()], [y.min(), y.max()], 'r--', lw=2) # Tracer la ligne diagonale idéale
plt.xlabel('Prix réel de la maison')
plt.ylabel('Prix prédit de la maison')
plt.title('Régression linéaire multiple : valeurs réelles vs valeurs prédites (ensemble de test)')
plt.grid(True, linestyle='--', alpha=0.7)
plt.show()
# Visualisation : importance des caractéristiques (approximativement représentée par la valeur absolue des coefficients)
features = X.columns
coefs = model.coef_
plt.figure(figsize=(10, 6))
bars = plt.barh(features, np.abs(coefs)) # Utiliser les valeurs absolues pour comparer l'ampleur de l'influence
plt.xlabel('Valeur absolue du coefficient de régression')
plt.title('Ampleur de l'influence des caractéristiques sur le prix des maisons (basée sur les coefficients absolus)')
# Ajouter des étiquettes de valeur au diagramme à barres
for bar, coef in zip(bars, coefs):
width = bar.get_width()
plt.text(width + 0.01, bar.get_y() + bar.get_height()/2, f'{coef:.4f}', va='center')
plt.grid(True, axis='x', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()
4. Considérations et défis de la régression linéaire multiple
4.1 Hypothèses clés
La validité du modèle de régression linéaire repose sur plusieurs hypothèses statistiques :
- Linéarité: Il existe une relation linéaire entre les variables indépendantes et dépendantes.
- Indépendance: Les observations sont indépendantes les unes des autres.
- Homoscédasticité: La variance du terme d'erreur reste constante pour toutes les observations.
- Normalité: Le terme d'erreur suit une distribution normale.
- Absence de multicolinéarité: Il ne devrait pas y avoir de corrélation élevée entre les variables indépendantes.
4.2 Défis courants et solutions
| Défi | Description | Conséquences possibles | Solutions |
|---|---|---|---|
| Multicolinéarité | Les caractéristiques sont fortement corrélées entre elles. | Les estimations des coefficients sont instables, ce qui rend difficile l’interprétation de l’effet des caractéristiques individuelles. | 1. Utilisez une matrice de corrélation pour vérifier et supprimer les caractéristiques fortement corrélées. 2. Utilisez l’analyse en composantes principales (PCA) pour la réduction de dimensionnalité. 3. Utilisez des méthodes de régularisation (comme la régression ridge). |
| Surapprentissage | Le modèle est trop complexe, s’ajuste parfaitement au bruit dans les données d’entraînement et obtient de mauvaises performances sur l’ensemble de test. | L’erreur de l’ensemble de test est bien plus grande que l’erreur de l’ensemble d’entraînement. | 1. Collectez davantage de données. 2. Utilisez moins de caractéristiques (sélection de caractéristiques). 3. Utilisez la régularisation. |
| Relation non linéaire | La relation entre les données est intrinsèquement non linéaire. | Le modèle a une faible capacité prédictive et une valeur R² basse. | 1. Transformez les caractéristiques (par exemple, caractéristiques polynomiales, transformation logarithmique). 2. Utilisez des modèles non linéaires (tels que les arbres de décision, les réseaux de neurones). |
5. Pratique concrète : consolidez votre compréhension
À vous de jouer maintenant ! Réalisez les exercices suivants afin de consolider votre compréhension de la régression linéaire multiple.
Exercice 1 : Interprétation du modèle
À l'aide des coefficients du modèle fournis par le code ci-dessus, répondez aux questions suivantes :
- Quelle caractéristique a le plus grandimpact positifsur les prix des logements en Californie ? (D'après les valeurs des coefficients)
- Quelle caractéristique a unimpact négatif sur les prix des logements en Californie ??
- Comment interprétez-vous
AveRoomsle coefficient de (nombre moyen de pièces) ? Veuillez décrire en une phrase complète.
Exercice 2 : Diagnostiquer la multicolinéarité
- Calculez la
Xmatrice de corrélation des caractéristiques (df.corr())。 - Trouvez les paires de caractéristiques dont la corrélation absolue est supérieure à 0.7. Elles peuvent présenter de la multicolinéarité.
- (Facultatif) Essayez de supprimer l'une des caractéristiques fortement corrélées du modèle, réentraînez, et observez comment les coefficients et le score R² changent.
Exercice 3 : Essayez un nouveau jeu de données
- from
sklearn.datasetschargez un autre jeu de données de régression, tel queload_diabetes(le jeu de données diabetes). - Répétez les étapes de modélisation de cet article : exploration des données, division, entraînement, évaluation, visualisation.
- Comparez les performances du modèle sur les deux jeux de données, et réfléchissez aux raisons possibles.