Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Machine Learning
  3. Algorithmes de régression
Extrait - Machine Learning Implémentation en Python avec Scikit-learn (2e édition)
Extraits du livre
Machine Learning Implémentation en Python avec Scikit-learn (2e édition)
1 avis
Revenir à la page d'achat du livre

Algorithmes de régression

La tâche de régression

1. Définition

La tâche de régression est, avec la classification, l’une des deux principales tâches de Machine Learning en apprentissage supervisé.

La régression consiste à associer une valeur numérique (variable cible) à un ensemble de variables explicatives. Contrairement à la classification où la valeur prédite ne pouvait prendre que certaines valeurs (les catégories), ici il s’agit d’une variable continue.

La majorité des algorithmes n’ont pas de notion de bornes, la valeur prédite peut couvrir l’ensemble des valeurs possibles. Un post-traitement est donc souvent nécessaire pour ramener la valeur dans l’intervalle possible (par exemple entre 0 et 20 s’il s’agit d’une note).

Attention : la régression permet de trouver un lien de corrélation entre les variables explicatives et la variable cible. Cette corrélation ne doit pas être confondue avec une causalité. Par exemple, une corrélation découverte entre les capacités de mémorisation et le nombre de dents ne signifie pas pour autant que la perte de dents soit la cause de la baisse de la mémoire : il y a peut-être une autre raison non présente dans les données (comme l’âge).

2. Exemples de cas pratiques...

Entraînement et évaluation des modèles

Avant même de voir le fonctionnement des principaux algorithmes, il est important de comprendre comment les modèles seront évalués vu que l’évaluation ne dépend pas de l’algorithme.

L’évaluation sera faite sur l’ensemble de validation lors du choix des hyperparamètres et/ou du modèle, et sur l’ensemble de test à la fin du processus, lorsque le ou les meilleurs modèles auront été déterminés.

L’évaluation se fait aussi régulièrement sur l’ensemble d’apprentissage. Si cette évaluation n’a pas pour but de décider d’un modèle, elle permet de vérifier s’il y a eu apprentissage et s’il n’y a pas de surapprentissage.

Avec Scikit-learn, le processus sera toujours le même :

  • Créer un modèle en lui indiquant les paramètres souhaités. Dans le cas de la régression, la classe sera un Regressor (dans l’exemple, il s’agit d’un DecisionTreeRegressor, c’est-à-dire un arbre de décision adapté à la régression).

  • Faire l’apprentissage grâce à fit, en lui fournissant les données X et y d’apprentissage. 

  • Prédire des résultats sur le dataset souhaité grâce à predict (à partir de données X, obtention des données prédites).

  • Appeler les différentes métriques souhaitées (présentes dans sklearn.metrics) avec en paramètres les résultats attendus et les données prédites).

Les fonctions et le processus sont les mêmes que dans le cadre de la classification, la différence se fait sur la préparation des données et l’algorithme utilisé. De même, les métriques sont différentes car dépendantes de la tâche à effectuer.

En termes de code, cela ressemble donc à ceci (ici sur le dataset Boston) :

import prepare 
import sklearn.metrics 
from sklearn.tree import DecisionTreeRegressor 

# Chargement des données 
train_X, test_X, train_y, test_y = prepare.prepare_boston() 
names = ['CRIM', 'ZN', 'INDUS'...

Utilisation des algorithmes de classification

Les algorithmes de classification sont pour la plupart utilisables pour faire de la régression, moyennant quelques adaptations.

1. Principe général

Les algorithmes de classification peuvent prédire la classe (variable cible) à partir de variables explicatives. Le nombre de classes est défini en amont.

Dans le cas de la régression, il y a une infinité de valeurs possibles. Les algorithmes de classification ne peuvent donc pas toutes les prédire.

Il est cependant possible de déterminer un nombre défini de valeurs potentielles. L’algorithme associera à chaque donnée la valeur de la variable cible la plus proche parmi les potentielles.

images/ML7_8.png

Dans ce schéma, la prédiction est en forme d’escalier. À chaque plateau correspond une classe associée.

Bien évidemment, cela est souvent moins proche de la réalité qu’un algorithme dédié à la régression, mais les algorithmes de classification sont simples à mettre en place, efficaces, peu soumis au surapprentissage et généralement faciles à comprendre.

Il existe pourtant une complexité supplémentaire dans le cas de la régression : l’algorithme devra aussi déterminer les différents paliers, en plus de la classification dans ceux-ci (il s’agira cependant généralement d’un échantillonnage de l’amplitude voulue).

Les algorithmes de classification faisant l’objet du chapitre Algorithmes de classification, le fonctionnement de ceux-ci et les principaux paramètres ne seront pas revus dans ce chapitre.

2. Arbres de décision et algorithmes dérivés

a. Arbres de décision

Les arbres de décision sont utilisables pour faire de la régression. Au lieu d’associer une classe à chaque feuille, c’est la valeur moyenne de la variable cible des éléments dans cette feuille qui sera utilisée. Cela produit des fonctions « en paliers »....

Régression linéaire et variantes

1. Régression linéaire

La régression linéaire est l’algorithme fondateur de la régression. Il s’agit de déterminer une droite en fonction des différents attributs.

Dans le cas particulier où il n’y aurait qu’un seul attribut, cela consiste à trouver la droite d’équation y=ax+b, où a est dite pente et b est nommée ordonnée à l’origine.

images/ML7_10.png

Comme il existe une infinité de droites, la droite renvoyée est celle menant à l’erreur quadratique la plus faible possible. La régression linéaire s’appelle donc en anglais Ordinary Least Squares.

Le nombre d’entrées est généralement important (entre 10 et plus de 1000 selon les problèmes). L’équation de la droite devient donc images/ML7_11.png.

La pente est remplacée par un ensemble de facteurs (ai) et l’ordonnée à l’origine par le premier de ces facteurs (a0).

Cet algorithme possède de nombreux avantages : il est simple, rapide à calculer, mais surtout il est interprétable. En effet, chaque coefficient indique l’influence de la variable sur le résultat, et surtout son sens, selon s’il est positif ou négatif.

2. Application dans Scikit-learn

Dans Scikit-learn, la classe correspondant à cette régression linéaire est LinearRegression. Il est ensuite possible de demander les différents facteurs via coef_ et intercept_.

L’implémentation sur le dataset Boston est la suivante :

from sklearn.linear_model import LinearRegression 
from sklearn import metrics 
 
regressor = LinearRegression() 
regressor.fit(train_X, train_y) 
pred_y = regressor.predict(test_X) 
print(metrics.mean_squared_error(test_y, pred_y)) 
 
> 28.02570186948499 
 
regressor.coef_ 
 
> array([ 2.31663318e-02,  1.66826494e-03,  2.56646848e-02,  
3.16764647e+00, -1.54366811e+01,  4.90731544e+00, 
-5.88145304e-03, -1.15437553e+00, 1.29222513e-01, 
-8.90055909e-04, -9.09406332e-01,  1.26558793e-02,  
-5.00701788e-01]) 
 
regressor.intercept_ 
 
> 22.723249676973637 

La régression linéaire...

Régression polynomiale

1. Principe

Dans de nombreux cas, la fonction permettant d’obtenir la variable cible à partir des variables explicatives n’est pas linéaire.

Toutes les régressions vues précédemment (Ordinary Least Square, Ridge et Lasso) ne permettent de résoudre que des problèmes linéaires.

D’autres formes de régressions existent, qui sont non linéaires. La principale est la régression polynomiale, qui permet de trouver une fonction utilisant à la fois les variables explicatives et celles-ci à un ordre supérieur (x2, x3, x4...). Le degré de la fonction est la puissance la plus élevée.

Il est aussi possible de mixer les variables, par exemple en en créant de nouvelles comme des multiplications des précédentes, par exemple x1x2. Cette nouvelle variable est donc aussi de 2nd ordre.

Soit deux variables x1 et x2, l’équation de degré 2 cherchée est donc la suivante images/ML7_12.png.
Si chaque variable ou multiplication de variable est remplacée par une nouvelle variable z, l’équation devient images/ML7_13.png.

Si les différentes features sont pré-calculées, la régression polynomiale est donc une régression linéaire dans ce nouvel espace et les algorithmes vus précédemment sont tout indiqués.

2. Régression...

Cas particulier de la prédiction

1. Prédiction et séries temporelles

Le problème de prédiction (Forecast en anglais) consiste à prédire la variable cible non pas à partir de variables explicatives mais à partir des valeurs précédentes de la cible.

Dans le cas du dataset Boston, un problème de prédiction pourrait être de prédire le prix moyen des appartements à partir de l’historique de ces prix au lieu des caractéristiques du bien.

Généralement, il n’y a donc pas de dataset en tant que tel mais une série de valeurs dite série temporelle.

Les séries temporelles sont généralement composées de deux champs uniquement :

  • La date (optionnelle, il peut s’agir d’indices)

  • La valeur à cette date

La variable cible est donc aussi la variable explicative.

Une série temporelle peut être vue comme la décomposition de la série en quatre éléments :

  • La tendance générale, qui peut être stable, à la hausse ou à la baisse, linéaire ou non.

  • Les saisonnalités, qui sont des variations qui reviennent à des fréquences données, par exemple une hausse des ventes des décorations de Noël chaque année en novembre/décembre. Bien que le nom fasse penser aux saisons, la fréquence peut être beaucoup plus courte, par exemple une évolution qui dépend de l’heure de la journée.

  • Les cycles, qui sont des variations qui reviennent régulièrement mais à des fréquences non définies. Il est donc souvent difficile de prédire les prochaines hausses ou baisses, comme le cours de la bourse, et, dans une moindre mesure, la météo.

  • Le bruit, qui est une variation non prévisible et qui sera souvent présent dans les erreurs. Si le bruit est trop important, aucune prédiction ne sera possible sur la série temporelle.

Le graphique suivant présente une série temporelle sur 100 pas de temps, avec des valeurs entre -10 et 60 :

images/ML7_16.png

La tendance générale de cette courbe est une croissance linéaire d’équation y = x/2 :

images/ML7_17.png

À cette tendance générale s’ajoute une saisonnalité...