TP4 - ML : régression
¶

A. Ridard
In [ ]:
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

Données¶

Présentation¶

A l'aide des données des territoires d’Ile-de-France, nous désirons prédire le salaire médian MED14 des communes.

Importation et affichage¶

Importer les données à l'aide de Pandas.

/!\ Il faut utiliser le paramètre sep de la fonction read_csv avec la valeur ";"

In [ ]:
# réponse

Afficher les données.

In [ ]:
# réponse

Afficher la structure des données.

In [ ]:
# réponse
Données manquantes¶

Supprimer les variables (colonnes) avec "trop" de données manquantes.

In [ ]:
# réponse

Supprimer les individus (lignes) avec des données manquantes

In [ ]:
# réponse
Autres variables à supprimer¶

Supprimer les trois variables quantitatives entières (colonnes de type "int64") qui n'apportent rien ici.

In [ ]:
# réponse
Variables qualitatives¶

Afficher les statistiques des variables qualitatives (colonnes de type "object").

In [ ]:
# réponse

Ajoutons des colonnes Lotitude et Longitude.

In [ ]:
data["Latitude"] = pd.to_numeric(data["geo_point_2d"].str.split(',').str.get(0))
data["Longitude"] = pd.to_numeric(data["geo_point_2d"].str.split(',').str.get(1))

Supprimons enfin les variables qualitatives.

In [ ]:
data = data.select_dtypes(np.number)

Vérifier que les variables sont bien toutes renseignées et de type "float64".

In [ ]:
# réponse

Séparation¶

Séparer la variable cible des variables prédictives.

In [ ]:
# réponse

Préparer les échantillons d'apprentissage et de validation.

In [ ]:
# réponse

Transformation¶

Echantillon d'apprentissage (données d'entraînement)¶

Normaliser les variables quantitatives :

  • créer le transformateur
  • appliquer cette transformation aux variables prédictives de l'échantillon d'apprentissage
In [ ]:
# réponse

Echantillon de validation (données de test)¶

Appliquer cette transformation aux variables prédicitives de l'échantillon de validation.

In [ ]:
# réponse

Apprentissage¶

Choix du modèle¶

Importer la classe du modèle des k plus proches voisins.

In [ ]:
# réponse

Création du modèle¶

Pour le modèle choisi, créer un objet à partir de sa classe en prenant les hyper-paramètres par défaut.

In [ ]:
# réponse

Apprentissage du modèle¶

Ajuster le modèle créé à partir des données d'entraînement.

In [ ]:
# réponse

Validation du modèle¶

Avec le modèle ajusté, prédire la valeur de la variable cible pour les individus de l'échantillon de validation.

In [ ]:
# réponse

On peut enfin valider notre modèle en mesurant sa qualité à l'aide de certains indicateurs : $R^2$, MCE, RMCE, ...

In [ ]:
from sklearn.metrics import r2_score
from sklearn.metrics import mean_squared_error

# le R², à la différence des autres indicateurs, est calculé sur l’échantillon d’apprentissage !
# Il représente la part des variations de la variable cible expliquées par le modèle.
# Plus il est proche de 1, meilleur est le modèle.
print("R2 :", r2_score(y_train, modele_knn.predict(x_train)))

# les autres indicateurs sont basés sur l’échantillon de validation
print("MCE :", mean_squared_error(y_test, y_predict_knn))
print("RMCE :", np.sqrt(mean_squared_error(y_test, y_predict_knn)))

Sélection du meilleur modèle¶

Retour sur le choix des hyper-paramètres (validation croisée)¶

Faire varier les hyper-paramètres de notre modèle pour trouver la meilleure combinaison au regard du RMCE.

Utiliser pour cela le dictionnaire d’hyper-paramètres {"n_neighbors":[2,5,10,50], "weights":['uniform','distance']}.

In [ ]:
# réponse

Autres modèles¶

En vous inspirant de ce qui précède, ajuster et calculer le RMCE pour les modèles suivants (hyper-paramètres par défaut) :

  • Régression linéaire
  • ElasticeNet
  • SVR
In [ ]:
# Régression linéaire
In [ ]:
# ElasticNet
In [ ]:
# SVR

Conclusion¶

Quel est le meilleur modèle ?