Régression logistique
Le modèle de régression logistique est également l’un des modèles les plus populaires en machine learning pour réaliser un classement ( prédire les valeurs d'une variable qualitative sur base de prédicteurs ). Il s'agit d'une technique paramétrique - le modèle doit trouver les meilleurs paramètres au regard des données -.
Cette technique est utilisée pour ajuster la relation entre une variable qualitative ( variable dépendante ) et un ensemble de prédicteurs - variables indépendantes - qui doivent être des variables quantitatives ou des variables qualitatives transformées en variables quantitatives ( encodage one-hot ou numérisation de variables discrètes ).
Le fonctionnement de la régression logistique est quasi identique à la régression linéaire si ce n'est qu'elle utilise une fonction sigmoïde. Tout comme la régression linéaire, nous partons du postulat que et sont dépendants, c’est-à-dire que la connaissance des valeurs des permet d’améliorer la connaissance des valeurs de . Il existe donc une corrélation entre et - pour rappel : au plus une variable est corrélée ( de manière positive ou négative ) à la variable , au plus elle est importante pour notre modèle car on dit qu'elle est « discriminante ». - voir ( corrélation ).
La régression logistique ne prédit pas une valeur qualitative directement mais une probabilité qu'un nouvel enregistrement appartient à une classe.
Linéaire vs logistique
Lorsque l'on évoque le concept de régression, il s'agit de tout processus qui tend à trouver des relations entre les variables.
La régression linéaire cherche à établir une relation linéaire entre la variable dépendante (y) et les variables explicatives ou indépendantes ( ) ( prédicteurs ) Exemple d'une régression linéaire simple : si l’âge de la voiture est de +1, le prix sera impacté de ( selon le coefficient et l’origine de la droite ).
La régression logistique cherche également à établir une relation entre la variable dépendante ( y ) et les variables explicatives ou indépendantes ( ) ( prédicteurs ) **mais utilise une fonction logistique ( le logit ) pour obtenir une valeur entre et soit une probabilité qu'un nouvel enregistrement appartienne à une classe.si l’âge de la voiture augmente de 1 an, la probabilité qu'elle tombe en panne augmentera ou diminuera en fonction du coefficient associé à l'âge dans le modèle..
L'une utilise donc une fonction linéaire alors que l'autre utilise la fonction sigmoïde qui, par une fonction linéaire sous-jacente permet de modéliser une probabilité.

Pourquoi ne pas utiliser une régression linéaire ?
Prenons l'exemple d'un classement à deux valeurs soit ou . J'ai donc une distribution de valeurs pour les deux cas. Si j'utilise une régression linéaire et que je trace la droite. Je pourrais, dans l'exemple illustré ci-dessous à gauche, considérer que la régression linéaire fait un travail correct en partant du postulat que nous définissons un seuil de 0,5 pour dire que toute valeur étant égale ou supérieure à est égale à ( la classe 1 ) et toute valeur inférieure à est égale à ( la classe ). Nous constatons dans le graphique de gauche que toutes les valeurs situées à droite de la perpendiculaire à ont un seuil supérieur ou égal à et donc .
Si tout d'un coup, nous disposons d'un enregistrement dont la valeur de est bien plus importante ( graphique de droite - point mauve ), dans ce cas, la pente de la droite est modifiée et nous constatons que le modèle prédirait une partie des valeurs supérieures ou égales au seuil de comme faisant partie de la classe .

Nous devons donc utiliser une fonction qui nous permet d'obtenir une courbe dont la particularité serait d'appliquer une forme linéaire dans une sous-fonction, lors de l'augmentation exponentielle des valeurs, mais qui à son commencement et à sa fin serait plate de sorte que les valeurs resteraient toujours comprises entre et . Concrètement, il s'agit d'une fonction en forme de S pour assurer que les valeurs possibles soient comprises entre et .

Fonction sigmoïde
La fonction sigmoïde - fonction logistique - est une fonction mathématique en forme de S dont la particularité est de transformer n'importe quelle valeur en un nombre compris entre et .
ou
représente la sous-fonction linéaire. Tout comme la régression linéaire, l'algorithme de la régression logistique dispose de données d'entrainement, c'est à dire des et des et, sur base de ces informations, doit identifier les paramètres grâce à une fonction coût et l'algorithme du gradient descent pour trouver l'optimal local. Lorsque les paramètres sont identifiés, le modèle sigmoïde renvoie en sortie une valeur entre 0 et 1 - une probabilité - qui est transformée en classe sur base de la définition d'un seuil ( majoritairement ).
Réécrite en détail, la formule de nous donne ceci :
et donc la formule de la fonction sigmoïde :
ou
Si nous décortiquons la formule :
- est la sortie de la fonction sigmoïde qui nous permet d'obtenir une valeur entre et ;
- est l'entrée de la fonction - qui contient les paramètres identifiés par l'algorithme du gradient descent sur base des données d'entrainement. requiert également de nouvelles valeurs de pour pouvoir prédire une probabilité ;
- est la constance d'Euler ( valeur approximative de ) et joue un rôle crucial dans l'obtention de la forme en S ;
Peu importe la valeur de , l’exposant négatif de la constante d'Euler au dénominateur fera en sorte que :
- si est une très grande valeur positive , la fonction sigmoïde ramènera à un maximum de ;
- si est une très grande valeur négative , la fonction sigmoïde ramènera à un maximum de ;
Fonction sigmoïde en python
def sigmoid(z):
g = 1/(1+np.exp(-z))
return g
# (z = np.dot(X[i],w)+b) - define later in the cost function
Seuil de décision
La régression logistique nous permet d'obtenir en sortie de la fonction , une valeur comprise entre et et nous devons, en tant que data scientist, définir le seuil de la classe ou la classe . Dans la littérature, le seuil de est souvent mentionné de tel sorte que si la valeur de prédiction est alors et si la valeur de prédiction est alors .
Seuil linéaire
Dans le cas d'une décision de type linéaire sur la base de deux prédicteurs ( ), nous pourrions représenter les données comme suit (schéma ci-dessous) pour les valeurs où , ce qui correspond à
Pour simplifier l'exemple, prenons 1 comme valeur pour et , et - 3 pour .
Le seuil de décision linéaire correspondrait dans ce cas-ci au moment où ; car ce seuil serait neutre pour définir si (croix rouge) ou (rond bleu).
Dans notre cas, étant donné que et valent 1 et que vaut -3, nous pouvons réécrire la formule comme suit : ; Ainsi, .

La formule du seuil de décision linéaire correspond à la formule initiale de la régression logistique :
ou
Seuil non-linéaire
Comme nous l'avons abordé pour la régression polynomiale dans le cadre du chapitre sur la régression linéaire, nous pourrions nous retrouver dans des cas de figure de la régression logistique où la séparation des données est non-linéaire.

Dans le cadre d'un seuil-non linéaire, nous allons utiliser des caractéristiques polynomiales en adaptant la formule comme suit (pour deux prédicteurs et ) :
soit
D'autres degrés de forme polynomiale sont testés bien entendu dans le cadre de l'algorithme pour pouvoir trouver la meilleure manière de prédire l'information. Par exemple dans les cas suivants :

L'équation prendrait la forme suivante :
Fonction polynomiale en python (Seuil non-linéaire)
import numpy as np
import pandas as pd
from sklearn.preprocessing import PolynomialFeatures, StandardScaler
from sklearn.model_selection import train_test_split
import math, copy
from sklearn.metrics import confusion_matrix
# Chargement des données
data = pd.read_csv('data.csv')
# Séparation des caractéristiques et de la cible
x = data[['x_1', 'x_2', 'x_3', 'x_4', 'x_5', '...', 'x_n']].values
y = data['y'].values
# Génération des termes polynomiaux de degré 3
poly = PolynomialFeatures(degree=3)
x_poly = poly.fit_transform(x)
# Standardisation des données polynomiales
scaler_x = StandardScaler()
x_poly = scaler_x.fit_transform(x_poly)
# Division en ensemble d'entraînement et de test
x_train, x_test, y_train, y_test = train_test_split(x_poly, y, test_size=0.4, random_state=42)
Fonction coût
La forme de la fonction coût d'une régression linéaire est de forme convexe, ce qui est optimal pour l'algorithme du gradient descent dont l'objectif est - par itération - de trouver l'optimal pour les valeurs et .
Dans une régression linéaire, nous retrouvons donc la formule suivante pour la fonction coût :
Le problème de la régression logistique, c'est que la forme de sa fonction coût est non convexe et par conséquent, le gradient descent peut trouver plusieurs optimal local qui ne correspondraient pas forcément à et serait bloqué dans sa convergence.

La régression logistique utilise une fonction de coût différente « transformée » de la régression linéaire afin de rendre la forme de la fonction coût convexe à nouveau et permettre de converger vers l'optimal local.
Fonction de perte
Pour adapter la fonction coût à la régression logistique, concentrons-nous sur la notion de perte qui peut s'identifier de manière isolée à la fonction coût , en bleu dans la formule ci-dessous.
Cette fonction perte (loss) pour tous les enregistrements, peut être réécrite comme suit :
Si nous visualisons en considérant en abscisse (x), - sachant que est le résultat de la régression logistique ( valeur entre et ) -, cela ressemblerait à la courbe verte du schéma ci-dessous ; Et si nous visualisons , nous obtiendrions la courbe bleu.
L'intersection entre les deux courbes sur l'axe des abscisse correspond à la valeur . La partie de la fonction qui porte l'intérêt du résultat entre et est la partie supérieure gauche, encadrée en rouge.

Si nous visualisons cette partie en plan serré, et que nous partons du postulat que ; pour la fonction de perte et que notre modèle prédit :
- Si le modèle prédit alors la perte est de
- Si le modèle prédit alors la perte est de
- Si le modèle prédit alors la perte est de

Ce que nous remarquons c'est que l'algorithme va tendre à réduire la perte et donc être le plus précis possible car les prédictions alors que vont créer une perte importante.

Dans le second cas ( ), l'algorithme va également tendre à réduire la perte et les prédictions alors que vont créer une perte importante.
Par conséquent, la transformation de la fonction de coût :
Nous permet d'obtenir une forme convexe et d'utiliser le gradient descent pour trouver l'optimal local.
Bien entendu, la fonction coût porte sur l'entièreté des données et correspondra donc à la somme des pertes divisées par :
L'algorithme du gradient descent cherchera donc à trouver les paramètres qui minimisent la fonction de coût.
La fonction de perte :
Peut être simplifiée comme suit :
Elle est simplifiée car elle correspond à la combinaison des deux cas ( ou ) et annule automatiquement un cas si l'autre est en hypothèse.
Si et que nous remplaçons les valeurs des dans la formule :
La partie de droite est annulée car et donc :
en conséquence, nous obtenons :
Si et que nous remplaçons les valeurs des dans la formule :
La partie de droite est annulée car et donc :