régression logistique, diagramme de Voronoï, Voronoï
Ce qui suit explore les liens entre une régression logistique, les diagrammes de Voronoï pour construire un classifieur qui allient la régression logistique et les clustering type k-means. Le point de départ est une conjecture : les régions créées par une régression logistique sont convexes.
diagramme de Voronoï
Un diagramme de Voronoï est le diagramme issu des intersections des médiatrices entre n points.
On définit un ensemble de points (X1, ..., Xn). La zone d'influence de chaque point est défini par V(Xi) = {x|d(x, Xi) ≤ d(x, Xj)∀j}. Si d est la distance euclidienne, la frontière entre deux points Xi, Xj est un segment sur la droite d'équation d(x, Xi) = d(x, Xj) :
Ce système constitue
scikit-learn
a rendu populaire le jeu de données Iris qui consiste à classer des fleurs en trois classes en fonction des dimensions de leurs pétales.
from sklearn.datasets import load_iris data = load_iris() X, y = data.data[:, :2], data.target
from sklearn.linear_model import LogisticRegression clr = LogisticRegression() clr.fit(X, y)
print(clr.coef) print(clr.intercept)
La fonction de prédiction est assez simple : f(x) = Ax + B. La classe d'appartenance du point x est déterminé par maxif(x)i. La frontière entre deux classes i, j est définie par les deux conditions : maxkf(x)k = f(x)i = f(x)j. On retrouve bien
Il y a peu de chance que cela fonctionne comme cela. Avant de continuer, assurons-nous que les régions associées aux classes sont convexes. C'est une condition nécessaire mais pas suffisante pour avoir un diagramme de Voronoï.
Soit X1 et X2 appartenant à la classe i. On sait que que ∀k, LiX1 + Bi ≥ LkX1 + Bk et ∀k, LiX2 + Bi ≥ LkX2 + Bk. On considère un point X sur le segment [X1, X2], donc il existe α, β ≥ 0 tel que X = αX1 + βX2 et α + β = 1. On vérifie que :
Donc le point X appartient bien à classe i et celle-ci est convexe. La régression logistique forme une partition convexe de l'espace des features.
On définit l'application ℝd → ℕ qui associe la plus grande coordonnées f(X) = arg maxk(AX + B)k. A est une matrice ℳdc, B est un vecteur de ℝd, c est le nombre de parties. L'application f définit une partition convexe de l'espace vectoriel ℝd.
Revenons au cas de Voronoï. La classe prédite dépend de maxk(Ax + B)k. On veut trouver n points (P1, ..., Pn) tels que chaque couple (Pi, Pj) soit équidistant de la frontière qui sépare leurs classes. Il faut également les projections des deux points sur la frontière se confondent et donc que les vecteurs Pi − Pj et Li − Lj sont colinéaires.
La seconde équation en cache en fait plusieurs puisqu'elle est valable sur plusieurs dimensions mais elles sont redondantes. Il suffit de choisir un vecteur uij non perpendiculaire à Li − Lj de sorte que qui n'est pas perpendiculaire au vecteur Li − Lj et de considérer la projection de cette équation sur ce vecteur. C'est pourquoi on réduit le système au suivant qui est équivalent au précédent si le vecteur uij est bien choisi.
Faisons un peu de géométrie avant de résoudre ce problème car celui-ci a dans la plupart des cas plus d'équations que d'inconnues. Chaque frontière entre deux classes est la médiatrice d'un segment [Pi, Pj]. Le dessin suivant trace un diagramme de Voronoï à trois points. L'intersection est le centre des médiatrices du triangle formé par les points de Voronoï. Pour les trouver, on trace un cercle, n'importe lequel, puis une droite perpendiculaire à l'une des médiatrice. On obtient deux points. Le troisième est obtenu en traçant une seconde perpendiculaire et par construsction, la troisième droite est perpendiculaire à la troisième médiatrice. Et on nomme les angles.
Les triangles formés par les côtés jaunes sont isocèles. On en déduit que a + b + c = 2π = 2(x + y + z). On en déduit aussi que :
On en conclut que a + b + c = 2π = 2(x + y + z) = 2(x + c) et x = π − c. Il existe une infinité de triplets de 3 points qui aboutissent à ce diagramme de Voronoï. Il suffit de changer la taille du cercle. On montre aussi qu'en dimension 2 et 3 classes, il existe toujours une solution au problème posé. Maintenant, si on considère la configuration suivante avec des points disposés de telle sorte que le diagramme de Voronoï est un maillage hexagonal.
On revient à la détermination du diagramme de Voronoï associé à une régression logistique. On a montré qu'il n'existe pas tout le temps, qu'il peut y avoir une infinité de solutions et qu'il est la solution d'un système d'équations linéaires.
On a montré que la régression logistique réalise une partition convexe de l'espace vectoriel des variables. On peut se poser la question de la réciproque : est-ce que toute partition convexe d'un espace vectoriel peut être décrite avec une régression logistique ou plus précisément par la fonction décrite par le théorème convexité des classes formées par une régression logistique <th-thlogregpartconv>
. Considérons d'abord deux parties voisines d'une partition convexe.
L'image qui précède montre une partition qui n'est pas convexe. La partie A l'est mais pas la partie B. En fait, il est facile de montrer que la seule frontière admissible entre deux parties convexe est un hyperplan. Si la partition contient n partie, il y a au pire
L'image qui précède présente une classification en trois zones (droites noires). On a choisi une droite bleue au hasard. En prenant son symétrique par rapport à une des droites noires (D), on a deux droites D1, D2. L'ensemble des points
boule unité
Le notebook qui suit reprend les différents éléments théoriques présentés ci-dessus. Il continue l'étude d'une régression logistique et donne une intuition de ce qui marche ou pas avec un tel modèle. Notamment, le modèle est plus performant si les classes sont situées sur la boule unité de l'espace des features.
../notebooks/logreg_voronoi