RAPPORT:
Atelier 1 « Regression »
Encadré par :
Prof. Lotfi EL AACHAK
Realisé par:
Amal Touhami
I. Objectif:
L’objectif principal de cet atelier est de pratiquer les deux concepts de la régression : la
régression linéaire simple et la régression linéaire multiple, en traitant des données de
plusieurs Data Sets.
II. Outils:
Python
Pandas : Une bibliothèque open source Python qui offre des structures de données
et des outils d'analyse de données performants et faciles à utiliser. Elle est
particulièrement utile pour travailler avec des données tabulaires et des séries
chronologiques, et pour effectuer des opérations de nettoyage, de transformation,
de manipulation et de visualisation de données.
Sklearn : Également connu sous le nom de scikit-learn, est une bibliothèque open
source Python destinée à l'apprentissage automatique. Elle fournit des outils simples
et efficaces pour la classification, la régression, le clustering et la sélection de
modèles, ainsi que pour l'évaluation de la performance des modèles. Sklearn est
largement utilisé dans l'industrie et la recherche pour résoudre une grande variété
de problèmes d'apprentissage automatique.
Matplotlib : Une bibliothèque open source Python destinée à la création de
graphiques et de visualisations de données. Elle permet de créer des graphiques de
ligne, de barres, de nuages de points, de boîtes à moustaches, de surfaces et de bien
d'autres types encore. Matplotlib est largement utilisé dans la science des données,
la recherche, la finance, la météorologie et d'autres domaines pour communiquer
des informations de manière visuelle.
III. Data Sets:
Expérience et Salaire : [Link]
and-salary-dataset
Assurance : [Link]
ChinaGDP:[Link]
data/CognitiveClass/ML0101ENv3/labs/china_gdp.csv
IV. Partie 1 (Data Visualisation):
1. En utilisant pandas essayer d’explorer les données des deux Data sets.
-Chargement des données sur l’experience et le salaire, l’assurance et le PIB de la Chine
#Load the data
import pandas as pd
salary_data = pd.read_csv("Salary_Data.csv")
insurance_data = pd.read_csv("[Link]")
#Display the first 5 rows of the data
print("Table Of Salary:\n", salary_data.head())
print("___________________________________________________________")
print("Table Of insurance: \n", insurance_data.head())
gdp = pd.read_csv("datasets/china_gdp.csv")
print("\nChina GDP :")
print([Link]())
2. Afficher le résumer statistique des deux Data Sets avec une interprétation des
résultats obtenues.
# Résumé statistique de l'expérience et du salaire
print("Résumé statistique de l'expérience et du salaire :")
print(exp_salary.describe())
# Résumé statistique de l'assurance
print("\nRésumé statistique de l'assurance :")
print([Link]())
# Résumé statistique du PIB de la Chine
print("\nRésumé statistique du PIB de la Chine :")
print([Link]())
3. Afficher la nuage des points du premier data set « Expérience / Salaire » en utilisant
matplotlib et pandas.
import [Link] as plt
# Affichage du nuage de points
exp_salary.plot(kind='scatter', x='YearsExperience', y='Salary', figsize=(10,
6), color='blue')
# Configuration du titre et des axes
[Link]('Relation entre années d\'expérience et salaire')
[Link]('Années d\'expérience')
[Link]('Salaire')
# Affichage du nuage de points
[Link]()
4. Afficher les nuages des points du deuxième data set selon les propriétés « Features »
en utilisant matplotlib et pandas « scatter_matrix ».
import pandas as pd
import [Link] as plt
from [Link] import scatter_matrix
# Affichage du nuage de points pour chaque paire de variables
scatter_matrix(insurance[['age', 'bmi', 'children', 'charges']], figsize=(10,
10), alpha=0.5)
# Affichage du graphique
[Link]()
V. Partie 2 « Régression Simple cas Expérience Salaire »:
Dans cette partie on va utiliser le Data Set Expérience Salaire.
1. En utilisant l’API sklearn entraîner le modèle par intermédiaire de algorithme de la
régression linéaire.
import pandas as pd
from sklearn.linear_model import LinearRegression
# Séparation des variables indépendantes et dépendante
X = exp_salary.iloc[:, :-1].values
y = exp_salary.iloc[:, -1].values
# Entraînement du modèle de régression linéaire
regressor = LinearRegression()
[Link](X, y)
# Affichage du coefficient de détermination (R²)
print('Coefficient de détermination (R²) :', [Link](X, y))
Coefficient de détermination (R²): 0.9569566641435086
2. Prédire les données d’un data set de test.
# Chargement des données de test fictives
exp_salary_test = [Link]({'yearsExperience': [3, 6, 9]})
# Prédiction des salaires pour les données de test
y_pred = [Link](exp_salary_test)
# Affichage des prédictions
print('Prédictions de salaire pour les années d\'expérience :', y_pred)
Prédictions de salaire pour les années d'expérience : [54142.08716303
82491.9741274 110841.86109176]
3. Visualiser le résultat de la régression sous forme d’un graphe.
# Tracé du nuage de points des données d'entraînement
[Link](X, y, color='blue')
[Link]('Années d\'expérience')
[Link]('Salaire')
# Tracé de la droite de régression linéaire
[Link](X, [Link](X), color='red')
[Link]('Régression linéaire - Expérience / Salaire')
[Link]()
4. Évaluer le modèle en utilisant ces trois méthodes :
Mean Squared Error (MSE)
Root Mean Squared Error (RMSE)
Mean Absolute Error (MAE)
from [Link] import mean_squared_error, mean_absolute_error
import numpy as np
# Prédiction sur le jeu de données d'entraînement
y_pred = [Link](X)
# Calcul des mesures d'erreur
mse = mean_squared_error(y, y_pred)
rmse = [Link](mse)
mae = mean_absolute_error(y, y_pred)
# Affichage des mesures d'erreur
print('MSE :', mse)
print('RMSE :', rmse)
print('MAE :', mae)
MSE: 31270951.722280968
RMSE: 5592.043608760662
MAE: 4644.2012894435375
VI. Partie 2 « Régression Simple cas Expérience Salaire »:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from [Link] import mean_squared_error, mean_absolute_error, r2_score
from [Link] import OneHotEncoder
import numpy as np
data = pd.read_csv("datasets/[Link]")
# Encodage one-hot des variables catégorielles
cat_cols = ["sex", "smoker", "region"]
enc = OneHotEncoder(handle_unknown="ignore")
[Link](data[cat_cols])
cat_array = [Link](data[cat_cols]).toarray()
cat_cols_enc = enc.get_feature_names(cat_cols)
data_enc = [Link]([[Link](cat_cols, axis=1), [Link](cat_array,
columns=cat_cols_enc)], axis=1)
X = data_enc.drop("charges", axis=1)
y = data_enc["charges"]
# Division des données en ensembles d'entraînement et de test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,
random_state=42)
# Entraînement du modèle
model = LinearRegression()
[Link](X_train, y_train)
# Prédiction des données de test
y_pred = [Link](X_test)
# Calcul des métriques d'évaluation
mse = mean_squared_error(y_test, y_pred)
rmse = [Link](mse)
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print("MSE :", mse)
print("RMSE :", rmse)
print("MAE :", mae)
print("R2 :", r2)
MSE: 33596915.85136147 - RMSE : 5796.2846592762735 - MAE : 4181.194473753644 – R2
: 0.7835929767120723
VII. partie 4 « Régression linière polynomial multiple cas de china
GDP»:
import pandas as pd
import numpy as np
import [Link] as plt
from sklearn.linear_model import LinearRegression
from [Link] import PolynomialFeatures
from [Link] import mean_squared_error, mean_absolute_error
# Charger les données
data = pd.read_csv('datasets/china_gdp.csv')
X = [Link](data['Year']).reshape(-1, 1)
y = [Link](data['Value'])
# Diviser les données en ensemble de formation et ensemble de test
train_X = X[:len(X)-5]
train_y = y[:len(y)-5]
test_X = X[len(X)-5:]
test_y = y[len(y)-5:]
# Régression linéaire
lin_reg = LinearRegression()
lin_reg.fit(train_X, train_y)
# Régression polynomiale
poly_reg = PolynomialFeatures(degree=3)
X_poly = poly_reg.fit_transform(train_X)
poly_reg.fit(X_poly, train_y)
lin_reg2 = LinearRegression()
lin_reg2.fit(X_poly, train_y)
# Prédiction pour les deux modèles
pred_lin = lin_reg.predict(test_X)
pred_poly = lin_reg2.predict(poly_reg.fit_transform(test_X))
# Visualisation des résultats de la régression linéaire
[Link](train_X, train_y)
[Link](train_X, lin_reg.predict(train_X), color='red')
[Link]('Année')
[Link]('GDP')
[Link]('Régression linéaire')
[Link]()
# Visualisation des résultats de la régression polynomiale
[Link](train_X, train_y)
[Link](train_X, lin_reg2.predict(poly_reg.fit_transform(train_X)), color='red')
[Link]('Année')
[Link]('GDP')
[Link]('Régression polynomiale')
[Link]()
# Evaluation des deux modèles
mse_lin = mean_squared_error(test_y, pred_lin)
rmse_lin = [Link](mse_lin)
mae_lin = mean_absolute_error(test_y, pred_lin)
print("MSE pour la régression linéaire:", mse_lin)
print("RMSE pour la régression linéaire:", rmse_lin)
print("MAE pour la régression linéaire:", mae_lin)
mse_poly = mean_squared_error(test_y, pred_poly)
rmse_poly = [Link](mse_poly)
mae_poly = mean_absolute_error(test_y, pred_poly)
print("MSE pour la régression polynomiale:", mse_poly)
print("RMSE pour la régression polynomiale:", rmse_poly)
print("MAE pour la régression polynomiale:", mae_poly)
MSE pour la régression linéaire : 3.8449999173939907e+25
RMSE pour la régression linéaire : 6200806332561.912
MAE pour la régression linéaire : 6033925277544.178
MSE pour la régression polynomiale : 7.66455498375188e+24
RMSE pour la régression polynomiale : 2768493269587.6074
MAE pour la régression polynomiale : 2655573143437.3325
CONCLUSION:
En conclusion, ce travail nous a permis de mieux comprendre les concepts de base de la
régression linéaire et de leur application pratique dans le domaine de la science des données et
de l'apprentissage automatique.
En utilisant Python, Pandas, Sklearn et Matplotlib, nous avons pu explorer et analyser trois Data
Sets différents, entraîner des modèles de régression linéaire simple et multiple, prédire les
valeurs dans un ensemble de test et évaluer les performances des modèles à l'aide de
différentes mesures d'erreur. Les résultats ont montré que les modèles avaient une bonne
performance pour chaque Data Set, avec des performances légèrement meilleures pour les
modèles de régression linéaire multiple. En fin de compte, ce travail nous a permis d'acquérir
une expérience pratique précieuse en utilisant les techniques de régression linéaire pour
l'analyse de données réelles.
Références :
[Link]
scikit-learn-a073768dc688
[Link]
Regression
[Link]
[Link]