machine learning, statistiques et programmation

398
Machine Learning, Statistiques et Programmation Version 0.3.593.0 mai 30, 2022

Upload: others

Post on 18-Jun-2022

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Machine Learning, Statistiques et Programmation

Machine Learning Statistiques etProgrammation

Version 035930

mai 30 2022

Contents

1 Clustering 111 k-means 112 Meacutelange de lois normales 1713 Carte de Kohonen 20

2 Non lineacuteaire 2521 Reacuteseaux de neurones 2522 Classification agrave lrsquoaide des plus proches voisins 7223 Liens entre factorisation de matrices ACP k-means 8124 Un arbre de deacutecision en reacuteseaux de neurones 87

3 Reacutegression lineacuteaire 10731 Reacutegression lineacuteaire 10732 Reacutegression quantile 12133 Reacutegression lineacuteaire par morceaux 12834 Normalisation des coefficients 152

4 Reacutegression logistique 15541 Reacutegression logistique diagramme de Voronoiuml k-Means 15542 Reacutegression logistique par morceaux arbres de deacutecision 18443 Reacuteseaux de neurones 19244 Analyse de survie 195

5 NLP 20151 Compleacutetion 201

6 Meacutetriques 21961 Courbe ROC 21962 Confidence Interval and p-Value 229

7 Algorithmes 24771 Distance drsquoeacutedition 24772 Distance between two graphs 25373 Deacutetection de segments 258

8 Peacutereacutegrinations 26781 Reacutepartir en base drsquoapprentissage et de test 267

i

82 Correacutelations non lineacuteaires 28283 File drsquoattente un petit exemple 30184 Optimisation avec donneacutees aleacuteatoires 30885 Le gradient et le discret 313

9 Galleries 32391 Gallery of examples 32392 Galleries 326

10 API 383101 Machine Learning 383102 Optimisation 384103 Traitement du langage naturel 384104 Source de donneacutees 386105 Graphes 386106 Image 387

11 Index 389

Bibliography 391

ii

CHAPTER 1

Clustering

11 k-means

bull Principe (page 2)ndash Homogeacuteneacuteiteacute des dimensions (page 4)

bull Ameacuteliorations de lrsquoinitialisation (page 5)ndash K-means++ (page 5)ndash K-means|| (page 5)

bull Estimation de probabiliteacutes (page 6)bull Seacutelection du nombre de classes (page 7)

ndash Critegravere de qualiteacute (page 7)ndash Maxima de la fonction densiteacute (page 8)ndash Deacutecroissance du nombre de classes (page 9)

bull Extension des nueacutees dynamiques (page 11)ndash Classes elliptiques (page 11)ndash Rival Penalized Competitive Learning (RPCL) (page 12)ndash RPCL-based local PCA (page 14)ndash Frequency Sensitive Competitive Learning (FSCL) (page 16)

bull k-means norme L1 (page 16)bull Bibliographie (page 17)

Deacutenomination franccedilaise algorithme des centres mobiles

1

Machine Learning Statistiques et Programmation Version 035930

111 Principe

Les centres mobiles ou nueacutees dynamiques sont un algorithme de classification non superviseacutee A partir drsquoun ensemblede points il deacutetermine pour un nombre de classes fixeacute une reacutepartition des points qui minimise un critegravere appeleacute inertieou variance intra-classe

Algorithme A1 centre mobile k-meansOn considegravere un ensemble de points

(Xi)1⩽i⩽P isin(RN)P

A chaque point est associeacutee une classe (ci)1⩽i⩽P isin 1 CP On deacutefinit les barycentres des classes (Gi)1⩽i⩽C isin(

RN)C

InitialisationLrsquoinitialisation consiste agrave choisir pour chaque point une classe aleacuteatoirement dans 1 C On pose t = 0Calcul des barycentres

for k in 1C

Gtk larrminus

sumPi=1 Xi 1cti=k

sumPi=1 1cti=k

Calcul de lrsquoinertie

It larrminussumP

i=1 d2(Xi G

tcti

)t larrminus t+ 1

if t gt 0 et It sim Itminus1

arrecirct de lrsquoalgorithmeAttribution des classes

for in 1P

ct+1i larrminus argmin

kd (Xi G

tk)

ougrave d (Xi Gtk) est la distance entre Xi et Gt

k

Retour agrave lrsquoeacutetape du calcul des barycentres jusqursquoagrave convergence de lrsquoinertie It

Theacuteoregraveme T1 convergence des k-meansQuelque soit lrsquoinitialisation choisie la suite (It)t⩾0 construite par lrsquoalgorithme des k-means (page 2) converge

La deacutemonstration du theacuteoregraveme neacutecessite le lemme suivant

Lemme L1 inertie minimumSoit (X1 XP ) isin

(RN)P P points de RN le minimum de la quantiteacute Q

(Y isin RN

)

Q (Y ) =

Psumi=1

d2 (Xi Y ) (11)

2 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

est atteint pour Y = G =1

P

sumPi=1 Xi le barycentre des points (X1 XP )

Soit (X1 XP ) isin(RN)P P points de RN

Psumi=1

minusminusrarrGXi =

minusrarr0 =rArr

Psumi=1

d2 (Xi Y ) =

Psumi=1

d2 (Xi G) + P d2 (GY )

=rArr argminY isinRN

Psumi=1

d2 (Xi Y ) = G

On peut maintenant deacutemontrer le theacuteoregraveme Lrsquoeacutetape drsquoattribution des classes consiste agrave attribuer agrave chaque point lebarycentre le plus proche On deacutefinit Jt par

J t+1 =

Psumi=1

d2(Xi G

tct+1i

)(12)

On en deacuteduit que

J t+1 =sum

icti =ct+1i

d2(Xi G

tct+1i

)+ J t+1

sumicti=ct+1

i

d2(Xi G

tct+1i

)(13)

J t+1 ⩽sum

icti =ct+1i

d2(Xi G

tcti

)+

sumicti=ct+1

i

d2(Xi G

tcti

)(14)

J t+1 ⩽ It (15)

Le lemme preacuteceacutedent appliqueacute agrave chacune des classes 1 C permet drsquoaffirmer que It+1 ⩽ J t+1 Par conseacutequentla suite (It)t⩾0 est deacutecroissante et minoreacutee par 0 elle est donc convergenteLrsquoalgorithme des centres mobiles cherche agrave attribuer agrave chaque point de lrsquoensemble une classe parmi les C disponiblesLa solution trouveacutee deacutepend de lrsquoinitialisation et nrsquoest pas forceacutement celle qui minimise lrsquoinertie intra-classe lrsquoinertiefinale est un minimum local Neacuteanmoins elle assure que la partition est formeacutee de classes convexes soit c1 et c2deux classes diffeacuterentes on note C1 et C2 les enveloppes convexes des points qui constituent ces deux classes alorso

C1 capo

C2 = empty La figure suivante preacutesente un exemple drsquoutilisation de lrsquoalgorithme des centres mobiles Des pointssont geacuteneacutereacutes aleacuteatoirement dans le plan et reacutepartis en quatre groupes

11 k-means 3

Machine Learning Statistiques et Programmation Version 035930

Crsquoest une application des centres mobiles avec une classification en quatre classes drsquoun ensemble aleacuteatoire de pointsplus dense sur la partie droite du graphe Les quatre classes ainsi formeacutees sont convexes

Homogeacuteneacuteiteacute des dimensions

Les coordonneacutees des points (Xi) isin RN sont geacuteneacuteralement non homogegravenes les ordres de grandeurs de chaquedimension sont diffeacuterents Crsquoest pourquoi il est conseilleacute de centrer et normaliser chaque dimension On note foralli isin 1 middot middot middot P Xi = (Xi1 XiN )

gk = (EX)k =1

P

Psumi=1

Xik

vkk =(E (X minus EX)

2)kk

=(EX2

)kkminus g2k

Les points centreacutes et normaliseacutes sont

foralli isin 1 middot middot middot P X primei =

(xi1 minus g1radic

v11

xiN minus gNradicvNN

)

4 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

Lrsquoalgorithme des centres mobiles est appliqueacute sur lrsquoensemble (X primei)1⩽i⩽P Il est possible ensuite de deacutecorreacuteler les

variables ou drsquoutiliser une distance dite de Malahanobis1 deacutefinie par dM (XY ) = XM Y prime ougrave Y prime deacutesigne la transposeacuteede Y et M est une matrice symeacutetrique deacutefinie positive Dans le cas de variables correacuteleacutees la matrice M = Σminus1 ougraveΣminus1 est la matrice de variance-covariance des variables aleacuteatoires (Xi)i

112 Ameacuteliorations de lrsquoinitialisation

K-means++

Lrsquoarticle [Arthur2007] montre que lrsquoinitialisation aleacuteatoire nrsquoest pas efficace et est sensible aux outliers ou pointsaberrants Lrsquoeacutetape drsquoinitialisation est remplaceacutee par la suivante

Algorithme A2 initialisation k-means++Cette eacutetape drsquoinitialisation viendra remplacer celle deacutefinie dans lrsquoalgorithme k-means (page 2) On considegravere unensemble de points

X = (Xi)1⩽i⩽P isin(RN)P

A chaque point est associeacutee une classe (ci)1⩽i⩽P isin 1 CP

Pour k centres on choisit C1 au hasard dans lrsquoensemble X Pour les suivants 1 k larr 2

2 On choisit aleacuteatoirement Gk isin X avec la probabiliteacute P (x) = Dkminus1(x)2sum

xisinX Dkminus1(x)2

3 k larr k + 1

4 On revient agrave lrsquoeacutetape 2 jusqursquoagrave ce que k = CLa fonction Dk est deacutefinie par la distance du point x au centre Gl choisi parmi les k premiers centres Dk(x) =min1⩽l⩽k d(xminusGl)La suite de lrsquoalgorithme k-means++ reprend les mecircmes eacutetapes que k-means (page 2)

Cette initilisation eacuteloigne le prochain centre le plus possibles des centres deacutejagrave choisis Lrsquoarticle montre que

Theacuteoregraveme T2 Borne supeacuterieure de lrsquoerreur produite par k-means++On deacutefinit lrsquoinertie par J(X) =

sumPi=1 minG d2(Xi G) Si JOPT deacutefinit lrsquoinertie optimale alors EJ(X) ⩽ 8(lnC +

2)JOPT (X)

La deacutemonstration est disponible dans lrsquoarticle [Arthur2007]

K-means||

Lrsquoarticle [Bahmani2012] propose une autre initialisation que K-means++ (page 5) mais plus rapide et paralleacutelisable

Algorithme A3 initialisation k-means||Cette eacutetape drsquoinitialisation viendra remplacer celle deacutefinie dans lrsquoalgorithme k-means (page 2) On considegravere unensemble de points

X = (Xi)1⩽i⩽P isin(RN)P

A chaque point est associeacutee une classe (ci)1⩽i⩽P isin 1 CP

Pour k centres on choisit G = G1 au hasard dans lrsquoensemble X 1 httpsfrwikipediaorgwikiDistance_de_Mahalanobis

11 k-means 5

Machine Learning Statistiques et Programmation Version 035930

on reacutepegravete O(lnD(GX)) fois Gprime larr eacutechantillon aleacuteatoire issue de X de probabiliteacute p(x) = l D(Gx)2sum

x D(Gx)2

Glarr G cupGprime

La fonction D(G x) est deacutefinie par la distance du point x au plus proche centre g isin G D(g x) = mingisinG d(xminus g)Cette eacutetape ajoute agrave lrsquoensemble des centres G un nombre aleacuteatoire de centres agrave chaque eacutetape Lrsquoensemble G contiendraplus de C centres

1 Pour tout g isin G on assigne le poids wg = card y|d(x y) lt minhisinG d(x h)2 On clusterise lrsquoensemble des points G en C clusters (avec un k-means classique par exemple)

Au lieu drsquoajouter les centres un par un comme dans lrsquoalgorithme k-means++ (page 5) plusieurs sont ajouteacutes agrave chaquefois plus l est grand plus ce nombre est grand Le tirage drsquoun eacutechantillon aleacuteatoire consiste agrave inclure chaque point xavec la probabiliteacute p(x) = l D(Gx)2sum

x D(Gx)2

113 Estimation de probabiliteacutes

A partir de cette classification en C classes on construit un vecteur de probabiliteacutes pour chaque point (Xi)1⩽i⩽P ensupposant que la loi de X sachant sa classe cX est une loi normale multidimensionnelle La classe de Xi est noteacutee ciOn peut alors eacutecrire

foralli isin 1 middot middot middot C

Gi = E(X11cX=i

)=

sumPk=1 Xk11ck=isumPk=1 11ck=i

Vi = E(XX prime11cX=i

)=

sumPk=1 XkX

primek11ck=isumP

k=1 11ck=i

P (cX = i) =

Psumk=1

11ck=i

f (X|cX = i) =1

(2π)N2radic

det (Vi)eminus

12 (XminusGi)

prime V minus1i (XminusGi)

f (X) =

Psumk=1

f (X|cX = i)P (cX = i)

On en deacuteduit que

P (cX = i|X) =f (X|cX = i)P (cX = i)

f (X)

La densiteacute des obervations est alors modeacuteliseacutee par une meacutelange de lois normales chacune centreacutee au barycentrede chaque classe Ces probabiliteacutes peuvent eacutegalement ecirctre apprises par un reacuteseau de neurones classifieur ougrave servirdrsquoinitialisation agrave un algorithme EM2

2 httpsfrwikipediaorgwikiAlgorithme_espC3A9rance-maximisation

6 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

114 Seacutelection du nombre de classes

Critegravere de qualiteacute

Lrsquoalgorithme des centres mobiles effectue une classification non superviseacutee agrave condition de connaicirctre au preacutealable lenombre de classes et cette information est rarement disponible Une alternative consiste agrave estimer la pertinence desclassifications obtenues pour diffeacuterents nombres de classes le nombre de classes optimal est celui qui correspond agrave laclassification la plus pertinente Cette pertinence ne peut ecirctre estimeacutee de maniegravere unique elle deacutepend des hypothegravesesfaites sur les eacuteleacutements agrave classer notamment sur la forme des classes qui peuvent ecirctre convexes ou pas ecirctre modeacuteliseacuteespar des lois normales multidimensionnelles agrave matrice de covariances diagonales Les deux critegraveres qui suivent sontadapteacutes agrave lrsquoalgorithme des centres mobiles Le critegravere de Davies-Bouldin3 (voir [Davies1979]) est minimum lorsquele nombre de classes est optimal

DB =1

C

Csumi=1

maxi =j

σi + σj

d (Ci Cj)(16)

Avec

C nombre de classesσi eacutecart-type des distances des observations de la classe iCi centre de la classe i

Le critegravere de Goodman-Kruskal4 (voir [Goodman1954]) est quant agrave lui maximum lorsque le nombre de classes estoptimal Il est toutefois plus coucircteux agrave calculer

GK =S+ minus Sminus

S+ + Sminus (17)

Avec

S+ = (q r s t) |d (q r) lt d (s t)Sminus = (q r s t) |d (q r) lt d (s t)

Ougrave (q r) sont dans la mecircme classe et (s t) sont dans des classes diffeacuterentes3 httpsenwikipediaorgwikiDaviesE28093Bouldin_index4 httpsenwikipediaorgwikiGoodman_and_Kruskal27s_gamma

11 k-means 7

Machine Learning Statistiques et Programmation Version 035930

Classification en quatre classes nombre de classes seacutelectionneacutees par le critegravere de Davies-Bouldin dont les valeurs sontillustreacutees par le graphe apposeacute agrave droite

Maxima de la fonction densiteacute

Lrsquoarticle [Herbin2001] propose une meacutethode diffeacuterente pour estimer le nombre de classes il srsquoagit tout drsquoaborddrsquoestimer la fonction densiteacute du nuage de points qui est une fonction de Rn minusrarr R Cette estimation est effectueacutee aumoyen drsquoune meacutethode non paramegravetrique telle que les estimateurs agrave noyau (voir [Silverman1986]) Soit (X1 XN )un nuage de points inclus dans une image on cherche agrave estimer la densiteacute fH (x) au pixel x

fH (x) =1

N

Nsumi=1

1

detHK(Hminus1 (xminusXi)

)Ougrave

K (x) =1

(2π)d2

eminus∥x∥2

2

H est un paramegravetre estimeacutee avec la regravegle de Silverman Lrsquoexemple utiliseacute dans cet article est un problegraveme desegmentation drsquoimage qui ne peut pas ecirctre reacutesolu par la meacutethode des nueacutees dynamiques puisque la forme des classesnrsquoest pas convexe ainsi que le montre la figure suivante La fonction de densiteacute f est seuilleacutee de maniegravere agrave obtenir unefonction g Rn minusrarr 0 1 deacutefinie par

g (x) = 11f(x)⩾s

Lrsquoensemble gminus1 (1) sub Rn est composeacutee de N composantes connexes noteacutees (C1 CN ) la classe drsquoun point xest alors lrsquoindice de la composante connexe agrave la laquelle il appartient ou la plus proche le cas eacutecheacuteant

8 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

Exemple de classification non superviseacutee appliqueacutee agrave un problegraveme de segmentation drsquoimage la premiegravere figure montrela densiteacute obtenue la seconde figure illustre la classification obtenue figure extraite de [Herbin2001] Cette meacutethodeparaicirct neacuteanmoins difficilement applicable lorsque la dimension de lrsquoespace vectoriel atteint de grande valeur Lrsquoexemplede lrsquoimage est pratique elle est deacutejagrave deacutecoupeacutee en reacutegion repreacutesenteacutees par les pixels lrsquoensemble gminus1 (1) correspondagrave lrsquoensemble des pixels x pour lesquels f (x) ⩾ s

Deacutecroissance du nombre de classes

Lrsquoarticle [Kothari1999] propose une meacutethode permettant de faire deacutecroicirctre le nombre de classes afin de choisir le nombreapproprieacute Lrsquoalgorithme des centres mobiles proposent de faire deacutecroicirctre lrsquoinertie noteacutee I deacutefinie pour un ensemble depoints noteacute X = (x1 xN ) et K classes La classe drsquoun eacuteleacutement x est noteacutee C (x) Les centres des classes sontnoteacutes Y = (y1 yK) Lrsquoinertie de ce nuage de points est deacutefinie par

I =sumxisinX

∥∥xminus yC(x)

∥∥2On deacutefinit tout drsquoabord une distance α isin R+ puis lrsquoensemble V (y α) = z isin Y |d (y z) ⩽ α V (y α) est donclrsquoensemble des voisins des centres dont la distance avec y est infeacuterieur agrave α Lrsquoarticle [Kothari1999] propose deminimiser le coucirct J (α) suivant

J (α) =sumxisinX

∥∥xminus yC(x)

∥∥2 + sumxisinX

sumyisinV (yC(x)α)

λ (y)∥∥y minus yC(x)

∥∥2Lorsque α est nul ce facteur est eacutegal agrave lrsquoinertie I = J (0) et ce terme est minimal lorsqursquoil y a autant de classes quedrsquoeacuteleacutements dans X Lorsque α tend vers lrsquoinfini J (α)rarr J (infin) ougrave

J (infin) =sumxisinX

∥∥xminus yC(x)

∥∥2 + sumxisinX

sumyisinY

λ (y)∥∥y minus yC(x)

∥∥2Ici encore il est possible de montrer que ce terme J (infin) est minimal lorsqursquoil nrsquoexiste plus qursquoune seule classe Leprincipe de cette meacutethode consiste agrave faire varier le paramegravetre α plus le paramegravetre α augmente plus le nombre declasses devra ecirctre reacuteduit Neacuteanmoins il existe des intervalles pour lequel ce nombre de classes est stable le veacuteritablenombre de classes de lrsquoensemble X sera consideacutereacute comme celui correspondant au plus grand intervalle stable

11 k-means 9

Machine Learning Statistiques et Programmation Version 035930

(a) (b)

Evolutation du nombre de classes en fonction du paramegravetre α lors de la minimisation du critegravere J (α) figure extraitede [Kothari1999] La premiegravere image repreacutesente le nuage de points illustrant quatre classes sans recouvrement Laseconde image montre que quatre classes est lrsquoeacutetat le plus longtemps stable lorsque α croicirctLe coucirct J (α) est une somme de coucirct dont lrsquoimportance de lrsquoun par rapport agrave lrsquoautre est controcircle par les paramegravetresλ (y) Le problegraveme de minimisation de J (α) est reacutesolu par lrsquoalgorithme qui suit Il srsquoappuie sur la meacutethode desmultiplicateurs de Lagrange

Algorithme A4 seacutelection du nombre de classes(voir [Kothari1999]) Les notations sont celles utiliseacutes dans les paragraphes preacuteceacutedents On suppose que le paramegravetre αeacutevolue dans lrsquointervalle [α1 α2] agrave intervalle reacutegulier αt Le nombre initial de classes est noteacute K et il est supposeacutesurestimer le veacuteritable nombre de classes Soit η isin ]0 1[ ce paramegravetre doit ecirctre choisi de telle sorte que danslrsquoalgorithme qui suit lrsquoeacutevolution des centres yk soit autant assureacutee par le premier de la fonction de coucirct que par lesecondinitialisation

αlarrminus α1

On tire aleacuteatoirement les centres des K classes (y1 yK)preacuteparationOn deacutefinit les deux suites entiegraveres

(c11 c

1K

)(c21 c

2K

) et les deux suites de vecteur

(z11 z

1K

)(z21 z

2K

)

forallk c1k = 0forallk c2k = 0forallk z1k = 0forallk z2k = 0

calcul des mises agrave jour

for i in 1N

Mise agrave jour drsquoapregraves le premier terme de la fonction de coucirct J (α)w larrminus argmin

1⩽l⩽K∥xi minus yl∥2

z1w larrminus z1w + η (xi minus yw)

c1w larrminus c1w + 1

10 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

Mise agrave jour drsquoapregraves le second terme de la fonction de coucirct J (α)

for v in 1k

if ∥yv minus yw∥ lt α

z2v larrminus z2v minus (yv minus yw)

c2v larrminus c2v + 1

for v in 1k

λv larrminusc2v∥z1

v∥c1v∥z2

v∥

yv larrminus yv + z1v + λvz2v

convergenceTant que lrsquoeacutetape preacuteceacutedente nrsquoa pas convergeacute vers une version stable des centres yk retour agrave lrsquoeacutetape preacuteceacutedente Sinontous les couples de classes (i j) veacuterifiant ∥yi minus yj∥ gt α sont fusionneacutes α larrminus α + αt Si α ⩽ α2 retour agrave lrsquoeacutetapede preacuteparationterminaisonLe nombre de classes est celui ayant preacutevalu pour le plus grand nombre de valeur de α

115 Extension des nueacutees dynamiques

Classes elliptiques

La version de lrsquoalgorithme des nueacutees dynamique proposeacutee dans lrsquoarticle [Cheung2003] suppose que les classes ne sontplus de forme circulaire mais suivent une loi normale quelconque La loi de lrsquoeacutechantillon constituant le nuage de pointsest de la forme

f (x) =

Nsumi=1

pi1

(2π)d2radicdetΣi

exp

(minus1

2(xminus microi)

primeΣminus1

i (xminus microi)

)Avec sumN

i=1 pi = 1 On deacutefinit

G (x microΣ) =1

(2π)d2radicdetΣ

exp

(minus1

2(xminus micro)

primeΣminus1 (xminus micro)

)Lrsquoalgorithme qui suit a pour objectif de minimiser la quantiteacute pour un eacutechantillon (X1 XK)

I =

Nsumi=1

Ksumk=1

11i=argmax

1⩽j⩽NG(Xkmicroj Σj)

ln [piG (Xk microiΣi)]

Algorithme A5 nueacutees dynamiques geacuteneacuteraliseacuteesLes notations sont celles utiliseacutees dans ce paragraphe Soient η ηs deux reacuteels tels que η gt ηs La regravegle preacuteconiseacutee parlrsquoarticle [Cheung2003] est ηs sim η

10 initialisationtlarrminus 0 Les paramegravetres

p0i micro

0i Σ

0i |1 ⩽ i ⩽ N

sont initialiseacutes gracircce agrave un algorithme des k-means (page 2) ou FSCL

(page 16) foralli p0i = 1N et β0

i = 0

11 k-means 11

Machine Learning Statistiques et Programmation Version 035930

reacutecurrenceSoit Xk choisi aleacuteatoirement dans (X1 XK)

i = argmin1⩽i⩽N

G(Xk micro

tiΣ

ti

)

for i in 1N

microt+1i = microt

i + η (Σti)

minus1(Xk minus microt

i)

βt+1i = βt

i + η (1minus αti)

Σt+1i = (1minus ηs) Σ

ti + ηs (Xk minus microt

i) (Xk minus microti)

prime

for i in 1N

pt+1i = eβ

t+1isumN

j=1 eβt+1j

tlarrminus t+ 1

terminaisonTant que argmin

1⩽i⩽NG (Xk micro

tiΣ

ti) change pour au moins un des points Xk

Lors de la mise agrave jour de Σminus1 lrsquoalgorithme preacuteceacutedent propose la mise agrave jour de Σi alors que le calcul de G ( microiΣi)implique Σminus1

i par conseacutequent il est preacutefeacuterable de mettre agrave jour directement la matrice Σminus1

(Σt+1

i

)minus1=

(Σti)

minus1

1minus ηs

[I minus ηs (Xk minus microt

i) (Xk minus microti)

prime(Σt

i)minus1

1minus ηs + ηs (Xk minus microti)

prime(Σt

i)minus1

(Xk minus microti)

]

Rival Penalized Competitive Learning (RPCL)

Lrsquoalgorithme suivant deacuteveloppeacute dans [Xu1993] est une variante de celui des centres mobiles Il entreprend agrave la foisla classification et la seacutelection du nombre optimal de classes agrave condition qursquoil soit infeacuterieur agrave une valeur maximale agravedeacuteterminer au deacutepart de lrsquoalgorithme Un meacutecanisme permet drsquoeacuteloigner les centres des classes peu pertinentes de sorteqursquoaucun point ne leur sera affecteacute

Algorithme A6 RPCLSoient (X1 XN ) N vecteurs agrave classer en au plus T classes de centres (C1 CT ) Soient deux reacuteels αr et αc

tels que 0 lt αr ≪ αc lt 1initialisationTirer aleacuteatoirement les centres (C1 CT )

for j in 1C

n0j larrminus 1

calcul de poidsChoisir aleacuteatoirement un point Xi

for j in 1C

γj =njsumCk=1 nk

12 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

for j in 1C

uj =

1 si j isin argmink

[γk d (Xi Ck)]

-1 si j isin argminj =k

[γk d (Xi Ck)]

0 sinon

mise agrave jour

for j in 1C

Ct+1j larrminus Ct

j +

αc (Xi minus Cj) si uj = 1minusαr (Xi minus Cj) si uj = minus10 sinon

ntj +

1 si uj = 10 sinon

tlarrminus t+ 1

terminaisonSrsquoil existe un indice j pour lequel Ct+1

j = Ctj alors retourner agrave lrsquoeacutetape de calcul de poids ou que les centres des classes

jugeacutees inutiles ont eacuteteacute repousseacutes vers lrsquoinfini

Pour chaque point le centre de la classe la plus proche en est rapprocheacute tandis que le centre de la seconde classe laplus proche en est eacuteloigneacute mais drsquoune faccedilon moins importante (condition αr ≪ αc) Apregraves convergence les centresdes classes inutiles ou non pertinentes seront repousseacutes vers lrsquoinfini Par conseacutequent aucun point nrsquoy sera rattacheacuteLrsquoalgorithme doit ecirctre lanceacute plusieurs fois Lrsquoalgorithme RPCL peut terminer sur un reacutesultat comme celui de la figuresuivante ougrave un centre reste coinceacute entre plusieurs autres Ce problegraveme est moins important lorsque la dimension delrsquoespace est plus grande

11 k-means 13

Machine Learning Statistiques et Programmation Version 035930

Application de lrsquoalgorithme RPCL (page 12) la classe 0 est incrusteacute entre les quatre autres et son centre ne peut seńăfaufileră vers lrsquoinfini

RPCL-based local PCA

Lrsquoarticle [Liu2003] propose une extension de lrsquoalgorithme RPCL (page 12) et suppose que les classes ne sont plusde forme circulaire mais suivent une loi normale quelconque Cette meacutethode est utiliseacutee pour la deacutetection de ligneconsideacutereacutees ici comme des lois normales deacutegeacuteneacutereacutees en deux dimensions la matrice de covariance deacutefinit une ellipsedont le grand axe est tregraves supeacuterieur au petit axe ce que montre la figure suivante Cette meacutethode est aussi preacutesenteacuteecomme un possible algorithme de squelettisation

14 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

Figure extraite de [Liu2003] lrsquoalgorithme est utiliseacute pour la deacutetection de lignes consideacutereacutees ici comme des lois normalesdont la matrice de covariance deacutefinit une ellipse deacutegeacuteneacutereacutee dont le petit axe est tregraves infeacuterieur au grand axe Les traitsfin griseacutes correspondent aux classes isoleacutees par lrsquoalgorithme RPCL-based local PCAOn modeacutelise le nuage de points par une meacutelange de lois normales

f (x) =

Nsumi=1

pi1

(2π)d2radicdetΣi

exp

(minus1

2(xminus microi)

primeΣminus1

i (xminus microi)

)

AvecsumN

i=1 pi = 1On suppose que le nombre de classes initiales N surestime le veacuteritable nombre de classes Lrsquoarticle [Liu2003]srsquointeacuteresse au cas particulier ougrave les matrices de covariances veacuterifient Σi = ζi I+σi ϕiϕ

primei avec ζi gt 0 σi gt 0 ϕprime

iϕi =1On deacutefinit eacutegalement

G (x microΣ) =1

(2π)d2radicdetΣ

exp

(minus1

2(xminus micro)

primeΣminus1 (xminus micro)

)Lrsquoalgorithme utiliseacute est similaire agrave lrsquoalgortihme RPCL (page 12) La distance d utiliseacutee lors de lrsquoeacutetape de calcul despoids afin de trouver la classe la plus probable pour un point donneacute Xk est remplaceacutee par lrsquoexpression

d (Xk classe i) = minus ln pti G(Xk micro

ti Σ

ti

)Lrsquoeacutetape de mise agrave jour des coefficients est remplaceacutee par

xt+1 larrminus xt +

αcnablaxt si uj = 1minusαrnablaxt si uj = minus10 sinon

Ougrave xt joue le rocircle drsquoun paramegravetre et est remplaceacute successivement par pti microti ζti σt

i ϕti

nablapti = minus 1pti

nablamicroti = minus (Xk minus microt

i)

nablaζti = 12 tr

[(Σt

i)minus1(I minus (Xk minus microt

i) (Xk minus microti)

prime(Σt

i)minus1)]

nablaσti = 1

2 (ϕti)

prime(Σt

i)minus1(I minus (Xk minus microt

i) (Xk minus microti)

prime(Σt

i)minus1)ϕti

nablaϕti = σt

i (Σti)

minus1(I minus (Xk minus microt

i) (Xk minus microti)

prime(Σt

i)minus1)ϕti

11 k-means 15

Machine Learning Statistiques et Programmation Version 035930

Frequency Sensitive Competitive Learning (FSCL)

Lrsquoalgorithme Frequency Sensitive Competitive Learning est preacutesenteacute dans [Balakrishnan1996] Par rapport agravelrsquoalgorithme des centres mobiles classique lors de lrsquoestimation des centres des classes lrsquoalgorithme eacutevite la formationde classes sous-repreacutesenteacutees

Algorithme A7 FSCLSoit un nuage de points (X1 XN ) soit C vecteurs (ω1 ωC) initialiseacutes de maniegravere aleacuteatoires Soit F (u t) isinR2 minusrarr R+ croissante par rapport agrave u Soit une suite de reacuteels (u1 uC) soit une suite ϵ (t) isin [0 1] deacutecroissanteougrave t repreacutesente le nombre drsquoiteacuterations Au deacutebut tlarr 0meilleur candidatPour un vecteur Xk choisi aleacuteatoirement dans lrsquoensemble (X1 XN ) on deacutetermine

ilowast isin argmin Di = F (ui t) d (Xk ωi)

mise agrave jour

ωilowast (t+ 1)larrminus ωilowast (t) + ϵ (t) (Xk minus ωilowast (t))

tlarrminus t+ 1

uilowast larrminus uilowast + 1

Retour agrave lrsquoeacutetape preacuteceacutedente jusqursquoagrave ce que les nombres uisumi ui

convergent

Exemple de fonctions pour F ϵ (voir [Balakrishnan1996])

F (u t) = uβeminustT avec β = 0 06 et 1T = 0 00005

ϵ (t) = β eminusγt avec γ = 0 05

Cet algorithme ressemble agrave celui des cartes topographiques de Kohonen sans toutefois utiliser un maillage entre lesneurones (ici les vecteurs ωi) Contrairement agrave lrsquoalgorithme RPCL les neurones ne sont pas repousseacutes srsquoils ne sontpas choisis mais la fonction croissante F (u t) par rapport agrave u assure que plus un neurone est seacutelectionneacute moins il ade chance de lrsquoecirctre bien que cet avantage disparaisse au fur et agrave mesure des iteacuterations

116 k-means norme L1

Lrsquoalgorithme dans sa version la plus courante optimise lrsquoinertie deacutefinie parsumP

i=1 d2(Xi G

tcti

) qui est en quelque

sorte une inertie L2 Que devriendrait lrsquoalgorithme si la norme choisie eacutetait une norme L1 il faudrait alors choisir agravechaque iteacuteration t des points qui minimise la quantiteacute

sumPi=1 d1

(Xi G

tcti

)ougrave d1 est la norme L1 entre deux points

XY d1(XY ) =sum

i |Xi minus Yi| Avant de continuer on rappelle un theacuteoregraveme

proprieacuteteacute P1 Meacutediane et valeur absolueSoit A = (x1 xn) un ensembl de n reacuteels quelconque On note m = med(x1 xn) la meacutediane de lrsquoensemble depoints A Alors la meacutediane m minimise la quantiteacute

sumni=1 |mminus xi|

Crsquoest cette proprieacuteteacute qui est utiliseacutee pour deacutefinir ce qursquoest la reacutegression quantile (page 121) et sa deacutemonstration estpreacutesenteacutee agrave la page Meacutediane et valeur absolue (page 122) Il ne reste plus qursquoagrave se servir de ce reacutesultat pour mettre agravejour lrsquoalgorithme centre mobile k-means (page 2) Lrsquoeacutetape qui consiste agrave affecter un point agrave un cluster repreacutesenteacute par unpoint ne pose pas de problegraveme si on utilise cette nouvelle norme Il ne reste plus qursquoagrave deacuteterminer le point qui repreacutesente

16 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

un cluster sachant les points qui le constituent Autrement dit il faut deacuteterminer le point qui minimiser la pseudo-inertiedeacutefinie comme suit pour un ensemble de points (X1 Xn) appartenant agrave un espace vectoriel de dimension k

I(GX1 Xn) = ∥GminusXi∥1 =nsum

i=1

dsumk=1

|Gk minusXik|

On cherche le point G qui minimise la quantiteacute I(GX1 Xn) Commesumn

i=1

sumdk=1 |Gk minusXik| =sumd

k=1

sumni=1 |Gk minusXik| on en deacuteduit qursquoon peut chercher la coordonneacutee Gk indeacutependemment les unes des autres

On en deacuteduit que le barycentre de norme L1 drsquoun ensemble de points dans un espace vectoriel de dimension d apour coordonneacutees les d meacutedianes extraites sur chacune des dimensions Lrsquoalgorithme est impleacutementeacute dans le modulemlinsights5 en srsquoinspirant du code KMeans6

117 Bibliographie

12 Meacutelange de lois normales

bull Algorithme EM (page 17)bull Competitive EM algorithm (page 18)bull Bibliographie (page 20)

121 Algorithme EM

Deacutefinition D1 meacutelange de lois normalesSoitX une variable aleacuteatoire drsquoun espace vectoriel de dimension d X suit un la loi drsquoun meacutelange de N lois gaussiennesde paramegravetres (microiΣi)1⩽i⩽N alors la densiteacute f de X est de la forme

f (x) =

Nsumi=1

pi1

(2π)d2radicdetΣi

exp

(minus1

2(xminus microi)

primeΣminus1

i (xminus microi)

)(18)

(19)

Avec sumN

i=1 pi = 1

Dans le cas drsquoune loi normale agrave valeur reacuteelle Σ = σ2 lrsquoalgorithme permet drsquoestimer la loi de lrsquoeacutechantillon(X1 XT ) il srsquoeffectue en plusieurs iteacuterations les paramegravetres pi (0) microi (0) σ2 (0) sont choisis de maniegravere aleacuteatoire

5 httpwwwxavierduprefrappmlinsightshelpsphinxindexhtml6 httpsscikit-learnorgstablemodulesgeneratedsklearnclusterKMeanshtml

12 Meacutelange de lois normales 17

Machine Learning Statistiques et Programmation Version 035930

agrave lrsquoiteacuteration t+ 1 la mise agrave jour des coefficients est faite comme suit

fki (t) = pi (t)1

(2π)d2radicdetΣi (t)

exp

(minus1

2(Xk minus microi (t))

primeΣminus1

i (t) (Xk minus microi (t))

)(110)

fki (t) =fki (t)sumi fki (t)

(111)

pi (t+ 1) =1

T

Tsumk=1

fki (t) (112)

microi (t+ 1) =

[Tsum

k=1

fki (t)

]minus1 Tsumk=1

fki (t)Xk (113)

Σ2i (t+ 1) =

[Tsum

k=1

fki (t)

]minus1 Tsumk=1

fki (t) (Xk minus microi (t+ 1)) (Xk minus microi (t+ 1))prime (114)

Lrsquoestimation drsquoune telle densiteacute srsquoeffectue par lrsquointermeacutediaire drsquoun algorithme de type Expectation Maximization(EM)10 (voir [Dempster1977]) ou de ses variantes SEM11 SAEM12 (voir [Celeux1995] [Celeux1985b]) Laseacutelection du nombre de lois dans le meacutelange reste un problegraveme ouvert abordeacute par lrsquoarticle [Biernacki2001]

122 Competitive EM algorithm

Lrsquoalgorithme deacuteveloppeacute dans lrsquoarticle [ZhangB2004] tente de corriger les deacutefauts de lrsquoalgorithme EM Cette nouvelleversion appeleacutee ńăCompetitive EMă ou CEM srsquoapplique agrave un meacutelange de lois - normales en particulier - il deacuteterminele nombre de classes optimal en supprimant ou en ajoutant des classes

Figures extraites de [ZhangB2004] la premiegravere image montre deux classes incluant deux autres classes qui devraitdonc ecirctre supprimeacutees La seconde image montre une classe aberrante tandis que la troisiegraveme image montre des classesse recouvrant partiellementOn considegravere un eacutechantillon de variables aleacuteatoires indeacutependantes et identiquement distribueacutees agrave valeur dans un espacevectoriel de dimension d Soit X une telle variable on suppose que X suit la loi du meacutelange suivant

f (X|θ) =ksum

i=1

αi f (X|θi)

Avec θ = (αi θi)1⩽i⩽k foralli αi ⩾ 0 etsumk

i=1 αi = 110 httpsfrwikipediaorgwikiAlgorithme_espC3A9rance-maximisation11 httpsfrwikipediaorgwikiAlgorithme_espC3A9rance-maximisationAlgorithme_SEM12 httpwikiwebpopixorgindexphpThe_SAEM_algorithm_for_estimating_population_parameters

18 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

On deacutefinit pour une classe m la probabiliteacute Psplit(m θ) qursquoelle doive ecirctre diviseacutee et celle qursquoelle doive ecirctre associeacutee agraveune autre Pmerge(m l θ) Celles ci sont deacutefinies comme suit

Psplit(m θ) =J (m θ)

Z (θ)(115)

Pmerge(m l θ) =β

J (m θ)Z (θ)(116)

β est une constante deacutefinie par expeacuteriences J (m θ) est deacutefini pour lrsquoeacutechantillon (x1 xn) par

J (m θ) =

intfm (x θ) log

fm (x θ)

pm (x θm)dx

Ougrave fm (x θ) =

sumni=1 11x=xi P(m|xiθ)sumn

i=1 P(m|xiθ)

La constante Z (θ) est choisie de telle sorte que les probabiliteacutes Psplit(m θ) et Pmerge(m l θ) veacuterifient

ksumm=1

Psplit(m θ) +

ksumm=1

ksuml=m+1

Pmerge(m l θ) = 1

Lrsquoalgorithme EM permet de construire une suite θt maximisant la vraisemblance agrave partir de poids θ0 LrsquoalgorithmeCEM13 est deacuteriveacute de lrsquoalgorithme EM

Algorithme A1 CEMLes notations sont celles utiliseacutees dans les paragraphes preacuteceacutedents On suppose que la variable aleacuteatoire Z = (XY )ougrave X est la variable observeacutee et Y la variable cacheacutee T deacutesigne le nombre maximal drsquoiteacuterationsinitialisationChoix arbitraire de k et θ0Expectation

Q(θ θt

)= E

(log [f (XY |θ)] |X θt

)Maximization

θt+1 = argmaxθ

Q(θ θt

)convergencetlarrminus t+ 1 si θt nrsquoa pas convergeacute vers un maximum local alors on retourne agrave lrsquoeacutetape Expectationdivision ou regroupementDans le cas contraire on estime les probabiliteacutes Psplit(m θ) et Pmerge(m l θ) deacutefinie par les expressionseq_split_merge On choisit aleacuteatoirement une division ou un regroupement (les choix les plus probables ayant le plusde chance drsquoecirctre seacutelectionneacutes) Ceci megravene au paramegravetre θprimet dont la partie modifieacutee par rapport agrave θt est deacutetermineacutee demaniegravere aleacuteatoire Lrsquoalgorithme EM est alors appliqueacute aux paramegravetres θprimet jusqursquoagrave convergence aux paramegravetres θprimeprimet acceptationOn calcule le facteur suivant

Pa = min

exp

[L (θprimeprimet X)minus L (θt X)

γ

] 1

On geacuteneacutere aleacuteatoirement une variable u sim U [0 1] si u ⩽ Pa alors les paramegravetres θprimeprimet sont valideacutes θt larrminus θprimeprimet et retouragrave lrsquoeacutetape drsquoexpectation Dans le cas contraire les paramegravetres θprimeprimet sont refuseacutes et retour agrave lrsquoeacutetape preacuteceacutedente

13 httpsfrwikipediaorgwikiAlgorithme_espC3A9rance-maximisationAlgorithme_CEM

12 Meacutelange de lois normales 19

Machine Learning Statistiques et Programmation Version 035930

terminaisonSi t lt T on retoure agrave lrsquoeacutetape drsquoexpectation Sinon on choisit les paramegravetres θlowast = θtlowast qui maximisent lrsquoexpression

L (θlowast|X) = log f (X|θ)minus Nlowast

2

klowastsumi=1

lognαlowast

i

12minus klowast

2log

n

12minus klowast(Nlowast + 1)

2(117)

Avec n le nombre drsquoexemples et N est le nombre de paramegravetres speacutecifiant chaque composant

Lrsquoarticle [ZhangB2004] prend γ = 10 mais ne preacutecise pas de valeur pour β qui deacutepend du problegraveme Toutefois ilexiste un cas suppleacutementaire ougrave la classe m doit ecirctre supprimeacutee afin drsquoeacuteviter sa convergence vers les extrecircmes du nuagede points agrave modeacuteliser Si nαm lt N le nombre moyen de points inclus dans une classe est infeacuterieur au nombre deparamegravetres attribueacutes agrave cette classe qui est alors supprimeacutee Cette condition comme lrsquoensemble de lrsquoarticle srsquoinspire delrsquoarticle [Figueiredo2002] dont est tireacute le critegravere deacutecrit en (refclassif_cem_cirtere)

123 Bibliographie

13 Carte de Kohonen

bull Principe (page 20)bull Carte de Kohonen et classification (page 21)bull Autres utilisation des cartes de Kohenen (page 23)bull Bibliographie (page 23)

131 Principe

Les cartes de Kohonen ou Self Organizing Map (SOM) est le terme anglais pour les cartes de Kohonen14 (voir[Kohonen1997]) sont assimileacutees agrave des meacutethodes neuronales Ces cartes sont constitueacutees drsquoun ensemble de neurones(micro1 microN ) lesquels sont relieacutes par une forme reacutecurrente de voisinage Les neurones sont initialement reacutepartis selonce systegraveme de voisinage Le reacuteseau eacutevolue ensuite puisque chaque point de lrsquoespace parmi lrsquoensemble (X1 XK)attire le neurone le plus proche vers lui ce neurone attirant agrave son tour ses voisins Cette proceacutedure est reacuteiteacutereacutee jusqursquoagraveconvergence du reacuteseau en faisant deacutecroicirctre lrsquoattirance des neurones vers les points du nuage

Trois types de voisinages couramment utiliseacutes pour les cartes de Kohonen voisinages lineacuteaire rectangulairetriangulaire

Algorithme A1 cartes de Kohonen (SOM)14 httpsfrwikipediaorgwikiCarte_auto_adaptative

20 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

Soient (microt1 micro

tN ) isin (Rn)

N des neurones de lrsquoespace vectoriel Rn On deacutesigne par V (microj) lrsquoensemble des neuronesvoisins de microj pour cette carte de Kohonen Par deacutefinition on a microj isin V (microj) Soit (X1 XK) isin (Rn)

K un nuagede points On utilise une suite de reacuteels positifs (αt) veacuterifiant

sumt⩾0 α

2t ltinfin et

sumt⩾0 αt =infin

initialisationLes neurones

(micro01 micro

0N

)sont reacutepartis dans lrsquoespace Rn de maniegravere reacuteguliegravere selon la forme de leur voisinage

tlarrminus 0neurone le plus procheOn choisi aleacuteatoirement un points du nuage Xi puis on deacutefinit le neurone microt

klowast de telle sorte que ∥microtklowast minusXi∥ =

min1⩽j⩽N

∥∥microtj minusXi

∥∥

mise agrave jour

foreach microtj in V (microt

klowast)

microt+1j larrminus microt

j + αt

(Xi minus microt+1

j

)tlarrminus t+ 1

Tant que lrsquoalgorithme nrsquoa pas convergeacute retour agrave lrsquoeacutetape du neurone le plus proche

Lrsquoeacutetape de mise agrave jour peut ecirctre modifieacutee de maniegravere agrave ameacuteliorer la vitesse de convergence (voir [Lo1991])

microt+1j larrminus microt

j + αt h(microtj micro

tklowast

)microk

(Xi minus microt+1

j

)Ougrave h est une fonction agrave valeur dans lrsquointervalle [0 1] qui vaut 1 lorsque microt

j = microtklowast et qui deacutecroicirct lorsque la distance

entre ces deux neurones augmente Une fonction typique est h (x y) = h0 exp(minus∥xminusy∥2

2σ2t

)

Les cartes de Kohonen sont utiliseacutees en analyse des donneacutees afin de projeter un nuage de points dans un espace agrave deuxdimensions drsquoune maniegravere non lineacuteaire en utilisant un voisinage rectangulaire Elles permettent eacutegalement drsquoeffectuerune classification non superviseacutee en regroupant les neurones lagrave ougrave les points sont concentreacutes Les arecirctes reliant lesneurones ou sommets de la cartes de Kohonen sont soit reacutetreacutecies pour signifier que deux neurones sont voisins soitdistendues pour indiquer une seacuteparation entre classes

132 Carte de Kohonen et classification

Lrsquoarticle [Wu2004] aborde le problegraveme drsquoune classification agrave partir du reacutesultat obtenu depuis une carte de Kohonen(page 20) Plutocirct que de classer les points ce sont les neurones qui seront classeacutes en C classes Apregraves avoir appliqueacuteliquestalgorithme de Kohonen (page 20) la meacutethode proposeacutee dans [Wu2004] consiste agrave classer de maniegravere non superviseacuteeles A neurones obtenus (micro1 microA) Toutefois ceux-ci ne sont pas tous pris en compte afin drsquoeacuteviter les pointsaberrants On suppose que αil = 1 si le neurone l est le plus proche du point Xi 0 dans le cas contraire Puis onconstruit les quantiteacutes suivantes

νk =

Nsumi=1

αik

Tk =1

νk

Nsumi=1

αikXi

θ(Tk) =

radicradicradicradic 1

νk

Nsumi=1

αik ∥Xi minus Tk∥2

13 Carte de Kohonen 21

Machine Learning Statistiques et Programmation Version 035930

De plus

θ =1

A

Asumk=1

θ(Tk)

σ(θ) =

radicradicradicradic 1

A

Asumk=1

(θ(Tk)minus θ

)2Si νk = 0 ou ∥microk minus Tk∥ gt θ + σ(θ) le neurone microk nrsquoest pas prise en compte lors de la classification non superviseacuteeUne fois celle-ci termineacutee chaque eacuteleacutement Xi est classeacute selon la classe du neurone le plus procheLrsquoarticle [Wu2004] propose eacutegalement un critegravere permettant de deacuteterminer le nombre de classes ideacuteale On noteaik = 1 si Xi appartient agrave la classe k dans le cas contraire aik = 0 On deacutefinit nk le nombre drsquoeacuteleacutements de la classek le vecteur moyenne Mk associeacute agrave la classe k

nk =

Nsumi=1

aik

Mk =1

nk

Nsumi=1

aikXi

σ2(Mk) =1

nk

Nsumi=1

aik ∥Xi minusMk∥2

On note au preacutealable σ =radic

1C

sumCk=1 σ2(Mk) Lrsquoarticle deacutefinit ensuite la densiteacute interne pour C classes

Dint(C) =1

C

Csumk=1

Nsumi=1

Nsumj=1

aikajk11∥XiminusXj∥⩽σ

On deacutefinit la distance dlowastkl pour (k l) isin 1 C2 cette distance est eacutegale agrave la distance minimale pour un couple depoints le premier appartenant agrave la classe i le second agrave la classe j

dlowastkl = min ∥Xi minusXj∥ |aikajl = 1 =∥∥Xkl

ilowast minusXkljlowast

∥∥La densiteacute externe est alors deacutefinie en fonction du nombre de classes C par

Dext(C) =

Csumk=1

Csuml=1

dklσ (k)σ (l)

Nsumi=1

11aik+ailgt011∥∥∥∥∥XiminusXkl

ilowast+Xkljlowast

2

∥∥∥∥∥⩽σ(k)+σ(l)2

Lrsquoarticle deacutefinit ensuite la seacuteparabiliteacute en fonction du nombre de classes C

Sep(C) =1

Dext(C)

Csumk=1

Csuml=1

dlowastkl

Enfin le critegravere Composing Density Between and With clusters noteacute CDBw(C) est deacutefini par

CDBw(C) = Dint(C) lowast Sep(C)

Ce critegravere est maximal pour un nombre de classes optimal Outre les reacutesultats de lrsquoarticle [Wu2004] sommairementreacutesumeacutes ici ce dernier revient sur lrsquohistoire des cartes de Kohonen depuis leur creacuteation [Kohonen1982] jusqursquoauxderniers deacuteveloppements reacutecents

22 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

133 Autres utilisation des cartes de Kohenen

On peut les utiliser pour deacuteterminer le plus court chemin passant par tous les noeuds drsquoun graphe crsquoest agrave dire appliquerKohonen au problegraveme du voyageur de commerce15

134 Bibliographie

15 httpwwwxavierduprefrappensae_teaching_cshelpsphinxspecialstsp_kohonenhtml

13 Carte de Kohonen 23

Machine Learning Statistiques et Programmation Version 035930

24 Chapter 1 Clustering

CHAPTER 2

Non lineacuteaire

Les paragraphes suivant abordent de faccedilon plutocirct theacuteorique des modegraveles de machine learning

21 Reacuteseaux de neurones

Ce chapitre aborde les reacuteseaux de neurones au travers de deux utilisations courantes la reacutegression (page 28) et laclassification (page 32) et une qui lrsquoest moins liquestanalyse en composantes principales17 ou ACP (page 66) sans oublier lesmeacutethodes drsquoestimation des paramegravetres qui les composent agrave savoir optimisations du premier et second ordre (Meacutethodesdu premier ordre (page 48) et Meacutethodes du second ordre (page 48)) ainsi qursquoune meacutethode permettant de supprimer descoefficients inutiles Seacutelection de connexions (page 63)

211 Deacutefinition des reacuteseaux de neurones multi-couches

Les reacuteseaux de neurones multi-couches (ou perceptrons) deacutefinissent une classe de fonctions dont lrsquointeacuterecirct est de pouvoirapprocher nrsquoimporte quelle fonction continue agrave support compact (voir theacuteoregraveme sur la densiteacute (page 35)) Aucun autretype de reacuteseau de neurones ne sera eacutetudieacute et par la suite tout reacuteseau de neurones sera consideacutereacute comme multi-couches(donc pas les reacuteseau de Kohonen18)

Un neurone

Deacutefinition D1 neuroneUn neurone agrave p entreacutees est une fonction f Rp+1 times Rp minusrarr R deacutefinie par

bull g R minusrarr Rbull W isin Rp+1 W = (w1 wp+1)

bull forallx isin Rp f (Wx) = g (sump

i=1 wixi + wp+1) avec x = (x1 xp)

17 httpsfrwikipediaorgwikiAnalyse_en_composantes_principales18 httpsfrwikipediaorgwikiCarte_auto_adaptative

25

Machine Learning Statistiques et Programmation Version 035930

Cette deacutefinition est inspireacutee du neurone biologique les poids jouant le rocircle de synapses le vecteur x celui des entreacuteeset W celui des coefficients ou poids Le coefficient wp+1 est appeleacute le biais et souvent noteacute b La fonction g est appeleacuteefonction de transfert ou fonction de seuil

Figure F1 neurone graphique x1

xi

xp

yfrarr z

wp

wi

w1

sum

1

b Le vecteur (x1 xp) isin Rp joue le rocircle des entreacutees y estappeleacute parfois le potentiel y =

sumpi=1 wixi+b z est appeleacutee la sortie du neurone f est appeleacutee la fonction de transfert

ou de seuil z = f (y) = f (sump

i=1 wixi + b)

La reacutepreacutesentation graphique (page 26) est plus souvent celle qursquoon retient Ce scheacutema est eacutegalement plus proche de sadeacutefinition biologique et dissocie mieux les rocircles non symeacutetriques des entreacutees et des poids Des exemples de fonctionsde transfert sont donneacutes par la table qui suit Les plus couramment utiliseacutees sont les fonctions lineacuteaire et sigmoiumlde

exemples de fonction de transfert ou de seuil expressionescalier 1[0+infin[

lineacuteaire x

sigmoiumlde entre [0 1]1

1 + eminusx

sigmoiumlde entre [minus1 1] 1minus 2

1 + ex

normale eminusx2

2

exponentielle ex

relu x11x⩾0

La plupart des fonctions utiliseacutees sont deacuterivables et cette proprieacuteteacute srsquoeacutetend agrave tout assemblage de neurones ce qui permetdrsquoutiliser lrsquoalgorithme de reacutetropropagation deacutecouvert par [Rumelhart1986] Ce dernier permet le calcul de la deacuteriveacuteeouvre ainsi les portes des meacutethodes drsquooptimisation baseacutees sur cette proprieacuteteacute La fonction relu19 a progressivementremplaceacute la fonction sigmoiumlde sur les couches cacheacutees car elle est non lineacuteaire et beaucoup plus rapide agrave calculer

Une couche de neurones

Deacutefinition D2 couche de neuronesSoit p et n deux entiers naturels on note W isin Rn(p+1) = (W1 Wn) avec foralli isin 1 middot middot middot n Wi isin Rp+1 Unecouche de n neurones et p entreacutees est une fonction

F Rn(p+1) times Rp minusrarr Rn

veacuterfifiant bull foralli isin 1 middot middot middot n fi est un neuronebull forallW isin Rn(p+1) times Rp F (Wx) = (f1 (W1 x) fn (Wn x))

Une couche de neurones repreacutesente la juxtaposition de plusieurs neurones partageant les mecircmes entreacutees mais ayantchacun leur propre vecteur de coefficients et leur propre sortie

19 httpsenwikipediaorgwikiRectifier_(neural_networks)

26 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Un reacuteseau de neurones le perceptron

Deacutefinition D3 reacuteseau de neurones multi-couches ou perceptronUn reacuteseau de neurones multi-couches agrave n sorties p entreacutees et C couches est une liste de couches (C1 CC)connecteacutees les unes aux autres de telle sorte que

bull foralli isin 1 middot middot middot C chaque couche Ci possegravede ni neurones et pi entreacuteesbull foralli isin 1 middot middot middot C minus 1 ni = pi+1 de plus p1 = p et nC = n

Les coefficients de la coucheCi sont noteacutes(W i

1 Wini

) cette couche deacutefinit une fonctionFi Soit la suite (Zi)0⩽i⩽C

deacutefinie par

Z0 isin Rp

foralli isin 1 middot middot middot C Zi = Fi

(W i

1 Wini Ziminus1

)On pose M = M =

sumCi=1 ni (pi + 1) le reacuteseau de neurones ainsi deacutefini est une fonction F telle que

F RM times Rp minusrarr Rn

(WZ0) minusrarr ZC

Figure F2 Modegravele du perceptron multi-couche (multi-layer perceptron MLP)

bull (x1 xp) entreacuteesbull Ci nombre de neurones sur la couche i C0 = p

bull zci sortie du neurone i de la couche c par extension z0i = xi

bull yci potentiel du neurone i de la couche cbull wcij coefficient associeacute agrave lrsquoentreacutee j du neurone i de la couche cbull bci biais du neurone i de la couche cbull fci fonction de seuil du neurone i de la couche c

On note Wc la matrice des poids associeacutee agrave la couche c De la mecircme maniegravere Bc est le vecteur des biais associeacutee agravela couche c Zc Yc sont les objets vectoriels correspondant On considegravere que les entreacutees forment la couche C0 demaniegravere agrave simplifier les eacutecritures Ainsi chaque couche Ci du perceptron a pour entreacutees les sorties de la couche Ciminus1Cette deacutefinition est plus facile agrave illustrer qursquoagrave eacutenoncer (voir Modegravele du perceptron (page 27)) et rappelle le rocircle nonsymeacutetrique des entreacutees et des poids Le meacutecanisme qui permet de calculer les sorties drsquoun reacuteseau de neurones sachantses poids est appeleacute propagation

21 Reacuteseaux de neurones 27

Machine Learning Statistiques et Programmation Version 035930

Algorithme A1 PropagationCet algorithme srsquoapplique agrave un reacuteseau de neurones veacuterifiant la deacutefinition du perceptron (page 27) Il srsquoagit de calculerles sorties de ce reacuteseau connaissant ses poids (wcij) et ses entreacutees (xj)

Zc larrminus X

Vient ensuite le calcul iteacuteratif de la suite (Zc)1⩽c⩽C

for c in 1C Yc larrminusWcZcminus1 +Bc

Zc larrminus F (Yc)

Le nombre de couches drsquoun reacuteseau de neurones nrsquoest pas limiteacute Les reacuteseaux de deux couches (une couche pour lesentreacutees une couche de sortie) sont rarement utiliseacutes Trois couches sont neacutecessaires (une couche pour les entreacuteesune couche dite cacheacutee une couche de sortie) pour construire des modegraveles avec une proprieacuteteacute inteacuteressante de densiteacute(page 35)

212 La reacutegression

Le bruit blanc est une variable aleacuteatoire couramment utiliseacute pour deacutesigner le hasard ou la part qui ne peut ecirctre modeacuteliseacuteedans une reacutegression ou tout autre problegraveme drsquoapprentissage On suppose parfois que ce bruit suive une loi normale

Deacutefinition D1 bruit blancUne suite de variables aleacuteatoires reacuteelles (ϵi)1⩽i⩽N est un bruit blanc

bull existσ gt 0 foralli isin 1 middot middot middot N ϵi sim N (0 σ)

bull forall (i j) isin 1 middot middot middot N2 i = j =rArr ϵi perpperp ϵj

Une reacutegression consiste agrave reacutesoudre le problegraveme suivant

Problegraveme P1 ReacutegressionSoient deux variables aleacuteatoires X et Y lrsquoobjectif est drsquoapproximer la fonction E (Y |X) = f (X) Les donneacutees duproblegraveme sont un eacutechantillon de points (Xi Yi) |1 ⩽ i ⩽ N et un modegravele parameacutetreacute avec maththeta`

foralli isin 1 middot middot middot N Yi = f (θXi) + ϵi

avec n isin N (ϵi)1⩽i⩽N bruit blanc (page 28) f est une fonction de paramegravetre θ

La fonction f peut ecirctre une fonction lineacuteaire un polynocircme un reacuteseau de neurones Lorsque le bruit blanc est normal latheacuteorie de lrsquoestimateur de vraisemblance (voir [Saporta1990]) permet drsquoaffirmer que le meilleur paramegravetre θ minimisantlrsquoerreur de preacutediction est

θ = argminθisinRp

E (θ) = argminθisinRp

[Nsumi=1

[Yi minus f (θXi)]2

]

28 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Le lien entre les variables X et Y deacutepend des hypothegraveses faites sur f Geacuteneacuteralement cette fonction nrsquoest supposeacuteenon lineacuteaire que lorsqursquoune reacutegression lineacuteaire20 donne de mauvais reacutesultats Cette hypothegravese est toujours testeacutee carla reacutesolution du problegraveme dans ce cas-lagrave est deacuteterministe et aboutit agrave la reacutesolution drsquoun systegraveme lineacuteaire avec autantdrsquoeacutequations que drsquoinconnues Voici ce que ce la donne avec un nuage de points (Xi Yi) deacutefini par Yi =

32X

2i minusXi +

14 + ϵi

Une fonction non lineacuteaire permet de srsquoapprocher un peu plus de la veacuteritable fonction Premier cas f est un reacuteseauavec un neurone sur la couche cacheacutee

20 httpsfrwikipediaorgwikiRC3A9gression_linC3A9aire

21 Reacuteseaux de neurones 29

Machine Learning Statistiques et Programmation Version 035930

Second cas f est un reacuteseau avec deux neurones sur la couche cacheacutee

30 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Troisiegraveme cas f est un reacuteseau avec 100 neurones sur la couche cacheacutee

Lrsquoerreur de preacutediction de ce reacuteseau de neurones est tregraves infeacuterieure agrave celle des modegraveles preacuteceacutedent ce modegravele a apprispar coe ur le nuage de points (Xi Yi) sans vraiment ńăcomprendreă ce qursquoil apprenait Dans le cas drsquoune reacutegressionagrave cent neurones le nombre de coefficients du reacuteseau de neurones (301) est largement supeacuterieur au nombre de points(50) Il en reacutesulte que contrairement aux trois preacuteceacutedents cas la ńărichesseă du modegravele choisi lui permet drsquoapprendrele ńăhasardă Lorsque ce cas de figure se preacutesente on dit que le reacuteseau de neurones a appris coeur son pouvoir de

21 Reacuteseaux de neurones 31

Machine Learning Statistiques et Programmation Version 035930

geacuteneacuteralisation est mauvais ou il fait de liquestoverfitting21 (voir aussi Generalization Error22) Lrsquoerreur minime estimeacutee surce nuage de points (ou base drsquoapprentissage) sera consideacuterablement accrue sur un autre nuage de points ou base de testsuivant la mecircme loi Cet exemple montre que le choix du reacuteseau de neurones le mieux adapteacute au problegraveme nrsquoest paseacutevident Il existe des meacutethodes permettant drsquoapprocher lrsquoarchitecture optimale mais elles sont geacuteneacuteralement coucircteusesen calcul

213 La classification

Comme la reacutegression la classification consiste aussi agrave trouver le lien entre une variable X et une variable aleacuteatoirediscregravete suivant une loi multinomiale23 Y

Problegraveme P1 ClassificationSoit une variable aleacuteatoire X et une variable aleacuteatoire discregravete Y isin N lrsquoobjectif est drsquoapproximer la fonctionE (Y |X) = f (X) Les donneacutees du problegraveme sont un eacutechantillon de points (Xi Yi) |1 ⩽ i ⩽ N avec foralli isin1 N Yi isin 1 C et un modegravele parameacutetreacute avec θ

foralli isin 1 middot middot middot N forallc isin 1 middot middot middot C P (Yi = c|Xi θ) = h (θXi c)

avec n isin N h est une fonction de paramegravetre θ agrave valeur dans [0 1] et veacuterifiant la contrainte sumC

c=1 h(θX c) = 1

Le premier exemple est une classification en deux classes elle consiste agrave deacutecouvrir le lien qui unit une variable aleacuteatoirereacuteelle X et une variable aleacuteatoire discregravete et Y isin 0 1 on dispose pour cela drsquoune liste

(Xi Yi) isin Rtimes 0 1 |1 ⩽ i ⩽ N

21 httpsfrwikipediaorgwikiSurapprentissage22 httpsenwikipediaorgwikiGeneralization_error23 httpsfrwikipediaorgwikiLoi_multinomiale

32 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Il nrsquoest pas facile de deacuteterminer directement une fonction h qui approxime Y |X car h et Y sont toutes deux discregravetesCrsquoest pourquoi plutocirct que de reacutesoudre directement ce problegraveme il est preacutefeacuterable de deacuteterminer la loi marginaleP (Y = c|X) = f (X θ c) f est alors une fonction dont les sorties sont continues et peut ecirctre choisie deacuterivablePar exemple f peut ecirctre un reacuteseau de neurones dont les sorties veacuterifient

f (X 0) + f (X 1) = P (0|X) + P (1|X) = 1

Le reacuteseau de neurones utiliseacute pour cette tacircche est leacutegegraverement diffeacuterent du preacuteceacutedent il sera preacutesenteacute ulteacuterieurementUn plan a eacuteteacute diviseacute en deux demi-plan par une droite deacutelimitant deux classes le reacuteseau de neurones dont la couchecacheacutee contient deux neurones lineacuteaires a retrouveacute cette seacuteparation malgreacute les quelques exemples mal classeacutes

En revanche un reacuteseau de neurones comportant trop de coefficients aura tendance agrave apprendre par coeur la classificationet les quelques erreurs de classification comme le montre la figure suivante La seacuteparation produite par le reacuteseau deneurones est de maniegravere eacutevidente non lineacuteaire puisqursquoaucune droite ne peut seacuteparer les deux classes deacutetermineacutees parcette fonction Cette classe de modegraveles permet donc de reacutesoudre des problegravemes complexes en gardant toutefois agravelrsquoesprit comme dans le cas de la reacutegression qursquoil nrsquoest pas moins de facile de deacutenicher le bon modegravele que dans le caslineacuteaire

214 Deacutemonstration du theacuteoregraveme de la densiteacute des reacuteseaux de neurones

bull Formulation du problegraveme de la reacutegression (page 34)bull Densiteacute des reacuteseaux de neurones (page 34)

21 Reacuteseaux de neurones 33

Machine Learning Statistiques et Programmation Version 035930

Formulation du problegraveme de la reacutegression

Soient deux variables aleacuteatoires continues (XY ) isin RptimesRq sim L quelconque la reacutesolution du problegraveme de reacutegression(page 28) est lrsquoestimation de la fonction E(Y |X) = F (X) Pour cela on dispose drsquoun ensemble de points A =(Xi Yi) sim L|1 ⩽ i ⩽ N

Soit f RM times Rp minusrarr Rq une fonction on deacutefinit foralli isin 1 middot middot middot N Y Wi = f (WXi) On appelle aussi Y W

i lavaleur preacutedite pour Xi On pose alors ϵWi = Yi minus Y W

i = Yi minus f (WXi)Les reacutesidus sont supposeacutes iid (identiquement et indeacutependemment distribueacutes)24 et suivant une loi normale foralli isin1 middot middot middot N ϵWi sim N (microW σW ) La vraisemblance drsquoun eacutechantillon (Zi)1⩽i⩽N ougrave les Zi sont indeacutependantes entreelles et suivent la loi de densiteacute f (z|θ) est la densiteacute du vecteur (Z1 ZN ) qursquoon exprime comme suit

L (θ Z1 ZN ) =prodN

n=1 f (Zi|θ)=rArr lnL (θ Z1 ZN ) =

sumNn=1 ln f (Zi|θ)

La log-vraisemblance de lrsquoeacutechantillon srsquoeacutecrit LW = minus 12σ2

W

sumNi=1

(Yi minus Y W

i minus microW

)2+ N ln

(σW

radic2π) Les

estimateurs du maximum de vraisemblance pour microW et σW sont (voir [Saporta1990])

microW = 1N

sumNi=1 Yi minus Y W

i

σW =

radicsumNi=1

(YiminusY W

i minusmicroW

)2

N

Lrsquoestimateur de Y = f (WX) deacutesireacutee est de preacutefeacuterence sans biais (microW = 0) et de variance minimum par conseacutequent

les paramegravetreslowastW qui maximisent la vraisemblance LW sont

lowastW = argmin

WisinRM

sumNi=1

(Yi minus Y W

i

)2= argmin

WisinRM

sumNi=1 (Yi minus f (WXi))

2(21)

Reacuteciproquement on veacuterifie que si W lowast veacuterifie lrsquoeacutequation (21) alors lrsquoestimateur deacutefini par f est sans biais Il suffitpour srsquoen convaincre de poser g = f + α avec α isin R et de veacuterifier que la valeur optimale pour α est α =minus 1

N

sumNi=1 Yi minus f (WXi) Lrsquoestimateur minimise la vraisemblance LW Cette formule peut ecirctre geacuteneacuteraliseacutee en

faisant une autre hypothegravese que celle de la normaliteacute des reacutesidus (lrsquoindeacutependance eacutetant conserveacutee) lrsquoeacutequation (21)peut geacuteneacuteraliseacutee par (22)

lowastW = argmin

WisinRM

sumNi=1 e

(Yi minus Y W

i

)= argmin

WisinRM

sumNi=1 e (Yi minus f (WXi))

(22)

Ougrave la fonction e Rq isin R est appeleacutee fonction drsquoerreur

Densiteacute des reacuteseaux de neurones

Lrsquoutilisation de reacuteseaux de neurones srsquoest consideacuterablement deacuteveloppeacutee depuis que lrsquoalgorithme de reacutetropropagationa eacuteteacute trouveacute ([LeCun1985] [Rumelhart1986] [Bishop1995]) Ce dernier permet drsquoestimer la deacuteriveacutee drsquoun reacuteseaude neurones en un point donneacute et a ouvert la voie agrave des meacutethodes classiques de reacutesolution pour des problegravemesdrsquooptimisation tels que la reacutegression non lineacuteaireComme lrsquoensemble des fonctions polynocircmiales lrsquoensemble des fonctions engendreacutees par des reacuteseaux de neuronesmulti-couches possegravede des proprieacuteteacutes de densiteacute (page 35) et sont infiniment deacuterivables Les reacuteseaux de neuronescomme les polynocircmes sont utiliseacutes pour modeacuteliser la fonction f de lrsquoeacutequation (22) Ils diffegraverent neacuteanmoins sur certainspoints

24 httpsfrwikipediaorgwikiVariables_indC3A9pendantes_et_identiquement_distribuC3A9es

34 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Si une couche ne contient que des fonctions de transfert borneacutees comme la fonction sigmoiumlde tout reacuteseau de neuronesincluant cette couche sera aussi borneacute Drsquoun point de vue informatique il est preacutefeacuterable drsquoeffectuer des calculs avec desvaleurs du mecircme ordre de grandeur Pour un polynocircme les valeurs des termes de degreacute eacuteleveacute peuvent ecirctre largementsupeacuterieurs agrave leur sommeUn autre attrait est la symeacutetrie dans lrsquoarchitecture drsquoun reacuteseau de neurones les neurones qui le composent jouent desrocircles symeacutetriques (corollaire familles libres (page 39) Pour ameacuteliorer lrsquoapproximation drsquoune fonction dans un casil suffit drsquoajouter un neurone au reacuteseau dans lrsquoautre il faut inclure des polynocircmes de degreacute plus eacuteleveacute que ceux deacutejagraveemployeacutes

Theacuteoregraveme T1 densiteacute des reacuteseaux de neurones (Cybenko1989)[Cybenko1989] Soit Eq

p lrsquoespace des reacuteseaux de neurones agrave p entreacutees et q sorties posseacutedant une couche cacheacutee dont lafonction de seuil est une fonction sigmoiumlde

(xrarr 1minus 2

1+ex

) une couche de sortie dont la fonction de seuil est lineacuteaire

Soit F qp lrsquoensemble des fonctions continues de C sub Rp minusrarr Rq avec C compact muni de la norme ∥f∥ = sup

xisinC∥f (x)∥

Alors Eqp est dense dans F q

p

La deacutemonstration de ce theacuteoregraveme neacutecessite deux lemmes Ceux-ci utilisent la deacutefinition usuelle du produit scalairesur Rp deacutefini par (x y) = (x1 xp y1 yp) isin R2p minusrarr ⟨x y⟩ =

sumpi=1 xiyi et la norme infinie x =

(x1 xp) isin Rp minusrarr ∥x∥ = maxiisin1middotmiddotmiddot p

xi Toutes les normes sont eacutequivalentes25 sur Rp

Corollaire C1 approximation drsquoune fonction creacuteneauSoit C sub Rp C = (y1 yp) isin Rp |foralli isin 1 middot middot middot p 0 ⩽ yi ⩽ 1 alors

forallε gt 0 forallα gt 0 existn isin Nlowast exist (x1 xn) isin (Rp)n exist (γ1 γn) isin Rn tels que forallx isin Rp∣∣∣∣ nsum

i=1

γi1 + e⟨xix⟩+bi

minus 11xisinC

∣∣∣∣ ⩽ 1

et infyisinFr(C)

∥xminus y∥ gt αrArr∣∣∣∣ nsumi=1

γi1 + e⟨xix⟩+bi

minus 11xisinC

∣∣∣∣ ⩽ ε

Deacutemonstration du corollairePartie 1

Soit h la fonction deacutefinie par h (x) =(

1

1 + eminuskx

)p

avec p gt 0 et 0 lt ϵ lt 1 A α ϵ fixeacute 0 lt ϵ lt 1 on cherche k

tel que

ϵ = h (α) =

(1

1 + eminuskα

)p

=rArr ϵminus1p = 1 + eminuskα

=rArr ϵminus1p minus 1 = eminuskα

=rArr ln(ϵminus

1p minus 1

)= minuskα

=rArr k = minusln(ϵminus

1p minus 1

= k0 (ϵ α p)

Partie 2Soit α gt 0 et 1 ⩾ ε gt 0 k gt 0

25 httpsfrwikipediaorgwikiNorme_C3A9quivalente

21 Reacuteseaux de neurones 35

Machine Learning Statistiques et Programmation Version 035930

On pose f (y1 yp) =pprod

i=1

1

1 + eminuskyi

pprodi=1

1

1 + eminusk(1minusyi)drsquoapregraves sa deacutefinition 0 ⩽ f (y1 yp) ⩽ 1

Pour k ⩾ k0 (ϵ α 2p) obtenu dans la partie preacuteceacutedente

infiisin1p

[min |yi| |1minus yi|] gt α =rArr∥∥f (y1 yp)minus 11xisinC

∥∥ ⩽ ε

Partie 3Soit g la fonction deacutefinie par

g (x) =

(1

1 + eminuskx

)(1

1 + eminusk(1minusx)

)=

1

1 + eminuskx + eminusk(1minusx) + eminusk

=1

1 + eminuskx + eminuskekx + eminusk=

ekx

ekx (1 + eminusk) + 1 + eminuske2kx

La fonction x minusrarr ekx(1 + eminusk

)+1+eminuske2kx est un polynocircme en ekx dont le discriminant est positif Par conseacutequent

la fraction rationnelle g (x) admet une deacutecomposition en eacuteleacutements simples du premier ordre et il existe quatre reacuteels η1η2 δ1 δ2 tels que

g (x) =η1

1 + ekx+δ1+

η21 + ekx+δ2

Par conseacutequent

f (y1 yp) =

pprodi=1

g (yi) =

pprodi=1

[ηi1

1 + ekyi+δi1+

ηi21 + ekyi+δi2

]Il existe n isin N tel qursquoil soit possible drsquoeacutecrire f sous la forme

f (y) =

nsumi=1

γi1 + eltxiygt+bi

Corollaire C2 approximation drsquoune fonction indicatriceSoit C sub Rp compact alors

forallε gt 0 forallα gt 0 exist (x1 xn) isin (Rp)n exist (b1 bn) isin Rn tels que forallx isin Rp∣∣∣∣sumn

i=1

γi1 + e⟨xix⟩+bi

minus 11xisinC

∣∣∣∣ ⩽ 1 + 2ε2

et infyisinFr(C)

∥xminus y∥ gt αrArr∣∣∣∣sumn

i=1

γi1 + e⟨xix⟩+bi

minus 11xisinC

∣∣∣∣ ⩽ ε

Deacutemonstration du corollairePartie 1Soit C1 = y = (y1 yp) isin Rp | foralli isin 1 n 0 ⩽ yi ⩽ 1 et Cj

2 =y = (y1 yp) isin Rp | foralli = j 0 ⩽ yi ⩽ 1 et 1 ⩽ yj ⩽ 2

36 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Le premier lemme suggegravere que la fonction chercheacutee pour ce lemme dans le cas particulier C1 cup Cj2 est

f (y1 yp) =prodp

i=1

1

1 + eminuskyi

prodpi=1

1

1 + eminusk(1minusyi)+(prod

i =j

1

1 + eminuskyi

)(prodi =j

1

1 + eminusk(1minusyi)

)1

1 + ek(1minusyj)

1

1 + eminusk(2minusyj)

=

(prodi =j

1

1 + eminuskyi

)(prodi=j

1

1 + eminusk(1minusyi)

)(

1

1 + eminuskyj

1

1 + eminusk(1minusyj)+

1

1 + ek(1minusyj)

1

1 + eminusk(2minusyj)

)=

(prodi =j

1

1 + eminuskyi

)(prodi=j

1

1 + eminusk(1minusyi)

)[

1

1 + eminuskyj

(1

1 + eminusk(1minusyj)+ 1minus 1

)+

(1minus 1

1 + eminusk(1minusyj)

)1

1 + eminusk(2minusyj)

]Pour k ⩾ k0 (ϵ α 2p) on a

f (y1 yp) =

(prodi=j

1

1 + eminuskyi

)(prodi =j

1

1 + eminusk(1minusyi)

) 1

1 + eminuskyj+

1

1 + eminusk(2minusyj)+

1

1 + ek(1minusyj)

1

1 + eminuskyj︸ ︷︷ ︸⩽ε2

minus 1

1 + eminusk(1minusyj)

1

1 + eminusk(2minusyj)︸ ︷︷ ︸⩽ε2

Par conseacutequent il est facile de construire la fonction chercheacutee pour tout compact connexe par arcPartie 2Si un compact C nrsquoest pas connexe par arc on peut le recouvrir par une somme finie de compacts connexes par arcs etdisjoints (Ck)1⩽k⩽K de telle sorte que

forally isinKcup

k=1Ck inf ∥xminus y∥ x isin C ⩽ α

2

Deacutemontration du theacuteoregraveme de densiteacute des reacuteseaux de neurones (page 35)Partie 1On deacutemontre le theacuteoregraveme dans le cas ougrave q = 1 Soit f une fonction continue du compact C sub Rp rarr R et soit ε gt 0On suppose eacutegalement que f est positive dans le cas contraire on pose f = f minus inf f︸ ︷︷ ︸

fonction positive

+ inf f

Si f est nulle alors crsquoest fini sinon on pose M = supxisinC

f (x) M existe car f est continue et C est compact (de mecircme

inf f existe eacutegalement)On pose Ck = fminus1 ([kεM ]) Ck est compact car il est lrsquoimage reacuteciproque drsquoun compact par une fonction continue etCk sub C compact

21 Reacuteseaux de neurones 37

Machine Learning Statistiques et Programmation Version 035930

Par construction Ck+1 sub Ck et C =

Mε⋃

k=0

Ck = C0 on deacutefinit~

forallx isin C gε (x) = ε

Mεsum

k=0

11xisinCk

Drsquoougrave~

f (x)minus gε (x) = f (x)minus ε

Mεsum

k=0

11xisinCk = f (x)minus ε

Mεsum

k=0

11f(x)⩾kε

= f (x)minus ε

[f (x)

ε

](partie entiegravere)

drsquoougrave 0 ⩽ f (x)minus gε (x) ⩽ε

4(23)

Comme f est continue sur un compact elle est uniformeacutement continue sur ce compact

existα gt 0 tel que forall (x y) isin C2 ∥xminus y∥ ⩽ α =rArr |f (x)minus f (y)| ⩽ ε2

drsquoougrave |f (x)minus f (y)| ⩾ ε =rArr ∥xminus y∥ gt α

Par conseacutequent

inf ∥xminus y∥ |x isin Fr (Ck) y isin Fr (Ck+1) gt α

38 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Drsquoapregraves le second lemme on peut construire des fonctions hk (x) =sumn

i=1

1

1 + e⟨xki x⟩+bki

telles que

(∥∥hk (x)minus 11xisinCk∥∥ ⩽ 1

)et(

infyisinFr(C)

∥xminus y∥ gt α

2rArr∥∥hk (x)minus 11xisinCk

∥∥ ⩽ ε2)

On en deacuteduit que ∣∣∣∣∣f (x)minus ε

Mεsumk=0hk (x)

∣∣∣∣∣ ⩽ |f (x)minus gε (x)|+

∣∣∣∣∣gε (x)minus ε

Mεsumk=0hk (x)

∣∣∣∣∣⩽ ε+ ε2

[M

ε

]+ 2ε2

⩽ ε (M + 3)

Comme εMεsumk=1hk (x) est de la forme deacutesireacutee le theacuteoregraveme est deacutemontreacute dans le cas q = 1

Partie 2Dans le cas q gt 1 on utilise la meacutethode preacuteceacutedente pour chacune des projections de f dans un repegravere orthonormeacute deRq Il suffit de sommer sur chacune des dimensionsCe theacuteoregraveme montre qursquoil est judicieux de modeacuteliser la fonction f dans lrsquoeacutequation (22) par un reacuteseau de neuronespuisqursquoil possible de srsquoapprocher drsquoaussi pregraves qursquoon veut de la fonction E (Y |X) il suffit drsquoajouter des neurones sur lacouche cacheacutee du reacuteseau Ce theacuteoregraveme permet de deacuteduire le corollaire suivant

Corollaire C3 famille libre de fonctionsSoit Fp lrsquoensemble des fonctions continues de C sub Rp minusrarr R avec C compact muni de la norme ∥f∥ = sup

xisinC∥f (x)∥

Alors lrsquoensemble Ep des fonctions sigmoiumldes

Ep =

x minusrarr 1minus 2

1 + eltyxgt+b|y isin Rp et b isin R

est une base de Fp

Deacutemonstration du corollaireLe theacuteoregraveme de densiteacute (page 35) montre que la famille Ep est une famille geacuteneacuteratrice Il reste agrave montrer que crsquoestune famille libre Soient (yi)1⩽i⩽N isin (Rp)

N et (bi)1⩽i⩽N isin RN veacuterifiant i = j =rArr yi = yj ou bi = bj Soit(λi)1⩽i⩽N isin RN il faut montrer que

forallx isin Rp

Nsumi=1

λi

(1minus 2

1 + eltyixgt+bi

)= 0 =rArr foralli λi = 0 (24)

Crsquoest eacutevidemment vrai pourN = 1 La deacutemonstration est baseacutee sur un raisonnement par reacutecurrence on suppose qursquoelleest vraie pour N minus 1 deacutemontrons qursquoelle est vraie pour N On suppose donc N ⩾ 2 Srsquoil existe i isin 1 N tel

que yi = 0 la fonction x minusrarr 1 minus 2

1 + eltyixgt+biest une constante par conseacutequent dans ce cas le corollaire est est

vrai pour N Dans le cas contraire foralli isin 1 N yi = 0 On deacutefinit les vecteurs Xi = (xi 1) et Yi = (yj bj)On cherche agrave reacutesoude le systegraveme de N eacutequations agrave N inconnues

sumNj=1 λj

(1minus 2

1 + eltYj X1gt

)= 0

sumNj=1 λj

(1minus 2

1 + eltYj Xigt

)= 0

sumNj=1 λj

(1minus 2

1 + eltYj XNgt

)= 0

(25)

21 Reacuteseaux de neurones 39

Machine Learning Statistiques et Programmation Version 035930

On note le vecteur Λ = (λi)1⩽i⩽N et M la matrice

M = (mij)1⩽ij⩽N =

(1minus 2

1 + eltYj Xigt

)1⩽ij⩽N

Lrsquoeacutequation (214) est eacutequivalente agrave lrsquoeacutequation matricielle MΛ = 0 On effectue une iteacuteration du pivot de Gauss(214) eacutequivaut agrave

lArrrArr

λ1m11 + λ2 m12 + + λN m1N = 0

0 + λ2 (m22m11 minusm12m21) + + λN (m2Nm11 minusm1Nm21) = 0 0 + λ2 (mN2m11 minusm12mN1) + + λN (mNNm11 minusm1NmN1) = 0

On note Λlowast = (λi)2⩽i⩽N et ∆lowast Mlowast les matrices

Mlowast = (mij)2⩽ij⩽N

∆lowast = (m1j mi1)2⩽ij⩽N

Donc (214) est eacutequivalent agrave

lArrrArr

λ1m11 + λ2m12 + + λNm1N = 00 + (m11Mlowast minus∆lowast) Λlowast = 0

(26)

Il est possible de choisir X1 (α) = (αx1 1) de telle sorte qursquoil existe une suite (sl)1⩽l⩽N isin minus1 1N avec s1 = 1 et

veacuterifiant

forallj isin (1 N) limαminusrarr+infin

[1minus 2

1 + eltYj X1(α)gt

]= lim

αminusrarr+infinm1j (α) = sj

On deacutefinit

Ulowast = (m21 mN1)prime

Vlowast = (s2 m21 sN mN1)prime

et la matrice Llowast = (Vlowast)2⩽i⩽N dont les N minus 1 colonnes sont identiques

On veacuterifie que

limαminusrarr+infin

∆(α) = Vlowast

On obtient toujours pour (214)

lArrrArr

λ1m11 (α) + λ2m12 (α) + + λNm1N (α) = 00 + [m11 (α)Mlowast minus (Llowast + (∆lowast (α)minus Llowast))] Λlowast = 0

(27)

lArrrArr

λ1m11 (α) + λ2m12 (α) + + λNm1N (α) = 00 + (m11 (α)Mlowast minus Llowast) Λlowast + (∆lowast (α)minus Llowast) Λlowast = 0

On eacutetudie la limite lorsque α minusrarr +infin

(∆lowast (α)minus Llowast) minusrarrαrarr+infin

0

=rArr (m11 (α)Mlowast minus Llowast) Λlowast minusrarrαrarr+infin

0

=rArr (Mlowast minus Llowast) Λlowast = 0

=rArr MlowastΛlowast minus(sumN

j=2 λj

)Vlowast = 0

40 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Donc

MlowastΛlowast minus

Nsumj=2

λj

Vlowast = 0

Drsquoapregraves lrsquohypothegravese de reacutecurrence (214) implique que foralli isin 2 N λi = 0 Il reste agrave montrer que λ1 estneacutecessairement nul ce qui est le cas losque α minusrarr +infin alors λ1m11 (α) minusrarr λ1 = 0 La reacutecurrence est deacutemontreacuteeA chaque fonction sigmoiumlde du corollaire famille libre (page 39) correspond un neurone de la couche cacheacutee Tous ontdes rocircles symeacutetriques les uns par rapport aux autres ce qui ne serait pas le cas si les fonctions de transfert eacutetaient despolynocircmes Crsquoest une des raisons pour lesquelles les reacuteseaux de neurones ont du succegraves Le theacuteoregraveme densiteacute (page 35)et le corollaire famille libre (page 39) sont aussi vraies pour des fonctions du type exponentielle (y b) isin RptimesR minusrarreminus(ltyxgt+b)2 Maintenant qursquoil est prouveacute que les reacuteseaux de neurones conviennent pour modeacuteliser f dans lrsquoeacutequation(22) il reste agrave eacutetudier les meacutethodes qui permettent de trouver les paramegravetres W lowast optimaux de cette fonction

215 Descente de gradient

bull Algorithme et convergence (page 42)bull Calcul du gradient ou reacutetropropagation (page 44)

Lorsqursquoun problegraveme drsquooptimisation nrsquoest pas soluble de maniegravere deacuteterministe il existe des algorithmes permettant detrouver une solution approcheacutee agrave condition toutefois que la fonction agrave maximiser ou minimiser soit deacuterivable ce qui estle cas des reacuteseaux de neurones Plusieurs variantes seront proposeacutees regroupeacutees sous le terme de descente de gradientQuelques lectures

bull An overview of gradient descent optimization algorithms26

bull Implementing a Neural Network from Scratch in Python ndash An Introduction27

26 httpsebastianrudercomoptimizing-gradient-descent27 httpwwwwildmlcom201509implementing-a-neural-network-from-scratch

21 Reacuteseaux de neurones 41

Machine Learning Statistiques et Programmation Version 035930

Algorithme et convergence

Soit g Rrarr R une fonction deacuterivable dont il faut trouver lowastx = argmin

xisinRg (x) le scheacutema suivant illustre la meacutethode de

descente de gradient dans le cas ougrave g (x) = x2

On note xt lrsquoabscisse agrave lrsquoiteacuteration t On notepartg (xt)

partxle gradient de g (x) = x2 Lrsquoabscisse agrave lrsquoiteacuteration t + 1 sera

xt+1 = xt minus εt

[partg (xt)

partx

] εt est le pas de gradient agrave lrsquoiteacuteration t

On suppose maintenant que g est une fonction deacuterivable g Rq rarr R dont il faut trouver le minimum le theacuteoregravemesuivant deacutemontre la convergence de lrsquoalgorithme de descente de gradient agrave condition que certaines hypothegraveses soientveacuterifieacutees Une geacuteneacuteralisation de ce theacuteoregraveme est preacutesenteacutee dans [Driancourt1996]

Theacuteoregraveme T1 convergence de la meacutethode de Newton[Bottou1991]Soit une fonction continue g W isin RM rarr R de classe C1 On suppose les hypothegraveses suivantes veacuterifieacutees

bull H1 argminWisinRq

g (W ) = W lowast est un singleton

bull H2 forallε gt 0 inf|WminusWlowast|gtε

[(W minusW lowast)

primenablag (W )

]gt 0

bull H3 exist (AB) isin R2 tels que forallW isin Rp ∥nablag (W )∥2 ⩽ A2 +B2 ∥W minusW lowast∥2

bull H4 la suite (εt)t⩾0 veacuterifie forallt gt 0 εt isin Rlowast+ et

sumt⩾0 εt = +infin

sumt⩾0 ε

2t lt +infin

Alors la suite (Wt)t⩾0 construite de la maniegravere suivante W0 isin RM forallt ⩾ 0 Wt+1 = Wt minus εtnablag (Wt) veacuterifielimtrarr+infin Wt = W lowast

Lrsquohypothegravese H1 implique que le minimum de la fonction g est unique et lrsquohypothegravese H2 implique que le demi-espacedeacutefini par lrsquoopposeacute du gradient contienne toujours le minimum de la fonction g Lrsquohypothegravese H3 est veacuterifieacutee pour une

42 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

fonction sigmoiumlde elle lrsquoest donc aussi pour toute somme finie de fonctions sigmoiumldes que sont les reacuteseaux de neuronesagrave une couche cacheacuteeDeacutemonstration du theacuteoregravemePartie 1Soit la suite ut = ln

(1 + ε2tx

2)

avec x isin R commesum

t⩾0 ε2t lt +infin ut sim ε2tx

2 on asum

t⩾0 ut lt +infin

Par conseacutequent si vt = eut alorsprodT

t=1 vtTrarrinfinminusrarr D isin R

Partie 2On pose ht = ∥Wt minusW lowast∥2 Donc

ht+1 minus ht = ∥Wt minus εtnablag (Wt)minusW lowast∥2 minus ∥Wt minusW lowast∥2 (28)

Par conseacutequent

ht+1 minus ht = minus2εt(Wt minusW lowast)prime nablag (Wt)︸ ︷︷ ︸

gt0

+ ε2t ∥nablaC (Wt)∥2 ⩽ ε2t ∥nablag (Wt)∥2 ⩽ ε2t(A2 +B2ht

)Drsquoougrave

ht+1 minus ht

(1 + ε2tB

2)⩽ ε2t A

2

On pose πt =prodt

k=1

(1 + ε2kB

2)minus1 alors en multipliant des deux cocircteacutes par πt+1 on obtient

πt+1ht+1 minus πtht ⩽ ε2t A2πt+1

drsquoougrave πq+1hq+1 minus πphp ⩽sumq

t=p ε2t A

2πt+1 ⩽sumq

t=p ε2t A

2Π ⩽sumq

t=p ε2t A

2Π minusrarrtminusrarrinfin

0

Comme la seacuteriesum

t (πt+1ht+1 minus πtht) veacuterifie le critegravere de Cauchy elle est convergente Par conseacutequent

limqrarrinfin

πq+1hq+1 = 0 = limqrarrinfin

Πhq+1

Drsquoougrave limqrarrinfin

hq = 0

Partie 3La seacuterie

sumt (ht+1 minus ht) est convergente car Πht sim πtht

sumt⩾0 ε

2t ∥nablag (Wt)∥2 lrsquoest aussi (drsquoapregraves H3)

Drsquoapregraves (215) la seacuteriesum

t⩾0 εt (Wt minusW lowast)prime nablag (Wt) est donc convergente Or drsquoapregraves les hypothegraveses H2 H4 elle

ne peut lrsquoecirctre que si

limtrarrinfin

Wt = W lowast (29)

Si ce theacuteoregraveme prouve la convergence de la meacutethode de Newton il ne preacutecise pas agrave quelle vitesse cette convergencesrsquoeffectue et celle-ci peut parfois ecirctre tregraves lente Plusieurs variantes ont eacuteteacute deacuteveloppeacutees regroupeacutees sous le terme demeacutethodes de quasi-Newton dans le but drsquoameacuteliorer la vitesse de convergenceCe theacuteoregraveme peut ecirctre eacutetendu dans le cas ougrave la fonction g nrsquoa plus un seul minimum global mais plusieurs minima locaux([Bottou1991]) dans ce cas la suite (Wt) converge vers un mimimum local Dans le cas des reacuteseaux de neurones lafonction agrave optimiser est

G (W ) =

Nsumi=1

e(Yi Y W

i

)=

Nsumi=1

e (Yi f (WXi))

Degraves que les fonctions de transfert ne sont pas lineacuteaires il existe une multitude de minima locaux ce nombre croissantavec celui des coefficients

21 Reacuteseaux de neurones 43

Machine Learning Statistiques et Programmation Version 035930

Calcul du gradient ou reacutetropropagation

Afin de minimiser la fonctionG deacutecrite en (215) lrsquoalgorithme de descente du gradient neacutecessite de calculer le gradientde cette fonction G qui est la somme des gradients parte

partW pour chaque couple (Xi Yi)

partG

partW(W ) =

Nsumi=1

parte (Yi f (WXi))

partW

=

Nsumi=1

CCsumk=1

parte (Yi f (WXi))

partzCk

partzCk

partW

Les notations utiliseacutees sont celles de la figure du perceptron (page 27) Les reacutesultats qui suivent sont pour Xi = Xdonneacute appartenant agrave la suite (Xi) On remarque tout drsquoabord que

parte

partwcij(WX) = zcminus1j

parte

partyci(WX)

parte

partbci(WX) =

parte

partyci(WX)

La reacutetropropagation du gradient consiste donc agrave calculer les termes parteparty

(WX) puisque le gradient srsquoen deacuteduitfacilement La derniegravere couche du reacuteseau de neurones nous permet drsquoobtenir

parte

partyCi(WX) =

CCsumk=1

parte

partzCk(WX)

partzCk

partyCi(WX)

=parte

partzCi(WX) f prime

ci (yCi)

Pour les autres couches c telles que 1 ⩽ c ⩽ C minus 1 on a

parte

partyci=

Cc+1suml=1

parte

partyc+1l

partyc+1l

partyci

=

Cc+1suml=1

parte

partyc+1l

Ccsuml=1

partyc+1l

partzcl

partzclpartyci︸ ︷︷ ︸

=0 si l =i

=

Cc+1suml=1

parte

partyc+1l

partyc+1l

partzci

partzcipartyci

Par conseacutequent

parte

partyci=

Cc+1suml=1

parte

partyc+1lwc+1li

f primeci (yci)

Cette derniegravere formule permet drsquoobtenir par reacutecurrence les deacuteriveacutees parteparty

de la derniegravere couche C agrave la premiegravere et cequel que soit le nombre de couches Cette reacutecurrence inverse de la propagation est appeleacutee reacutetropropagation Cetalgorithme se deacuteduit des eacutequations (215) (215) (215) et (215)

Theacuteoregraveme T2 reacutetropropagationCet algorithme srsquoapplique agrave un reacuteseau de neurones veacuterifiant la deacutefinition du perceptron (page 27) Il srsquoagit de calculersa deacuteriveacutee par rapport aux poids Il se deacuteduit des formules (215) (215) (215) et (215) et suppose que lrsquoalgorithmede propagation (page 28) a eacuteteacute preacutealablement exeacutecuteacute On note yprimeci =

partepartyci

wprimecij =

partepartwcij

et bprimeci = partepartbci

Initialisation

44 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

for i in 1CC

yprimeCi larrminus partepartzCi

(WX) f primeci (yCi)

Reacutecurrence

for c in 1C minus 1

for i in 1Cc

yprimeci larrminus 0

for j in 1Cc+1

yprimeci larrminus yprimeci + yprimec+1j wc+1ji

yprimeci larrminus yprimeci fprimeci

(yprimeci)

Terminaison

for c in 1C

for i in 1Cc

for j in 1Ccminus1

wprimecij larrminus zcminus1j y

primeci

bprimecij larrminus yprimeci

Ces formules sont assez indigestes pour comprendre comment la reacutetropropagation fonctionne La figure suivanteillustre comme le gradient se propage drsquoun neurone au preacuteceacutedente de faccedilon reacutecursive Je la trouve plus simple agraveexploiter lorsqursquoon deacutevie du perceptron classique pour faire des choses hors des clous Je la laisse comme ccedila sans tropdrsquoexplications

21 Reacuteseaux de neurones 45

Machine Learning Statistiques et Programmation Version 035930

Lrsquoideacutee de la reacutetropropagation en supposant connu le gradient de lrsquoerreur par rapport agrave la sortie comment en deacuteduirle gradient par rapport aux coefficients du reacuteseau puis comment le propager agrave chaque entreacutee de sorte qursquoil puisse ecirctretransmis aux neurones de la couche infeacuterieure

46 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

216 Apprentissage drsquoun reacuteseau de neurones

bull Apprentissage avec gradient global (page 48)ndash Meacutethodes du premier ordre (page 48)ndash Meacutethodes du second ordre (page 48)

bull Apprentissage avec gradient stochastique (page 52)

Le terme apprentissage est encore inspireacute de la biologie et se traduit par la minimisation de la fonction (215) ougrave f estun reacuteseau de neurone deacutefini par un perceptron (page 27) Il existe plusieurs meacutethodes pour effectuer celle-ci Chacunedrsquoelles vise agrave minimiser la fonction drsquoerreur

E (W ) = G (W ) =

Nsumi=1

e(Yi minus Y W

i

)=

Nsumi=1

e (Yi minus f (WXi))

Dans tous les cas les diffeacuterents apprentissages utilisent la suite suivante (ϵt) veacuterifiant (210) et proposent uneconvergence vers un minimum local

forallt gt 0 εt isin Rlowast+ et

sumt⩾0

εt = +infinsumt⩾0

ε2t lt +infin (210)

Il est souhaitable drsquoapprendre plusieurs fois la mecircme fonction en modifiant les conditions initiales de ces meacutethodes demaniegravere agrave ameacuteliorer la robustesse de la solution

21 Reacuteseaux de neurones 47

Machine Learning Statistiques et Programmation Version 035930

Apprentissage avec gradient global

Lrsquoalgorithme de reacutetropropagation (page 44) permet drsquoobtenir la deacuteriveacutee de lrsquoerreur e pour un vecteur drsquoentreacutee X Orlrsquoerreur E (W ) agrave minimiser est la somme des erreurs pour chaque exemple Xi le gradient global partE(W )

partW de cette erreurglobale est la somme des gradients pour chaque exemple (voir eacutequation (215)) Parmi les meacutethodes drsquooptimisationbaseacutees sur le gradient global on distingue deux cateacutegories

bull Les meacutethodes du premier ordre elles sont calqueacutees sur la meacutethode de Newton28 et nrsquoutilisent que le gradientbull Les meacutethodes du second ordre ou meacutethodes utilisant un gradient conjugueacute29 elles sont plus coucircteuses en calcul

mais plus performantes puisque elles utilisent la deacuteriveacutee seconde ou une valeur approcheacutee

Meacutethodes du premier ordre

Les meacutethodes du premier ordre sont rarement utiliseacutees Elles sont toutes baseacutees sur le principe de la descente degradient de Newton preacutesenteacutee dans la section Algorithme et convergence (page 42)

Algorithme A1 optimisation du premier ordreInitialiationLe premier jeu de coefficients W0 du reacuteseau de neurones est choisi aleacuteatoirement

t larrminus 0

E0 larrminussumN

i=1 e (Yi minus f (W0 Xi))

Calcul du gradientgt larrminus partEt

partW (Wt) =sumN

i=1 eprime (Yi minus f (Wt Xi))

Mise agrave jour

Wt+1 larrminus Wt minus ϵtgtEt+1 larrminus

sumNi=1 e (Yi minus f (Wt+1 Xi))

t larrminus t+ 1

TerminaisonSi Et

Etminus1asymp 1 (ou ∥gt∥ asymp 0) alors lrsquoapprentissage a convergeacute sinon retour au calcul du gradient

La condition drsquoarrecirct peut-ecirctre plus ou moins stricte selon les besoins du problegraveme Cet algorithme converge vers unminimum local de la fonction drsquoerreur (drsquoapregraves le theacuteoregraveme de convergence (page 42) mais la vitesse de convergenceest inconnue

Meacutethodes du second ordre

Lrsquoalgorithme apprentissage global (page 48) fournit le canevas des meacutethodes drsquooptimisation du second ordre La miseagrave jour des coefficients est diffeacuterente car elle prend en compte les derniegraveres valeurs des coefficients ainsi que les derniersgradients calculeacutes Ce passeacute va ecirctre utiliseacute pour estimer une direction de recherche pour le minimum diffeacuterente de celledu gradient cette direction est appeleacutee gradient conjugueacute (voir [Moreacute1977])Ces techniques sont baseacutees sur une approximation du second degreacute de la fonction agrave minimiser On note M le nombrede coefficients du reacuteseau de neurones (biais compris) Soit h RM rarr R la fonction drsquoerreur associeacutee au reacuteseau deneurones h (W ) =

sumi e (Yi f (WXi)) Au voisinage de W0 un deacuteveloppement limiteacute donne

h (W ) = h (W0) +parth (W0)

partW(W minusW0) + (W minusW0)

prime part2h (W0)

partW 2(W minusW0) + o ∥W minusW0∥2

28 httpsfrwikipediaorgwikiMC3A9thode_de_Newton29 httpsfrwikipediaorgwikiMC3A9thode_du_gradient_conjuguC3A9

48 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Par conseacutequent sur un voisinage de W0 la fonction h (W ) admet un minimum local si part2h(W0)partW 2 est deacutefinie positive

strictement

Rappel part2h (W0)

partW 2est deacutefinie positive strictementlArrrArr forallZ isin RN Z = 0 =rArr Z prime part

2h (W0)

partW 2Z gt 0

Une matrice symeacutetrique deacutefinie strictement positive est inversible et le minimum est atteint pour la valeur

Wmin = W0 +1

2

[part2h (W0)

partW 2

]minus1 [parth (W0)

partW

]Neacuteanmoins pour un reacuteseau de neurones le calcul de la deacuteriveacutee seconde est coucircteux son inversion eacutegalement Crsquoestpourquoi les derniegraveres valeurs des coefficients et du gradient sont utiliseacutees afin drsquoapprocher cette deacuteriveacutee seconde oudirectement son inverse Deux meacutethodes drsquoapproximation sont preacutesenteacutees

bull Lrsquoalgorithme BFGS (Broyden-Fletcher-Goldfarb-Shano)30 ([Broyden1967] [Fletcher1993]) voir aussi lesversions L-BFGS31

bull Lrsquoalgoritmhe DFP (Davidon-Fletcher-Powell)32 ([Davidon1959] [Fletcher1963])La figure du gradient conjugueacute (page 49) est couramment employeacutee pour illustrer lrsquointeacuterecirct des meacutethodes de gradientconjugueacute Le problegraveme consiste agrave trouver le minimum drsquoune fonction quadratique par exemple G (x y) = 3x2 + y2Tandis que le gradient est orthogonal aux lignes de niveaux de la fonction G le gradient conjugueacute se dirige plussucircrement vers le minimum global

Figure F1 Gradient conjugueacute

30 httpsenwikipediaorgwikiBroydenE28093FletcherE28093GoldfarbE28093Shanno_algorithm31 httpsenwikipediaorgwikiLimited-memory_BFGS32 httpsenwikipediaorgwikiDavidonE28093FletcherE28093Powell_formula

21 Reacuteseaux de neurones 49

Machine Learning Statistiques et Programmation Version 035930

Gradient et gradient conjugueacute sur une ligne de niveau de la fonction G (x y) = 3x2+y2 le gradient est orthogonal auxlignes de niveaux de la fonction G mais cette direction est rarement la bonne agrave moins que le point (x y) se situe surun des axes des ellipses le gradient conjugueacute agregravege les derniers deacuteplacements et propose une direction de rechercheplus plausible pour le minimum de la fonction Voir Conjugate Gradient Method33

Ces meacutethodes proposent une estimation de la deacuteriveacutee seconde (ou de son inverse) utiliseacutee en (216) Dans les meacutethodesdu premier ordre une iteacuteration permet de calculer les poidsWt+1 agrave partir des poidsWt et du gradientGt Si ce gradientest petit on peut supposer que Gt+1 est presque eacutegal au produit de la deacuteriveacutee seconde par Gt Cette relation est mise agraveprofit pour construire une estimation de la deacuteriveacutee seconde Cette matrice noteacutee Bt dans lrsquoalgorithme BFGS (page 50)est drsquoabord supposeacutee eacutegale agrave lrsquoidentiteacute puis actualiseacutee agrave chaque iteacuteration en tenant de lrsquoinformation apporteacutee par chaquedeacuteplacement

Algorithme A2 BFGSLe nombre de paramegravetres de la fonction f est M InitialisationLe premier jeu de coefficients W0 du reacuteseau de neurones est choisi aleacuteatoirement

t larrminus 0

E0 larrminussumN

i=1 e (Yi minus f (W0 Xi))B0 larrminus IMi larrminus 0

Calcul du gradient

gt larrminus partEt

partW (Wt) =sumN

i=1 eprime (Yi minus f (Wt Xi))

ct larrminus Btgt

Mise agrave jour des coefficients

ϵlowast larrminus arg infϵ

sumNi=1 e (Yi minus f (Wt minus ϵct Xi))

Wt+1 larrminus Wt minus ϵlowastctEt+1 larrminus

sumNi=1 e (Yi minus f (Wt+1 Xi))

t larrminus t+ 1

Mise agrave jour de la marice math`B_t`

si tminus i ⩾ M ou gprimetminus1Btminus1gtminus1 ⩽ 0 ou gprimetminus1Btminus1 (gt minus gtminus1) ⩽ 0

Bt larrminus IMilarrminus t

sinonst larrminusWt minusWtminus1

dt larrminus gt minus gtminus1

Bt larrminus Btminus1 +

(1 +

dprimetBtminus1dtdprimetst

)sts

primet

sprimetdtminus std

primetBtminus1 +Btminus1dts

primet

dprimetst

TerminaisonSi Et

Etminus1asymp 1 alors lrsquoapprentissage a convergeacute sinon retour au calcul du gradient

33 httpsenwikipediaorgwikiConjugate_gradient_method

50 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Lorsque la matrice Bt est eacutegale agrave lrsquoidentiteacute le gradient conjugueacute est eacutegal au gradient Au fur et agrave mesure des iteacuterationscette matrice toujours symeacutetrique eacutevolue en ameacuteliorant la convergence de lrsquooptimisation Neacuteanmoins la matrice Bt

doit ecirctre ńănettoyeacuteeă (eacutegale agrave lrsquoidentiteacute) freacutequemment afin drsquoeacuteviter qursquoelle nrsquoagregravege un passeacute trop lointain Elle estaussi nettoyeacutee lorsque le gradient conjugueacute semble trop srsquoeacuteloigner du veacuteritable gradient et devient plus proche drsquounedirection perpendiculaireLa convergence de cet algorithme dans le cas des reacuteseaux de neurones est plus rapide qursquoun algorithme du premierordre une preuve en est donneacutee dans [Driancourt1996]En pratique la recherche de ϵlowast est reacuteduite car le calcul de lrsquoerreur est souvent coucircteux il peut ecirctre effectueacute sur un grandnombre drsquoexemples Crsquoest pourquoi on remplace lrsquoeacutetape de mise agrave jour de lrsquoalgorithme BFGS (page 50) par celle-ci

Algorithme A3 BFGSiquestLe nombre de paramegravetre de la fonction f est M Initialisation calcul du gradientVoir BFGS (page 50)Recherche de math`epsilon^`

ϵlowast larrminus ϵ0while Et+1 ⩾ Et et ϵlowast ≫ 0

ϵlowast larrminus ϵlowast

2

Wt+1 larrminusWt minus ϵlowastct

Et+1 larrminussumN

i=1 e (Yi minus f (Wt+1 Xi))

if ϵlowast asymp 0 et Bt = IMBt larrminus IMilarrminus t

Retour au calcul du gradient

Mise agrave jour des coefficients

Wt+1 larrminus Wt minus ϵlowastctEt+1 larrminus

sumNi=1 e (Yi minus f (Wt+1 Xi))

t larrminus t+ 1

Mise agrave jour de la matrice math`B_t` temrinaisonVoir BFGS (page 50)

Lrsquoalgorithme DFP est aussi un algorithme de gradient conjugueacute qui propose une approximation diffeacuterente de lrsquoinversede la deacuteriveacutee seconde

Algorithme A4 DFPLe nombre de paramegravetre de la fonction f est M InitialisationLe premier jeu de coefficients W0 du reacuteseau de neurones est choisi aleacuteatoirement

t larrminus 0

E0 larrminussumN

i=1 e (Yi minus f (W0 Xi))B0 larrminus IMi larrminus 0

21 Reacuteseaux de neurones 51

Machine Learning Statistiques et Programmation Version 035930

Calcul du gradient

gt larrminus partEt

partW (Wt) =sumN

i=1 eprime (Yi minus f (Wt Xi))

ct larrminus Btgt

Mise agrave jour des coefficients

ϵlowast larrminus arg infϵ

sumNi=1 e (Yi minus f (Wt minus ϵct Xi))

Wt+1 larrminus Wt minus ϵlowastctEt+1 larrminus

sumNi=1 e (Yi minus f (Wt+1 Xi))

t larrminus t+ 1

Mise agrave jour de la matrice math`B_t`

si tminus i ⩾ M ou gprimetminus1Btminus1gtminus1 ⩽ 0 ou gprimetminus1Btminus1 (gt minus gtminus1) ⩽ 0

Bt larrminus IMilarrminus t

sinondt larrminusWt minusWtminus1

st larrminus gt minus gtminus1

Bt larrminus B_t-1 + dfracd_t drsquo_t drsquo_t s_t - dfracB_t-1 s_t srsquo_t B_t-1 srsquo_t B_t-1 s_t `

TerminaisonSi Et

Etminus1asymp 1 alors lrsquoapprentissage a convergeacute sinon retour agrave du calcul du gradient

Seule lrsquoeacutetape de mise agrave jour Bt diffegravere dans les algorithmes BFGS (page 50) et DFP (page 51) Comme lrsquoalgorithmeBFGS (page 50) on peut construire une version DFP (page 51)iquestinspireacutee de lrsquoalgorithme BFGSiquest (page 51)

Apprentissage avec gradient stochastique

Compte tenu des courbes drsquoerreurs tregraves accidenteacutees (page 52) dessineacutees par les reacuteseaux de neurones il existe unemultitude de minima locaux De ce fait lrsquoapprentissage global converge rarement vers le minimum global de la fonctiondrsquoerreur lorsqursquoon applique les algorithmes baseacutes sur le gradient global Lrsquoapprentissage avec gradient stochastiqueest une solution permettant de mieux explorer ces courbes drsquoerreurs De plus les meacutethodes de gradient conjugueacuteneacutecessite le stockage drsquoune matrice trop grande parfois pour des fonctions ayant quelques milliers de paramegravetres Crsquoestpourquoi lrsquoapprentissage avec gradient stochastique est souvent preacutefeacutereacute agrave lrsquoapprentissage global pour de grands reacuteseauxde neurones alors que les meacutethodes du second ordre trop coucircteuses en calcul sont cantonneacutees agrave de petits reacuteseaux Encontrepartie la convergence est plus lente La deacutemonstration de cette convergence neacutecessite lrsquoutilisation de quasi-martingales et est une convergence presque sucircre [Bottou1991]

Figure F2 Exemple de minimal locaux

52 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Algprithme A1 apprentissage stochastiqueInitialisationLe premier jeu de coefficients W0 du reacuteseau de neurones est choisi aleacuteatoirement

t larrminus 0

E0 larrminussumN

i=1 e (Yi minus f (W0 Xi))

Reacutecurrence

Wt0 larrminusW0

for tprime in 0N minus 1

ilarrminus nombre aleacuteatoire dans 1 Ng larrminus partE

partW (Wttprime) = eprime (Yi minus f (Wttprime Xi))

Wttprime+1 larrminusWttprime minus ϵtg

Wt+1 larrminusWtN

Et+1 larrminussumN

i=1 e (Yi minus f (Wt+1 Xi))

tlarrminus t+ 1

TerminaisonSi Et

Etminus1asymp 1 alors lrsquoapprentissage a convergeacute sinon retour au calcul du gradient

En pratique il est utile de converser le meilleur jeu de coefficients W lowast = argminu⩾0

Eu car la suite (Eu)u⩾0 nrsquoest pas

une suite deacutecroissante

21 Reacuteseaux de neurones 53

Machine Learning Statistiques et Programmation Version 035930

217 Classification

bull Vraisemblance drsquoun eacutechantillon de variable suivant une loi multinomiale (page 54)bull Problegraveme de classification pour les reacuteseaux de neurones (page 55)bull Reacuteseau de neurones adeacutequat (page 56)

Vraisemblance drsquoun eacutechantillon de variable suivant une loi multinomiale

Soit (Yi)1⩽i⩽N un eacutechantillon de variables aleacuteatoires iid suivant la loi multinomialeM (p1 pC) On deacutefinitforallk isin 1 middot middot middot C dk = 1

N

sumNi=1 11Yi=k La vraisemblance de lrsquoeacutechantillon est

L (Y1 YN p1 pC) =

nprodi=1

pYi

lnL (Y1 YN p1 pC) =

nsumi=1

ln pYi

lnL (Y1 YN p1 pC) =

Csumk=1

[(ln pk)

Nsumi=1

11Yi=k

]

lnL (Y1 YN p1 pC) = N

Csumk=1

dk ln pk

Cette fonction est aussi appeleacutee distance de Kullback-Leiber34 ([Kullback1951]) elle mesure la distance entre deuxdistributions de variables aleacuteatoires discregravetes Liquestestimateur de maximum de vraisemblance35 (emv) est la solution duproblegraveme suivant

Problegraveme P1 estimateur du maximum de vraisemblanceSoit un vecteur (d1 dN ) tel que sumN

k=1 dk = 1forallk isin 1 N dk ⩾ 0

On cherche le vecteur (plowast1 plowastN ) veacuterifiant

(plowast1 plowastN ) = argmax

(p1pC)isinRC

sumCk=1 dk ln pk

avecforallk isin 1 middot middot middot C pk ⩾ 0

etsumC

k=1 pk = 1

Theacuteoregraveme T1 reacutesolution du problegraveme du maximum de vraisemblanceLa solution du problegraveme du maximum de vraisemblance (page 54) est le vecteur

(plowast1 plowastN ) = (d1 dN )

34 httpsfrwikipediaorgwikiDivergence_de_Kullback-Leibler35 httpsfrwikipediaorgwikiMaximum_de_vraisemblance

54 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

DeacutemonstrationSoit un vecteur (p1 pN ) veacuterifiant les conditions sumN

k=1 pk = 1forallk isin 1 N pk ⩾ 0

La fonction x minusrarr lnx est concave drsquoougrave

∆ =

Csumk=1

dk ln pk minusCsum

k=1

dk ln dk

=

Csumk=1

dk (ln pk minus ln dk) =

Csumk=1

dk lnpkdk

⩽ ln

(Csum

k=1

dkpkdk

)= ln

(Csum

k=1

pk

)= ln 1 = 0

⩽ 0

La distance de KullBack-Leiber compare deux distributions de probabiliteacutes entre elles Crsquoest elle qui va faire le lienentre le problegraveme de classification discret (page 32) et les reacuteseaux de neurones pour lesquels il faut impeacuterativementune fonction drsquoerreur deacuterivable

Problegraveme de classification pour les reacuteseaux de neurones

Le problegraveme de classification (page 32) est un cas particulier de celui qui suit pour lequel il nrsquoest pas neacutecessaire deconnaicirctre la classe drsquoappartenance de chaque exemple mais seulement les probabiliteacutes drsquoappartenance de cet exempleagrave chacune des classesSoient une variable aleacuteatoire continue X isin Rp et une variable aleacuteatoire discregravete multinomiale Y isin 1 middot middot middot C onveut estimer la loi de

Y |X simM (p1 (WX) pC (WX)) avec W isin RM

Le vecteur (p1 (WX) pC (WX)) est une fonction f de (WX) ougrave W est lrsquoensemble des M paramegravetres dumodegravele Cette fonction possegravede p entreacutees et C sorties Comme pour le problegraveme de la reacutegression on cherche les poidsW qui correspondent le mieux agrave lrsquoeacutechantillon

A =

(Xi yi =

(ηki)1⩽k⩽C

)isin Rp times [0 1]

C tel quecsum

k=1

yki = 1

∣∣∣∣∣ 1 ⩽ i ⩽ N

On suppose que les variables (Yi|Xi)1⩽i⩽N suivent les lois respectives (M (yi))1⩽i⩽N et sont indeacutependantes entreelles la vraisemblance du modegravele veacuterifie drsquoapregraves lrsquoeacutequation (217)

LW propNprodi=1

Cprodk=1

[pk (WXi)]P(Yi=k)

lnLW propNsumi=1

Csumk=1

ηki ln [pk (WXi)]

La solution du problegravemelowastW = argmax

WisinRl

LW est celle drsquoun problegraveme drsquooptimisation sous contrainte Afin de contourner

ce problegraveme on deacutefinit la fonction f

f RM times Rp minusrarr RC

forall (Wx) isin RM times Rp f (Wx) = (f1 (Wx)) fC (Wx)

et foralli isin 1 middot middot middot N forallk isin 1 middot middot middot C pk (WXi) =efk(WXi)sumCl=1 e

fl(WXi)

21 Reacuteseaux de neurones 55

Machine Learning Statistiques et Programmation Version 035930

Les contraintes sur(pk (WXi)

)sont bien veacuterifieacutees

foralli isin 1 middot middot middot N forallk isin 1 middot middot middot C pk (WXi) ⩾ 0

foralli isin 1 middot middot middot N sumC

k=1 pk (WXi) = 1

On en deacuteduit que

lnLW propNsumi=1

Csumk=1

ηki

[fk (WXi)minus ln

[Csuml=1

efl(WXi)

]]

lnLW propNsumi=1

Csumk=1

ηki fk (WXi)minusNsumi=1

ln

[Csuml=1

efl(WXi)

]Csum

k=1

ηki︸ ︷︷ ︸=1

Drsquoougrave

lnLW propsumN

i=1

sumCk=1 η

ki fk (WXi)minus

sumNi=1 ln

[sumCl=1 e

fl(WXi)]

Ceci megravene agrave la deacutefinition du problegraveme de classification suivant

Problegraveme P2 classificationSoit A lrsquoeacutechantillon suivant

A =

(Xi yi =

(ηki)1⩽k⩽C

)isin Rp times RC tel que

csumk=1

ηki = 1

∣∣∣∣∣ 1 ⩽ i ⩽ N

yki repreacutesente la probabiliteacute que lrsquoeacuteleacutement Xi appartiennent agrave la classe k ηki = P (Yi = k|Xi)

Le classifieur chercheacute est une fonction f deacutefinie par

f RM times Rp minusrarr RC

(WX) minusrarr (f1 (WX) fp (WX))

Dont le vecteur de poids W lowast est eacutegal agrave

W lowast = argmaxW

Nsumi=1

Csumk=1

ηki fk (WXi)minusNsumi=1

ln

[Csuml=1

efl(WXi)

]

Reacuteseau de neurones adeacutequat

Dans le problegraveme preacuteceacutedent la maximisation delowastW = argmax

WisinRM

LW aboutit au choix drsquoune fonction

X isin Rp minusrarr f(lowastWX) isin RC

Le reacuteseau de neurones suivant (page 56) g (WX) isin RM times Rp minusrarr RC choisi pour modeacuteliser f aura pour sorties

X isin Rp minusrarr g(lowastWX) isin RC

forallk isin 1 middot middot middot C gk (WX) = efk(WX)

Figure F1 Reacuteseau de neurones adeacutequat pour la classification

56 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

On en deacuteduit que la fonction de transert des neurones de la couche de sortie est x minusrarr ex La probabiliteacute pour le

vecteur x isin Rp drsquoappartenir agrave la classe k isin 1 middot middot middot C est pk(lowastWx) = P (Y = k|x) = gk(

lowastWx)sumC

l=1 gl(lowastWx)

La fonction

drsquoerreur agrave minimiser est lrsquoopposeacute de la log-vraisemblance du modegravele

lowastW = argmin

WisinRM

[Nsumi=1

(minus

Csumk=1

ηki ln (gk (WXi)) + ln

[Csuml=1

gl (WXi)

])]

= argminWisinRM

[Nsumi=1

h(WXi η

ki

)]

On note Crn le nombre de couches du reacuteseau de neurones zkCrnest la sortie k avec k isin 1 middot middot middot C gk (Wx) =

zkCrn= ey

kCrn ougrave ykCrn

est le potentiel du neurone k de la couche de sortieOn calcule

parth(WXi y

ki

)partykCrn

= minusηki +ziCrnsumC

m=1 zmCrn

= pk(lowastWx)minus ηki

Cette eacutequation permet drsquoadapter lrsquoalgorithme de la reacutetropropagation (page 44) deacutecrivant reacutetropropagation pour leproblegraveme de la classification et pour un exemple

(X y =

(ηk)1⩽k⩽C

) Seule la couche de sortie change

Algorithme A1 reacutetropropagation

21 Reacuteseaux de neurones 57

Machine Learning Statistiques et Programmation Version 035930

Cet algorithme de reacutetropropagation est lrsquoadaptation de reacutetropropagation (page 44) pour le problegraveme de la classificationIl suppose que lrsquoalgorithme de propagation (page 28) a eacuteteacute preacutealablement exeacutecuteacute On note yprimeci = parte

partyci wprime

cij =parte

partwcijet bprimeci = parte

partbci

Initialiasation

for i in 1CC

yprimeCi larrminuszCisumCl=1 zCl

minus ηi

Reacutecurrence TerminaisonVoir reacutetropropagation (page 44)

On veacuterifie que le gradient srsquoannule lorsque le reacuteseau de neurones retourne pour lrsquoexemple (Xi yi) la distribution deY |Xi sim M (yi) Cet algorithme de reacutetropropagation utilise un vecteur deacutesireacute de probabiliteacutes (η1 ηCC

) veacuterifiantsumCC

i=1 ηi = 1 Lrsquoexpeacuterience montre qursquoil est preacutefeacuterable drsquoutiliser un vecteur veacuterifiant la contrainte

foralli isin 1 CC min ηi 1minus ηi gt α

avec α gt 0

Geacuteneacuteralement α est de lrsquoordre de 0 1 ou 0 01 Cette contrainte facilite le calcul de la vraisemblance et eacutevitelrsquoobtention de gradients quasi-nuls qui freinent lrsquoapprentissage lorsque les fonctions exponnetielles sont satureacutees (voir[Bishop1995])

218 Prolongements

bull Base drsquoapprentissage et base de test (page 58)bull Fonction de transfert agrave base radiale (page 60)bull Poids partageacutes (page 61)bull Deacuteriveacutee par rapport aux entreacutees (page 61)bull Reacutegularisation ou Decay (page 61)bull Problegravemes de gradients (page 62)bull Seacutelection de connexions (page 63)

Base drsquoapprentissage et base de test

Les deux exemples de reacutegression et de classification La reacutegression (page 28) et Problegraveme de classification pour lesreacuteseaux de neurones (page 55) ont montreacute que la structure du reacuteseau de neurones la mieux adapteacutee a une grandeimportance Dans ces deux cas une rapide veacuterification visuelle permet de juger de la qualiteacute du modegravele obtenu apregravesapprentissage mais bien souvent cette ńăvisionă est inaccessible pour des dimensions supeacuterieures agrave deux Le meilleurmoyen de jauger le modegravele appris est de veacuterifier si lrsquoerreur obtenue sur une base ayant servi agrave lrsquoapprentissage (ou basedrsquoapprentissage) est conserveacutee sur une autre base (ou base de test) que le modegravele deacutecouvre pour la premiegravere foisSoit B = (Xi Yi) |1 ⩽ i ⩽ N lrsquoensemble des observations disponibles Cet ensemble est aleacuteatoirement scindeacute endeux sous-ensembles Ba et Bt de telle sorte que

Ba = empty et Bt = emptyBa cupBt = B et Ba capBt = empty

Ba

BacupBt= p isin]0 1[ en regravegle geacuteneacuterale p isin

[12

34

]58 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Ce deacutecoupage est valide si tous les exemples de la base B obeacuteissent agrave la mecircme loi les deux bases Ba et Bt sont diteshomogegravenes Le reacuteseau de neurones sera donc appris sur la base drsquoapprentissage Ba et ńătesteacuteă sur la base de test BtLe test consiste agrave veacuterifier que lrsquoerreur sur Bt est sensiblement eacutegale agrave celle sur Ba auquel cas on dit que le modegravele(ou reacuteseau de neurones) geacuteneacuteralise bien Le modegravele trouveacute nrsquoest pas pour autant le bon modegravele mais il est robuste Lacourbe figure suivante illustre une deacutefinition du modegravele optimal comme eacutetant celui qui minimise lrsquoerreur sur la base detest Lorsque le modegravele choisi nrsquoest pas celui-lagrave deux cas sont possibles

bull Le nombre de coefficients est trop petit le modegravele geacuteneacuteralise bien mais il existe drsquoautres modegraveles meilleurs pourlesquels lrsquoerreur drsquoapprentissage et de test est moindre

bull Le nombre de coefficients est trop grand le modegravele geacuteneacuteralise mal lrsquoerreur drsquoapprentissage est faible et lrsquoerreurde test eacuteleveacutee le reacuteseau a appris la base drsquoapprentissage par coeur

Figure F1 Modegravele optimal pour la base de test

Ce deacutecoupage des donneacutees en deux bases drsquoapprentissage et de test est freacutequemment utiliseacute pour toute estimation demodegraveles reacutesultant drsquoune optimisation reacutealiseacutee au moyen drsquoun algorithme iteacuteratif Crsquoest le cas par exemple des modegravelesde Markov cacheacutes Elle permet de srsquoassurer qursquoun modegravele srsquoadapte bien agrave de nouvelles donneacutees

21 Reacuteseaux de neurones 59

Machine Learning Statistiques et Programmation Version 035930

Fonction de transfert agrave base radiale

La fonction de transfert est dans ce cas agrave base radiale (souvent abreacutegeacutee par RBF pour radial basis function36 Elle nesrsquoapplique pas au produit scalaire entre le vecteur des poids et celui des entreacutees mais agrave la distance euclidienne entre cesvecteurs

Deacutefinition D1 neurone distanceUn neurone distance agrave p entreacutees est une fonction f Rp+1 times Rp minusrarr R deacutefinie par

bull g Rrarr Rbull W isin Rp+1 W = (w1 wp+1) = (W prime wp+1)

bull forallx isin Rp f (Wx) = eminus∥Wprimeminusx∥2+wp+1 avec x = (x1 xp)

Ce neurone est un cas particulier du suivant qui pondegravere chaque dimension par un coefficient Toutefois ce neuronepossegravede 2p+ 1 coefficients ougrave p est le nombre drsquoentreacutee

Deacutefinition D2 neurone distance pondeacutereacuteePour un vecteur donneacute W isin Rp = (w1 wp) on note W j

i = (wi wj) Un neurone distance pondeacutereacutee agrave pentreacutees est une fonction f R2p+1 times Rp minusrarr R deacutefinie par

bull g Rrarr Rbull W isin R2p+1 W = (w1 w2p+1) = (w1 w2p+1)

bull forallx isin Rp f (Wx) = exp[minus[sump

i=1 wp+i (wi minus xi)2]+ wp+1

]avec x = (x1 xp)

La fonction de transfert est x minusrarr ex est le potentiel de ce neurone donc y = minus[sump

i=1 wp+i (wi minus xi)2]+ wp+1

Lrsquoalgorithme de reacutetropropagation (page 44) est modifieacute par lrsquoinsertion drsquoun tel neurone dans un reacuteseau ainsi que lareacutetropropagation Le plus simple tout drsquoabord

1 ⩽ i ⩽ pparty

partwi= minus2wp+i (wi minus xi)

p+ 1 ⩽ i ⩽ 2pparty

partwi= minus (wi minus xi)

2

i = 2p+ 1party

partwi= minus1

Pour le neurone distance simple la ligne (218) est superflue tous les coefficients (wi)p+1⩽i⩽2p sont eacutegaux agrave 1 Larelation (215) reste vraie mais nrsquoaboutit plus agraveeqalgo_retro_5 celle-ci devient en supposant que la couche drsquoindicec+ 1 ne contient que des neurones deacutefinie par la deacutefinition preacuteceacutedente

parte

partyci=

Cc+1suml=1

parte

partyc+1l

partyc+1l

partzci

partzcipartyci

=

Cc+1suml=1

parte

partyc+1l(2wc+1lp+i (wc+1li minus zci))

partzcipartyci

36 httpsenwikipediaorgwikiRadial_basis_function

60 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Poids partageacutes

Les poids partageacutes sont simplement un ensemble de poids qui sont contraints agrave conserver la mecircme valeur Soit G ungroupe de poids partageacutes dont la valeur est wG Soit Xk et Yk un exemple de la base drsquoapprentissage (entreacutees et sortiesdeacutesireacutees) lrsquoerreur commise par le reacuteseau de neurones est e (WXk Yk)

parte (WXk Yk)

partwG=sumwisinG

parte (WXk Yk)

partwG

partwG

partw=sumwisinG

sumparte (WXk Yk)

partwG

Par conseacutequent si un poids w appartient agrave un groupe G de poids partageacutes sa valeur agrave lrsquoiteacuteration suivante sera

wt+1 = wt minus εt

(sumwisinG

parte (WXk Yk)

partw

)

Cette ideacutee est utiliseacutee dans les reacuteseaux neuronaux convolutifs37 (deep learning38 CS231n Convolutional NeuralNetworks for Visual Recognition39)

Deacuteriveacutee par rapport aux entreacutees

On note (Xk Yk) un exemple de la base drsquoapprentissage Le reacuteseau de neurones est composeacute de C couches Ci

est le nombre de neurones sur la iegraveme couche C0 est le nombre drsquoentreacutees Les entreacutees sont appeleacutees (z0i)1⩽i⩽C0

(y1i)1⩽i⩽C1sont les potentiels des neurones de la premiegravere couche on en deacuteduit que dans le cas drsquoun neurone classique

(non distance)

parte (WXk Yk)

partz0i=

C1sumj=1

parte (WXk Yk)

party1j

party1jpartz0i

=

C1sumj=1

parte (WXk Yk)

party1jw1ji

Comme le potentiel drsquoun neurone distance nrsquoest pas lineacuteaire par rapport aux entreacutees(y =

Nsumi=1

(wi minus z0i)2+ b

) la

formule devient dans ce cas

parte (WXk Yk)

partz0i=

C1sumj=1

parte (WXk Yk)

party1j

party1jpartz0i

= minus2C1sumj=1

parte (WXk Yk)

party1j(w1ji minus z0i)

Reacutegularisation ou Decay

Lors de lrsquoapprentissage comme les fonctions de seuil du reacuteseau de neurones sont borneacutees pour une grande variationdes coefficients la sortie varie peu De plus pour ces grandes valeurs la deacuteriveacutee est quasi nulle et lrsquoapprentissage srsquoentrouve ralenti Par conseacutequent il est preacutefeacuterable drsquoeacuteviter ce cas et crsquoest pourquoi un terme de reacutegularisation est ajouteacutelors de la mise agrave jour des coefficients (voir [Bishop1995]) Lrsquoideacutee consiste agrave ajouter agrave lrsquoerreur une peacutenaliteacute fonction descoefficients du reacuteseau de neurones Ereg = E + λ

sumi w2

i

Et lors de la mise agrave jour du poids wti agrave lrsquoiteacuteration t+ 1 wt+1

i = wti minus ϵt

[partEpartwiminus 2λwt

i

]

Le coefficient λ peut deacutecroicirctre avec le nombre drsquoiteacuterations et est en geacuteneacuteral de lrsquoordre de 0 01 pour un apprentissageavec gradient global plus faible pour un apprentissage avec gradient stochastique

37 httpsfrwikipediaorgwikiRC3A9seau_neuronal_convolutif38 httpsfrwikipediaorgwikiApprentissage_profond39 httpcs231ngithubioneural-networks-1layers

21 Reacuteseaux de neurones 61

Machine Learning Statistiques et Programmation Version 035930

Problegravemes de gradients

La descente du gradient repose sur lrsquoalgorithme de reacutetropropagation (page 44) qui propoge lrsquoerreur depuis la derniegraverecouche jusqursquoagrave la premiegravere Pour peu qursquoune fonction de seuil soit satureacutee Hors la zone rouge le gradient est tregravesatteacutenueacute

import matplotlibpyplot as pltimport numpydef softmax(x)

return 10 (1 + numpyexp(-x))def dsoftmax(x)

t = numpyexp(-x)return t (1 + t)2

x = numpyarange(-1010 01)y = softmax(x)dy = dsoftmax(x)fig ax = pltsubplots(11)axplot(xy label=softmax)axplot(xdy label=deacuteriveacutee)axset_ylim([-01 11])axplot([-5 -5] [-01 11] r)axplot([5 5] [-01 11] r)axlegend(loc=2)pltshow()

62 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Apregraves deux couches de fonctions de transferts le gradient est souvent diminueacute On appelle ce pheacutenomegravene le Vanishinggradient problem40 Crsquoest drsquoautant plus probable que le reacuteseau est gros Quelques pistes pour y remeacutedier RecurrentNeural Networks Tutorial Part 3 ndash Backpropagation Through Time and Vanishing Gradients41 Why are deep neuralnetworks hard to train42 Lrsquoarticle Deep Residual Learning for Image Recognition43 preacutesente une structure de reacuteseauqui va dnas le mecircme sens De la mecircme maniegravere la norme du gradient peut exploser plus particuliegraverement dans le casdes reacuteseaux de neurones reacutecurrents44 Understanding the exploding gradient problem45

Seacutelection de connexions

Ce paragraphe preacutesente un algorithme de seacutelection de lrsquoarchitecture drsquoun reacuteseau de neurones proposeacute par Cottrel et Aldans [Cottrel1995] La meacutethode est applicable agrave tout reacuteseau de neurones mais nrsquoa eacuteteacute deacutemontreacutee que pour la classe dereacuteseau de neurones utiliseacutee pour la reacutegression (page 28) Les proprieacuteteacutes qui suivent ne sont vraies que des reacuteseaux agrave unecouche cacheacutee et dont les sorties sont lineacuteaires Soit (Xk Yk) un exemple de la base drsquoapprentissage les reacutesidus de lareacutegression sont supposeacutes normaux et iid Lrsquoerreur est donc (voir Formulation du problegraveme de la reacutegression (page 34)) e (WXk Yk) = (f (WXk)minus Yk)

2On peut estimer la loi asymptotique des coefficients du reacuteseau de neurones Des connexions ayant un rocircle peu importantpeuvent alors ecirctre supprimeacutees sans nuire agrave lrsquoapprentissage en testant la nulliteacute du coefficient associeacute On note W lespoids trouveacutes par apprentissage et

lowastW les poids optimaux On deacutefinit

la suite εk = f(W Xk

)minus Yk σ

2N =

1

N

Nsumk=1

εk2

la matrice ΣN =1

N

[nabla

We (WXk Yk)

] [nabla

We (WXk Yk)

]prime

Theacuteoregraveme T1 loi asymptotique des coefficientsSoit f un reacuteseau de neurone deacutefini par perceptron (page 27) composeacute de

bull une couche drsquoentreacuteesbull une couche cacheacutee dont les fonctions de transfert sont sigmoiumldesbull une couche de sortie dont les fonctions de transfert sont lineacuteaires

Ce reacuteseau sert de modegravele pour la fonction f dans le problegraveme de reacutegression (page 28) avec un eacutechantillon((X1 Y1) (XN YN )) les reacutesidus sont supposeacutes normaux La suite (ϵk) deacutefinie par (218) veacuterifie

1

N

Nsumi=1

ϵk = 0 = E[f(W X

)minus Y

]Et le vecteur aleacuteatoire W minusW lowast veacuterifie

radicN[W minusW lowast

]Trarr+infinminusrarr N

(0 σN

2ΣN

)Ougrave la matrice ΣN est deacutefinie par (218)endxtheorem

40 httpsenwikipediaorgwikiVanishing_gradient_problem41 httpwwwwildmlcom201510recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients42 httpneuralnetworksanddeeplearningcomchap5html43 httparxivorgpdf151203385v1pdf44 httpsenwikipediaorgwikiRecurrent_neural_network45 httparxivorgpdf12115063v1pdf

21 Reacuteseaux de neurones 63

Machine Learning Statistiques et Programmation Version 035930

Figure F2 Reacuteseau de neurones pour lequel la seacutelection de connexions srsquoapplique

La deacutemonstration de ce theacuteoregraveme est donneacutee par lrsquoarticle [Cottrel1995] Ce theacuteoregraveme megravene au corollaire suivant

Corollaire C1 nulliteacute drsquoun coefficientLes notations utiliseacutees sont celles du theacuteoregraveme sur loi asymptotique des coefficients (page 63) Soit wk un poids dureacuteseau de neurones drsquoindice quelconque k Sa valeur estimeacutee est wk sa valeur optimale wlowast

k Drsquoapregraves le theacuteoregraveme

N(wk minus wlowast

k)2

σN2(ΣN

minus1)kk

Trarr+infinminusrarr χ21

Ce reacutesultat permet agrave partir drsquoun reacuteseau de neurones de supprimer les connexions pour lesquelles lrsquohypothegravese denulliteacute nrsquoest pas reacutefuteacutee Afin drsquoaboutir agrave lrsquoarchitecture minimale adapteacutee au problegraveme Cottrel et Al proposent dans[Cottrel1995] lrsquoalgorithme suivant

Theacuteoregraveme T2 seacutelection drsquoarchitectureLes notations utiliseacutees sont celles du theacuteoregraveme loi asymptotique des coefficients (page 63) f est un reacuteseau de neuronesde paramegravetres W On deacutefinit la constante τ en geacuteneacuteral τ = 3 84 puisque P (X lt τ) = 0 95 si X sim χ2

1

64 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

InitialisationUne architecture est choisie pour le reacuteseau de neurones f incluant un nombre M de paramegravetresApprentissage

Le reacuteseau de neurones f est appris On calcule les nombre et matrice σN2 et ΣN La base drsquoapprentissage contient N

exemplesTest

for k in 1M

tk larrminus Nwk

2

σN2(ΣN

minus1)kk

Seacutelection

kprime larrminus argmink

tk

si tkprime lt τ

Le modegravele obtenu est supposeacute ecirctre le modegravele optimal Lrsquoalgorithme srsquoarrecirctesinon

La connexion kprime est supprimeacutee ou le poids wkprime est maintenue agrave zeacuteroM larrminusM minus 1

Retour agrave lrsquoapprentissage

Cet algorithme est sensible au minimum local trouveacute lors de lrsquoapprentissage il est preacutefeacuterable drsquoutiliser des meacutethodesdu second ordre afin drsquoassurer une meilleure convergence du reacuteseau de neuronesLrsquoeacutetape de seacutelection ne supprime qursquoune seule connexion Comme lrsquoapprentissage est coucircteux en calcul il peut ecirctreinteacuteressant de supprimer toutes les connexions k qui veacuterifient tk lt τ Il est toutefois conseilleacute de ne pas enlever trop deconnexions simultaneacutement puisque la suppression drsquoune connexion nulle peut reacutehausser le test drsquoune autre connexionnulle agrave cette mecircme iteacuteration mais non nulle agrave lrsquoiteacuteration suivante Dans lrsquoarticle [Cottrel1995] les auteurs validentleur algorithme dans le cas drsquoune reacutegression gracircce agrave lrsquoalgorithme suivant

Algorithme A1 validation de lrsquoalgorithme de seacutelection des coefficientsChoix aleacuteatoire drsquoun modegraveleUn reacuteseau de neurones est choisi aleacuteatoirement soit f Rp rarr R la fonction qursquoil repreacutesente Une base drsquoapprentissageA (ou eacutechantillon) de N observations est geacuteneacutereacutee aleacuteatoirement agrave partir de ce modegravele

soit (ϵi)1⩽i⩽N un bruit blancA =

(Xi Yi)1⩽i⩽N

∣∣∣ foralli isin 1 middot middot middot N Yi = f (Xi) + ϵi

Choix aleacuteatoire drsquoun modegraveleLrsquoalgorithme de seacutelection (page 64) agrave un reacuteseau de neurones plus riche que le modegravele choisi dans lrsquoeacutetape drsquoinitilisationLe modegravele seacutelectionneacute est noteacute g

ValidationSi ∥f minus g∥ asymp 0

lrsquoalgorithme de seacutelection (page 64) est valideacute

21 Reacuteseaux de neurones 65

Machine Learning Statistiques et Programmation Version 035930

219 Analyse en composantes principales (ACP) et Auto Encoders

bull Problegraveme de lrsquoanalyse en composantes principales (page 67)bull Reacutesolution drsquoune ACP avec un reacuteseau de neurones diabolo (page 67)bull Calcul de valeurs propres et de vecteurs propres (page 70)bull Analyse en Composantes Principales (ACP) (page 71)

Cet algorithme est proposeacute dans [Song1997] Autrefois reacuteseau diabolo le terme auto-encoder46 est plus utiliseacute depuislrsquoaveacutenement du deep learning Il srsquoagit de compresser avec perte un ensemble de points LiquestACP47 est une forme decompression lineacuteaire puisqursquoon cherche agrave preacuteserver lrsquoinformation en projetant un nuage de points de faccedilon agrave maximiserlrsquoinertie du nuage Les auto-encoders fonctionnent sur le mecircme principe avec des modegraveles non lineacuteairessubsectionPrincipeLrsquoalgorithme impleacutementant lrsquoanalyse en composantes principales est baseacute sur un reacuteseau lineacuteaire dit ńădiaboloă cereacuteseau possegravede une couche drsquoentreacutees agrave N entreacutees une couche cacheacutee et une couche de sortie agrave N sorties Lrsquoobjectif estdrsquoapprendre la fonction identiteacute sur lrsquoespace RN Ce ne sont plus les sorties qui nous inteacuteressent mais la couche cacheacuteeintermeacutediaire qui effectue une compression ou projection des vecteurs drsquoentreacutees puisque les entreacutees et les sorties dureacuteseau auront pour but drsquoecirctre identiques

Figure F1 Principe de la compression par un reacuteseau diabolo

vecteurX isin RN

vecteurY isin RM

et M lt N

vecteurZ asymp X

premiegravere couche du reacuteseaudiabolo projection (oucompression)

seconde couche du reacuteseaudiabolo reconstitution(ou deacutecompression)

R R

La figure suivante illustre un exemple de compression de vecteur de R3 dans R2

Figure F2 Reacuteseau diabolo reacuteduction drsquoune dimensionx1

x2

x3

z11

z12

z21

z22

z23

Ce reacuteseau possegravede 3 entreacuteeset 3 sorties Minimiser lrsquoerreur

sumNk=1 E (Xk Xk) revient agrave compresser un vecteur de dimension 3 en un vecteur de

dimension 2 Les coefficients de la premiegravere couche du reacuteseau de neurones permettent de compresser les donneacutees Lescoefficients de la seconde couche permettent de les deacutecompresser

La compression et deacutecompression ne sont pas inverses lrsquoune de lrsquoautre agrave moins que lrsquoerreur (219) soit nulle Ladeacutecompression srsquoeffectue donc avec des pertes drsquoinformation Lrsquoenjeu de lrsquoACP est de trouver un bon compromis entrele nombre de coefficients et la perte drsquoinformation tocircleacutereacutee Dans le cas de lrsquoACP la compression est ńălineacuteaireă crsquoestune projection

46 httpsenwikipediaorgwikiAutoencoder47 httpsfrwikipediaorgwikiAnalyse_en_composantes_principales

66 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Problegraveme de lrsquoanalyse en composantes principales

Lrsquoanalyse en composantes principales ou ACP est deacutefinie de la maniegravere suivante

Problegraveme P1 analyse en composantes principales (ACP)Soit (Xi)1⩽i⩽N avec foralli isin 1 N Xi isin Rp Soit W isinMpd (R) W = (C1 Cd) ougrave les vecteurs (Ci) sontles colonnes de W et d lt p On suppose eacutegalement que les (Ci) forment une base othonormeacutee Par conseacutequent

W primeW = Id

(W primeXi)1⩽i⩽N est lrsquoensemble des vecteurs (Xi) projeteacutes sur le sous-espace vectoriel engendreacute par les vecteurs (Ci)Reacutealiser une analyse en composantes principales crsquoest trouver le meilleur plan de projection pour les vecteurs (Xi)celui qui maximise lrsquoinertie de ce nuage de points crsquoest donc trouver W lowast tel que

W lowast = argmaxWisinMpd(R)W primeW=Id

E (W ) = argmaxWisinMpd(R)W primeW=Id

[Nsumi=1

∥W primeXi∥2

]

Le termeE (W ) est lrsquoinertie du nuage de points (Xi) projeteacute sur le sous-espace vectoriel deacutefini par les vecteurs colonnesde la matrice W

Reacutesolution drsquoune ACP avec un reacuteseau de neurones diabolo

Un theacuteoregraveme est neacutecessaire avant de construire le reacuteseau de neurones menant agrave la reacutesolution du problegraveme de liquestACP(page 67) afin de passer drsquoune optimisation sous contrainte agrave une optimisation sans contrainte

Theacuteoregraveme T1 reacutesolution de lrsquoACPLes notations utiliseacutees sont celles du problegraveme de liquestACP (page 67) Dans ce cas

S = argmaxWisinMpd(R)W primeW=Id

[Nsumi=1

∥W primeXi∥2

]= argmin

WisinMpd(R)

[Nsumi=1

∥WW primeXi minusXi∥2

]

De plus S est lrsquoespace vectoriel engendreacute par les d vecteurs propres de la matrice XX prime =sumN

i=1 XiXprimei associeacutees aux

d valeurs propres de plus grand module

DeacutemonstrationPartie 1Lrsquoobjectif de cette partie est de chercher la valeur de

maxWisinMpd(R)W primeW=Id

E (W )

Soit X = (X1 XN ) isin (Rp)N alors

E (W ) =

Nsumi=1

∥W primeXi∥2= tr (X primeWW primeX) = tr (XX primeWW prime)

La matrice XX prime est symeacutetrique elle est donc diagonalisable et il existe une matrice P isinMp (R) math telle qu

P primeXX primeP = DX avec DX diagonaleP primeP = Ip

(211)

21 Reacuteseaux de neurones 67

Machine Learning Statistiques et Programmation Version 035930

Soit P = (P1 Pp) les vecteurs propres de la matrice XX prime associeacutes aux valeurs propres (λ1 λp) telles que|λ1| ⩾ ⩾ |λp| Pour meacutemoire W = (C1 Cd) et on a

foralli isin 1 p XX primePi = λiPi

foralli isin 1 d Ci = Pi =rArr XX primeWW prime = DXd =

λ1 0 00 00 0 λd

Drsquoougrave

E (W ) = tr (XX primeWW prime) = tr (PDXP primeWW prime) = tr (DXP primeWW primeP )

Donc

maxWisinMpd(R)W primeW=Id

E (W ) = maxWisinMpd(R)W primeW=Id

tr (DXP primeWW primeP ) = maxY isinMpd(R)Y primeY=Id

tr (DXY Y prime) =sumi=1

dλi

Partie 2Soit Y isin max

WisinMpd(R)W primeW=Id

tr (X primeWW primeX) Y = (Y1 Yd) =(yki)1⩽i⩽d1⩽k⩽p

Chaque vecteur Yi est eacutecrit dans la base (P1 Pp) deacutefinie en (211)

foralli isin 1 d Yi =

psumk=1

yki Pp

Comme Y primeY = Id les vecteurs (Y1 Yd) sont orthogonaux deux agrave deux et normeacutes ils veacuterifient donc foralli isin 1 d

sumpk=1

(yki)2

= 1

forall (i j) isin 1 d2 sump

k=1 yki y

kj = 0

De plus

XX primeY Y prime = XX prime

(dsum

i=1

YiYprimei

)=

dsumi=1

XX primeYiYprimei

On en deacuteduit que

foralli isin 1 d XX primeYiYprimei = XX prime

(psum

k=1

yki Pk

)(psum

k=1

yki Pk

)prime

=

(psum

k=1

λkyki Pk

)(psum

k=1

yki Pk

)prime

Drsquoougrave

foralli isin 1 d tr (XX primeYiYprimei ) =

psumk=1

λk

(yki)2

Et

tr (XX primeY Y prime) =

dsumi=1

psumk=1

λk

(yki)2

tr (XX primeY Y prime) =

psumk=1

λk

(dsum

i=1

(yki)2)

=

psumk=1

λk

68 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Ceci permet drsquoaffirmer que

Y isin maxWisinMpd(R)W primeW=Id

tr (X primeWW primeX) =rArr vect (Y1 Yd) = vect (P1 Pd)

Les eacutequations (219) et (219) deacutemontrent la seconde partie du theacuteoregravemePartie 3

nsumi=1

∥WW primeXi minusXi∥2

=

nsumi=1

∥(WW prime minus IN )Xi∥2

= tr(X prime (WW prime minus Ip)

2X)

= tr(XX prime

((WW prime)

2 minus 2WW prime + Ip

))= tr (XX prime (WW primeWW prime minus 2WW prime + Ip))

= tr (XX prime (minusWW prime + Ip))

= minustr (XX primeWW prime) + tr (XX prime)

Drsquoougrave

maxWisinMpd(R)W primeW=Id

(Nsumi=1

∥W primeXi∥2

)= min

WisinMpd(R)W primeW=Id

(Nsumi=1

∥WW primeXi minusXi∥2

)

Partie 4XX prime est une matrice symeacutetrique elle est donc diagonalisable

existP isin GLN (R) telle que P primeXX primeP = Dp ougrave Dp est diagonale

On en deacuteduit que

Nsumi=1

∥WW primeXi minusXi∥2

= tr(XX prime (WW prime minus Ip)

2)

= tr(PP primeXX primePP prime (WW prime minus Ip)

2)

= tr(PDpP

prime (WW prime minus Ip)2)

= tr(Dp (P

primeWW primeP minus Ip)2)

= tr(Dp (Y Y prime minus Ip)

2)

avec Y = P primeW

Drsquoougrave

argminY

tr(Dp (Y Y prime minus Ip)

2)

= Y isinMNd (R) |Y Y prime = Id

Finalement lrsquoeacutequation (219) permet de deacutemontrer la premiegravere partie du theacuteoregraveme agrave savoir (219)

S = argmaxWisinMpd(R)W primeW=Id

[Nsumi=1

∥W primeXi∥2

]= argmin

WisinMpd(R)

[Nsumi=1

∥WW primeXi minusXi∥2

]

21 Reacuteseaux de neurones 69

Machine Learning Statistiques et Programmation Version 035930

Calcul de valeurs propres et de vecteurs propres

Le calcul des valeurs propres et des vecteurs propres drsquoune matrice fait intervenir un reacuteseau diabolo composeacute drsquouneseule couche cacheacutee et drsquoune couche de sortie avec des fonctions de transfert lineacuteaires On note sous forme de matrice(W ) les coefficients de la seconde couche du reacuteseau dont les biais sont nuls On note d le nombre de neurones sur lacouche cacheacutee et p le nombre drsquoentreacutees

foralli isin 1 d y1i =psum

j=1

wjixj

Soit X isin Rp les entreacutees Y = (y11 y1d) isin Rd on obtient que Y = W primeX Les poids de la seconde couche sont deacutefinis comme suit

forall (i j) isin 1 p times 1 d w2ji = w1ij

Par conseacutequent le vecteur des sorties Z isin Rp du reacuteseau ainsi construit est Z = WW primeX On veut minimiser lrsquoerreurpour (Xi)1⩽i⩽N

E =

Nsumi=1

∥WW primeXi minusXi∥2

Il suffit drsquoapprendre le reacuteseau de neurones pour obtenir

W lowastd = argmax

WisinMpd(R)

Nsumi=1

∥WW primeXi minusXi∥2

Drsquoapregraves ce qui preacutecegravede lrsquoespace engendreacute par les vecteurs colonnes de W est lrsquoespace engendreacute par les k premiersvecteurs propres de la matrice XX prime = (X1 XP ) (X1 XP )

prime associeacutes aux k premiegraveres valeurs propres classeacuteespar ordre deacutecroissant de moduleOn en deacuteduit que W lowast

1 est le vecteur propre de la matrice M associeacutee agrave la valeur propre de plus grand module W lowast2

est lrsquoespace engendreacute par les deux premiers vecteurs Gracircce agrave une orthonormalisation de Schmidt48 On en deacuteduit agravepartir de W lowast

1 et W lowast2 les deux premiers vecteurs propres Par reacutecurrence on trouve lrsquoensemble des vecteurs propres de

la matrice XX prime

Deacutefinition D1 orthonormalisation de SchmidtLrsquoorthonormalisation de Shmidt Soit (ei)1⩽i⩽N une base de Rp

On deacutefinit la famille (εi)1⩽i⩽p par

ε1 =e1∥e1∥

foralli isin 1 middot middot middot p εi =

ei minusiminus1sumj=1

lt ei εj gt εj∥∥∥∥∥ei minus iminus1sumj=1

lt ei εj gt εj

∥∥∥∥∥On veacuterifie que le deacutenominateur nrsquoest jamais nul ei minus

iminus1sumj=1

lt ei εj gt εj = 0 car forallk isin 1 N vect (e1 ek) =

vect (ε1 εk)

48 httpsfrwikipediaorgwikiAlgorithme_de_Gram-Schmidt

70 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Proprieacuteteacute P1 base orthonormeacuteeLa famille (εi)1⩽i⩽p est une base orthonormeacutee de Rp

Lrsquoalgorithme qui permet de deacuteterminer les vecteurs propres de la matrice XX prime deacutefinie par le theacuteoregraveme de liquestACP(page 67) est le suivant

Algorithme A1 vecteurs propresLes notations utiliseacutees sont celles du theacuteoregraveme de liquestACP (page 67) On note V lowast

d la matrice des d vecteurs propres dela matrice XX prime associeacutes aux d valeurs propres de plus grands module

for d pUn reacuteseau diabolo est construit avec les poids Wd isinMpd (R) puis apprisLe reacutesultat de cet apprentissage sont les poids W lowast

d if d gt 1

Lrsquoorthonormalisation de Schmit permet de deacuteduire V lowastd de V lowast

dminus1 et W lowastd

elseV lowastd = W lowast

d

Analyse en Composantes Principales (ACP)

Lrsquoanalyse en composantes principales permet drsquoanalyser une liste drsquoindividus deacutecrits par des variables Commeexemple il suffit de prendre les informations extraites du recensement de la population franccedilaise qui permet de deacutecrirechaque habitant par des variables telles que la cateacutegorie socio-professionnelle la salaire ou le niveau drsquoeacutetude Soit(X1 XN ) un ensemble de N individus deacutecrits par p variables

foralli isin 1 N Xi isin Rp

LrsquoACP consiste agrave projeter ce nuage de point sur un plan qui conserve le maximum drsquoinformation Par conseacutequent ilsrsquoagit de reacutesoudre le problegraveme

W lowast = argminWisinMpd(R)W primeW=Id

(Nsumi=1

∥W primeXi∥2

)avec d lt N

Ce problegraveme a eacuteteacute reacutesolu dans les paragraphes Problegraveme de lrsquoanalyse en composantes principales (page 67) et Calculde valeurs propres et de vecteurs propres (page 70) il suffit drsquoappliquer lrsquoalgorithme vecteurs propres (page 71)Soit (Xi)1⩽i⩽N avec foralli isin 1 N Xi isin Rp Soit (P1 Pp) lrsquoensemble des vecteurs propres normeacutes de lamatrice XX prime associeacutes aux valeurs propres (λ1 λp) classeacutees par ordre deacutecroissant de modules On deacutefinit foralld isin1 middot middot middot p Wd = (P1 Pd) isinMpd On deacutefinit alors lrsquoinertie Id du nuage de points projeteacute sur lrsquoespace vectorieldeacutefini par Pd On suppose que le nuage de points est centreacute alors

foralld isin 1 middot middot middot p Id =

Nsumk=1

(P primedXk)

2= tr (X primePdP

primedX) = tr (XX primePdP

primed) = λd

Comme (P1 Pp) est une base orthonormeacutee de Rp on en deacuteduit que

I =

Psumk=1

X primekXk =

Nsumd=1

Id =

psumd=1

λd

21 Reacuteseaux de neurones 71

Machine Learning Statistiques et Programmation Version 035930

De maniegravere empirique on observe freacutequemment que la courbe (d Id)1⩽d⩽p montre un point drsquoinflexion (voir figureci-dessous) Dans cet exemple le point drsquoinflexion correspond agrave d = 4 En analyse des donneacutees on considegravereempiriquement que seuls les quatres premiegraveres dimensions contiennent de lrsquoinformation

Figure F3 Courbe drsquoinertie pour lrsquoACP

Courbe drsquoinertie point drsquoinflexion pour d = 4 lrsquoexpeacuterience montre que geacuteneacuteralement seules les projections sur unou plusieurs des quatre premiers vecteurs propres reflegravetera lrsquoinformation contenue par le nuage de points

2110 Bibliographie

22 Classification agrave lrsquoaide des plus proches voisins

La figure suivante repreacutesente un problegraveme de classification classique On dispose drsquoun nuage de points reacuteparti en deuxclasses Un nouveau point semblable aux preacuteceacutedents se preacutesente sa classe est inconnue Lrsquoobjectif est de lui attribuerune classe en utilisant le fait qursquoon connaicirct la classe drsquoappartenance des autres points

72 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

A partir drsquoun nuage de points pour lesquels la classe drsquoappartenance est connue comment classer un nouveau pointpour lequel cette classe est inconnue Une meacutethode simple consiste agrave attribuer agrave ce nouveau point la mecircme classe que leplus proche des points appartenant au nuage initial Crsquoest la meacutethode des plus proches voisins (ou nearest neighbours49)Elle est facile agrave impleacutementer mais peu utiliseacutee car souvent tregraves gourmande en temps de calcul lorsque le nuage de pointsest conseacutequent Le premier paragraphe deacutecrit cette meacutethode les suivants cherchent agrave acceacuteleacuterer lrsquoalgorithme selon quele nuage de points appartient agrave un espace vectoriel ou non La derniegravere partie preacutesente lrsquoalgorithme LAESA pour le casougrave le nuage de points appartient agrave un espace meacutetrique quelconque

221 Principe

Cette meacutethode est la plus simple puisqursquoelle consiste agrave associer agrave x lrsquoeacuteleacutement agrave classer le label c (xilowast) de lrsquoeacuteleacutement leplus proche xilowast dans lrsquoensemble (x1 xN ) Ceci megravene agrave lrsquoalgorithme de classification suivant

Algorithme A1 1-PPV ou plus proche voisinSoit X = (x1 xN ) sub E un ensemble drsquoeacuteleacutements drsquoun espace meacutetrique quelconque soit (c (x1) c (xN )) lesclasses associeacutees agrave chacun des eacuteleacutements de X On note d la distance deacutefinie sur lrsquoespace meacutetrique E Soit x un eacuteleacutementagrave classer on cherche agrave deacuteterminer la classe c(x) associeacutee agrave x On deacutefinit xilowast comme eacutetant

xilowast = argminiisin1middotmiddotmiddot N

d (xi x)

Alors c(x) = c (xlowasti )

Cet algorithme est souvent appeleacute 1-PPV (ou 1-NN pour Nearest Neighbors) Il existe une version ameacutelioreacutee k-PPVqui consiste agrave attribuer agrave x la classe la plus repreacutesenteacutee parmi ses k plus proches voisins

Algorithme A2 k-PPV ou k-plus proches voisinsSoit X = (x1 xN ) sub E un ensemble drsquoeacuteleacutements drsquoun espace meacutetrique quelconque soit (c (x1) c (xN ))les classes associeacutees agrave chacun des eacuteleacutements de X On note d la distance deacutefinie sur lrsquoespace meacutetrique E ω (x y)est une fonction strictement positive mesurant la ressemblance entre x et y Soit x un eacuteleacutement agrave classer on cherche agravedeacuteterminer la classe c(x) associeacutee agrave x On deacutefinit lrsquoensemble Slowast

k incluant les k-plus proches voisins de x cet ensembleveacuterifie

cardSlowastk = 0 et max

yisinSlowastk

d (y x) ⩽ minyisinXminusSlowast

k

d (y x)

49 httpsenwikipediaorgwikiK-nearest_neighbors_algorithm

22 Classification agrave lrsquoaide des plus proches voisins 73

Machine Learning Statistiques et Programmation Version 035930

On calcule les occurrences f(i) de chaque classe i dans lrsquoensemble Slowastk

f(i) =sumyisinSlowast

k

ω (x y) 11c(y)=i (212)

On assigne alors agrave x la classe math`c(x)$ choisie dans lrsquoensemble

c(x) isin argmaxiisinN

f(i)

Dans sa version la plus simple la fonction ω (x y) utiliseacutee lors du calcul de la contribution f (212) est constante Maisil est possible de lui affecter une valeur tenant compte de la proximiteacute entre x et y La table suivante donne quelquesexemples de contributions possiblesExemple de contribution w (x y) pour lrsquoalgorithme des k-ppv (page 73) Ces fonctions sont toutes deacutecroissantes(strictement ou non) par rapport agrave la distance d Lrsquoinconveacutenient majeur de la meacutethode des plus proches voisins estsa longueur puisqursquoelle implique le calcul des distances entre x et chacun des eacuteleacutements de lrsquoensemble (x1 xN )Crsquoest pourquoi de nombreuses meacutethodes drsquooptimisation ont eacuteteacute deacuteveloppeacutees afin drsquoacceacuteleacuterer ce processus Les deuxpremiers paragraphes traitent le cas ougrave les points xi appartiennent agrave un espace vectoriel et ont donc des coordonneacuteesLes suivant traitent le cas ougrave les points xi nrsquoont pas de coordonneacutees et appartiennent agrave un espace meacutetrique quelconque

222 B+ tree

Ce premier algorithme B+ tree50 srsquoapplique dans le cas reacuteel afin drsquoordonner des nombres dans un arbre de sorte quechaque noeud ait un pegravere et pas plus de n fils

Deacutefinition D1 B+ treeSoit Bn un B+ tree51 soit N un noeud de Bn il contient un vecteur V (N) = (x1 xt) avec 0 ⩽ t ⩽ n etx1 lt lt xt Ce noeud contient aussi exactement t minus 1 noeuds fils noteacutes (N1 Ntminus1) On deacutesigne par D (Nt)

50 httpsenwikipediaorgwikiB2B_tree51 httpsenwikipediaorgwikiB2B_tree

74 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

lrsquoensemble des descendants du noeud Nt et G (Nt) = V (M) |M isin D (Nt) Le noeud N veacuterifie

forallx isin G (Nt) xt ⩽ x lt xt+1

avec par convention x0 = minusinfin et xt+1 = +infin

Cet arbre permet de trier une liste de nombres crsquoest une geacuteneacuteralisation du tri quicksort52 pour lequel n = 2 Commepour le tri quicksort lrsquoarbre est construit agrave partir drsquoune seacuterie drsquoinsertions et de cet ordre deacutepend la rapiditeacute du triLrsquoespeacuterance du coucirct (moyenne sur tous les permutations possibles de k eacuteleacutements) le coucirct de lrsquoalgorithme est enO (k logn k)

223 R-tree ou Rectangular Tree

Lrsquoarbre R-tree53 est lrsquoadaptation du meacutecanisme du B+ tree54 au cas multidimensionnel (voir [Guttman1984]) Laconstruction de cet arbre peut se faire de maniegravere globale - construction de lrsquoarbre sachant lrsquoensemble de points agraveclasser - ou de maniegravere progressive - insertion des points dans lrsquoarbre les uns agrave la suite des autres - Toutefois cesmeacutethodes sont resteintes agrave des espaces vectorielsIl nrsquoexiste pas une seule maniegravere de construire un R-tree55 les noeuds de ces arbres suivent toujours la contrainte desB+ tree56 qui est drsquoavoir un pegravere et au plus n fils Les R-tree57 ont la mecircme structure que les B+ tree58 ocircteacutee de leurscontraintes drsquoordonnancement des fils De plus ces arbres organisent spatialement des rectangles ou boicirctes en plusieursdimensions comme le suggegravere la figure preacuteceacutedente Les boicirctes agrave organiser seront nommeacutes les objets ces objets sontensuite regroupeacutes dans des boicirctes englobantes Un noeud n drsquoun R-tree59 est donc soit une feuille auquel cas la boicircteqursquoil deacutesigne est un objet dans ce cas il nrsquoa aucun fils soit le noeud deacutesigne une boicircte englobante B (n) On deacutesignepar B lrsquoensemble des boicirctes drsquoun espace vectoriel quelconque et v (b) deacutesigne son volume Pour un noeud n non feuilleA (n) deacutesigne lrsquoensemble des descendants de ce noeud B (n) est deacutefini par

B (n) = argmin v (b) |b isin B et forallnprime isin A (nprime) B (nprime) sub B (n)

La recherche dans un R-tree60 consiste agrave trouver tous les objets ayant une intersection avec une autre boicircte ou fenecirctreW soit lrsquoensemble L

L = B (n) |B (n) est un objet et B (n) capW = empty

Cet ensemble est construit gracircce agrave lrsquoalgorithme suivant

Algorithme A3 recherche dans un R-treeLes notations sont celles utiliseacutees dans ce paragraphe On deacutesigne par r le noeud racine drsquoun R-tree61 Soit n un noeudon deacutesigne par F (n) lrsquoensemble des fils de ce noeud

initialisation

Llarrminus 0 | N larrminus r

iteacuteration52 httpsfrwikipediaorgwikiTri_rapide53 httpsenwikipediaorgwikiR-tree54 httpsenwikipediaorgwikiB2B_tree55 httpsenwikipediaorgwikiR-tree56 httpsenwikipediaorgwikiB2B_tree57 httpsenwikipediaorgwikiR-tree58 httpsenwikipediaorgwikiB2B_tree59 httpsenwikipediaorgwikiR-tree60 httpsenwikipediaorgwikiR-tree61 httpsenwikipediaorgwikiR-tree

22 Classification agrave lrsquoaide des plus proches voisins 75

Machine Learning Statistiques et Programmation Version 035930

while N = empty

for n in 1N

if W capB (n) = emptyN larrminus N cup F (n)

if B (n) est un objetLlarrminus B (n)

L est lrsquoensemble chercheacute

Il reste agrave construire le R-tree62 opeacuteration effectueacutee par la reacutepeacutetition successive de lrsquoalgorithme suivant permettantdrsquoinseacuterer un objet dans un R-tree63

Algorithme A4 insertion drsquoun objet dans un R-treeLes notations utiliseacutees sont les mecircmes que celles de lrsquoalgorithme de recherche (page 75) On cherche agrave inseacuterer lrsquoobjectE deacutesigneacute par son noeud feuille e On suppose que lrsquoarbre contient au moins un noeud sa racine r On deacutesigneeacutegalement par p (n) le pegravere du noeud n Chaque noeud ne peut contenir plus de s fils On deacutesigne par vlowast (G) =min P |P isin B et cupgisinG B (g) sub Pseacutelection du noeud drsquoinsertion

nlowast larrminus r

tant que nlowast nrsquoest pas un noeud feuilleOn choisit le fils f de nlowast

qui minimise lrsquoaccroissement vf minus v (B (f))

du volume avec vf deacutefini par vf = min v (P ) |P isin B et B (f) cupB (e) sub Pnlowast larrminus f

ajout du noeudSi p (nlowast) a moins de s fils alors le noeud e devient le fils de p (nlowast) etB (p (nlowast)) est mis agrave jour drsquoapregraves lrsquoeacutetape preacuteceacutedenteLrsquoinsertion est termineacutee Dans le cas contraire on seacutepare deacutecoupe le noeud p (nlowast) en deux gracircce agrave lrsquoeacutetape suivantedeacutecoupage des noeudsLrsquoobjectif est de diviser le groupe G composeacute de s+ 1 noeuds en deux groupes G1 et G1 Tout drsquoabord on cherche lecouple (n1 n2) qui minimise le critegravere d = vlowast (n1 n2) minus v (B (n1)) minus v (B (n2)) alors G1 larrminus n1 G2 larrminus n2

et Glarrminus GminusG1 cupG2

tant que G = emptyOn choisit un noeud n isin G on deacutetermine ilowast

tel que math`vpaaccn cup G_i - vpaG_i$ soit minimalGlarrminus Gminus nGilowast larrminus Gilowast cup n

62 httpsenwikipediaorgwikiR-tree63 httpsenwikipediaorgwikiR-tree

76 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Si la recherche est identique quel que soit lrsquoarbre construit chaque variante de la construction de lrsquoarbre tente deminimiser les intersections des boicirctes et leur couverture Plus preacuteciseacutement lrsquoeacutetape qui permet de deacutecouper lesnoeuds est conccedilue de maniegravere agrave obtenir des boicirctes englobantes de volume minimale etou drsquointersection minimaleavec drsquoautres boicirctes englobantes Lrsquoalgorithme R+~Tree (voir [Sellis1987]) essaye de minimiser les intersectionsentre boicirctes et les objets agrave organiser sont supposeacutes nrsquoavoir aucune intersection commune La variante R tree64 (voir[Beckmann1990]) effectue un compromis entre lrsquointersection et la couverture des boicirctes englobantes LrsquoalgorithmeX-tree65 (voir [Berchtold1996]) conserve lrsquohistorique de la construction de lrsquoarbre ce qui lui permet de mieux eacuteviterles intersections communes entre boicirctes Ces techniques appartiennent agrave une classe plus larges drsquoalgorithmes de typeBranch and Bound66

224 LAESA

Cet algorithme permet de chercher les plus proches voisins dans un ensemble inclus dans un espace meacutetriquequelconque Il srsquoappuie sur lrsquoineacutegaliteacute triangulaire Lrsquoalgorithme LAESA67 ou Linear Approximating EliminatingSearch Algorithm (voir [Rico-Juan2003]) consiste agrave eacuteviter un trop grand nombre de calculs de distances en se servantde distances deacutejagrave calculeacutees entre les eacuteleacutements de E et un sous-ensemble B inclus dans E contenant des pivots Laseacutelection des pivots peut ecirctre aleacuteatoire ou plus eacutelaboreacutee comme celle effectueacutee par lrsquoalgorithme qui suit deacutecrit danslrsquoarticle [Moreno2003]

Algorithme A5 LAESA seacutelection des pivotsSoit E = y1 yN un ensemble de points on cherche agrave deacuteterminer un sous-ensemble de pivots B =p1 pP sub Einitialisation

B larrminus y isin E choisi arbitrairement

calcul de la fonction g

for y in E minusB

g (y)larrminus 0

for p in B

g (y)larrminus g (y) + d (y p)

mise agrave jour de B

Trouver plowast isin argmax g (p) |p isin E minusBB larrminus B cup plowastSi cardB lt P retour agrave lrsquoeacutetape preacuteceacutedente sinon fin

Lrsquoalgorithme LAESA68 utilise les pivots pour diminuer le nombre de calculs en utilisant lrsquoineacutegaliteacute triangulaire Parexemple soit x un eacuteleacutement agrave classer pj un pivot yi un point du nuage On suppose qursquoon connaicirct d (x pj) d (pj yi)et dlowast la distance du point x agrave un autre point du nuage Lrsquoineacutegaliteacute triangulaire permet drsquoaffirmer que si d (x yi) ⩾

64 httpsenwikipediaorgwikiR_tree65 httpsenwikipediaorgwikiX-tree66 httpsenwikipediaorgwikiBranch_and_bound67 httpstavianatorcomaesa68 httpstavianatorcomaesa

22 Classification agrave lrsquoaide des plus proches voisins 77

Machine Learning Statistiques et Programmation Version 035930

|d (x pj)minus d (pj yi)| gt dlowast alors il nrsquoest pas neacutecessaire de calculer la distance d (x yi) pour affirmer que d (x yi) gtdlowast Lrsquoeacuteleacutement yi ne peut ecirctre lrsquoeacuteleacutement le plus proche

Algorithme A6 LAESASoit E = y1 yN un ensemble de points B = p1 pP sub E un ensemble de pivots inclus dans E Oncherche agrave deacuteterminer le voisinage V (x) de x inclus dans E veacuterifiant

forally isin V (x) d (x y) ⩽ ρ

On suppose que la matrice M = (mij)⩽i⩽P1⩽j⩽N

a eacuteteacute calculeacutee preacutealablement comme suit

forall (i j) mij = d (pi yj)

initialisation

for i in 1P

di larrminus d (x pi)

dlowast larrminus min di|1 ⩽ i ⩽ Pdlowast est la distance du point x au pivot le plus proche

recherche du plus proche eacuteleacutement

S larrminus emptyfor i in 1N

dprime larrminus max |dj minusmji|if dprime lt dlowast

dlarrminus d (x yi)

if dprime ⩽ dlowast

dlowast larrminus dprime

S larrminus yi

225 Reacutesultats theacuteoriques

Lrsquoarticle [Farago1993] deacutemontre eacutegalement qursquoil existe une majoration du nombre moyen de calcul de distances pourpeu que la mesure de lrsquoespace contenant lrsquoensemble E et lrsquoeacuteleacutement x soit connue et que lrsquoensemble B = p1 pP des pivots veacuterifie

exist (α β) isin R+lowast tels que

forall (x y) isin E2 foralli α d (x y) ⩾ |d (x pi)minus d (pi y)|forall (x y) isin E2 max

i|d (x pi)minus d (pi y)| ⩾ β d (x y)

Lrsquoalgorithme deacuteveloppeacute dans [Farago1993] permet de trouver le point de plus proche drsquoun eacuteleacutement x dans un ensemblemath`E = ensemblex_1x_N`selon lrsquoalgorithme suivant

Algorithme A7 plus proche voisin drsquoapregraves [Farago1993]_

78 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Soit E = x1 xN et B = p1 pP sub E sub X Soit x isin X un eacuteleacutement quelconque On suppose que lesvaleurs mij = d (xi pj) ont eacuteteacute preacutealablement calculeacuteesinitialisationOn calcule preacutealablement les coefficients γ (xi)

foralli isin 1 N γ (xi)larrminus maxjisin1P

|mij minus d (x pj)|

eacutelaguageOn deacutefinit t0 larrminus min

iγ (xi) Puis on construit lrsquoensemble F (x) = xi isin E|γ (xi) ⩽ α

β t0

plus proche voisinLe plus proche xlowast voisin est deacutefini par xlowast isin argmin d (x y) |y isin F (x)

Et un petit theacuteoregraveme

Theacuteoregraveme T1 [Farago1993]_ 1Les notations sont celles de lrsquoalgorithme preacuteceacutedent Il retourne le plus proche voisin xlowast de x inclus dans E Autrementdit forallx isin X xlowast isin F (x)

Theacuteoregraveme T2 [Farago1993]_ 2Les notations sont celles du mecircme algorithme On deacutefinit une mesure sur lrsquoensemble X B (x r) deacutesigne la boule decentre x et de rayon r Z isin X une variable aleacuteatoire de plus

p (x r) = PX (B (x r)) = P (Z isin B (x r))

On suppose qursquoil existe d gt 0 et une fonction f X minusrarr R tels que

limrrarr0

p (x r)

rd= f (x) gt 0

La convergence doit ecirctre uniforme et presque sucircre On note eacutegalement FN le nombre de calculs de dissimilariteacuteeffectueacutes par lrsquoalgorithme ougrave N est le nombre drsquoeacuteleacutement de E P deacutesigne toujours le nombre de pivots alors

lim supnrarrinfin

EFN ⩽ k +

β

)2d

226 Impleacutementation

La classe NuagePoints impleacutemente les nuages de points sans optimisation Il utilise la mecircme interface quesklearnneighborsNearestNeighbors69 La second classe NuagePointsLeasaltltlt

import numpyfrom mlstatpymlkppv_laesa import NuagePointsLaesa

X = numpyarray([[0 0] [3 3] [1 1]])nuage = NuagePointsLaesa(2)

(suite sur la page suivante)

69 httpsscikit-learnorgstablemodulesgeneratedneighborsNearestNeighborshtml

22 Classification agrave lrsquoaide des plus proches voisins 79

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

nuagefit(X)dist indices = nuagekneighbors(X)print(distance dist)print(indices indices)

gtgtgt

usrlocallibpython39site-packagesscipyspatialdistancepy307rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(distance [0 0 0]indices [0 1 2]

80 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

227 Bilbiographie

23 Liens entre factorisation de matrices ACP k-means

La factorisation de matrice non neacutegative70 Cette meacutethode est utiliseacutee dans le cadre de la recommandation de produitsagrave des utilisateurs Lire eacutegalement [Acara2011] [Gupta2010]

bull Factorisation de matrices et rang (page 81)bull Quelques cas simples (page 82)bull Intuition geacuteomeacutetrique (page 83)bull k-means (page 85)bull Quelques reacutesultats (page 85)bull Prolongements (page 85)

ndash Factorisation non-neacutegative (page 85)ndash Preacutediction (page 85)ndash Norme (page 86)ndash Sparsiteacute (page 86)ndash Valeurs manquantes (page 86)ndash Interpreacutetation (page 86)ndash NTF (page 86)

bull Bibliographie (page 87)

231 Factorisation de matrices et rang

La factorisation drsquoune matrice71 est un problegraveme drsquooptimisation qui consiste agrave trouver pour une matrice M isin Mpq agravecoefficients positifs ou nuls

M = WH

Ougrave W et H sont de rang k et de dimension W isin Mpk et H isin Mkq On srsquointeacuteresse ici au cas ougrave les coefficients nesont pas neacutecessairement positifs Si k lt rang(M) le produit WH ne peut ecirctre eacutegal agrave M Dans ce cas on chercherales matrices qui minimise

Problegraveme P1 Factorisation de matrices positifsSoit M isinMpq on cherche les matrices agrave coefficients positifs W isinMpk et H isinMkq qui sont solution du problegravemedrsquooptimisation

minWH

∥M minusWH∥2

= min

WH

sumij

(mij minussumk

wikhkj)2

70 httpsenwikipediaorgwikiNon-negative_matrix_factorization71 httpsenwikipediaorgwikiNon-negative_matrix_factorization

23 Liens entre factorisation de matrices ACP k-means 81

Machine Learning Statistiques et Programmation Version 035930

232 Quelques cas simples

Le notebook Valeurs manquantes et factorisation de matrices (page 346) montre la deacutecroissante de lrsquoerreur en fonctiondu rang et lrsquoimpact de la correacutelation sur cette mecircme erreur Le dernier paragraphe montre qursquoil nrsquoexiste pas de solutionunique agrave un problegraveme donneacute Lrsquoexemple suivant srsquointeacuteresse agrave une matrice 3x3 Les trois points forment un triangledans un plan

import matplotlibpyplot as pltfrom mpl_toolkitsmplot3d import Axes3Dfrom numpy import identity array

M = identity(3)W = array([[05 05 0] [0 0 1]])TH = array([[1 1 0] [00 00 10]])wh = W H

fig = pltfigure()ax = figadd_subplot(111 projection=3d)

axscatter(M[0] M[1] M[2] c=b marker=o s=600 alpha=05)axscatter(wh[0] wh[1] wh[2] c=r marker=^)pltshow()

On peut voir la matrice M comme un ensemble de n = 3 points dans un espace vectoriel La matrice W est un

82 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

ensemble de k lt n points dans le mecircme espace La matrice WH de rang k est une approximation de cet ensembledans le mecircme espace crsquoest aussi n combinaisons lineacuteaires de k points de faccedilon agrave former n points les plus prochesproches de n points de la matrice M

233 Intuition geacuteomeacutetrique

Lrsquoexemple preacuteceacutedente suggegravere une interpreacutetation geacuteomeacutetrique drsquoune factorisation de matrice Sans valeur manquantece problegraveme est eacutequivalent agrave une Analyse en Composantes Principales (ACP)72 (voir aussi [Boutsidis2008](deacutecomposition en valeurs singuliegraveres comme algorithme drsquoinitialisation) Nous allons le montrer gracircce agrave quelqueslemmes et theacuteoregravemes

Lemme L1 Rang kOn note M = (mij) W k = (wk

il) Hk = (hklj) avec 1 ⩽ i ⩽ p 1 ⩽ j ⩽ q et 1 ⩽ l ⩽ k avec k lt min(p q)

On suppose que les matrices sont solution du problegraveme drsquooptimisation minWH ∥M minusWH∥2 On suppose querang(M) ⩾ k Alors les les matrices W k et Hk sont de rang k

On procegravede par reacutecurrence Ce lemme est neacutecessairement vrai pour k = 1 car la matrice M nrsquoest pas nulle Demaniegravere eacutevidente

∥∥M minusW kminus1Hkminus1∥∥2 ⩾

∥∥M minusW kHk∥∥2 Comme rang(M) ⩾ k il existe un vecteur colonne V

de la matrice M qui ne fait pas partie de lrsquoespace vectoriel engendreacute par les k minus 1 vecteurs de la matrice W kminus1 Onconstruit la matrice Y k = [W kminus1 V ] Par construction rang(Y ) = k De mecircme on construit Gk agrave partir de Hkminus1

en remplaccedilant la derniegravere colonne et en ajoutant une ligne

Gk =

[Hkminus1[1pminus 1] 0

0 1

]Par construction le dernier vecteur est de la matrice produit est identique agrave celui de la matrice M ∥∥M minus Y kminus1Gkminus1

∥∥2 =∥∥M minusW kminus1Hkminus1

∥∥2 minussumi

(miq minus wkminus1ik hkminus1

kq )2

Nous avons fabriqueacute une matrice de rang k qui fait deacutecroicirctre lrsquoerreur du problegraveme drsquooptimisation On procegravede parlrsquoabsurde pour dire que si rang(W ) = kminus 1 on peut construire une matrice de rang k qui fait deacutecroicirctre lrsquoerreur ce quiest impossible Le lemme est donc vraiCe lemme fait eacutegalement apparaicirctre la construction de q points dans un espace vectoriel engendreacute par les k vecteurscolonnes de la matrice Wk Il est donc possible de choisir nrsquoimporte quel base W prime

k de cet espace et drsquoexprimer lesq points de WkHk avec cette nouvelle base Cela signifie qursquoon peut eacutecrire la matrice Wk dans une base Bk commeWk = BkCk et WkHk = BkCkC

minus1k Gk

Lemme L2 ProjectionOn note M = (mij) W k = (wk

il) Hk = (hklj) avec 1 ⩽ i ⩽ p 1 ⩽ j ⩽ q et 1 ⩽ l ⩽ k avec k lt min(p q)

On suppose que les matrices sont solution du problegraveme drsquooptimisation minWH ∥M minusWH∥2 On considegravere que lamatrice M est un ensemble de q points dans dans un espace vectoriel de dimension p La matrice WH repreacutesente desprojections de ces points dans lrsquoespace vectoriel engendreacute par les k vecteurs colonnes de la matrice W

La figure suivante illustre ce lemme ∥M minusWH∥2 srsquoeacutecrit comme la somme des distances entre q points

∥M minusWH∥2 =

qsumj=1

∥M [j]minusWkHk[j]∥2

72 httpsfrwikipediaorgwikiAnalyse_en_composantes_principales

23 Liens entre factorisation de matrices ACP k-means 83

Machine Learning Statistiques et Programmation Version 035930

Or on sait que si Wk est fixeacute les q points de la matrice WkHk eacutevolue sur un hyperplan de dimension k Le point de ceplan le plus du vecteur M [j] est sa projection sur ce plan

Theacuteoregraveme T1 La factorisation de matrice est eacutequivalente agrave une analyse en composantes principalesOn note M = (mij) W k = (wk

il) Hk = (hklj) avec 1 ⩽ i ⩽ p 1 ⩽ j ⩽ q et 1 ⩽ l ⩽ k avec k lt min(p q)

On suppose que les matrices sont solution du problegraveme drsquooptimisation minWH ∥M minusWH∥2 On considegravere que lamatrice M est un ensemble de q points dans dans un espace vectoriel de dimension p On suppose p lt q La matriceWk deacutefinit un hyperplan identique agrave celui deacutefini par les k vecteurs propres associeacutes aux k plus grande valeurs propresde la matrice MM prime ougrave M prime est la transposeacutee de M

Une analyse en composante principale consiste agrave trouver lrsquohyperplan qui maximise lrsquoinertie de la projection drsquoun nuagesur ce plan Le theacuteoregraveme reacutesolution de lrsquoACP (page 67) a montreacute que

S = argmaxWisinMpd(R)W primeW=Id

[Nsumi=1

∥W primeXi∥2

]= argmin

WisinMpd(R)

[Nsumi=1

∥WW primeXi minusXi∥2

]

Dans notre cas chaque ligne de la matrice M est un vecteur Xi La matrice Wk est identique agrave celle chercheacutee lorsdu problegraveme de factorisation de matrices Les colonnes de la matrice Hk sont eacutegales agrave W primeXi Il reste agrave montrer quele minimum trouveacute dans les deux problegravemes est le mecircme Le notebook Factorisation et matrice et ACP (page 342)montre que cela fonctionne sur un exemple La deacutemonstration du theacuteoregraveme montre eacutegalement que W primeW = Id et dansce cas preacutecis WW primeXi repreacutesente les coordonneacutees de la projection du point Xi sur le plan deacutefini par les vecteurs W Crsquoest aussi ce que montre second lemmme (page 83) Srsquoil srsquoagit du mecircme plan cela signifie que les deux formulationsACP et factorisation de matrices aboutissent au mecircme minimum Comme lrsquoalgorithme de lrsquoACP deacutetermine le meilleurplan projecteur neacutecessairement il correspond agrave celui trouveacute par la factorisation de matrice

84 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

234 k-means

On peut construire deux matrices W et H agrave partir des reacutesultats drsquoun k-means (page 1) Celui-ci deacutetermine k centresauxquels on effecte les points du nuage de deacutepart Dans ce cas-ci la matrice W est constitueacutee des coordonneacutees de cescentres On note Cl le cluster l la matrice Hk = (hk

lj) est deacutefinie comme suit

hklj = 11XjisinCl

Les coefficients sont soit 0 ou 1 On peut alors essayer de forcer la factorisation de matrice vers une matrice H avecpas de un 1 sur chaque colonne et des zeacuteros partout ailleurs Le reacutesultat sera assez proche drsquoun clustering

235 Quelques reacutesultats

Le notebook Factorisation et matrice et ACP (page 342) illustre le lien entre ACP et factorisation de matrice en deuxdimensions

236 Prolongements

Tous les reacutesultats montreacutes ici ne sont valables que si la norme L2 est utiliseacutee Cela permet de mieux comprendre lesreacutefeacuterences proposeacutees dans la documentation de Non-negative matrix factorization (NMF or NNMF)73 Si lrsquoACP et lafactorisation de matrices sont eacutequivalentes les algorithmes pour trouver le minimum diffegraverent et sont plus ou moinsapproprieacutes dans certaines configurations Lire [Gilles2014]

Factorisation non-neacutegative

Le problegraveme le plus souvent eacutevoqueacute est celui de la factorisation non-neacutegative NMF74 Ce problegraveme est uneoptimisation avec contrainte les coefficients doivent tous ecirctre positifs ou nuls Il nrsquoest bien sucircr plus eacutequivalent agraveune ACP En revanche la factorisation de matrice est un problegraveme eacutequivalent agrave celui reacutesolu par la Deacutecomposition enValeur Singuliegravere (SVD)75 qui cherche agrave deacutecomposer une matriceM = UΣV lowast La matriceΣ est une matrice diagonaleet la matrice initiale M nrsquoest pas neacutecessairement carreacutee contrairement au cas drsquoune ACP mais SVD et ACP sont tregravessimilaires

Preacutediction

Preacutedire revient agrave supposer que la matrice M est composeacutee de vecteurs lignes X1 Xq La matrice H reste inchangeacuteeet la preacutediction revient agrave deacuteterminer les coordonneacutees de la projection drsquoun nouveau point Xq+1 dans le plan deacutefinipar les vecteurs de la matrice H Pour de nouvelles observations M2 = Xq+1 la fonction transform76 de la classesklearndecompositionNMF77 reacuteestime une matrice W2 qui projette les vecteurs lignes de M2 sur les vecteurs de H enconservant des coefficients de projection positifs

Problegraveme P2 PreacutedictionSoit M isinMpq et H isinMkq on cherche les matrices agrave coefficients positifs W isinMpk qui sont solution du problegravemedrsquooptimisation

minW

∥M minusWH∥2

= min

WH

sumij

(mij minussumk

wikhkj)2

73 httpscikit-learnorgstablemodulesdecompositionhtmlnmf74 httpswwwmathuniv-toulousefr~besseWikistatpdfst-m-explo-nmfpdf75 httpsfrwikipediaorgwikiDC3A9composition_en_valeurs_singuliC3A8res76 httpsscikit-learnorgstablemodulesgeneratedsklearndecompositionNMFhtmlsklearndecompositionNMFtransform77 httpsscikit-learnorgstablemodulesgenerateddecompositionNMFhtml

23 Liens entre factorisation de matrices ACP k-means 85

Machine Learning Statistiques et Programmation Version 035930

Les recommandations srsquoobtiennent en multipliant W2 par Xq+1 Ce produit peut ecirctre approcheacutee en relacircchant lacontrainte des poids positifs pour la matrice W Crsquoest la piste proposeacutee par le modegravele ApproximateNMFPredictor78

qui utilise une transformation SVD pour projeter sur lrsquoespace vectoriel formeacute par les vecteurs de H

Norme

LrsquoACP avec une norme L1 revient agrave trouver le plan qui minimise la somme des distances agrave la projection et non lasomme des distances au carreacutes Cela reacuteduit lrsquoimpact des points aberrants mais le problegraveme nrsquoest plus eacutequivalent agrave lafactorisation de matrices avec une norme L1

Sparsiteacute

Une ACP suppose que le calcul de valeurs propres drsquoune matrice et crsquoest fastidieux lorsque la dimension du problegravemeest tregraves grande On lui preacutefegravere alors un algorithme tel que Sparse PCA79 La factorisation de matrice est plus efficaceqursquoune ACP sur les problegravemes sparses et de grande dimension Lire Non-negative Matrix Factorization with SparsenessConstraints80

Valeurs manquantes

Contourner le problegraveme des valeurs manquantes veut souvent dire soit supprimer les enregistrements contenant desvaleurs manquantes soit choisir un modegravele capable de faire avec ou soit trouver un moyen de les remplacer On peutgeacuterer plus facilement le problegraveme des valeurs manquantes avec une factorisation de matrices On peut eacutegalement seserver de la meacutethode pour calculer une ACP avec des valeurs manquantes

bull Imputation de donneacutees manquantes81

bull Principal component analysis with missing values a comparative survey of methods82

Interpreacutetation

La factorisation de matrice peut ecirctre utiliseacutee comme outil de segmentation et drsquointerpreacutetation pour des images desvideacuteos Lire A tutorial on Non-Negative Matrix Factorisation with Applications to Audiovisual Content Analysis83

bull Gesture recognition using a NMF-based representation of motion-traces extracted from depth silhouettes84

NTF

Le problegraveme de Non-Negative Matrix Factorisation (NMF)85 est un cas particulier de Non-Negative TensorFactorisation (NTF)86 Lire aussi PARAFAC Tutorial and applications87

78 httpwwwxavierduprefrappmlinsightshelpsphinxmlinsightsmlmodelanmf_predictorhtml79 httpscikit-learnorgstablemodulesdecompositionhtmlsparsepca80 httpwwwjmlrorgpapersvolume5hoyer04ahoyer04apdf81 httpswwwmathuniv-toulousefr~besseWikistatpdfst-m-app-idmpdf82 httppbiluniv-lyon1frmembersdrayfilesarticlesdray2015apdf83 httppersotelecom-paristechfr~essidteachNMF_tutorial_ICME-2014pdf84 httpshalarchives-ouvertesfrhal-00990252document85 httpsenwikipediaorgwikiNon-negative_matrix_factorization86 httpwwwcshujiacil~shashuapapersNTF-icmlpdf87 httpswwwcscmuedu~pmuthukumlsp_pagelecturesParafacpdf

86 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

237 Bibliographie

24 Un arbre de deacutecision en reacuteseaux de neurones

Lrsquoideacutee est de convertir sous la forme drsquoun reacuteseaux de neurones un arbre de deacutecision puis de continuer lrsquoapprentissagede faccedilon agrave obtenir un assemblage de reacutegression logistique plutocirct que de deacutecision binaire

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Un exemple sur Iris (page 87)bull Mecircme exemple en reacuteseau de neurones (page 88)bull Intermegravede de simples neurones de reacutegression (page 90)bull Intermegravede de simples neurones de classification (page 94)bull Apprentissage du reacuteseau de neurones (page 98)bull Autre architecture (page 104)

matplotlib inlinefrom jyquickhelper import RenderJsDotimport numpyimport matplotlibpyplot as pltfrom matplotlibcolors import ListedColormapfrom tqdm import tqdm

241 Un exemple sur Iris

La meacutethode ne marche que sur un problegraveme de classification binaire

from sklearndatasets import load_irisdata = load_iris()X y = datadata[ 2] datatargety = y 2

from sklearnmodel_selection import train_test_splitX_train X_test y_train y_test = train_test_split(X y random_state=11)

from sklearntree import DecisionTreeClassifierdec = DecisionTreeClassifier(max_depth=2 random_state=11)decfit(X_train y_train)decscore(X_test y_test)

06052631578947368

from sklearntree import export_graphvizdot = export_graphviz(dec filled=True)dot = dotreplace(shape=box shape=box fontsize=10 )RenderJsDot(dot)print(dot)

24 Un arbre de deacutecision en reacuteseaux de neurones 87

Machine Learning Statistiques et Programmation Version 035930

digraph Tree node [shape=box fontsize=10 style=filled color=black fontname=helvetica] edge [fontname=helvetica] 0 [label=X[1] lt= 295ngini = 0454nsamples = 112nvalue = [73 39] fillcolor=rarrf3c4a3] 1 [label=X[0] lt= 705ngini = 0429nsamples = 45nvalue = [14 31] fillcolor=92c9f1]rarr0 -gt 1 [labeldistance=25 labelangle=45 headlabel=True] 2 [label=gini = 0402nsamples = 43nvalue = [12 31] fillcolor=86c3ef] 1 -gt 2 3 [label=gini = 00nsamples = 2nvalue = [2 0] fillcolor=e58139] 1 -gt 3 4 [label=X[1] lt= 325ngini = 021nsamples = 67nvalue = [59 8] fillcolor=e99254] 0 -gt 4 [labeldistance=25 labelangle=-45 headlabel=False] 5 [label=gini = 0375nsamples = 32nvalue = [24 8] fillcolor=eeab7b] 4 -gt 5 6 [label=gini = 00nsamples = 35nvalue = [35 0] fillcolor=e58139] 4 -gt 6

Lrsquoarbre de deacutecision est petit donc visuellement reacuteduit et il est perfectible aussi

242 Mecircme exemple en reacuteseau de neurones

Chaque noeud de lrsquoarbre de deacutecision est converti en deux neurones un qui le relie agrave lrsquoentreacutee et qui eacutevalue la deacutecisionil produit la valeur o1 un autre qui associe le reacutesultat du premier noeud avec celui le preacutecegravede dans la structure de lrsquoarbrede deacutecision il produit la valeur o2 La deacutecision finale est quelque chose comme sigmoid(o1 + o2 minus 1) Un neuroneagregravege le reacutesultat de toutes les feuilles

from mlstatpymlneural_tree import NeuralTreeNetnet = NeuralTreeNetcreate_from_tree(dec)RenderJsDot(netto_dot())

On considegravere une entreacutee en particulier

n = 60decpredict_proba(X[n n+1])

array([[027906977 072093023]])

Les sorties du reacuteseau de neurones

netpredict(X[n n+1])[ -2]

array([[012536069 087463931]])

Et on trace les valeurs intermeacutediaires

RenderJsDot(netto_dot(X=X[n]))

On poursuit la comparaison

decpredict_proba(X_test)[5]

88 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

array([[075 025 ][075 025 ][027906977 072093023][1 0 ][027906977 072093023]])

netpredict(X_test)[5 -2]

array([[079156817 020843183][073646978 026353022][029946111 070053889][094070094 005929906][024924737 075075263]])

decpredict_proba(X_test)[-5]

array([[1 0 ][075 025][1 0 ][075 025][075 025]])

netpredict(X_test)[-5 -2]

array([[093247891 006752109][086338585 013661415][098219036 001780964][098352807 001647193][073646978 026353022]])

numpyargmax(netpredict(X_test)[-5 -2] axis=1)

array([0 0 0 0 0] dtype=int64)

On compare visuellement les deux frontiegraveres de classification

def plot_grid(X y fct title ax=None)

cmap_light = ListedColormap([orange cyan cornflowerblue])cmap_bold = ListedColormap([darkorange c darkblue])

h = 05x_min x_max = X[ 0]min() - 1 X[ 0]max() + 1y_min y_max = X[ 1]min() - 1 X[ 1]max() + 1xx yy = numpymeshgrid(numpyarange(x_min x_max h)

numpyarange(y_min y_max h))Z = fct(numpyc_[xxravel() yyravel()])

Z = Zreshape(xxshape)if ax is None

_ ax = pltsubplots(1 1)(suite sur la page suivante)

24 Un arbre de deacutecision en reacuteseaux de neurones 89

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

axpcolormesh(xx yy Z cmap=cmap_light)

axscatter(X[ 0] X[ 1] c=y cmap=cmap_boldedgecolor=k s=20)

axset_xlim(xxmin() xxmax())axset_ylim(yymin() yymax())axset_title(title)

fig ax = pltsubplots(1 2 figsize=(12 4))plot_grid(X y decpredict dec__class____name__ ax=ax[0])plot_grid(X y

lambda x numpyargmax(netpredict(x)[ -2] axis=1)net__class____name__ ax=ax[1])

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

Le code qui produit les preacutedictions du reacuteseau de neurones est assez long agrave exeacutecuter mais il produit agrave peu pregraves les mecircmesfrontiegraveres excepteacute qursquoelles sont plus arrondies

243 Intermegravede de simples neurones de reacutegression

Avant drsquoapprendre ou plutocirct de continuer lrsquoapprentissage des coefficients du reacuteseaux de neurones voyons comment unneurone se deacutebrouille sur un problegraveme de reacutegression Le neurone nrsquoest pas converti il est appris

regX = numpyempty((150 1) dtype=numpyfloat64)regX[50 0] = numpyrandomrandn(50) - 4regX[50100 0] = numpyrandomrandn(50)regX[100 0] = numpyrandomrandn(50) + 4noise = numpyrandomrandn(regXshape[0]) 10regY = regX[ 0] -05 02 + noise

(suite sur la page suivante)

90 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

regY[regX[ 0] gt 03] = noise[regX[ 0] gt 03]

fig ax = pltsubplots(1 1 figsize=(8 4))axscatter(regX[ 0] regY)axset_title(Nuage de points lineacuteaire par morceaux)

On cale une reacutegression avec scikit-learn

from sklearnlinear_model import LinearRegressionlr = LinearRegression()lrfit(regX regY)

fig ax = pltsubplots(1 1 figsize=(8 4))axscatter(regX[ 0] regY)axscatter(regX[ 0] lrpredict(regX))axset_title(Reacutegression scikit-learn)

24 Un arbre de deacutecision en reacuteseaux de neurones 91

Machine Learning Statistiques et Programmation Version 035930

Et maintenant un neurone avec une fonction drsquoactivation iquestidentityiquest

from mlstatpymlneural_tree import NeuralTreeNodeneu = NeuralTreeNode(1 activation=identity)neu

NeuralTreeNode(weights=array([024515488]) bias=010874563175403863 activation=rarridentity)

neufit(regX regY verbose=True max_iter=20)

020 loss 1508 lr=0002 max(coef) 025 l1=0035 l2=00072120 loss 2872 lr=0000163 max(coef) 019 l1=18025 l2=210039220 loss 2774 lr=0000115 max(coef) 019 l1=03025 l2=00660041320 loss 2621 lr=942e-05 max(coef) 018 l1=016023 l2=00150036420 loss 2658 lr=816e-05 max(coef) 017 l1=19023 l2=250033520 loss 258 lr=73e-05 max(coef) 017 l1=044021 l2=013003620 loss 2611 lr=666e-05 max(coef) 016 l1=01102 l2=000960028720 loss 2542 lr=617e-05 max(coef) 016 l1=017021 l2=00180029820 loss 252 lr=577e-05 max(coef) 016 l1=041021 l2=0120029920 loss 2516 lr=544e-05 max(coef) 016 l1=01021 l2=000600281020 loss 2516 lr=516e-05 max(coef) 016 l1=024021 l2=003900281120 loss 2514 lr=492e-05 max(coef) 016 l1=048021 l2=01600281220 loss 2526 lr=471e-05 max(coef) 016 l1=002702 l2=00004100271320 loss 252 lr=453e-05 max(coef) 016 l1=032021 l2=005800281420 loss 2513 lr=436e-05 max(coef) 016 l1=02602 l2=004500271520 loss 2514 lr=422e-05 max(coef) 016 l1=0045021 l2=0001400281620 loss 2516 lr=408e-05 max(coef) 016 l1=28021 l2=600271720 loss 2513 lr=396e-05 max(coef) 016 l1=02102 l2=002700271820 loss 2516 lr=385e-05 max(coef) 016 l1=01402 l2=001300271920 loss 2517 lr=375e-05 max(coef) 016 l1=0046021 l2=000120028

(suite sur la page suivante)

92 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

2020 loss 253 lr=365e-05 max(coef) 016 l1=01202 l2=00110027

NeuralTreeNode(weights=array([-004747787]) bias=015725388033694113 activation=rarridentity)

fig ax = pltsubplots(1 1 figsize=(8 4))axscatter(regX[ 0] regY)axscatter(regX[ 0] lrpredict(regX) label=sklearn)axscatter(regX[ 0] neupredict(regX) label=NeuralTreeNode)axlegend()axset_title(Reacutegression et neurones)

Ca marche Et avec drsquoautres fonctions drsquoactivation

neus = identity neufor act in tqdm([relu leakyrelu sigmoid])

nact = NeuralTreeNode(1 activation=act)nactfit(regX regY)neus[act] = nact

100|iquest iquest iquest iquest iquest iquest iquest iquest iquest iquest | 33 [0001lt0000 173its]

neus[relu] neus[leakyrelu]

(NeuralTreeNode(weights=array([-056717432]) bias=-20796272519664116 activation=relurarr)NeuralTreeNode(weights=array([-011951102]) bias=-008125009545262747 activation=

rarrleakyrelu))

24 Un arbre de deacutecision en reacuteseaux de neurones 93

Machine Learning Statistiques et Programmation Version 035930

fig ax = pltsubplots(1 1 figsize=(8 4))axscatter(regX[ 0] regY)axscatter(regX[ 0] lrpredict(regX) label=sklearn)for k v in neusitems()

axscatter(regX[ 0] vpredict(regX) label=k)axlegend()axset_title(Reacutegression neuronenactivation)

Rien de surprenant La fonction sigmoiumlde prend ses valeurs entre 0 et 1 La fonction relu est parfois nulle sur unedemi-droite degraves que la fonction est nulle sur lrsquoensemble du nuage de points le gradient est nul partout (voir Rectifier(neural networks)91) La fonction leaky relu est deacutefinie comme suit

f(x) =

x si x gt 0x

100 sinon

Le gradient nrsquoest pas nul sur la partie la plus plate

244 Intermegravede de simples neurones de classification

Avant drsquoapprendre ou plutocirct de continuer lrsquoapprentissage des coefficients du reacuteseaux de neurones voyons comment unneurone se deacutebrouille sur un problegraveme de classification Le neurone nrsquoest pas converti mais appris

from sklearnlinear_model import LogisticRegression

clsX = numpyempty((100 2) dtype=numpyfloat64)clsX[50] = numpyrandomrandn(50 2)clsX[50] = numpyrandomrandn(50 2) + 2clsy = numpyzeros(100 dtype=numpyint64)

(suite sur la page suivante)

91 httpsenwikipediaorgwikiRectifier_(neural_networks)

94 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

clsy[50] = 1

logr = LogisticRegression()logrfit(clsX clsy)pred1 = logrpredict(clsX)

def line_cls(x0 x1 coef bias)y0 = -(coef[00] x0 + bias) coef[01]y1 = -(coef[00] x1 + bias) coef[01]return x0 y0 x1 y1

x0 y0 x1 y1 = line_cls(-5 5 logrcoef_ logrintercept_)

h = 01fig ax = pltsubplots(1 1 figsize=(8 4))axscatter(clsX[clsy == 0 0] clsX[clsy == 0 1] label=cl0)axscatter(clsX[clsy == 1 0] clsX[clsy == 1 1] label=cl1)axscatter(clsX[pred1 == 0 0] + h clsX[pred1 == 0 1] + h label=LR0)axscatter(clsX[pred1 == 1 0] + h clsX[pred1 == 1 1] + h label=LR1)axplot([x0 x1] [y0 y1] y-- lw=4 label=frontiegravere LR)axset_ylim([-3 3])axlegend()axset_title(Classification et neurones)

Un neurone de classification binaire produit deux sorties une pour chaque classe et sont normaliseacutees agrave 1 La fonctiondrsquoactivation est la fonction softmax92

clsY = numpyempty((clsyshape[0] 2) dtype=numpyfloat64)(suite sur la page suivante)

92 httpsenwikipediaorgwikiSoftmax_function

24 Un arbre de deacutecision en reacuteseaux de neurones 95

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

clsY[ 1] = clsyclsY[ 0] = 1 - clsy

softneu = NeuralTreeNode(2 activation=softmax)softneu

NeuralTreeNode(weights=array([[-208861923 018763489][ 035500659 -039231456]]) bias=array([-003589328 0383808 ]) activation=

rarrsoftmax)

softneufit(clsX clsY verbose=True max_iter=20 lr=0001)

020 loss 5106 lr=0001 max(coef) 21 l1=034 l2=048120 loss 2978 lr=995e-05 max(coef) 45 l1=3718 l2=25e+0267220 loss 2914 lr=705e-05 max(coef) 52 l1=9721 l2=2089320 loss 2807 lr=576e-05 max(coef) 54 l1=3023 l2=18e+0298420 loss 2734 lr=499e-05 max(coef) 57 l1=1523 l2=9911e+02520 loss 2654 lr=447e-05 max(coef) 59 l1=1924 l2=1e+0211e+02620 loss 2608 lr=408e-05 max(coef) 61 l1=2625 l2=16e+0212e+02720 loss 2578 lr=378e-05 max(coef) 63 l1=2826 l2=16e+0213e+02820 loss 2515 lr=353e-05 max(coef) 65 l1=3526 l2=23e+0213e+02920 loss 2478 lr=333e-05 max(coef) 66 l1=3327 l2=23e+0214e+021020 loss 2446 lr=316e-05 max(coef) 68 l1=3627 l2=26e+0214e+021120 loss 2412 lr=301e-05 max(coef) 69 l1=4328 l2=34e+0215e+021220 loss 2369 lr=289e-05 max(coef) 7 l1=3128 l2=2e+0215e+021320 loss 2332 lr=277e-05 max(coef) 72 l1=1829 l2=12e+0216e+021420 loss 2321 lr=267e-05 max(coef) 73 l1=3629 l2=27e+0216e+021520 loss 2297 lr=258e-05 max(coef) 74 l1=3430 l2=35e+0217e+021620 loss 2285 lr=25e-05 max(coef) 75 l1=2130 l2=12e+0217e+021720 loss 2245 lr=242e-05 max(coef) 76 l1=1631 l2=1e+0218e+021820 loss 2206 lr=236e-05 max(coef) 77 l1=8931 l2=1618e+021920 loss 2202 lr=229e-05 max(coef) 78 l1=3431 l2=21e+0218e+022020 loss 2176 lr=224e-05 max(coef) 79 l1=2632 l2=13e+0219e+02

NeuralTreeNode(weights=array([[239484139 403623835][541545461 701868202]]) bias=array([794607355 495768881]) activation=

rarrsoftmax)

pred = softneupredict(clsX)pred[5]

array([[989410479e-01 105895211e-02][996986932e-02 900301307e-01][997104404e-01 289559597e-03][999839780e-01 160220367e-04][962522709e-01 374772912e-02]])

pred2 = (pred[ 1] gt 05)astype(numpyint64)

96 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

x00 y00 x01 y01 = line_cls(-4 4 softneucoef[1 1] softneubias[0])x10 y10 x11 y11 = line_cls(-4 4 softneucoef[1 1] softneubias[1])xa ya xb yb = line_cls(

-5 5 softneucoef[1 1] - softneucoef[1 1]softneubias[1] - softneubias[0])

fig ax = pltsubplots(1 2 figsize=(14 6))for i in [0 1]

ax[i]scatter(clsX[clsy == 0 0] clsX[clsy == 0 1] label=cl0)ax[i]scatter(clsX[clsy == 1 0] clsX[clsy == 1 1] label=cl1)ax[i]scatter(clsX[pred1 == 0 0] + h clsX[pred1 == 0 1] + h label=LR0)ax[i]scatter(clsX[pred1 == 1 0] + h clsX[pred1 == 1 1] + h label=LR1)ax[i]scatter(clsX[pred2 == 0 0] + h clsX[pred2 == 0 1] - h label=NN0)ax[i]scatter(clsX[pred2 == 1 0] + h clsX[pred2 == 1 1] - h label=NN1)

ax[0]plot([x0 x1] [y0 y1] y-- lw=4 label=frontiegravere LR)ax[1]plot([x00 x01] [y00 y01] r-- lw=4 label=droite neurone 0)ax[1]plot([x10 x11] [y10 y11] b-- lw=4 label=droite neurone 1)ax[0]plot([xa xb] [ya yb] c-- lw=4 label=frontiegravere neurone)ax[0]set_ylim([max(-6 min([-3 y10 y11 y11 y01]))

min(6 max([3 y10 y11 y11 y01]))])ax[1]set_ylim([max(-6 min([-3 y10 y11 y11 y01]))

min(6 max([3 y10 y11 y11 y01]))])ax[0]legend()ax[1]legend()ax[0]set_title(Frontiegravere de classification)ax[1]set_title(Neurones)

Ca marche On veacuterifie en calculant le score Le neurone a deux sorties La frontiegravere est deacutefinie par lrsquoensemble despoints pour lesquels les deux sorties sont eacutegales Par conseacutequent la distance entre les deux droites deacutefinies par lescoefficients du neurone doivent ecirctre eacutegales Il existe une infiniteacute de solutions menant agrave la mecircme frontiegravere On pourraitpeacutenaliser les coefficients pour converger toujours vers la mecircme solution

from sklearnmetrics import roc_auc_scoreroc_auc_score(clsy logrpredict_proba(clsX)[ 1])

24 Un arbre de deacutecision en reacuteseaux de neurones 97

Machine Learning Statistiques et Programmation Version 035930

09924

roc_auc_score(clsy softneupredict(clsX)[ 1])

0986

La performance est quasiment identique Que ce soit la reacutegression ou la classification lrsquoapprentissage drsquoun neuronefonctionne En sera-t-il de mecircme pour un assemblage de neurones

245 Apprentissage du reacuteseau de neurones

Maintenant qursquoon a vu les diffeacuterentes fonctions drsquoactivations et leur application sur des problegravemes simples onrevient aux arbres convertis sous la forme drsquoun reacuteseau de neurones La prochaine eacutetape est de pouvoir ameacuteliorer lesperformances du modegravele issu de la conversion drsquoun arbre de classification avec un algorithme du gradient On construitpour cela un nuage de points un peu traficoteacute

clsX = numpyempty((150 2) dtype=numpyfloat64)clsX[100] = numpyrandomrandn(100 2)clsX[20 0] -= 1clsX[2040 0] -= 08clsX[100 1] = 2clsX[100 1] += clsX[100 0] 2clsX[100] = numpyrandomrandn(50 2)clsX[100 0] = 2clsX[100 1] += 25clsy = numpyzeros(Xshape[0] dtype=numpyint64)clsy[100] = 1

logr = LogisticRegression()logrfit(clsX clsy)pred1 = logrpredict(clsX)logrscore(clsX clsy)

068

x0 y0 x1 y1 = line_cls(-3 3 logrcoef_ logrintercept_)

fig ax = pltsubplots(1 1 figsize=(4 4))plot_grid(clsX clsy logrpredict logr__class____name__ ax=ax)axplot([x0 x1] [y0 y1] y-- lw=4 label=frontiegravere LR)

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

98 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Mecircme chose avec un arbre de deacutecision et le reacuteseau de neurones converti

dec = DecisionTreeClassifier(max_depth=2)decfit(clsX clsy)pred2 = decpredict(clsX)decscore(clsX clsy)

09066666666666666

On convertit de reacuteseau de neurones Le second argument deacutefinit la pente dans la fonction drsquoactivation

net = NeuralTreeNetcreate_from_tree(dec 05)net15 = NeuralTreeNetcreate_from_tree(dec 15)

from sklearnmetrics import accuracy_score

(roc_auc_score(clsy decpredict_proba(clsX)[ 1])accuracy_score(clsy decpredict(clsX)))

(09354999999999999 09066666666666666)

(roc_auc_score(clsy netpredict(clsX)[ -1])accuracy_score(clsy numpyargmax(netpredict(clsX)[ -2] axis=1)))

(09456 08333333333333334)

(roc_auc_score(clsy net15predict(clsX)[ -1])accuracy_score(clsy numpyargmax(net15predict(clsX)[ -2] axis=1)))

24 Un arbre de deacutecision en reacuteseaux de neurones 99

Machine Learning Statistiques et Programmation Version 035930

(09071 09)

Le reacuteseau de neurones est plus ou moins performant selon la pente dans la fonction drsquoactivation

fig ax = pltsubplots(1 3 figsize=(15 4))plot_grid(clsX clsy decpredict dec__class____name__ ax=ax[0])plot_grid(clsX clsy

lambda x numpyargmax(netpredict(x)[ -2] axis=1)net__class____name__ ax=ax[1])

plot_grid(clsX clsylambda x numpyargmax(net15predict(x)[ -2] axis=1)net15__class____name__ + 15 ax=ax[2])

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

Et on apprend le reacuteseau de neurones en partant de lrsquoarbre de deacutepart On choisit celui qui a la pente drsquoactivation la plusfaible

from mlstatpymlneural_tree import label_class_to_softmax_outputclsY = label_class_to_softmax_output(clsy)clsY[3]

array([[1 0][1 0][1 0]])

net2 = netcopy()net2fit(clsX clsY verbose=True max_iter=25 lr=3e-6)

025 loss 7283 lr=3e-06 max(coef) 1 l1=014 l2=095125 loss 7064 lr=244e-07 max(coef) 1 l1=24e+0214 l2=33e+0393225 loss 7048 lr=173e-07 max(coef) 1 l1=24e+0214 l2=33e+0393325 loss 7046 lr=141e-07 max(coef) 1 l1=29e+0214 l2=4e+0393425 loss 7038 lr=122e-07 max(coef) 1 l1=44e+0214 l2=14e+0493525 loss 7035 lr=109e-07 max(coef) 11 l1=25e+0214 l2=35e+0393

(suite sur la page suivante)

100 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

625 loss 7032 lr=999e-08 max(coef) 11 l1=18e+0214 l2=32e+0393725 loss 703 lr=925e-08 max(coef) 11 l1=2e+0214 l2=27e+0393825 loss 7029 lr=866e-08 max(coef) 11 l1=3e+0214 l2=41e+0393925 loss 7029 lr=816e-08 max(coef) 11 l1=19e+0214 l2=29e+03931025 loss 7028 lr=774e-08 max(coef) 11 l1=3e+0214 l2=4e+03931125 loss 7027 lr=738e-08 max(coef) 11 l1=27e+0214 l2=41e+03931225 loss 7027 lr=707e-08 max(coef) 11 l1=25e+0214 l2=35e+03931325 loss 7025 lr=679e-08 max(coef) 11 l1=19e+0214 l2=32e+03931425 loss 7025 lr=654e-08 max(coef) 11 l1=33e+0214 l2=51e+03931525 loss 7024 lr=632e-08 max(coef) 11 l1=28e+0214 l2=42e+03931625 loss 7024 lr=612e-08 max(coef) 11 l1=2e+0214 l2=28e+03931725 loss 7024 lr=594e-08 max(coef) 11 l1=19e+0214 l2=35e+03931825 loss 7024 lr=577e-08 max(coef) 11 l1=22e+0214 l2=31e+03931925 loss 7025 lr=562e-08 max(coef) 11 l1=28e+0214 l2=57e+03932025 loss 7025 lr=548e-08 max(coef) 11 l1=34e+0214 l2=54e+03932125 loss 7025 lr=534e-08 max(coef) 11 l1=27e+0214 l2=43e+03932225 loss 7025 lr=522e-08 max(coef) 11 l1=37e+0214 l2=66e+03932325 loss 7025 lr=511e-08 max(coef) 11 l1=33e+0214 l2=51e+03932425 loss 7026 lr=5e-08 max(coef) 11 l1=29e+0214 l2=44e+03932525 loss 7026 lr=49e-08 max(coef) 11 l1=3e+0214 l2=54e+0393

NeuralTreeNet(2)

fig ax = pltsubplots(1 2 figsize=(12 4))plot_grid(clsX clsy

lambda x numpyargmax(netpredict(x)[ -2] axis=1)Avant apprentissage ax=ax[0])

plot_grid(clsX clsylambda x numpyargmax(net2predict(x)[ -2] axis=1)Apregraves apprentissage ax=ax[1])

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

24 Un arbre de deacutecision en reacuteseaux de neurones 101

Machine Learning Statistiques et Programmation Version 035930

Ca ne marche pas ou pas tregraves bien Il faudrait veacuterifier que la configuration actuelle ne se trouve pas dans un minimumlocal auquel cas lrsquoapprentissage par gradient ne donnera quasiment rien

(roc_auc_score(clsy net2predict(clsX)[ -1])accuracy_score(clsy numpyargmax(net2predict(clsX)[ -2] axis=1)))

(09394 06666666666666666)

net2predict(clsX)[-5 -2]

array([[059760975 040239025][069897705 030102295][0616117 0383883 ][066792189 033207811][078813475 021186525]])

netpredict(clsX)[-5 -2]

array([[048111758 051888242][058040964 041959036][050511128 049488872][054010078 045989922][069670643 030329357]])

On peut essayer de repartir agrave zeacutero Des fois ccedila peut marcher mais il faudrait beaucoup plus drsquoessai

net3 = netcopy()dim = net3training_weightsshapenet3update_training_weights(numpyrandomrandn(dim[0]))net3fit(clsX clsY verbose=True max_iter=25 lr=3e-6)

025 loss 7964 lr=3e-06 max(coef) 26 l1=029 l2=043125 loss 7964 lr=244e-07 max(coef) 25 l1=56e+0229 l2=15e+0442225 loss 7964 lr=173e-07 max(coef) 26 l1=5e+0229 l2=14e+0442325 loss 7965 lr=141e-07 max(coef) 26 l1=58e+0229 l2=16e+0442425 loss 7965 lr=122e-07 max(coef) 26 l1=76e+0229 l2=25e+0442525 loss 7965 lr=109e-07 max(coef) 26 l1=51e+0229 l2=14e+0442

(suite sur la page suivante)

102 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

625 loss 7966 lr=999e-08 max(coef) 26 l1=62e+0229 l2=19e+0442725 loss 7966 lr=925e-08 max(coef) 26 l1=62e+0229 l2=19e+0442825 loss 7966 lr=866e-08 max(coef) 26 l1=6e+0229 l2=17e+0442925 loss 7966 lr=816e-08 max(coef) 26 l1=59e+0229 l2=16e+04421025 loss 7966 lr=774e-08 max(coef) 26 l1=56e+0229 l2=15e+04421125 loss 7966 lr=738e-08 max(coef) 26 l1=73e+0229 l2=23e+04421225 loss 7966 lr=707e-08 max(coef) 26 l1=74e+0230 l2=24e+04421325 loss 7966 lr=679e-08 max(coef) 26 l1=68e+0230 l2=21e+04421425 loss 7966 lr=654e-08 max(coef) 26 l1=61e+0230 l2=18e+04421525 loss 7967 lr=632e-08 max(coef) 26 l1=6e+0230 l2=16e+04421625 loss 7967 lr=612e-08 max(coef) 26 l1=59e+0230 l2=16e+04421725 loss 7967 lr=594e-08 max(coef) 26 l1=48e+0230 l2=13e+04421825 loss 7967 lr=577e-08 max(coef) 26 l1=56e+0230 l2=16e+04421925 loss 7967 lr=562e-08 max(coef) 26 l1=58e+0230 l2=16e+04422025 loss 7967 lr=548e-08 max(coef) 26 l1=59e+0230 l2=16e+04422125 loss 7967 lr=534e-08 max(coef) 26 l1=66e+0230 l2=19e+04422225 loss 7967 lr=522e-08 max(coef) 26 l1=59e+0230 l2=18e+04422325 loss 7967 lr=511e-08 max(coef) 26 l1=62e+0230 l2=19e+04422425 loss 7967 lr=5e-08 max(coef) 26 l1=66e+0230 l2=19e+04422525 loss 7967 lr=49e-08 max(coef) 26 l1=48e+0230 l2=12e+0442

NeuralTreeNet(2)

(roc_auc_score(clsy net3predict(clsX)[ -1])accuracy_score(clsy numpyargmax(net3predict(clsX)[ -2] axis=1)))

(06426000000000001 06666666666666666)

fig ax = pltsubplots(1 2 figsize=(12 4))plot_grid(clsX clsy

lambda x numpyargmax(netpredict(x)[ -2] axis=1)Avant apprentissage ax=ax[0])

plot_grid(clsX clsylambda x numpyargmax(net3predict(x)[ -2] axis=1)Apregraves apprentissage ax=ax[1])

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

24 Un arbre de deacutecision en reacuteseaux de neurones 103

Machine Learning Statistiques et Programmation Version 035930

246 Autre architecture

Cette fois-ci on reacuteduit le nombre de neurones Au lieu drsquoavoir deux neurones par noeud du graphe on assemble tousles neurones en deux un pour les entreacutees un autre pour le calcul des sorties

netc = NeuralTreeNetcreate_from_tree(dec 1 arch=compact)RenderJsDot(netcto_dot())

(roc_auc_score(clsy netcpredict(clsX)[ -1])accuracy_score(clsy numpyargmax(netcpredict(clsX)[ -2] axis=1)))

(09468 062)

fig ax = pltsubplots(1 2 figsize=(12 4))plot_grid(clsX clsy

lambda x numpyargmax(decpredict_proba(x) axis=1)Avant conversion ax=ax[0])

plot_grid(clsX clsylambda x numpyargmax(netcpredict(x)[ -2] axis=1)Apregraves comversion ax=ax[1])

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

104 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

On reacuteapprend

netc4 = netccopy()netc4fit(clsX clsY verbose=True max_iter=25 lr=1e-6)

025 loss 7911 lr=1e-06 max(coef) 11 l1=025 l2=025125 loss 4829 lr=814e-08 max(coef) 11 l1=31e+0225 l2=49e+0325225 loss 459 lr=576e-08 max(coef) 11 l1=27e+0225 l2=43e+0325325 loss 4529 lr=471e-08 max(coef) 11 l1=9e+0225 l2=58e+0425425 loss 4476 lr=408e-08 max(coef) 11 l1=54e+0225 l2=17e+0425525 loss 4429 lr=365e-08 max(coef) 11 l1=82e+0225 l2=45e+0425625 loss 4396 lr=333e-08 max(coef) 11 l1=39e+0225 l2=61e+0325725 loss 4364 lr=308e-08 max(coef) 11 l1=38e+0225 l2=62e+0325825 loss 4332 lr=289e-08 max(coef) 11 l1=86e+0225 l2=53e+0425925 loss 4295 lr=272e-08 max(coef) 11 l1=32e+0225 l2=55e+03251025 loss 4269 lr=258e-08 max(coef) 11 l1=76e+0225 l2=35e+04251125 loss 4242 lr=246e-08 max(coef) 11 l1=37e+0225 l2=64e+03251225 loss 4219 lr=236e-08 max(coef) 11 l1=8e+0225 l2=42e+04251325 loss 4205 lr=226e-08 max(coef) 11 l1=43e+0225 l2=86e+03251425 loss 4182 lr=218e-08 max(coef) 12 l1=34e+0225 l2=63e+03251525 loss 4166 lr=211e-08 max(coef) 12 l1=12e+0325 l2=11e+05251625 loss 415 lr=204e-08 max(coef) 12 l1=12e+0325 l2=18e+05251725 loss 4136 lr=198e-08 max(coef) 12 l1=44e+0225 l2=11e+04251825 loss 412 lr=192e-08 max(coef) 12 l1=3e+0225 l2=85e+03251925 loss 4104 lr=187e-08 max(coef) 12 l1=25e+0225 l2=53e+03252025 loss 4085 lr=183e-08 max(coef) 12 l1=42e+0225 l2=88e+03252125 loss 4073 lr=178e-08 max(coef) 12 l1=39e+0225 l2=82e+03252225 loss 4059 lr=174e-08 max(coef) 12 l1=74e+0225 l2=31e+04252325 loss 4041 lr=17e-08 max(coef) 12 l1=32e+0225 l2=53e+03252425 loss 4027 lr=167e-08 max(coef) 12 l1=41e+0225 l2=12e+04252525 loss 4017 lr=163e-08 max(coef) 12 l1=57e+0225 l2=2e+0425

NeuralTreeNet(2)

(roc_auc_score(clsy netc4predict(clsX)[ -1])accuracy_score(clsy numpyargmax(netc4predict(clsX)[ -2] axis=1)))

24 Un arbre de deacutecision en reacuteseaux de neurones 105

Machine Learning Statistiques et Programmation Version 035930

(09338000000000001 08866666666666667)

fig ax = pltsubplots(1 2 figsize=(12 4))plot_grid(clsX clsy

lambda x numpyargmax(netcpredict(x)[ -2] axis=1)Avant apprentissage ax=ax[0])

plot_grid(clsX clsylambda x numpyargmax(netc4predict(x)[ -2] axis=1)Apregraves apprentissage ax=ax[1])

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

Crsquoest mieux

106 Chapter 2 Non lineacuteaire

CHAPTER 3

Reacutegression lineacuteaire

La reacutegression lineacuteaire93 est le modegravele preacutedictif le plus simple et celui qursquoon preacutefegravere quand il marche car il est facilementinterpreacutetable agrave lrsquoinverse des modegraveles non lineacuteaires qui gardent leurs secrets si on srsquoen tient seulement agrave leurs coefficientsConcregravetement on dispose drsquoun nuage de point (Xi yi) ougrave Xi isin Rd est un vecteur de dimension d et yi isin R un reacuteelLa reacutegression lineacuteaire consiste agrave construire une fonction preacutedictive yi = f(Xi) =lt Xi β gt= Xiβ ougrave β est un vecteurde dimension d Dans le cas le plus courant on modeacutelise les donneacutees de telle sorte que yi = Xiβ + ϵi ougrave ϵi suit uneloi normale de moyenne nulle et de variance σ Sous cette hypothegravese il iquestagit de trouver le vecteur β qui minimise lavraisemblance du modegravele ce qui revient agrave reacutesoudre le problegraveme drsquooptimisation

minβ

sumi

(yi minusXiβ)2

En deacuterivant on sait exprimer explicitement la solution On note X = (X1 Xi ) la matrice ougrave chaque ligne estune observation Xi et y = (y1 yi ) X prime est la transposeacutee de X Alors

βlowast = (X primeX)minus1X primey

Les chapitres suivants explorent drsquoautres aspects de ce problegravemes comme la reacutegression quantile la reacutegression lineacuteairepar morceaux ou encore lrsquoexpression de β sans calculer de matrice inverse ni de valeurs propres

31 Reacutegression lineacuteaire

Ce notebook srsquointeacuteresse agrave la faccedilon drsquointerpreacuteter les reacutesultats drsquoune reacutegression lineacuteaire lorsque les variables sont correacuteleacuteespuis il explore une faccedilon drsquoassocier arbre de deacutecision et reacutegression lineacuteaire pour construire une reacutegression lineacuteaire parmorceaux

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Un cas simple (page 108)

93 httpsfrwikipediaorgwikiRC3A9gression_linC3A9aire

107

Machine Learning Statistiques et Programmation Version 035930

bull Evolution de R2 (page 109)bull Deux variables correacuteleacutees (page 110)bull Indicatrices (page 113)bull Reacutegression lineacuteaire par morceaux (page 115)

matplotlib inline

311 Un cas simple

Une faccedilon drsquointerpreacuteter des reacutesultats statistiques est de les calculer dans un cas ougrave la reacuteponse chercheacutee est connue Onsimule un modegravele simple Y = αX1 + 0X2 + ϵ et on cale une reacutegression lineacuteaire On suppose que X1 X2 ϵ sont desvariables aleacuteatoires gaussiennes de mecircme variance et moyenne

import numpyrandom as npreps = nprnormal(1000)X = nprnormal(size=(1000 3))alpha = 2Y = alpha X[0] + X[ 2]Xshape Yshape

((1000 3) (1000))

from numpy import corrcoefcorrcoef(XT)

array([[ 1 -00312982 005188551][-00312982 1 -000356494][ 005188551 -000356494 1 ]])

from statsmodelsregressionlinear_model import OLS

model = OLS(YX[ 2])results = modelfit()su = resultssummary()su

resultsrsquared resultsrsquared_adj

(08153831029946165 08150131292531227)

On veacuterifie que le coefficient devant X1 est non nul (P-value nulle 0 nrsquoest pas lrsquointervalle de confiance) Le coefficientdevant X2 nrsquoest pas nul mais presque la P-value est eacuteleveacutee le coefficient R2 est eacuteleveacute Dessinons

import matplotlibpyplot as pltimport seabornfig ax = pltsubplots(1 2 figsize=(104))ax[0]plot(X[ 0] Y )seabornkdeplot(X[ 0] Y cmap=Reds shade=True shade_lowest=False ax=ax[1])

(suite sur la page suivante)

108 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

ax[0]set_title(nuage de points)ax[1]set_title(estimation de la densiteacute)

cpython370_x64libsite-packagesscipystatsstatspy1713 FutureWarning Using a non-tuplerarrsequence for multidimensional indexing is deprecated use arr[tuple(seq)] instead ofrarrarr[seq] In the future this will be interpreted as an array index arr[nparray(seq)]rarr which will result either in an error or a different resultreturn npaddreduce(sorted[indexer] weights axis=axis) sumval

312 Evolution de R2

Dans la reacutegression preacuteceacutedente le coefficient R2 transcrit en quelque sorte la part du bruit ϵ par rapport au terme αX1Faisons varier α

alphas = []r2s = []for a in [01 i for i in range(0 50)]

Y = aX[0] + X[ 2]model = OLS(YX[ 2])results = modelfit()alphasappend(a)r2sappend(resultsrsquared)

fig ax = pltsubplots(1 1)axplot(alphas r2s label=observed)axplot(alphas [a2(1+a2) for a in alphas] label=theoretical)axset_xlabel(alpha)axset_ylabel(r2)axlegend()

31 Reacutegression lineacuteaire 109

Machine Learning Statistiques et Programmation Version 035930

Dans ce cas de reacutegression simple la valeur agrave preacutedire est yi la valeur preacutedite est yi = αX1i et la moyenne y = αX1+ϵ =0

R2 = 1minussumn

i=1(yi minus y)2sumni=1(yi minus y)2

= 1minus Vϵα2VX1 + Vϵ

= 1minus 1

1 + α2=

α2

1 + α2

313 Deux variables correacuteleacutees

On ne change pas le modegravele mais on fait en sorte que X2 = X1 Les deux variables sont correacuteleacutees

X[ 1] = X[ 0]Y = 2X[0] + X[ 2]model = OLS(YX[ 2])results = modelfit()resultssummary()

modelrank

1

Les variables correacuteleacutees nrsquoont pas lrsquoair de deacuteranger lrsquoalgorithme de reacutesolution car il utilise la meacutethode SVD94 pourreacutesoudre le mecircme problegraveme dans un espace de moindre dimension Le problegraveme survient que les deux variables nesont pas compleacutetement correacuteleacutees On eacutetudie le modegravele Y sim X1 +X prime

2 avec X prime2 = αX1 + (1 minus α)X2 et on reacuteduit la

variance du bruit pour en diminuer les effets

X_ = nprnormal(size=(1000 3))

94 httpsenwikipediaorgwikiSingular-value_decomposition

110 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

alphas = [09 + i 001 for i in range(011)]res = []for a in alphas

X = X_copy()X[ 1] = a X[ 0] + (1-a) X[ 1]Y = X[ 0] + X[ 1] + 01 X[ 2]model = OLS(YX[ 2])results = modelfit()resappend(dict(alpha=a r2=resultsrsquared rank=modelrank c1=resultsparams[0]

rarrc2=resultsparams[1]))

import pandasdf = pandasDataFrame(res)df = dfset_index(alpha)df

fig ax = pltsubplots(12 figsize=(104))df[[r2]]plot(ax=ax[0])df[[c1 c2]]plot(ax=ax[1])ax[0]set_title(R2)ax[1]set_title(coefficients)

Le r2 augmente quand la correacutelation augmente mais les coefficients sont moins fiables Les reacutesultats devraient ecirctresensiblement identiques en theacuteorie mais en pratique plus le deacuteterminant devient proche de zeacutero plus lrsquoordinateur estlimiteacute par sa preacutecision numeacuterique Pour en savoir plus vous pouvez lire un examen eacutecrit que jrsquoai reacutedigeacute en pythonbien sucircr Examen Programmation ENSAE premiegravere anneacutee 200695 Cette preacutecision est aux alentours de 10minus15 ce quicorrespond agrave la preacutecision numeacuterique des double96

alphas = [1 - 10(-i) for i in range(1018)]res = []for a in alphas

X = X_copy()X[ 1] = a X[ 0] + (1-a) X[ 1]

(suite sur la page suivante)

95 httpwwwxavierduprefrsite2013enseignementstdnoteecrit_2006pdf96 httpsenwikipediaorgwikiDouble-precision_floating-point_format

31 Reacutegression lineacuteaire 111

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

Y = X[ 0] + X[ 1] + X[ 2]model = OLS(YX[ 2])results = modelfit()resappend(dict(alpha_1=a-1 r2=resultsrsquared rank=modelrank c1=results

rarrparams[0] c2=resultsparams[1]))

import pandasdf = pandasDataFrame(res)df = dfset_index(alpha_1)df

On fait un dernier test avec scikit-learn97 pour veacuterifier que lrsquoalgorithme de reacutesolution donne des reacutesultats similairespour un cas ougrave le deacuteterminant est quasi-nul

from sklearnlinear_model import LinearRegressionfrom sklearnmetrics import r2_score

alphas = [09 + i 001 for i in range(011)]res = []for a in alphas

X = X_copy()X[ 1] = a X[ 0] + (1-a) X[ 1]Y = X[ 0] + X[ 1] + X[ 2]model = LinearRegression()modelfit(X[ 2] Y)r2 = r2_score(Y modelpredict(X[ 2]))resappend(dict(alpha=a c1=modelcoef_[0] c2=modelcoef_[1] r2=r2))

import pandasdf = pandasDataFrame(res)df = dfset_index(alpha)df

fig ax = pltsubplots(13 figsize=(124))df[[c1 c2]]plot(ax=ax[1])df[[c1 c2]]plot(ax=ax[2])df[[r2]]plot(ax=ax[0])ax[0]set_title(R2)ax[1]set_title(coefficients)ax[2]set_ylim([-5 5])ax[2]set_title(coefficients eacutechelle tronqueacutee)

97 httpscikit-learnorgstable

112 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Le second graphe est trompeur mais il ne faut pas oublier de regarder lrsquoeacutechelle de lrsquoaxe des ordonneacutees

314 Indicatrices

X1 est une variable aleacuteatoire gaussienne On teste maintenant un modegravele Y = X prime1 +X prime

2 + ϵ avec X prime1 = X111X1lt0 et

X prime2 = X111X1⩾0

X = nprnormal(size=(1000 3))X[ 1] = X[ 0]X[X[ 0] gt= 0 0] = 0X[X[ 1] lt 0 1] = 0Y = X[ 0] + X[ 1] + X[ 2]corrcoef(XT)

array([[ 1 047358312 -003083914][ 047358312 1 -001293737][-003083914 -001293737 1 ]])

from pandas import DataFramenames = [Xd i for i in range(Xshape[1]-1)]ax = DataFrame(X[502] columns=names)sort_values(names)reset_index(drop=True)plot()axset_title(Repreacutesentation des features tronqueacutees)

31 Reacutegression lineacuteaire 113

Machine Learning Statistiques et Programmation Version 035930

model = OLS(YX[ 3])results = modelfit()resultssummary()

On deacutecoupe en trois

import numpyX = nprnormal(size=(1000 4))for i in range(0 3)

X[ i] = X_[ 0]X[ 3] = X_[ 2]X[X_[ 0] gt -1 0] = 0X[(X_[ 0] lt -1) | (X_[ 0] gt 1) 1] = 0X[X_[ 0] lt 1 2] = 0Y = X[ 0] + X[ 1] + X[ 2] + X[ 3]corrcoef(XT)

array([[ 1 -000347584 016846101 006722762][-000347584 1 000326437 -004707208][ 016846101 000326437 1 008754832][ 006722762 -004707208 008754832 1 ]])

from pandas import DataFramenames = [Xd i for i in range(Xshape[1]-1)]ax = DataFrame(X[503] columns=names)sort_values(names)reset_index(drop=True)plot()axset_title(Repreacutesentation des features tronqueacutees)

114 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

model = OLS(YX[ 4])results = modelfit()resultssummary()

315 Reacutegression lineacuteaire par morceaux

On se place dans un cas particulier ougrave le problegraveme est lineacuteaire par morceaux

Y = minus2X111X1+ϵ1lt0 + 4X111X+ϵ1gt0 + ϵ2

La reacutegression donne de tregraves mauvais reacutesultat sur ce type de problegravemes mais on cherche une faccedilon systeacutematique dedeacutecouper le problegraveme en segments lineacuteaires

X = nprnormal(size=(10004))alpha = [4 -2]t = (X[ 0] + X[ 3] 05) gt 0switch = numpyzeros(Xshape[0])switch[t] = 1Y = alpha[0] X[ 0] t + alpha[1] X[ 0] (1-t) + X[ 2]

fig ax = pltsubplots(1 1)axplot(X[ 0] Y )axset_title(Nuage de points lineacuteaire par morceaux)

31 Reacutegression lineacuteaire 115

Machine Learning Statistiques et Programmation Version 035930

model = OLS(YX[ 1])results = modelfit()resultssummary()

yp = resultspredict(X[ 1])

fig ax = pltsubplots(1 1)axplot(X[ 0] Y label=expected)axplot(X[ 0] yp label=predicted)axlegend()axset_title(Reacutegression lineacuteaire sur un nuage lineacuteaire par morceaux)

116 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Passons agrave un arbre de deacutecision qui nrsquoest pas le meilleur modegravele mais on va deacutetourner ses reacutesultats pour revenir agrave unproblegraveme de reacutegression par morceaux

from sklearntree import DecisionTreeRegressormodel = DecisionTreeRegressor(min_samples_leaf=10 max_depth=3)modelfit(X[ 1] Y)yp = modelpredict(X[ 1])

fig ax = pltsubplots(1 1)axplot(X[ 0] Y label=expected)axplot(X[ 0] yp label=predicted)axlegend()r2 = r2_score(Y modelpredict(X[ 1]))axset_title(Arbre de deacutecision sur un nuage lineacuteaire par morceauxnR2=f r2)

31 Reacutegression lineacuteaire 117

Machine Learning Statistiques et Programmation Version 035930

from sklearntree import export_graphvizexport_graphviz(model out_file=arbredot)from pyensaegraphhelper import run_dotrun_dot(arbredot arbrepng)from IPythondisplay import ImageImage(arbrepng)

On extrait tous les seuils de lrsquoarbre et on ajoute les milieux de segments

th = list(sorted(set(modeltree_threshold)))th += [(th[i] + th[i-1])2 for i in range(1len(th))]th = list(sorted(th))th

118 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

[-20-18018612563610077-16037225127220154-1323736995458603-10437514781951904-031099767237901690421756133437156706781253740191460934494614601135310011553764343262106781613826751712776717841625214148752743005752561714784592390060419420417547225952]

On fait une reacutegression sur les variables Wigt0 = X111X1gtti W0 = X1 ougrave les (ti) sont les seuils

W = numpyzeros((Xshape[0] len(th)+1))x = X[ 0]W[ 0] = xfor i in range(len(th))

W[x gt th[i] i+1] = x[x gt th[i]]

model = OLS(YW)results = modelfit()resultssummary()

Dessinons les reacutesultats de la preacutedictions

yp = resultspredict(W)fig ax = pltsubplots(1 1)axplot(X[ 0] Y label=expected)axplot(X[ 0] yp label=predicted)axlegend()axset_title(Reacutegression lineacuteaire par morceauxnsur un nuage lineacuteaire par morceauxnR2=frarr resultsrsquared)

31 Reacutegression lineacuteaire 119

Machine Learning Statistiques et Programmation Version 035930

Le modegravele nous suggegravere de ne garder que quelques seuils En srsquoappuyant sur les p-values

keep = numpyarange(len(resultspvalues))[resultspvalues lt 005]keep

array([ 0 5 6 7 13])

W2 = W[ keep]

model = OLS(YW2)results = modelfit()resultssummary()

yp = resultspredict(W2)fig ax = pltsubplots(1 1)axplot(X[ 0] Y label=expected)axplot(X[ 0] yp label=predicted)axlegend()axset_title(Reacutegression lineacuteaire par morceauxnsur un nuage lineacuteaire par morceauxn +

reacuteduction du nombre de segmentsnR2=f resultsrsquared)

120 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Le coefficient R2 est quasiment identique pour un nombre de segments moindre Je me suis amuseacute agrave rendre ce codeplus geacuteneacuterique pour comparer la premiegravere eacutetape le deacutecoupage en morceaux via deux modegraveles un arbre de deacutecisionet le nouvel objet KBinsDiscretizer98 qui segmente une variable sans tenir compte de la cible La reacutegression nrsquoestplus neacutecessaire lineacuteaire Piecewise linear regression99 Je me suis eacutegalement amuseacute agrave faire de mecircme pour uneclassification par morceaux PiecewiseClassifier100 Celle-ci pose quelques soucis pratiques car toutes les classes nesont pas forceacutement repreacutesenteacutees dans chaque compartiment

32 Reacutegression quantile

La reacutegression quantile est moins sensible aux points aberrants Elle peut ecirctre deacutefinie comme une reacutegression avec unenorme L1 (une valeur absolue)

bull Meacutediane et valeur absolue (page 122)bull Reacutegression quantile (page 122)bull Reacutesolution drsquoune reacutegression quantile (page 123)bull Quantile et optimisation (page 123)bull Reacutegression quantile pour un quantile p quelconque (page 124)bull Reacutesolution drsquoune reacutegression quantile pour un quantile p quelconque (page 124)bull Notebook (page 125)

98 httpsscikit-learnorgstablemodulesgeneratedsklearnpreprocessingKBinsDiscretizerhtml99 httpwwwxavierduprefrappmlinsightshelpsphinxnotebookspiecewise_linear_regressionhtml

100 httpwwwxavierduprefrappmlinsightshelpsphinxmlinsightsmlmodelpiecewise_estimatorhtmlmlinsightsmlmodelpiecewise_estimatorPiecewiseClassifier

32 Reacutegression quantile 121

Machine Learning Statistiques et Programmation Version 035930

bull Bilbiographie (page 128)

321 Meacutediane et valeur absolue

On considegravere un ensemble de nombre reacuteels X1 Xn La meacutediane est le nombre M qui veacuterifie sumi

11XiltM =sumi

11XigtM

Plus simplement la meacutediane est obtenue en triant les eacuteleacutements X1 Xn par ordre croissant La meacutediane est alorsle nombre au milieu X[n2 ]

proprieacuteteacute P1 Meacutediane et valeur absolueLa meacutediane M de lrsquoensemble X1 Xn minimise la quantiteacute E =

sumi |Xi minusM |

Avant de deacutemontrer la proprieacuteteacute voyons ce qursquoil se passe entre deux reacuteels La meacutediane de AB peut ecirctre nrsquoimporteougrave sur le segment

De maniegravere eacutevidente les distances des deux cocircteacutes du point M sont eacutegales a+ b = c+ d Mais si M nrsquoest pas sur lesegment on voit de maniegravere eacutevidente que la somme des distances sera plus grande

Nrsquoimporte quel point sur le segment M minimise |AminusM |+ |B minusM | On revient aux n reacuteels trieacutes par ordre croissantX1 Xn et on considegravere les paires (X1 Xn) (X2 Xnminus1)

(X[n2 ]

X[n2 +1]

) Lrsquointersection de tous ces

intervalles est(X[n2 ]

X[n2 +1]

)et on sait drsquoapregraves la petit exemple avec deux points que nrsquoimporte quel point dans

cet intervalle minimise |X1 minusM |+ |Xn minusM |+ |X2 minusM |+ |Xnminus1 minusM |+ = E La proprieacuteteacute est deacutemontreacutee

322 Reacutegression quantile

Maintenant que la meacutediane est deacutefinie par un problegraveme de minimisation il est possible de lrsquoappliquer agrave un problegravemede reacutegression

Deacutefinition D1 Reacutegression quantileOn dispose drsquoun ensemble de n couples (Xi Yi) avec Xi isin Rd et Yi isin R La reacutegression quantile consiste agrave trouverα β tels que la somme

sumi |α+ βXi minus Yi| est minimale

122 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

323 Reacutesolution drsquoune reacutegression quantile

La premiegravere option consiste agrave utiliser une meacutethode de descente de gradient puisque la fonction E =sum

i |Xi minusM |est presque partout deacuterivable Une autre option consiste agrave utiliser lrsquoalgorithme Iteratively reweighted least squares101Lrsquoimpleacutementation est faite par la classe QuantileLinearRegression102 Lrsquoalgorithme est tireacute de [Chen2014]

Algorithme A1 Iteratively reweighted least squaresOn souhaite trouver les paramegravetres Ω qui minimise

E =sumi

|Yi minus f(XiΩ)|

Etape 1On pose foralli wt

i = 1Etape 2On calcule Ωt = argminE(Ω) avec Et(Ω) =

sumi w

ti (Yi minus f(XiΩ))

2Etape 3On met agrave jour les poids wt+1

i = 1maxδ|Yiminusf(XiΩt)| Puis on retourne agrave lrsquoeacutetape 2

Le paramegravetre δ gegravere le cas ougrave la preacutediction est identique agrave la valeur attendue pour un point Xi donneacute Il y a plusieurschoses agrave deacutemontrer On suppose que lrsquoalgorithme converge ce qursquoon nrsquoa pas encore deacutemontreacute Dans ce cas Ωt = Ωt+1

et les coefficients Ωt optimise la quantiteacute

sumi

wti (Yi minus f(XiΩ))

2=sumi

(Yi minus f(XiΩ))2

max δ |Yi minus f(XiΩt)|minusrarrδrarr0

sumi

|Yi minus f(XiΩ)|

On remarque eacutegalement que Et(Ωt) est lrsquoerreur L1 pour les paramegravetres Ω Donc si lrsquoalgorithme converge celui-cioptimise bien lrsquoerreur de la reacutegression quantile Dans le cas drsquoune reacutegression lineacuteaire on sait exprimer la solution

Ωt+1 = (X primeWtX)minus1X primeWty = g(Ωt)avec Wt = diag( 1

maxδ|yiminusΩtXi| )

Drsquoapregraves le theacuteoregraveme du point fixe103 on sait que la suite converge si la fonction g est contractante104

forallx y |f(x)minus f(y)| ⩽ k ∥xminus y∥ avec k lt 1

324 Quantile et optimisation

De la mecircme maniegravere que nous avons deacutefini la meacutediane comme la solution drsquoun problegraveme drsquooptimisation nous pouvonsdeacutefinir nrsquoimporte quel quantile comme tel

proprieacuteteacute P2 Quantile et optimisationLe quantile Qp de lrsquoensemble X1 Xn est le nombre qui veacuterifie

nsumi=1

11XiltQp = np

101 httpsenwikipediaorgwikiIteratively_reweighted_least_squares102 httpwwwxavierduprefrappmlinsightshelpsphinxmlinsightsmlmodelquantile_regressionhtmlmlinsightsmlmodelquantile_

regressionQuantileLinearRegression103 httpsfrwikipediaorgwikiPoint_fixe104 httpsfrwikipediaorgwikiApplication_contractante

32 Reacutegression quantile 123

Machine Learning Statistiques et Programmation Version 035930

Ce nombre minimise la quantiteacute

E =sumi

p |Xi minusQp|+ + (1minus p) |Xi minusQp|minus

Ougrave |a|+ = max a 0 et |a|minus = max minusa 0

On veacuterifie qursquoon retrouve bien ce qui eacutetait eacutenonceacute pour la meacutediane avec p = 12 Il faut deacutemontrer que la solution de ce

programme drsquooptimisation atterrit dans lrsquointervalle souhaiteacuteOn choisit un reacuteel P agrave lrsquointeacuterieur drsquoun intervale et on calcule E(P ) =

sumi p |Xi minus P |++(1minusp) |Xi minus P |minus On note

a(P ) =sumn

i=1 11XiltP et b(P ) =sumn

i=1 11XigtP Comme le point P est agrave lrsquointeacuterieur drsquoun intervalle a + b = nSoit dx un reacuteel tel que P + dx soit toujours dans lrsquointervalle

E(P + dx) =sum

i p |Xi minus P minus dx|+ + (1minus p) |Xi minus P minus dx|minus= minusb(P )pdx+ a(P )(1minus p)dx = (a(P )minus a(P )pminus b(P )p)dx = (a(P )minus pn)dx

On voit que si P est choisi de telle sorte que a(P ) = np la fonction E(P ) est constante sur cette intervalle et crsquoestpreacuteciseacutement le cas lorsque P = Qp Comme la fonction E est une somme positive de fonctions convexes elle lrsquoestaussi Si on a trouveacute un intervalle ougrave la fonction est constante alors celui-ci contient la solution Sinon il suffit justede trouver les intervalles (Ximinus1 Xi) et (Xi Xi+1) pour lesquelles la fonction E est respectivement deacutecroissante etcroissante On cherche donc le point P tel que a(P ) lt pn si P lt Xi et a(P ) gt pn si P gt Xi et ce point correspondau quantile Qp Ceci conclut la deacutemonstration

325 Reacutegression quantile pour un quantile p quelconque

Comme pour la meacutediane il est possible de deacutefinir la reacutegression quantile pour un quantile autre que la meacutediane

Deacutefinition D2 Reacutegression quantileOn dispose drsquoun ensemble de n couples (Xi Yi) avec Xi isin Rd et Yi isin R La reacutegression quantile consiste agrave trouverα β tels que la somme

sumi p |α+ βXi minus Yi|+ + (1minus p) |α+ βXi minus Yi|minus est minimale

326 Reacutesolution drsquoune reacutegression quantile pour un quantile p quelconque

La premiegravere option consiste encore agrave utiliser une meacutethode de descente de gradient puisque la fonction agrave minimiserest presque partout deacuterivable On peut aussi adapter lrsquoalgorithme Iteratively reweighted least squares (page 123)Lrsquoimpleacutementation est faite par la classe QuantileLinearRegression105 (voir [Koenker2017])

Algorithme A2 Iteratively reweighted least squaresOn souhaite trouver les paramegravetres Ω qui minimise

E =sumi

p |Yi minus f(XiΩ)|+ + (1minus p) |Yi minus f(XiΩ)|minus

Etape 1On pose foralli wt

i = 1Etape 2On calcule Ωt = argminE(Ω) avec Et(Ω) =

sumi w

ti (Yi minus f(XiΩ))

2105 httpwwwxavierduprefrappmlinsightshelpsphinxmlinsightsmlmodelquantile_regressionhtmlmlinsightsmlmodelquantile_

regressionQuantileLinearRegression

124 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Etape 3On met agrave jour les poids wt+1

i = 1

maxδ 1p |α+βXiminusYi|++ 11minusp |α+βXiminusYi|minus Puis on retourne agrave lrsquoeacutetape 2

On suppose que lrsquoalgorithme converge ce qursquoon nrsquoa pas encore deacutemontreacute Dans ce cas Ωt = Ωt+1 et les coefficientsΩt optimise la quantiteacute sum

i wti (Yi minus f(XiΩ))

2=

sumi

(Yiminusf(XiΩ))2

maxδ 1p |α+βXiminusYi|++ 11minusp |α+βXiminusYi|minus

minusrarrδrarr0

p |Yi minus f(XiΩ)|+ + (1minus p) |Yi minus f(XiΩ)|minus

327 Notebook

Reacutegression quantile illustreacutee

La reacutegression quantile est moins sensible aux points aberrants Elle peut ecirctre deacutefinie comme une reacutegression avec unenorme L1 (une valeur absolue) Ce notebook explore des reacutegressions avec des quantiles diffeacuterents

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Un jeu de donneacutees non symeacutetrique (page 125)bull Reacutegression lineacuteaire et reacutegression quantile (page 126)bull Diffeacuterents quantiles (page 127)

matplotlib inline

Un jeu de donneacutees non symeacutetrique

import numpyrandom as nprimport numpyn = 1000eps = nprnormal(n)X = nprrand(n 1) 5X1 = nprnormal(size=(n 1)) 1X2 = nprnormal(size=(n2 1)) 10X2 = numpyvstack([X2 numpyzeros((n2 1))])eps = - numpyabs(X1) + numpyabs(X2)Y = (05 X + eps)ravel()Xshape Yshape

((1000 1) (1000))

import matplotlibpyplot as pltfig ax = pltsubplots(1 1 figsize=(55))axplot(X Y c)

32 Reacutegression quantile 125

Machine Learning Statistiques et Programmation Version 035930

Reacutegression lineacuteaire et reacutegression quantile

from sklearnlinear_model import LinearRegressionclr = LinearRegression()clrfit(X Y)

LinearRegression(copy_X=True fit_intercept=True n_jobs=1 normalize=False)

from mlinsightsmlmodel import QuantileLinearRegressionclq = QuantileLinearRegression()clqfit(X Y)

QuantileLinearRegression(copy_X=True delta=00001 fit_intercept=Truemax_iter=10 n_jobs=1 normalize=False quantile=05verbose=False)

fig ax = pltsubplots(1 1 figsize=(55))axplot(X Y c)lin = clrpredict(X)axplot(X lin ro label=L2)qu = clqpredict(X)axplot(X qu bo label=L1)axlegend()axset_title(Reacutegression lineacuteaire et quantile)

126 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Diffeacuterents quantiles

clqs = for qu in [01 025 05 075 09]

clq = QuantileLinearRegression(quantile=qu)clqfit(X Y)clqs[q=12f qu] = clq

fig ax = pltsubplots(1 1 figsize=(55))axplot(X Y c)for k v in sorted(clqsitems())

p = vpredict(X)axplot(X p o label=k)

axlegend()axset_title(Reacutegressions quantiles)

32 Reacutegression quantile 127

Machine Learning Statistiques et Programmation Version 035930

328 Bilbiographie

Des reacutefeacuterences sont disponibles sur la page de statsmodels106 QuantReg107 ou lagrave Reacutegression quantile108

33 Reacutegression lineacuteaire par morceaux

Le paragraphe Reacutegression lineacuteaire (page 107) eacutetudie le lien entre le coefficient R2 et la correacutelation pour finalementillustrer une faccedilon de reacutealiser une reacutegression lineacuteaire par morceaux Lrsquoalgorithme srsquoappuie sur un arbre de reacutegressionpour deacutecouper en morceaux ce qui nrsquoest pas le plus satisfaisant car lrsquoarbre cherche agrave deacutecouper en segment enapproximant la variable agrave reacutegresser Y par une constante sur chaque morceaux et non une droite On peut se poserla question de comment faire pour construire un algorithme qui deacutecoupe en approximant Y par une droite et non uneconstante Le plus dur nrsquoest pas de le faire mais de le faire efficacement Et pour comprendre lagrave ougrave je veux vousemmener il faudra un peu de matheacutematiques

bull Exploration (page 129)ndash Problegraveme et regreacutession lineacuteaire dans un espace agrave une dimension (page 129)ndash Impleacutementation naiumlve drsquoune reacutegression lineacuteaire par morceaux (page 137)ndash Aparteacute sur la continuiteacute de la reacutegression lineacuteaire par morceaux (page 137)

106 httpwwwstatsmodelsorgstableindexhtml107 httpwwwstatsmodelsorgstablegeneratedstatsmodelsregressionquantile_regressionQuantReghtml108 httpswwwxavierduprefrappensae_teaching_cshelpsphinxml2atd2a_mlplus_regression_quantilehtml

128 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

ndash Reacutegression lineacuteaire et correacutelation (page 138)ndash Ideacutee de lrsquoalgorithme (page 138)ndash Un peu plus en deacutetail dans lrsquoalgorithme (page 139)

bull Synthegravese matheacutematique (page 141)bull Streaming (page 143)

ndash Streaming Gram-Schmidt (page 143)ndash Streaming Linear Regression (page 144)ndash Streaming Linear Regression version Gram-Schmidt (page 145)

bull Digressions (page 147)bull Notebooks (page 147)bull Impleacutementations (page 151)bull Bilbiographie (page 151)

Une impleacutementation de ce type de meacutethode est proposeacutee dans la pull request Model trees (M5P and co)111 qui reacutepondagrave au problegraveme poseacutee dans Model trees (M5P)112 et originellement impleacutementeacutee dans Building Model Trees113 Cettederniegravere impleacutementation reacuteestime les modegraveles comme lrsquoimpleacutementation deacutecrite au paragraphe Impleacutementation naiumlvedrsquoune reacutegression lineacuteaire par morceaux (page 137) mais eacutetendue agrave tout type de modegravele

331 Exploration

Problegraveme et regreacutession lineacuteaire dans un espace agrave une dimension

Tout drsquoabord une petite illustration du problegraveme avec la classe PiecewiseRegression114 impleacutementeacutee selon lrsquoAPI descikit-learn115

Reacutegression lineacuteaire par morceaux

La reacutegression lineacuteaire par morceaux a lrsquoavantage de produire un modegravele localement interpreacutetable Mais ce nrsquoest paseacutevident drsquoestimer un tel modegravele quand on ne connaicirct pas les morceaux par avance

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Des donneacutees artificielles (page 130)bull Quelques exemples avec un arbre de deacutecision (page 131)bull Quelques exemples avec un KBinsDiscretizer (page 132)bull Arbre de deacutecision optimiseacute pour la reacutegression lineacuteaire (page 133)

matplotlib inline

111 httpsgithubcomscikit-learnscikit-learnissues13106112 httpsgithubcomscikit-learnscikit-learnpull13732113 httpsgithubcomankonzoidLearningXtreemasteradvanced_MLmodel_tree114 httpwwwxavierduprefrappmlinsightshelpsphinxnotebookspiecewise_linear_regressionhtml115 httpsscikit-learnorg

33 Reacutegression lineacuteaire par morceaux 129

Machine Learning Statistiques et Programmation Version 035930

Des donneacutees artificielles

from numpyrandom import normalimport numpyimport matplotlibpyplot as plt

def nuage(n alpha noise=02)eps = normal(0 2 (n 2))X = eps[ 0] + 2X1 = eps[ 0]copy()X2 = eps[ 0]copy()th = 1X1[X1 lt= th] = 0X2[X2 gt th] = 0sel = numpyzeros((n))sel[X1 gt th] = 1Y = X1 alpha - X2 alpha + eps[ 1] noise - sel alpha th 2return X Y

fig ax = pltsubplots(1 2 figsize=(12 4))alpha noise = 05 02X Y = nuage(200 alpha)ax[0]plot(X Y )ax[0]set_title(alpha=12f noise=12f (alpha noise))alpha noise = 2 04X Y = nuage(200 alpha noise=04)ax[1]plot(X Y )ax[1]set_title(alpha=12f noise=12f (alpha noise))

130 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Quelques exemples avec un arbre de deacutecision

La segmentation est reacutealiseacutee drsquoabord avec un arbre de deacutecision dont on fixe la profondeur Chaque segment est choiside telle sorte agrave minimiser lrsquoapproximation de la fonction par une constante sur chaque segment

from mlinsightsmlmodel import PiecewiseRegressorfrom sklearntree import DecisionTreeRegressor

def nuage_piecewise(n alpha noise=02 max_depth=1)X Y = nuage(n alpha noise=noise)clr = PiecewiseRegressor(binner=DecisionTreeRegressor(max_depth=max_depth))Xm = Xreshape((len(X) 1))clrfit(Xm Y)mi ma = Xmin() Xmax()Xm = numpyarange(0 200) (ma - mi) 200 + miXm = Xmreshape((len(Xm) 1))return X Y Xm clrpredict(Xm)

def plot(i j alpha noise max_depth ax)X Y XX Z = nuage_piecewise(200 alpha max_depth=max_depth)ax[i j]plot(X Y )ax[i j]plot(XX Z )ax[i j]set_title(alpha=12f noise=12f max_depth=d (

alpha noise max_depth))

fig ax = pltsubplots(2 2 figsize=(12 6))

alpha noise max_depth = 05 02 1plot(0 0 alpha noise max_depth ax)

alpha noise max_depth = 2 04 1plot(0 1 alpha noise max_depth ax)

alpha noise max_depth = 05 02 2plot(1 0 alpha noise max_depth ax)

alpha noise max_depth = 2 04 2plot(1 1 alpha noise max_depth ax)

pltsuptitle(Reacutegression lineacuteaire avec DecisionTreeRegressor)

33 Reacutegression lineacuteaire par morceaux 131

Machine Learning Statistiques et Programmation Version 035930

Quelques exemples avec un KBinsDiscretizer

from mlinsightsmlmodel import PiecewiseRegressorfrom sklearnpreprocessing import KBinsDiscretizer

def nuage_piecewise2(n alpha noise=02 n_bins=2)X Y = nuage(n alpha noise=noise)clr = PiecewiseRegressor(binner=KBinsDiscretizer(n_bins=n_bins))Xm = Xreshape((len(X) 1))clrfit(Xm Y)mi ma = Xmin() Xmax()Xm = numpyarange(0 200) (ma - mi) 200 + miXm = Xmreshape((len(Xm) 1))return X Y Xm clrpredict(Xm)

def plot2(i j alpha noise n_bins ax)X Y XX Z = nuage_piecewise2(200 alpha n_bins=n_bins)ax[i j]plot(X Y )ax[i j]plot(XX Z )ax[i j]set_title(alpha=12f noise=12f n_bins=d (

alpha noise n_bins))

fig ax = pltsubplots(2 2 figsize=(12 6))

alpha noise n_bins = 05 02 2plot2(0 0 alpha noise n_bins ax)

alpha noise n_bins = 2 04 2(suite sur la page suivante)

132 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

plot2(0 1 alpha noise n_bins ax)

alpha noise n_bins = 05 02 4plot2(1 0 alpha noise n_bins ax)

alpha noise n_bins = 2 04 4plot2(1 1 alpha noise n_bins ax)

pltsuptitle(Reacutegression lineacuteaire avec KBinsDiscretizer)

Crsquoest mieux mais ce nrsquoest pas parfait La classe KBinsDiscretizer116 fonctionne simplement en segmentant les donneacuteesmais elle ne tient pas compte de la cible

Arbre de deacutecision optimiseacute pour la reacutegression lineacuteaire

Lrsquoarbre suivant reprend lrsquoalgorithme de lrsquoarbre de deacutecision agrave ceci pregraves qursquoil optimise un critegravere MSE117 en approximantle nuage de points (Xi yi) par une fonction lineacuteaire yi = Xiβ + ϵi Il faut neacuteanmoins augmenter le nombre de pointspar feuille pour eacuteviter quelques artefacts

from mlinsightsmlmodelpiecewise_tree_regression import PiecewiseTreeRegressorfrom sklearnpreprocessing import KBinsDiscretizer

def nuage_piecewise2(n alpha noise=02 min_samples_leaf=30)X Y = nuage(n alpha noise=noise)clr = PiecewiseTreeRegressor(criterion=mselin

min_samples_leaf=min_samples_leaf)(suite sur la page suivante)

116 httpsscikit-learnorgstablemodulesgeneratedsklearnpreprocessingKBinsDiscretizerhtml117 httpsscikit-learnorgstablemodulesgeneratedsklearnmetricsmean_squared_errorhtml

33 Reacutegression lineacuteaire par morceaux 133

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

Xm = Xreshape((len(X) 1))clrfit(Xm Y)mi ma = Xmin() Xmax()Xm = numpyarange(0 200) (ma - mi) 200 + miXm = Xmreshape((len(Xm) 1))return X Y Xm clrpredict(Xm)

def plot2(i j alpha noise min_samples_leaf ax)X Y XX Z = nuage_piecewise2(200 alpha

min_samples_leaf=min_samples_leaf)ax[i j]plot(X Y )ax[i j]plot(XX Z )ax[i j]set_title(alpha=12f noise=12f min_samples_leaf=d (

alpha noise min_samples_leaf))

fig ax = pltsubplots(2 2 figsize=(12 6))

alpha noise min_samples_leaf = 05 02 40plot2(0 0 alpha noise min_samples_leaf ax)

alpha noise min_samples_leaf = 2 04 40plot2(0 1 alpha noise min_samples_leaf ax)

alpha noise min_samples_leaf = 05 02 30plot2(1 0 alpha noise min_samples_leaf ax)

alpha noise min_samples_leaf = 2 04 30plot2(1 1 alpha noise min_samples_leaf ax)

pltsuptitle(Arbre de deacutecision optimiseacutenpour la reacutegression lineacuteaire par morceaux)

Cxavierdupre__home_github_forkscikit-learnsklearntree_classespy335 FutureWarningrarrThe parameter X_idx_sorted is deprecated and has no effect It will be removed in 1rarr1 (renaming of 026) You can suppress this warning by not passing any value to the X_rarridx_sorted parameterwarningswarn(

Cxavierdupre__home_github_forkscikit-learnsklearntree_classespy335 FutureWarningrarrThe parameter X_idx_sorted is deprecated and has no effect It will be removed in 1rarr1 (renaming of 026) You can suppress this warning by not passing any value to the X_rarridx_sorted parameterwarningswarn(

Cxavierdupre__home_github_forkscikit-learnsklearntree_classespy335 FutureWarningrarrThe parameter X_idx_sorted is deprecated and has no effect It will be removed in 1rarr1 (renaming of 026) You can suppress this warning by not passing any value to the X_rarridx_sorted parameterwarningswarn(

Cxavierdupre__home_github_forkscikit-learnsklearntree_classespy335 FutureWarningrarrThe parameter X_idx_sorted is deprecated and has no effect It will be removed in 1rarr1 (renaming of 026) You can suppress this warning by not passing any value to the X_rarridx_sorted parameterwarningswarn(

134 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Il faudrait ajouter des contraintes de continuiteacute

Cette reacutegression par morceaux est obtenue gracircce agrave un arbre de deacutecision Celui-ci trie le nuage de points (Xi Yi) parordre croissant selon les X soit Xi ⩽ Xi+1 Lrsquoarbre coupe en deux lorsque la diffeacuterence des erreurs quadratiques estmaximale erreur quadratique obtenue en approximant Y par sa moyenne sur lrsquointervalle consideacutereacute On note lrsquoerreurquadratique

C(i j) = 1jminusi+1

sumi⩽k⩽j Yi

D(i j) = 1jminusi+1

sumi⩽k⩽j Y

2i

E(i j) = 1jminusi+1

sumi⩽k⩽j(Yi minus C(i j))2 = 1

jminusi+1

sumi⩽k⩽j Y

2i minus C(i j)2 = D(i j)minus C(i j)2

La derniegravere ligne applique la formule VX = EX2 minus EX2 qui est facile agrave redeacutemontrer Lrsquoalgorithme de lrsquoarbre dedeacutecision coupe un intervalle en deux et deacutetermine lrsquoindice k qui minimise la diffeacuterence

∆k = E(1 n)minus (E(1 k) + E(k + 1 n))

Lrsquoarbre de deacutecision optimise la construction drsquoune fonction en escalier qui repreacutesente au mieux le nuage de points lestraits verts sur le graphe suivant alors qursquoil faudrait choisir une erreur quadratique qui corresponde aux traits oranges

33 Reacutegression lineacuteaire par morceaux 135

Machine Learning Statistiques et Programmation Version 035930

Il suffirait donc de remplacer lrsquoerreur E par celle obtenue par une reacutegression lineacuteaire Mais si crsquoeacutetait aussi simplelrsquoimpleacutementation de sklearntreeDecisionTreeRegressor118 la proposerait Alors pourquoi La raison principale estque cela coucircte trop cher en temps de calcul Pour trouver lrsquoindice k il faut calculer toutes les erreursE(1 k)E(k+1 n)ce qui coucircte tregraves cher lorsque cette erreur est celle drsquoune reacutegression lineacuteaire parce qursquoil est difficile de simplifier ladiffeacuterence

∆k minus∆kminus1 = minus(E(1 k) + E(k + 1 n)) + (E(1 k minus 1) + E(k n))= E(1 k minus 1)minus E(1 k) + E(k n)minus E(k + 1 n)

Arbre de reacutegression constanteOn srsquointeacuteresse au terme E(1 kminus1)minusE(1 k) dans le cas le nuage de points est repreacutesenteacute par une constante sur chaquesegment Crsquoest lrsquohypothegravese faite par lrsquoalgorithme classique de construction drsquoun arbre de reacutegression (segments vertssur le premier dessin)

C(1 k minus 1)minus C(1 k) = 1kminus1

sum1⩽i⩽kminus1 Yi minus 1

k

sum1⩽i⩽k Yi

= ( 1kminus1 minus

1k )sum

1⩽i⩽kminus1 Yi minus Yk

k

= 1k(kminus1)

sum1⩽i⩽kminus1 Yi minus Yk

k

= 1kC(1 k minus 1)minus Yk

k

On en deacuteduit que

E(1 k minus 1)minus E(1 k) = 1kD(1 k minus 1)minus Y 2

k

k + (C(1 k minus 1)minus C(1 k))(C(1 k minus 1) + C(1 k))

= 1kD(1 k minus 1)minus Y 2

k

k +(1kC(1 k minus 1)minus Yk

k

) (Yk

k minus1kC(1 k minus 1) + 2C(1 k minus 1)

)On voit que cette formule ne fait intervenir que C(1 kminus1) D(1 kminus1) Yk elle est donc tregraves rapide agrave calculer et crsquoestpour cela qursquoapprendre un arbre de deacutecision peut srsquoapprendre en un temps raisonnable Cela repose sur la possibiliteacute decalculer le critegravere optimiseacute par reacutecurrence On voit eacutegalement que ces formules ne font pas intervenir X elles sont doncgeacuteneacuteralisables au cas multidimensionnel Il suffira de trier les couples (Xi Yi) selon chaque dimension et deacuteterminerle meilleur seuil de coupure drsquoabord sur chacune des dimensions puis de prendre le meilleur de ces seuils sur toutes lesdimensions Le problegraveme est reacutesoluLe notebook Custom Criterion for DecisionTreeRegressor119 impleacutemente une version pas efficace du critegravere MSE120

et compare la vitesse drsquoexeacutecution avec lrsquoimpleacutementation de scikit-learn121 Il impleacutemente ensuite le calcul rapidede scikit-learn pour montrer qursquoon obtient un temps comparable Le reacutesultat est sans eacutequivoque La version rapidenrsquoimpleacutemente pas ∆k minus∆kminus1 mais plutocirct les sommes

sumk1 wiYi

sumk1 wiY

2i dans un sens et dans lrsquoautre En gros le

code stocke les seacuteries des numeacuterateurs et des deacutenominateurs pour les diviser au dernier momentArbre de reacutegression lineacuteaireLe cas drsquoune reacutegression est plus complexe Prenons drsquoabord le cas ougrave il nrsquoy a qursquoun seule dimension il faut drsquoabordoptimiser le problegraveme

E(1 n) = minab

=

nsumk=1

(aXk + bminus Yk)2

118 httpsscikit-learnorgstablemodulesgeneratedtreeDecisionTreeRegressorhtml119 httpwwwxavierduprefrappmlinsightshelpsphinxnotebookspiecewise_linear_regression_criterionhtml120 httpsscikit-learnorgstablemodulesgeneratedsklearnmetricsmean_squared_errorhtml121 httpsscikit-learnorg

136 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

On deacuterive pour aboutir au systegraveme drsquoeacutequations suivant

partE(1n)parta = 0 =

sumnk=1 Xk(aXk + bminus Yk)

partE(1n)partb = 0 =

sumnk=1 aXk + bminus Yk

Ce qui aboutit agrave

a(1 n) =sumn

k=1 XkYkminus(sumn

k=1 Xk)(sumn

k=1 Yk)sumnk=1 X2

kminus(sumn

k=1 Xk)2

b(1 n) =sumn

k=1 Yk minus a (sumn

k=1 Xk)

Pour construire un algorithme rapide pour apprendre un arbre de deacutecision avec cette fonction de coucirct il fautpouvoir calculer a(1 k) en fonction de a(1 k minus 1) b(1 k minus 1) Xk Yk ou drsquoautres quantiteacutes intermeacutediaires quine font pas intervenir les valeurs Xiltk lt Yiltk Drsquoapregraves ce qui preacutecegravede cela paraicirct tout-agrave-fait possible Maisdans le cas multidimensionnel122 il faut deacuteterminer le vecteur A qui minimise

sumnk=1 ∥Y minusXA∥2 ce qui donne

A = (X primeX)minus1X primeY Si on note M1k la matrice M tronqueacutee pour ne garder que ses k premiegraveres lignes il faudraitpouvoir calculer rapidement

Akminus1 minusAk = (X prime1kminus1X1kminus1)

minus1X prime1kminus1Y1kminus1 minus (X prime

1kX1k)minus1X prime

1kY1k

La documentation de sklearntreeDecisionTreeRegressor123 ne mentionne que deux critegraveres pour apprendreun arbre de deacutecision de reacutegression MSE pour sklearnmetricsmean_squared_error124 et MAE poursklearnmetricsmean_absolute_error125 Les autres critegraveres nrsquoont probablement pas eacuteteacute envisageacutes Lrsquoarticle[Acharya2016] eacutetudie la possibiliteacute de ne pas calculer la matrice Ak pour tous les k Le paragraphe Streaming LinearRegression (page 144) utilise le fait que la matrice A est la solution drsquoun problegraveme drsquooptimisation quadratique etpropose un algorithme de mise agrave jour de la matrice A (cas unidimensionnel) Cet exposeacute va un peu plus loin pourproposer une version qui ne calcule pas de matrices inverses

Impleacutementation naiumlve drsquoune reacutegression lineacuteaire par morceaux

On part du cas geacuteneacuteral qui eacutecrit la solution drsquoune reacutegression lineacuteaire comme eacutetant la matrice A = (X primeX)minus1X primeY et onadapte lrsquoimpleacutementation de scikit-learn126 pour optimiser lrsquoerreur quadratique obtenue Ce nrsquoest pas simple mais pasimpossible Il faut entrer dans du code cython127 et pour eacuteviter de reacuteeacutecrire une fonction qui multiplie et inverse unematrice on peut utiliser la librairie LAPACK128 Je ne vais pas plus loin ici car cela serait un peu hors sujet mais cenrsquoeacutetait pas une partie de plaisir Cela donne piecewise_tree_regression_criterion_linearpyx129 Crsquoest illustreacute toujourspar le notebook DecisionTreeRegressor optimized for Linear Regression130

Aparteacute sur la continuiteacute de la reacutegression lineacuteaire par morceaux

Approcher la fonction y = f(x) + ϵ quand x et y sont reacuteels est un problegraveme facile trop facile A voir le dessinpreacuteceacutedent il est naturel de vouloir recoller les morceaux lorsqursquoon passe drsquoun segment agrave lrsquoautre Il srsquoagit drsquouneoptimisation sous contrainte Il est possible eacutegalement drsquoajouter une contrainte de reacutegularisation qui tient comptede cela On exprime cela comme suit avec une reacutegression lineacuteaire agrave deux morceaux

E =sumXi⩽t

(a1Xi + b1 minus y)2 +sumXi⩾t

(a2Xi + b2 minus y)2 + λ(a1t+ b1 minus a2tminus b)2

122 httpsfrwikipediaorgwikiRC3A9gression_linC3A9aireEstimateur_des_moindres_carrC3A9s123 httpsscikit-learnorgstablemodulesgeneratedtreeDecisionTreeRegressorhtml124 httpsscikit-learnorgstablemodulesgeneratedmetricsmean_squared_errorhtml125 httpsscikit-learnorgstablemodulesgeneratedmetricsmean_absolute_errorhtml126 httpsscikit-learnorg127 httpscythonorg128 httpwwwnetliborglapack129 httpsgithubcomsdpythonmlinsightsblobmastermlinsightsmlmodelpiecewise_tree_regression_criterion_linearpyx130 httpwwwxavierduprefrappmlinsightshelpsphinxnotebookspiecewise_linear_regression_criterionhtml

33 Reacutegression lineacuteaire par morceaux 137

Machine Learning Statistiques et Programmation Version 035930

Le cas multidimensionnel est loin drsquoecirctre aussi simple Avec une dimension chaque zone a deux voisines En deuxdimensions chaque zone peut en avoir plus de deux La figure suivante montre une division de lrsquoespace dans laquellela zone centrale a cinq voisins

Peut-on facilement approcher une fonction z = f(x y) + ϵ par un plan en trois dimensions A moins que tous lessommets soient deacutejagrave dans le mecircme plan crsquoest impossible La zone en question nrsquoest peut-ecirctre mecircme pas convexe Unereacutegression lineacuteaire par morceaux et continue en plusieurs dimensions nrsquoest pas un problegraveme facile Cela nrsquoempecircchepas pour autant drsquoinfluencer la deacutetermination de chaque morceaux avec une contrainte du type de celle eacutevoqueacutee plushaut mais pour eacutecrire la contrainte lorsque les zones sont construites agrave partir des feuilles drsquoun arbre de deacutecision il fautdeacuteterminer quelles sont les feuilles voisines Et ccedila crsquoest un problegraveme inteacuteressant

Reacutegression lineacuteaire et correacutelation

On reprend le calcul multidimensionnel mais on srsquointeacuteresse au cas ougrave la matrice X primeX est diagonale quicorrespond au cas ougrave les variables X1 XC ne sont pas correacuteleacutees Si X primeX = diag(λ1 λC) =diag(

sumnk=1 X

2k1

sumnk=1 X

2kC) la matrice A srsquoexprime plus simplement A = Dminus1X primeY On en deacuteduit que

ac =

sumnk=1 XkcYksumnk=1 X

2kc

=

sumnk=1 XkcYk

λc

Cette expression donne un indice sur la reacutesolution drsquoune reacutegression lineacuteaire pour laquelle les variables sont correacuteleacutees Ilsuffit drsquoappliquer drsquoabord une ACP131 (Analyse en Composantes Principales) et de calculer les coefficients ac associeacutesagrave des valeurs propres non nulles On eacutecrit alors X primeX = P primeDP ougrave la matrice P veacuterifie P primeP = I

Ideacutee de lrsquoalgorithme

On srsquointeacuteresser drsquoabord agrave la recherche drsquoun meilleur point de coupure Pour ce faire les eacuteleacutements (Xi yi) sont trieacutesle plus souvent selon lrsquoordre deacutefini par une dimension On note E lrsquoerreur de preacutediction sur cette eacutechantillon E =minβ

sumk(Xkβ minus yk)

2 On deacutefinit ensuite E(i j) = minβsumj

k=i(Xkβ minus yk)2 Drsquoapregraves cette notation E = E(1 n)

La construction de lrsquoarbre de deacutecision passe par la deacutetermination de klowast qui veacuterifie

E(1 klowast) + E(klowast + 1 n) = mink E(1 k) + E(k + 1 n)

= mink

(minβ1

sumkl=1(Xlβ1 minus yl)

2 +minβ2

sumnl=k+1(Xlβ2 minus yl)

2)

Autrement dit on cherche le point de coupure qui maximise la diffeacuterence entre la preacutediction obtenue avec deuxreacutegressions lineacuteaires plutocirct qursquoune On sait qursquoil existe une matrice P qui veacuterifie

PP prime = 1 et (XP )prime(XP ) = P primeX primeXP = D = Z primeZ

131 httpsfrwikipediaorgwikiAnalyse_en_composantes_principales

138 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Ougrave D = diag(d1 dC) est une matrice diagonale On a poseacute Z = XP donc da =lt Za Za gt On peut reacuteeacutecrire leproblegraveme de reacutegression comme ceci

βlowast = argminβ

sumi

∥yi minusXiβ∥ = argminβ∥Y minusXβ∥

Comme X = ZP prime

∥Y minusXβ∥ = ∥Y minusXβ∥ = ∥Y minus ZP primeβ∥ = ∥Y minus Zγ∥

Avec γ = P primeβ Crsquoest la mecircme reacutegression apregraves un changement de repegravere et on la reacutesoud de la mecircme maniegravere

γlowast = (Z primeZ)minus1Z primeY = Dminus1Z primeY

La notation Mi deacutesigne la ligne i et M[k] deacutesigne la colonne On en deacuteduit que le coefficient de la reacutegression γk esteacutegal agrave

γk =lt Z[k] Y gt

lt Z[k] Z[k] gt=

lt (XP prime)[k] Y gt

lt (XP prime)[k] (XP prime)[k] gt

On en deacuteduit que

∥Y minusXβ∥ =

∥∥∥∥∥Y minusCsum

k=1

Z[k]

lt Z[k] Y gt

lt Z[k] Z[k] gt

∥∥∥∥∥ =

∥∥∥∥∥Y minusCsum

k=1

(XP prime)[k]lt (XP prime)[k] Y gt

lt (XP prime)[k] (XP prime)[k] gt

∥∥∥∥∥Algorithme A1 Arbre de deacutecision optimiseacute pour les reacutegressions lineacuteairesOn dipose qursquoun nuage de points (Xi yi) avec Xi isin Rd et yi isin R Les points sont trieacutes selon une dimension On noteX la matrice composeacutee des lignes X1 Xn et le vecteur colonne y = (y1 yn) Il existe une matrice P telle queP primeP = I et X primeX = P primeDP avec D une matrice diagonale On note Xab la matrice constitueacutee des lignes a agrave b Oncalcule

MSE(X y a b) =

∥∥∥∥∥Y minusCsum

k=1

(XabPprime)[k]

lt (XabPprime)[k] Y gt

lt (XabP prime)[k] (XabP prime)[k] gt

∥∥∥∥∥2

Un noeud de lrsquoarbre est construit en choisissant le point de coupure qui minimise

MSE(X y 1 t) +MSE(X y t+ 1 n)

Par la suite on verra que le fait que la matrice soit diagonale est lrsquoeacuteleacutement principal mais la matrice P ne doit pasneacutecessairement veacuterifier P primeP = I

Un peu plus en deacutetail dans lrsquoalgorithme

Jrsquoai penseacute agrave plein de choses pour aller plus loin car lrsquoideacutee est de quantifier agrave peu pregraves combien on pert en preacutecisionen utilisant des vecteurs propres estimeacutes avec lrsquoensemble des donneacutees sur une partie seulement Je me suis demandeacutesi les vecteurs propres drsquoune matrice pouvait ecirctre construit agrave partir drsquoune fonction continue de la matrice symeacutetriquede deacutepart A peu pregraves vrai mais je ne voyais pas une faccedilon de majorer cette continuiteacute Ensuite je me suis dit que lesvecteurs propres deX primeX ne devaient pas ecirctre loin de ceux deX prime

σXσ ougrave σ est un sous-eacutechantillon aleacuteatoire de lrsquoensemblede deacutepart Donc comme il faut juste avoir une base de vecteurs orthogonaux je suis passeacute agrave liquestorthonormalisation deGram-Schmidt132 Il nrsquoa pas non plus ce deacutefaut de permuter les dimensions ce qui rend lrsquoobservation de la continuiteacute a

132 httpsfrwikipediaorgwikiAlgorithme_de_Gram-Schmidt

33 Reacutegression lineacuteaire par morceaux 139

Machine Learning Statistiques et Programmation Version 035930

little bit more complicated comme le max dans liquestalgorithme de Jacobi133 Lrsquoideacutee est se servir cette orthonormalisationpour construire la matrice P de lrsquoalgortihmeLa matrice P isin MCC est constitueacutee de C vecteurs ortonormaux (P[1] P[C]) Avec les notations que jrsquoai utiliseacuteesjusqursquoagrave preacutesent X[k] = (X1k Xnk) On note la matrice identiteacute IC = I

T[1] =X[1]

∥X[1]∥P[1] =

I[1]

∥X[1]∥T[2] =

X[2]minusltX[2]T[1]gtT[1]

∥X[2]minusltX[2]T[1]gtT[1]∥P[2] =

I[2]minusltX[2]T[1]gtT[1]

∥X[2]minusltX[2]T[1]gtT[1]∥

T[k] =X[k]minus

sumkminus1i=1 ltX[k]T[i]gtT[i]

∥X[2]minussumkminus1

i=1 ltX[k]T[i]gtT[i]∥P[k] =

I[k]minussumkminus1

i=1 ltX[k]T[i]gtT[i]

∥X[2]minussumkminus1

i=1 ltX[k]T[i]gtT[i]∥

La matrice T veacuterifie T primeT = I puisque les vecteurs sont construits de faccedilon agrave ecirctre orthonormeacutes Et on veacuterifie queXP = T et donc PXX primeP prime = I Crsquoest impleacutementeacute par la fonction gram_schmidtltltlt

import numpyfrom mlstatpymlmatrices import gram_schmidt

X = numpyarray([[1 05 0] [0 04 2]] dtype=float)TU P = gram_schmidt(XT change=True)U P = UT PTm = X PD = mT mprint(D)

gtgtgt

[[1000e+00 2776e-17][2776e-17 1000e+00]]

Cela deacutebouche sur une autre formulation du calcul drsquoune reacutegression lineacuteaire agrave partir drsquoune orthornormalisation deGram-Schmidt qui est impleacutementeacutee dans la fonction linear_regressionltltlt

import numpyfrom mlstatpymlmatrices import linear_regression

X = numpyarray([[1 05 0] [0 04 2]] dtype=float)Ty = numpyarray([1 13 39])beta = linear_regression(X y algo=gram)print(beta)

gtgtgt

[1008 1952]

Lrsquoavantage est que cette formulation srsquoexprime uniquement agrave partir de produits scalaires Voir le notebook Reacutegressionsans inversion (page 147)

133 httpsenwikipediaorgwikiJacobi_eigenvalue_algorithm

140 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

332 Synthegravese matheacutematique

Algorithme A2 Orthonormalisation de Gram-SchmidtSoit une matrice X isin Mnd avec n ⩾ d Il existe deux matrices telles que XP = T ou P primeX prime = T prime P isin Mdd etT isin Mnd La matrice T est triangulaire supeacuterieure et veacuterifie T primeT = Id (Id est la matrice identiteacute) Lrsquoalgorithme sedeacutecrit comme suit

foralli isin range(1 d)xi = X[i] minus

sumjlti lt T[j] X[i] gt T[j]

pi = P[i] minussum

jlti lt T[j] X[i] gt P[j]

T[i] =xi

∥xi∥P[i] =

pi

∥pi∥

Theacuteoregraveme T1 Reacutegression lineacuteaire apregraves Gram-SchmidtSoit une matrice X isin Mnd avec n ⩾ d Et un vecteur y isin Rn Drsquoapregraves liquestalgorithme de Gram-Schmidt (page 141)il existe deux matrices telles que XP = T ou P primeX prime = T prime P isin Mdd et T isin Mnd La matrice T est triangulairesupeacuterieure et veacuterifie T primeT = Id (Id est la matrice identiteacute) Alors β = T primeyP prime = P primeX primeyP prime = (X primeX)minus1X primey β est lasolution du problegraveme drsquooptimisation minβ ∥y minusXβ∥2

La deacutemonstration est geacuteomeacutetrique et reprend lrsquoideacutee du paragraphe preacuteceacutedent La solution de la reacutegression peut ecirctrevu comme la projection du vecteur y sur lrsquoespace vectoriel engendreacute par les vecteurs X[1] X[d] Par constructioncet espace est le mecircme que celui engendreacute par T[1] T[d] Dans cette base la projection de y a pour coordooneacuteeslt y T[1] gt lt y T[d] gt= T primey On en deacuteduit que la projection de y srsquoexprimer comme

y =

dsumk=1

lt y T[k] gt T[k]

Il ne reste plus qursquoagrave expremier cette projection dans la base initial X On sait que T[k] = XP[k] On en deacuteduit que

y =sumd

k=1 lt y T[k] gt XP[k]

=sumd

k=1 lt y T[k] gtsumd

l=1 X[l]Plk

=sumd

l=1 X[l]

sumdk=1 lt y T[k] gt Plk

=sumd

l=1 X[l](TprimeyPl)

=sumd

l=1 X[l]βl

Drsquoougrave β = T primeyP prime Lrsquoimpleacutementation suit ltltlt

import numpyX = numpyarray([[1 2 3 4]

[5 6 6 6][5 6 7 8]])T

Xt = XTTt = numpyempty(Xtshape)Pt = numpyidentity(Xshape[1])for i in range(0 Xtshape[0])

Tt[i ] = Xt[i ]for j in range(0 i)

d = numpydot(Tt[j ] Xt[i ])(suite sur la page suivante)

33 Reacutegression lineacuteaire par morceaux 141

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

Tt[i ] -= Tt[j ] dPt[i ] -= Pt[j ] d

d = numpydot(Tt[i ] Tt[i ])if d gt 0

d = 05Tt[i ] = dPt[i ] = d

print(X)print(X)print(T)print(TtT)print(X P)print(X PtT)print(T T)print(Tt TtT)

y = numpyarray([01 02 019 029])beta1 = numpylinalginv(Xt X) Xt ybeta2 = Tt y Ptprint(beta1)print(beta1)print(beta2)print(beta2)

gtgtgt

X[[1 5 5][2 6 6][3 6 7][4 6 8]]

T[[ 0183 0736 0651][ 0365 0502 -067 ][ 0548 0024 -0181][ 073 -0453 0308]]

X P[[ 0183 0736 0651][ 0365 0502 -067 ][ 0548 0024 -0181][ 073 -0453 0308]]

T T[[ 1000e+00 3886e-16 9021e-16][ 3886e-16 1000e+00 -1110e-14][ 9021e-16 -1110e-14 1000e+00]]

beta1[ 0077 0037 -0032]beta2[ 0077 0037 -0032]

La librairie impleacutemente ces deux algorithmes de maniegravere un peu plus efficace dans les fonctions gram_schmidt etlinear_regression

142 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

333 Streaming

Streaming Gram-Schmidt

Je ne sais pas vraiment comment le dire en franccedilais peut-ecirctre reacutegression lineacuteaire mouvante Mecircme Google ou Binggarde le mot streaming dans leur traduction Crsquoest neacuteanmoins lrsquoideacutee qursquoil faut reacuteussir agrave mettre en place drsquoune faccedilonou drsquoune autre car pour choisir le bon point de coupure pour un arbre de deacutecision On note X1k la matrice composeacuteedes lignes X1 Xk et le vecteur colonne y1k = (y1 yk) Lrsquoapprentissage de lrsquoarbre de deacutecision faut calculer desreacutegressions pour les problegravemes (X1k y1k) (X1k+1 y1k+1) Lrsquoideacutee que je propose nrsquoest pas parfaite mais ellefonctionne pour lrsquoideacutee de lrsquoalgorithme avec Gram-Schmidt (page 139)Tout drsquoabord il faut imaginer un algorithme de Gram-Schmidt version streaming Pour la matriceX prime

1k celui-ci produitdeux matrices T1k et P1k telles que X prime

1kP1k = T1k On note d la dimension des observations Comment fairepour ajouter une observation (Xk+1 yk+1) Lrsquoideacutee drsquoun algorithme au format streaming est que le coucirct de la mise agravejour pour lrsquoiteacuteration k+1 ne deacutepend pas de kOn suppose donc que (Tk Pk) sont les deux matrices retourneacutees par lrsquoalgorithme de algo_gram_schmidt On construitla matrice Vk+1 = [Tk Xk+1Pk] on ajoute une ligne agrave la matrice Tk On applique une iteacuteration de algorithmede algo_gram_schmidt pour obtenir (Tk+1 P ) On en deacuteduit que (Tk+1 Pk+1) = (Tk+1 PkP ) Lrsquoexpression de lareacutegression ne change pas mais il reste agrave lrsquoexpression de telle sorte que les expressions ne deacutependent pas de k CommeTk = X[1k]Pk la seule matrice qui nous inteacuteresse veacuteritablement est PkMaintenant on considegravere la matrice T[1k] qui veacuterifie T prime

kTk = Id et on ajoute une ligne Xk+1Pk pour former[[Tk][Xk+1Pk]] = [[X[1k]Pk][Xk+1Pk]] La fonction streaming_gram_schmidt_update impleacutemente la mise agravejour Le coucirct de la fonction est en O(d2)ltltlt

import numpyfrom mlstatpymlmatrices import streaming_gram_schmidt_update gram_schmidt

X = numpyarray([[1 05 10 5 -2][0 04 20 4 2][0 07 20 4 2]] dtype=float)T

Xt = XT

Tk Pk = gram_schmidt(X[3]T change=True)print(k=format(3))print(Pk)Tk = X[3] PkTprint(TkT Tk)

k = 3while k lt Xshape[0]

streaming_gram_schmidt_update(Xt[ k] Pk)k += 1print(k=format(k))print(Pk)Tk = X[k] PkTprint(TkT Tk)

gtgtgt

k=3[[ 0099 0 0 ][-0953 0482 0 ]

(suite sur la page suivante)

33 Reacutegression lineacuteaire par morceaux 143

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

[-0287 -3338 3481]][[ 1000e+00 -1749e-15 -2234e-15][-1749e-15 1000e+00 1387e-14][-2234e-15 1387e-14 1000e+00]]

k=4[[ 0089 0 0 ][-0308 0177 0 ][-003 -3334 3348]]

[[ 1000e+00 -4441e-16 -1793e-15][-4441e-16 1000e+00 2377e-15][-1793e-15 2377e-15 1000e+00]]

k=5[[ 0088 0 0 ][-0212 0128 0 ][-0016 -3335 3342]]

[[ 1000e+00 -9714e-17 -6210e-15][-9714e-17 1000e+00 1978e-16][-6210e-15 1978e-16 1000e+00]]

Streaming Linear Regression

Je reprends lrsquoideacutee introduite dans lrsquoarticle Efficient online linear regression134 On cherche agrave minimiser L(β) =

∥y minusXβ∥2 et le vecteur solution annuler le gradient nabla(β) = minus2X prime(y minus Xβ) = 0 On note le vecteur βk quiveacuterifie nabla(βk) = minus2X prime

1k(y1k minusX1kβk) = 0 Qursquoen est-il de βk+1 On note βk+1 = βk + dβ

nabla(βk+1) = minus2X prime1k+1(y1k+1 minusX1k+1(βk + dβ))

= minus2[X prime1kX

primek+1]([y1kyk+1]minus [X1kXk+1]

prime(βk + dβ))= minus2X prime

1k(y1k minusX1k(βk + dβ))minus 2X primek+1(yk+1 minusXk+1(βk + dβ))

= 2X prime1kX1kdβ minus 2X prime

k+1(yk+1 minusXk+1(βk + dβ))= 2(X prime

1kX1k +X primek+1Xk+1)dβ minus 2X prime

k+1(yk+1 minusXk+1βk)

On en deacuteduit la valeur dβ qui annule le gradient On peut deacutecliner cette formule en version streaming Crsquoestce qursquoimpleacutemente la fonction streaming_linear_regression_update Le coucirct de lrsquoalgorithme est en O(d3)Lrsquoinconveacutenient de cet algorithme est qursquoil requiert des matrices inversibles Crsquoest souvent le cas et la probabiliteacute quecela ne le soit pas deacutecroicirct avec k Crsquoest un petit inconveacutenient compte tenu de la simpliciteacute de lrsquoimpleacutementation Onveacuterifie que tout fonction bien sur un exempleltltlt

import numpy

def linear_regression(X y)inv = numpylinalginv(XT X)return inv (XT y)

def streaming_linear_regression_update(Xk yk XkXk bk)Xk = Xkreshape((1 XkXkshape[0]))xxk = XkT XkXkXk += xxk

(suite sur la page suivante)

134 httpsstatsstackexchangecomquestions6920efficient-online-linear-regression

144 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

err = XkT (yk - Xk bk)bk[] += (numpylinalginv(XkXk) err)flatten()

def streaming_linear_regression(mat y start=None)if start is None

start = matshape[1]

Xk = mat[start]XkXk = XkT Xkbk = numpylinalginv(XkXk) (XkT y[start])yield bk

k = startwhile k lt matshape[0]

streaming_linear_regression_update(mat[k] y[kk + 1] XkXk bk)yield bkk += 1

X = numpyarray([[1 05 10 5 -2][0 04 20 4 2][0 07 20 4 3]] dtype=float)T

y = numpyarray([1 03 10 51 -3])

for i bk in enumerate(streaming_linear_regression(X y))bk0 = linear_regression(X[i + 3] y[i + 3])print(iteration i bk bk0)

gtgtgt

iteration 0 [ 1 0667 -0667] [ 1 0667 -0667]iteration 1 [ 103 0682 -0697] [ 103 0682 -0697]iteration 2 [ 1036 0857 -0875] [ 1036 0857 -0875]

Streaming Linear Regression version Gram-Schmidt

Lrsquoalgorithme reprend le theacuteoregraveme Reacutegression lineacuteaire apregraves Gram-Schmidt (page 141) et lrsquoalgorithme Streaming Gram-Schmidt (page 143) Tout tient dans cette formule βk = P prime

kXprime1ky1kP

primek qursquoon eacutecrit diffeacuteremment en consideacuterent

lrsquoassociativiteacute de la multiplication des matrices βk = P primek(X

prime1ky1k)P

primek La matrice centrale a pour dimension

d Lrsquoexemple suivant impleacutemente cette ideacutee Il srsquoappuie sur les fonctions streaming_gram_schmidt_update etgram_schmidtltltlt

import numpyfrom mlstatpymlmatrices import gram_schmidt streaming_gram_schmidt_update

def linear_regression(X y)inv = numpylinalginv(XT X)return inv (XT y)

(suite sur la page suivante)

33 Reacutegression lineacuteaire par morceaux 145

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

def streaming_linear_regression_gram_schmidt_update(Xk yk Xkyk Pk bk)Xk = XkTstreaming_gram_schmidt_update(Xk Pk)Xkyk += (Xk yk)reshape(Xkykshape)bk[] = Pk Xkyk Pk

def streaming_linear_regression_gram_schmidt(mat y start=None)if start is None

start = matshape[1]

Xk = mat[start]xyk = XkT y[start]_ Pk = gram_schmidt(XkT change=True)bk = Pk xyk Pkyield bk

k = startwhile k lt matshape[0]

streaming_linear_regression_gram_schmidt_update(mat[k] y[k] xyk Pk bk)

yield bkk += 1

X = numpyarray([[1 05 10 5 -2][0 04 20 4 2][0 07 20 4 3]] dtype=float)T

y = numpyarray([1 03 10 51 -3])

for i bk in enumerate(streaming_linear_regression_gram_schmidt(X y))bk0 = linear_regression(X[i + 3] y[i + 3])print(iteration i bk bk0)

gtgtgt

iteration 0 [ 1 0667 -0667] [ 1 0667 -0667]iteration 1 [ 103 0682 -0697] [ 103 0682 -0697]iteration 2 [ 1036 0857 -0875] [ 1036 0857 -0875]

Ces deux fonctions sont impleacutementeacutees dans le module par streaming_linear_regression_gram_schmidt_updateet streaming_linear_regression_gram_schmidt Le coucirct de lrsquoalgorithme est en O(d3) mais nrsquoinclut pasdrsquoinversion de matrices

146 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

334 Digressions

Lrsquoarticle An Efficient Two Step Algorithm for High DimensionalChange Point Regression Models Without GridSearch135 propose un cadre theacuteorique pour deacuteterminer une frontiegravere dans un nuage de donneacutees qui deacutelimite unchangement de modegravele lineacuteaire Le suivant eacutetudie des changements de paramegravetres Change Surfaces for ExpressiveMultidimensionalChangepoints and Counterfactual Prediction136 drsquoune faccedilon plus geacuteneacuterique

335 Notebooks

Reacutegression sans inversion

Ce notebook mesure le temps de calcul dans deux algorithmes pour reacutesoudre une reacutegression lineacuteaire le premierinverse un matrice le second le fait sans inverser une matrice le troisiegraveme reprend lrsquoideacutee du second mais utilise unedeacutecomposition QR137 puis inverse la matrice R

matplotlib inline

import numpyrandom as rndX = rndrandn(1000 7)eps = rndrandn(1000 1) 3y = Xsum(axis=1)reshape((Xshape[0] 1)) + epsy = yravel()Xshape yshape epsshape

((1000 7) (1000) (1000 1))

from mlstatpymlmatrices import linear_regression gram_schmidtbeta1 = linear_regression(X y algo=None)beta2 = linear_regression(X y algo=gram)beta1 beta2

(array([097915374 100078055 100537618 101021414 10003261 09944518 098742625])

array([097915374 100078055 100537618 101021414 10003261 09944518 098742625]))

timeit linear_regression(X y algo=None)

384 ţs plusmn 207 ţs per loop (mean plusmn std dev of 7 runs 10000 loops each)

timeit linear_regression(X y algo=gram)

310 ţs plusmn 136 ţs per loop (mean plusmn std dev of 7 runs 1000 loops each)

timeit linear_regression(X y algo=qr)

135 httpjmlrorgpapersvolume2018-46018-460pdf136 httpjmlrorgpapersvolume2017-35217-352pdf137 httpsfrwikipediaorgwikiDC3A9composition_QR

33 Reacutegression lineacuteaire par morceaux 147

Machine Learning Statistiques et Programmation Version 035930

139 ţs plusmn 829 ţs per loop (mean plusmn std dev of 7 runs 10000 loops each)

Xt = XTtimeit gram_schmidt(Xt)

210 ţs plusmn 591 ţs per loop (mean plusmn std dev of 7 runs 1000 loops each)

Un exemple avec scikit-learn138

from sklearnlinear_model import LinearRegressionclr = LinearRegression()timeit clrfit(X y)

443 ţs plusmn 483 ţs per loop (mean plusmn std dev of 7 runs 1000 loops each)

Qui utilise la fonction lstsq139

from numpylinalg import lstsqtimeit lstsq(X y rcond=None)

755 ţs plusmn 257 ţs per loop (mean plusmn std dev of 7 runs 10000 loops each)

Il serait sans doute possible drsquooptimiser les calculs en reacuteduisant le nombre de copie et de transposeacutees La versionutilisant une deacutecomposition QR140 est assez rapide Le code est lagrave matricespy141 Pour deacutepasser numpy142 il fautpasser au C++ scikit-learn ajoute des eacutetapes intermeacutediaires pour veacuterifier les donneacutees ce qui explique la longueur Onreacutesume le tout par un graphique

from cpyquickhelpernumbers import measure_time

stmts = [dict(name=lr_matrix fct=linear_regression(X y algo=None))dict(name=lr_gram fct=linear_regression(X y algo=gram))dict(name=lr_qr fct=linear_regression(X y algo=qr))dict(name=gram fct=gram_schmidt(Xt))dict(name=sklearn fct=clrfit(X y))dict(name=lstsq fct=lstsq(X y))]

memo = []for size dim in [(100 10) (1000 10) (10000 10)

(100 20) (1000 20) (10000 20)(100 50) (1000 50)]

print(size dim)X = rndrandn(size dim)eps = rndrandn(size 1) 3y = Xsum(axis=1)reshape((Xshape[0] 1)) + epsy = yravel()context = dict(linear_regression=linear_regression Xt=XT

X=X y=y gram_schmidt=gram_schmidt clr=clr(suite sur la page suivante)

138 httpsscikit-learnorgstablemodulesgeneratedsklearnlinear_modelLinearRegressionhtml139 httpsdocsscipyorgdocnumpyreferencegeneratednumpylinalglstsqhtmlhighlight=lstsq140 httpsfrwikipediaorgwikiDC3A9composition_QR141 httpsgithubcomsdpythonmlstatpyblobmastersrcmlstatpymlmatricespy142 httpswwwnumpyorg

148 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

lstsq=lambda X y lstsq(X y rcond=None))

for stmt in stmtsres = measure_time(stmt[fct] number=20 repeat=20 div_by_number=True

rarrcontext=context)resupdate(stmt)res[size] = sizeres[dim] = dimmemoappend(res)

import pandasdf = pandasDataFrame(memo)dfhead()

100 101000 1010000 10100 201000 2010000 20100 501000 50

piv = pandaspivot_table(df index=[size dim] columns=name values=average)piv

import matplotlibpyplot as pltfig ax = pltsubplots(1 2 figsize=(144))piv[6]plot(kind=bar ax=ax[0])piv[6]plot(kind=bar ax=ax[1])ax[0]set_title(Reacutegression Lineacuteaire size lt 10000)ax[1]set_title(Reacutegression Lineacuteaire size gt= 10000)

33 Reacutegression lineacuteaire par morceaux 149

Machine Learning Statistiques et Programmation Version 035930

Streaming versions

Lrsquoideacutee est diffeacuterente ici puisqursquoil srsquoagit de calculer toutes les reacutegressions lineacuteaires intermeacutediaires Les algorithmes sontdeacutecrits par lrsquoexposeacute Reacutegression lineacuteaire par morceaux143

from mlstatpymlmatrices import streaming_linear_regression streaming_linear_rarrregression_gram_schmidt

def all_linear_regression(X y)for i in range(Xshape[1] Xshape[0])

yield linear_regression(X[i] y[i])

stmts = [dict(name=lr_matrix fct=list(all_linear_regression(X y)))dict(name=lr_st_mat fct=list(streaming_linear_regression(X y)))dict(name=lr_st_gram fct=list(streaming_linear_regression_gram_schmidt(X

rarry)))]

memo = []for dim in (10 )

for size in range(100 3500 500)print(size dim)X = rndrandn(size dim)eps = rndrandn(size 1) 3y = Xsum(axis=1)reshape((Xshape[0] 1)) + epsy = yravel()context = dict(X=X y=y

all_linear_regression=all_linear_regressionstreaming_linear_regression=streaming_linear_regressionstreaming_linear_regression_gram_schmidt=streaming_linear_

rarrregression_gram_schmidt)

for stmt in stmtsif gram in stmt[name]

nn = 1if size gt= 1000

continueelse

nn = 5res = measure_time(stmt[fct] number=nn repeat=nn div_by_number=True

rarrcontext=context)resupdate(stmt)res[size] = sizeres[dim] = dimmemoappend(res)

import pandasdf = pandasDataFrame(memo)dfhead()

100 10600 10

(suite sur la page suivante)

143 httpwwwxavierduprefrappmlstatpyhelpsphinxc_mlpiecewisehtmlstreaming-linear-regression

150 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

1100 101600 102100 102600 103100 10

piv = pandaspivot_table(df index=[size] columns=name values=average)piv

fig ax = pltsubplots(1 2 figsize=(144))piv[[lr_matrix lr_st_mat]]plot(ax=ax[0])pivplot(ax=ax[1])ax[0]set_title(Reacutegression Lineacuteaire streaming (all)n10 features)ax[1]set_title(Reacutegression Lineacuteaire no Gram-Schmidtn10 features)

La version streaming devient plus inteacuteressante agrave partir de 1000 observations le coucirct en lineacuteaire en N contrairementagrave la version classique qui est en N2 La version Gram-Schmidt devrait ecirctre reacuteeacutecrite en C++ pour proposer des tempscomparables

336 Impleacutementations

bull PiecewiseTreeRegressor144

337 Bilbiographie

Voir aussi The NIPALS algorithm150144 httpwwwxavierduprefrappmlinsightshelpsphinxmlinsightsmlmodelpiecewise_tree_regressionhtmlmlinsightsmlmodelpiecewise_

tree_regressionPiecewiseTreeRegressor150 httpscranr-projectorgwebpackagesnipalsvignettesnipals_algorithmhtml

33 Reacutegression lineacuteaire par morceaux 151

Machine Learning Statistiques et Programmation Version 035930

34 Normalisation des coefficients

La reacutegression lineacuteaire est le modegravele le plus simple pour construire une fonction de preacutediction lorsque la variable agravepreacutedire est continue

f(X) =

dsumk=1

akxk

Les coefficients srsquoobtiennent en minimisant lrsquoerreur E(X a1 ad) =sum

i(sumd

k=1 akxik minus yi)2 = ∥XAminus y∥2 La

solution est explicite (a1 ad) = (X primeX)minus1X primey Lorsque le nombre de dimensions augmentent et deacutepasse lenombre drsquoobservations il existe plus drsquoune solution et la matrice (X primeX) nrsquoest plus = inversible Une des astucesconsiste agrave reacuteduire le nombre de dimension avant avec une ACP151 ou une SVD152 (Singular Value Decomposition)qui reviennent agrave trouver un espace de projection de dimension moindre et sans perte drsquoinformation La reacutegressionest effectueacutee dans cet espace puis transposeacutee dans lrsquoespace initial Une autre astuce consiste agrave imposer une contraintesuppleacutementaire sur le poids des coefficients de la reacutegression le plus souvent en les peacutenalisant

bull Reacuteduction de dimension (page 152)bull Peacutenalisation L1 et L2 (page 152)bull Bibliographie (page 153)

341 Reacuteduction de dimension

Lrsquoideacutee est abordeacutee dans le paragraphe Synthegravese matheacutematique (page 141) Une fois le problegraveme transporteacute dans une basede variables indeacutependantes chaque dimension peut ecirctre traiteacutee seacutepareacutement La reacutegression est restreinte aux vecteurspropres associeacutes agrave une valeur propre non nulle On en deacuteduit ensuite les coefficients dans la base initiale

342 Peacutenalisation L1 et L2

La peacutenalisation revient agrave minimiser une erreur de la forme

E(X a1 ad) =sumi

(dsum

k=1

akxik minus yi

)2

+ λ

dsumk=1

|ak|p = ∥XAminus y∥2 + λ

dsumk=1

|ak|p

Le paramegravetre p permet drsquoajuster le poids donneacute aux petits coefficients et celui donneacutee aux grands Lorsque p=2 crsquoestune peacutenalisation L2 lorsque p=1 crsquoest une peacutenalisation L1 Ces deux ont une incidence diffeacuterente sur la nulliteacute descoefficients La peacutenalisation L1 a tendance agrave annuler les coefficients la peacutenalisation L2 preacutefegravere des petits coefficientssur toutes les dimensions Le notebook ` ltgt`_ illustre ce fait sur un jeu de donneacutees artificiel et montre que le nombrede coefficients non nuls reste plus ou moins constant malgreacute un nombre de variables d en hausse Pour srsquoen convaincreimaginons un problegraveme agrave d variables pour lequel on connaicirct la solution (alowast1 a

lowastd) qui minimise le problegraveme

E(X alowast1 alowastd) = min

sumi

(dsum

k=1

alowastkxik minus yi

)2

+ λ

dsumk=1

|alowastk|p

Lorsqursquoon ajoute une variable cette erreur devient

E(X alowast1 alowastd ad+1) =

sumi

(dsum

k=1

akxik + ad+1xid+1 minus yi

)2

+ λ

dsumk=1

|ak|p + λ|ad+1|p

151 httpsfrwikipediaorgwikiAnalyse_en_composantes_principales152 httpsfrwikipediaorgwikiDC3A9composition_en_valeurs_singuliC3A8res

152 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Et sa deacuteriveacutee

dE(X alowast1 alowastd ad+1)

dad+1= 2

sumi

xid+1(

dsumk=1

alowastkxik + ad+1xid+1 minus yi) + λp|ad+1|pminus1sign(ad+1)

On srsquointeacuteresse au cas particulier ougrave les variables ne sont pas correacuteleacutees et centreacutees Cela implique quesum

i xid+1xik = 0si k = d+ 1 Et lorsque pgt1 le gradient est nul si on peut reacutesoudre lrsquoeacutequation

dE(X alowast1 alowastd ad+1)

dad+1= 2

sumi

ad+1x2id+1 minus yixid+1 + λsign(ad+1) = 0

La solution est simple

alowastd+1 =

sumi yixid+1 minus λsign(ad+1)

2sum

i x2id+1

Et en fait pour un λ assez grand on peut facilement montrer que la solution est impossible puisqursquoelle impliqueque le coefficient alowastd+1 soit de signe opposeacute agrave λsign(ad+1) Cela signifie que nrsquoimporte quelle valeur pour ad+1

augmente lrsquoerreur Sa valeur est donc nulle Ceci nrsquoest pas une deacutemonstration mais donne une intuition de pourquoiune peacutenalisation L1 annule la plupart des coefficients et est utiliseacutee comme moyen de seacutelectionner les variables Crsquoestune deacutemonstration dans le cas ougrave les variables sont indeacutependantes puisque les coefficients de la reacutegression peuvent ecirctrecalculeacutes seacutepareacutement dans ce cas (voir Reacutegression lineacuteaire et correacutelation (page 138)) La peacutenalisation L2 ne megravene pasagrave une eacutequation impossible Plus on ajoute de variables plus lrsquoerreur diminue Pour aller plus loin voir [Char] et voirson application agrave la seacuteelection drsquoarbres dans une forecirct aleacuteatoire Reacuteduction drsquoune forecirct aleacuteatoire153

343 Bibliographie

153 httpwwwxavierduprefrappensae_teaching_cshelpsphinxnotebookstd2a_tree_selection_correctionhtml

34 Normalisation des coefficients 153

Machine Learning Statistiques et Programmation Version 035930

154 Chapter 3 Reacutegression lineacuteaire

CHAPTER 4

Reacutegression logistique

La reacutegression logistique155 est le modegravele preacutedictif le plus simple et celui qursquoon preacutefegravere quand il marche car il estfacilement interpreacutetable agrave lrsquoinverse des modegraveles non lineacuteaires qui gardent leurs secrets si on srsquoen tient seulement agraveleurs coefficients Concregravetement on dispose drsquoun nuage de point (Xi yi) ougrave Xi isin Rd est un vecteur de dimensiond et yi isin 0 1 un entier binaire Le problegraveme de la reacutegression lineacuteaire consiste agrave construire une fonction preacutedictiveyi = f(Xi) =lt Xi β gt= Xiβ ougrave β est un vecteur de dimension d (voir classification156) Le signe de la fonctionf(Xi) indique la classe de lrsquoobservation Xi et la valeur 1

1+ef(X) la probabiliteacute drsquoecirctre dans la classe 1

41 Reacutegression logistique diagramme de Voronoiuml k-Means

Ce qui suit explore les liens entre une reacutegression logistique les diagrammes de Voronoiuml pour construire un classifieurqui allie la reacutegression logistique et les clustering type k-means (page 1) Le point de deacutepart est une conjecture lesreacutegions creacuteeacutees par une reacutegression logistique sont convexes

bull Diagramme de Voronoiuml (page 156)bull Reacutegression logistique (page 156)bull Diagramme de Voronoiuml et partition convexe (page 158)bull Reacutegression logistique et partition convexe (page 159)bull Voronoiuml et reacutegression logistique (page 160)bull Notebooks (page 161)

155 httpsfrwikipediaorgwikiRC3A9gression_logistique156 httpwwwxavierduprefrapppapierstathelpsphinxlecturesregclasshtmlclassification

155

Machine Learning Statistiques et Programmation Version 035930

411 Diagramme de Voronoiuml

Un diagramme de Voronoiuml157 est le diagramme issu des intersections des meacutediatrices entre n points

On deacutefinit un ensemble de points (X1 Xn) La zone drsquoinfluence de chaque point est deacutefini par V (Xi) =x|d(xXi) ⩽ d(xXj)forallj Si d est la distance euclidienne la frontiegravere entre deux points Xi Xj est un segmentsur la droite drsquoeacutequation d(xXi) = d(xXj)

∥xminusXi∥2 minus ∥xminusXj∥2 = 0

=rArr ∥x∥2 minus 2 ⟨xXi⟩+ ∥Xi∥2 minus (∥x∥2 minus 2 ⟨xXj⟩+ ∥Xj∥2) = 0

=rArr 2 ⟨xXj minusXi⟩+ ∥Xi∥2 minus ∥Xj∥2 = 0=rArr 2 ⟨xXj minusXi⟩+ 1

2 ⟨Xi +Xj Xi minusXj⟩ = 0

=rArrlangxminus Xi+Xj

2 Xi minusXj

rang= 0

Ce systegraveme constitue n(nminus1)2 droites ou hyperplans si lrsquoespace vectoriel est en dimension plus que deux Le diagramme

de Voronoiuml est formeacute par des segments de chacune de ces droites On peut retourner le problegraveme On suppose qursquoilexiste n(nminus1)

2 hyperplans existe-t-il n points de telle sorte que les hyperplans initiaux sont les frontiegraveres du diagrammede Voronoiuml formeacute par ces n points Les paragraphes qui suivent expliquent explorent cette hypothegravese

412 Reacutegression logistique

scikit-learn158 a rendu populaire le jeu de donneacutees Iris159 qui consiste agrave classer des fleurs en trois classes en fonctiondes dimensions de leurs peacutetales

ltltlt157 httpsfrwikipediaorgwikiDiagramme_de_VoronoC3AF158 httpsscikit-learnorg159 httpscikit-learnorgstableauto_exampleslinear_modelplot_iris_logistichtmlsphx-glr-auto-examples-linear-model-plot-iris-logistic-py

156 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

from sklearndatasets import load_irisdata = load_iris()X y = datadata[ 2] datatarget

from sklearnlinear_model import LogisticRegressionclr = LogisticRegression()clrfit(X y)

print(coef_ clrcoef_)print(intercept_ clrintercept_)

gtgtgt

coef_ [[-2709 2324][ 0613 -1571][ 2096 -0753]]

intercept_ [ 7913 1845 -9758]

La fonction de preacutediction est assez simple f(x) = Ax + B La classe drsquoappartenance du point x est deacutetermineacute parmaxi f(x)i La frontiegravere entre deux classes i j est deacutefinie par les deux conditions maxk f(x)k = f(x)i = f(x)j On retrouve bien n(nminus1)

2 hyperplans On deacutefinit la matrice A comme une matrice ligne (L1 Ln) ougrave n est le nombrede classes Lrsquoeacutequation de lrsquohyperplan entre deux classes devient

LiX +Bi = LjX +Bj

lArrrArr ⟨Li minus Lj X⟩+Bi minusBj = 0lArrrArr ⟨Li minus Lj X⟩+Bi minusBj = 0

lArrrArrlangLi minus Lj X minus Li+Lj

2

rang+langLi minus Lj

Li+Lj

2

rang+Bi minusBj = 0

lArrrArrlangLi minus Lj X minus Li+Lj

2

rang+ 1

2 ∥Li∥2 minus 12 ∥Lj∥2 +Bi minusBj = 0

lArrrArrlangLi minus Lj X minus Li+Lj

2

rang+ 1

2 ∥Li∥2 +Bi minus ( 12 ∥Lj∥2 +Bj) = 0

Il y a peu de chance que cela fonctionne comme cela Avant de continuer assurons-nous que les reacutegions associeacutees auxclasses sont convexes Crsquoest une condition neacutecessaire mais pas suffisante pour avoir un diagramme de VoronoiumlSoit X1 et X2 appartenant agrave la classe i On sait que forallk LiX1 +Bi ⩾ LkX1 +Bk et forallk LiX2 +Bi ⩾ LkX2 +BkOn considegravere un point X sur le segment [X1 X2] donc il existe α β ⩾ 0 tel que X = αX1 + βX2 et α+ β = 1 Onveacuterifie que

LiX +Bi = Li(αX1 + βX2) +Bi = α(LiX1 +Bi) + β(LiX2 +Bi)⩾ α(LkX1 +Bk) + β(LkX2 +Bk) = Lk(αX1 + βX2) +Bkforallk

Donc le point X appartient bien agrave classe i et celle-ci est convexe La reacutegression logistique forme une partition convexede lrsquoespace des features

Theacuteoregraveme T1 convexiteacute des classes formeacutees par une reacutegression logistiqueOn deacutefinit lrsquoapplication Rd rarr N qui associe la plus grande coordonneacutee f(X) = argmaxk(AX + B)k A est unematrice Mdc B est un vecteur de Rd c est le nombre de parties Lrsquoapplication f deacutefinit une partition convexe delrsquoespace vectoriel Rd

Revenons au cas de Voronoiuml La classe preacutedite deacutepend de maxk(Ax+B)k On veut trouver n points (P1 Pn) telsque chaque couple (Pi Pj) soit eacutequidistant de la frontiegravere qui seacutepare leurs classes Il faut eacutegalement les projections des

41 Reacutegression logistique diagramme de Voronoiuml k-Means 157

Machine Learning Statistiques et Programmation Version 035930

deux points sur la frontiegravere se confondent et donc que les vecteurs Pi minus Pj et Li minus Lj sont colineacuteaires⟨Li minus Lj Pi⟩+Bi minusBj = minus (⟨Li minus Lj Pj⟩+Bi minusBj)

Pi minus Pj minuslangPi minus Pj

LiminusLj

∥LiminusLj∥

rangLiminusLj

∥LiminusLj∥ = 0

lArrrArr

⟨Li minus Lj Pi + Pj⟩+ 2(Bi minusBj) = 0

Pi minus Pj minuslangPi minus Pj

LiminusLj

∥LiminusLj∥

rangLiminusLj

∥LiminusLj∥ = 0

La seconde eacutequation en cache en fait plusieurs puisqursquoelle est valable sur plusieurs dimensions mais elles sontredondantes Il suffit de choisir un vecteur uij non perpendiculaire agraveLiminusLj de sorte que qursquoil nrsquoest pas perpendiculaireau vecteur Li minus Lj et de consideacuterer la projection de cette eacutequation sur ce vecteur Crsquoest pourquoi on reacuteduit le systegravemeau suivant qui est eacutequivalent au preacuteceacutedent si le vecteur uij est bien choisi

=rArr

⟨Li minus Lj Pi + Pj⟩+ 2(Bi minusBj) = 0

⟨Pi minus Pj uij⟩ minuslangPi minus Pj

LiminusLj

∥LiminusLj∥

ranglangLiminusLj

∥LiminusLj∥ uij

rang= 0

413 Diagramme de Voronoiuml et partition convexe

Faisons un peu de geacuteomeacutetrie avant de reacutesoudre ce problegraveme car celui-ci a dans la plupart des cas plus drsquoeacutequations quedrsquoinconnues Chaque frontiegravere entre deux classes est la meacutediatrice drsquoun segment [Pi Pj ] Le dessin suivant trace undiagramme de Voronoiuml agrave trois points Lrsquointersection est le centre des meacutediatrices du triangle formeacute par les points deVoronoiuml Pour les trouver on trace un cercle nrsquoimporte lequel puis une droite perpendiculaire agrave lrsquoune des meacutediatriceOn obtient deux points Le troisiegraveme est obtenu en traccedilant une seconde perpendiculaire et par construsction la troisiegravemedroite est perpendiculaire agrave la troisiegraveme meacutediatrice Et on nomme les angles

158 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Les triangles formeacutes par les cocircteacutes jaunes sont isocegraveles On en deacuteduit que a+ b+ c = 2π = 2(x+ y+ z) On en deacuteduitaussi que

x+ y = ay + z = cx+ z = b

On en conclut que a+ b+ c = 2π = 2(x+ y+ z) = 2(x+ c) et x = πminus c Il existe une infiniteacute de triplets de 3 pointsqui aboutissent agrave ce diagramme de Voronoiuml Il suffit de changer la taille du cercle On montre aussi qursquoen dimension2 et 3 classes il existe toujours une solution au problegraveme poseacute Maintenant si on considegravere la configuration suivanteavec des points disposeacutes de telle sorte que le diagramme de Voronoiuml est un maillage hexagonal a = b = c = 2π

3 etx = y = z = π

3 Il nrsquoexiste qursquoun ensemble de points qui peut produire ce maillage comme diagramme de VoronoiumlMais si on ajoute une petite zone (dans le cercle vert ci-dessous) il est impossible que ce diagramme soit un diagrammede Voronoiuml bien que cela soit une partition convexe

On revient agrave la deacutetermination du diagramme de Voronoiuml associeacute agrave une reacutegression logistique On a montreacute qursquoil nrsquoexistepas tout le temps pour nrsquoimporte quelle partition convexe Mais cela ne veut pas dire que tel est le cas pour unereacutegression logistique

414 Reacutegression logistique et partition convexe

On a montreacute que la reacutegression logistique reacutealise une partition convexe de lrsquoespace vectoriel des variables On note L(n)lrsquoensemble des partitions agrave n classes Le diagramme de Voronoiuml correspondent eacutegalement agrave un sous-ensemble V(n)L(n) = V (n) that is the questionOn peut se poser la question de savoir si L(n) un sous-ensemble ou tout lrsquoensemble auquel cas la reacuteponse agrave la questionpreacuteceacutedente est triviale Consideacuterons drsquoabord deux parties voisines drsquoune partition convexe formeacutee par une fonctiontelle que celle deacutecrite par le theacuteoregraveme sur la convexiteacute des classes formeacutees par une reacutegression logistique (page 157)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 159

Machine Learning Statistiques et Programmation Version 035930

Lrsquoimage qui preacutecegravede montre une partition qui nrsquoest pas convexe La partie A lrsquoest mais pas la partie B En fait il estfacile de montrer que la seule frontiegravere admissible entre deux parties convexe est un hyperplan Si la partition contientn partie il y a au pire n(nminus1)

2 frontiegraveres ce qui correspond eacutegalement au nombre drsquohyperplans deacutefinis par la fonctionde preacutediction associeacutee agrave la reacutegression logistique

Lrsquoimage qui preacutecegravede preacutesente une classification en trois zones (droites noires) On a choisi une droite bleue au hasardEn prenant son symeacutetrique par rapport agrave une des droites noires (D) on a deux droites D1 D2 Lrsquoensemble des pointsx|d(xD1) = d(xD2) correspond agrave la droite noire Il doit ecirctre de mecircme pour les trois droites bleues autrementdit lrsquointersection des droites est le centre du cercle inscrit dans le triangle bleu ce qui nrsquoest visiblement pas le cas surlrsquoimage Il paraicirct vraisemblable de dire que les reacutegressions logisitiques ne permettent pas de former toutes les partitionsconvexes On pourrait le montrer mais cela ne permettrait pas de reacutepondre agrave la question initiale L(n) = V (n)

415 Voronoiuml et reacutegression logistique

On sait que L(2) = V (2) quelque soit la dimension que L(3) = V (3) en dimension 2 La matrice L deacutefinit unereacutegression logistique Le diagramme de Voronoiuml qui lui correspond est solution du systegraveme drsquoeacutequations qui suit

=rArr

lang

LiminusLj

∥LiminusLj∥ Pi + Pj

rang+ 2

BiminusBj

∥LiminusLj∥ = 0

⟨Pi minus Pj uij⟩ minuslangPi minus Pj

LiminusLj

∥LiminusLj∥

ranglangLiminusLj

∥LiminusLj∥ uij

rang= 0

(41)

Avec uij choisi de telle sorte que les vecteur Li minus Lj et uij ne soit pas colieacutenaires Ce systegraveme inclut des eacutequationsentre classes ou reacutegions qui ne sont pas voisines Il y a potentiellement n(nminus1)

2 eacutequations pour n inconnues Il nrsquoestpas eacutevident de dire si ce systegraveme agrave une solution Voyons plutocirct lrsquoensemble des droites formeacutees par un diagramme deVoronoiuml Un point appartient agrave un segment srsquoil est agrave eacutegale distance de deux points

foralli lt j d(XPi) = d(XPj)

lArrrArr foralli lt j ∥X minus Pi∥2 = ∥X minus Pj∥2lArrrArr foralli lt j ⟨(X minus Pi) + (X minus Pj) (X minus Pi)minus (X minus Pj)⟩lArrrArr foralli lt j

langX minus Pi+Pj

2 Pj minus Pi

rang= 0

lArrrArr foralli lt j ⟨XPj minus Pi⟩+ ∥Pi∥2

2 minus ∥Pj∥2

2 = 0

Pour une partition convexe formeacutee agrave partir de droite comme crsquoest le cas drsquoune reacutegression lineacuteaire un point appartientagrave un segment srsquoil est agrave eacutegale distance de deux droites Lrsquoensemble de ces points correspond agrave deux droites les deuxbissectrices

160 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Seule lrsquoune de ces droites est la bonne Lrsquoeacutequation drsquoune droite est donneacutee par ⟨XLi⟩+Bi = 0langX

Li

∥Li∥

rang+

Bi

∥Li∥=

langX

Lj

∥Lj∥

rang+

Bj

∥Lj∥oulangX

Li

∥Li∥

rang+

Bi

∥Li∥= minus

langX

Lj

∥Lj∥

rangminus Bj

∥Lj∥

On choisit lrsquoune de ces droites

foralli lt j

langX

Lj

∥Lj∥minus Li

∥Li∥

rang+

Bj

∥Lj∥minus Bi

∥Li∥= 0

On peut voir que si tous les points sont situeacutes sur la boule uniteacute agrave savoir ∥Pi∥ = 1 la reacutegression logistique srsquoeacutecritsimplement avec Li = Pi et Bi = minus 1

2 On revient au systegraveme drsquoeacutequations lineacuteaires (41) et on en cherche unesolution approcheacutee un peu agrave la faccedilon RANSAC160 avec une reacutegression lineacuteaire et la norme L1 Il nrsquoexiste pastoujours de diagramme de Voronoiuml eacutequivalent agrave la partition convexe reacutealiseacutee par une regreacutession logistique Il estfacile de trouver un contre-exemple en essayant de reacutesoudre le systegraveme preacuteceacutedent Crsquoest ce que fait la fonctionvoronoi_estimation_from_lr La fonction essaye avec quelques approximations et heuristiques de deacuteterminerles points du diagramme de Voronoiuml Si elle reacuteussit du premier coup crsquoest qursquoil y avait eacutequivalence ce qui arrivepeu souvent Il faudrait refaire les calculs agrave la main et non de faccedilon approcheacutee pour valider un contre exemple Uneprochaine fois peut-ecirctre Ce qursquoil faut retenir est que la reacutegression logistique reacutealise une partition convexe de lrsquoespacedes variables

416 Notebooks

Le notebook qui suit reprend les diffeacuterents eacuteleacutements theacuteoriques preacutesenteacutes ci-dessus Il continue lrsquoeacutetude drsquoune reacutegressionlogistique et donne une intuition de ce qui marche ou pas avec un tel modegravele Notamment le modegravele est plus performantsi les classes sont reacuteparties sur la boule uniteacute de lrsquoespace des features

Voronoiuml et reacutegression logistique

Le notebook eacutetudie la pertinence drsquoun modegravele de reacutegression logistique dans certaines configurations Il regarde aussi lediagramme de Voronoiuml associeacute agrave une reacutegression logistique agrave trois classes Il donne quelques intuitions sur les modegravelesque la reacutegression logistique peut reacutesoudre

from jyquickhelper import add_notebook_menuadd_notebook_menu()

matplotlib inline

160 httpscikit-learnorgstablemodulesgeneratedsklearnlinear_modelRANSACRegressorhtml

41 Reacutegression logistique diagramme de Voronoiuml k-Means 161

Machine Learning Statistiques et Programmation Version 035930

Reacutegression logistique

from sklearndatasets import load_irisdata = load_iris()X y = datadata[ 2] datatarget

from sklearnlinear_model import LogisticRegressionclr = LogisticRegression()clrfit(X y)

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovr n_jobs=1penalty=l2 random_state=None solver=liblinear tol=00001verbose=0 warm_start=False)

clrcoef_

array([[-249579289 401011301][ 049709451 -163380222][ 115921404 -177736568]])

clrintercept_

array([ 081713932 122543562 -222516119])

import numpyx = numpyarray([[1 2]])clrdecision_function(x)

array([[ 634157245 -154507432 -46206785 ]])

A = clrcoef_B = clrintercept_

On veacuterifie que la fonction de deacutecision correspond agrave la formule suivant

(AxT)Travel() + B

array([ 634157245 -154507432 -46206785 ])

import matplotlibpyplot as plt

def draw_border(clr X y fct=None incx=1 incy=1 figsize=None border=True ax=None)

voir httpssashatme20170111list-of-20-simple-distinct-colors httpsmatplotliborgexamplescolorcolormaps_referencehtml_unused_ = [Red Green Yellow Blue Orange Purple Cyan

Magenta Lime Pink Teal Lavender Brown BeigeMaroon Mint Olive Coral Navy Grey White Black]

(suite sur la page suivante)

162 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

h = 02 step size in the mesh Plot the decision boundary For that we will assign a color to each point in the mesh [x_min x_max]x[y_min y_max]x_min x_max = X[ 0]min() - incx X[ 0]max() + incxy_min y_max = X[ 1]min() - incy X[ 1]max() + incyxx yy = numpymeshgrid(numpyarange(x_min x_max h) numpyarange(y_min y_max h))if fct is None

Z = clrpredict(numpyc_[xxravel() yyravel()])else

Z = fct(clr numpyc_[xxravel() yyravel()])

Put the result into a color plotcmap = pltcmtab20Z = Zreshape(xxshape)if ax is None

fig ax = pltsubplots(1 1 figsize=figsize or (4 3))axpcolormesh(xx yy Z cmap=cmap)

Plot also the training pointsaxscatter(X[ 0] X[ 1] c=y edgecolors=k cmap=cmap)axset_xlabel(Sepal length)axset_ylabel(Sepal width)

axset_xlim(xxmin() xxmax())axset_ylim(yymin() yymax())

Draw linesx1 x2 = xxmin() xxmax()cl = 0if border

for i in range(0 clrcoef_shape[0])for j in range(i+1 clrcoef_shape[0])

delta = clrcoef_[i] - clrcoef_[j]db = clrintercept_[i] - clrintercept_[j]y1 = (-db - delta[0] x1) delta[1]y2 = (-db - delta[0] x2) delta[1]axplot([x1 x2] [y1 y2] -- color=white)cl += 1

elsefor i in range(0 clrcoef_shape[0])

delta = clrcoef_[i]db = clrintercept_[i]y1 = (-db - delta[0] x1) delta[1]y2 = (-db - delta[0] x2) delta[1]axplot([x1 x2] [y1 y2] -- color=yellow)cl += 1

return ax

fig ax = pltsubplots(1 2 figsize=(104))draw_border(clr X y ax=ax[0])draw_border(clr X y border=False ax=ax[1])

(suite sur la page suivante)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 163

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

ax[0]set_title(Frontiegravere entre 2 classes)ax[1]set_title(Frontiegravere entre 1 classe et les autres)

Quelques diagramme de Voronoiuml

points = numpyarray([[1 2] [3 4] [4 1]])

from scipyspatial import Voronoi voronoi_plot_2dvor = Voronoi(points)

fig ax = pltsubplots(figsize=(44))axishold = lambda True bug between scipy and matplotlib 30voronoi_plot_2d(vor ax=ax)axset_xlim([0 5])axset_ylim([0 5])axaxis(off)

164 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

vorpoint_region

array([3 1 2] dtype=int64)

vorvertices

array([[275 225]])

from matplotlibpatches import Circlefrom matplotlibcollections import PatchCollectionpoints = numpyarray([[1 1] [2 4] [4 1] [63]])vor = Voronoi(points)fig ax = pltsubplots(figsize=(44))cs = []for i in range(vorverticesshape[0])

v = vorvertices[i ]d = (v - points[2 ])r = (ddot(d) 05)circle = Circle((v[0] v[1]) r fill=False ls=-- edgecolor=g visible=True)axadd_artist(circle)

for i in range(pointsshape[0])for j in range(i+1 pointsshape[0])

if i == 0 and j == 3continue

axplot(points[[i j] 0] points[[i j] 1] g-)axishold = lambda True bug between scipy and matplotlib 30voronoi_plot_2d(vor ax=ax)axset_xlim([0 7])axset_ylim([0 7])axaxis(off)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 165

Machine Learning Statistiques et Programmation Version 035930

import mathn = 5a = mathpi 2 3points = []for i in range(n)

for j in range(n)pointsappend([i + j mathcos(a) j mathsin(a)])

points = numpyarray(points)

vor = Voronoi(points)

fig ax = pltsubplots(figsize=(44))axishold = lambda True bug between scipy and matplotlib 30voronoi_plot_2d(vor ax=ax)axset_xlim([-15 4])axset_ylim([-15 4])axaxis(off)

166 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Un diagramme de Voronoiuml proche

On applique la formule deacutefinie par Reacutegression logistique diagramme de Voronoiuml k-Means161 et on reacutesoud le systegravemelineacuteaire deacutefini par

⟨Li minus Lj Pi⟩+Bi minusBj = minus⟨Li minus Lj Pj⟩+Bi minusBjPi minus Pj minus

langPi minus Pj

LiminusLj

∥LiminusLj∥

rangLiminusLj

∥LiminusLj∥ = 0

lArrrArr

⟨Li minus Lj Pi + Pj⟩+ 2(Bi minusBj) = 0

Pi minus Pj minuslangPi minus Pj

LiminusLj

∥LiminusLj∥

rangLiminusLj

∥LiminusLj∥ = 0

=rArr

⟨Li minus Lj Pi + Pj⟩+ 2(Bi minusBj) = 0

⟨Pi minus Pj u⟩ minuslangPi minus Pj

LiminusLj

∥LiminusLj∥

ranglangLiminusLj

∥LiminusLj∥ urang= 0

Ougrave u est un vecteur uniteacute quelconque On cherche agrave reacutesoudre sous la forme drsquoun systegraveme lineacuteaire LP = B ougrave levecteur P est lrsquoensemble des coordonneacutees de tous les points chercheacutes Drsquoapregraves la page citeacute ci-dessus dans le cas drsquoundiagramme agrave trois classes ce systegraveme a une infiniteacute de solutions

import numpymatL = []matB = []L = clrcoef_B = clrintercept_for i in range(0 Lshape[0])

for j in range(i + 1 Lshape[0])li = L[i ]lj = L[j ]c = (li - lj)nc = (cT c) 05

(suite sur la page suivante)

161 httpwwwxavierduprefrappmlstatpyhelpsphinxc_mllr_voronoihtml

41 Reacutegression logistique diagramme de Voronoiuml k-Means 167

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

condition 1mat = numpyzeros((Lshape))mat[i] = cmat[j] = cd = -2(B[i] - B[j])matBappend(d)matLappend(matravel())

condition 2 - cache plusieurs eacutequations on ne prend que la premiegravere coordonneacuteec = ncc2 = c c[0]mat = numpyzeros((Lshape))mat[i] = -c2mat[j] = c2

mat[i0] += 1mat[j0] -= 1matBappend(0)matLappend(matravel())

matL = numpyarray(matL)matB = numpyarray(matB)matLshape matBshape numpylinalgdet(matL)

((6 6) (6) 20281820935727704e-16)

import pandaspandasDataFrame(matL)

Le deacuteterminant est tregraves faible suggeacuterant que la matrice est non inversible et on sait qursquoelle lrsquoest dans ce cas On remplacela derniegravere eacutequation en forccedilant la coordonneacutee drsquoun point

matL[-1] = 0matL[-10] = 1matB[-1] = 3numpylinalgdet(matL)

4207770646874508

On veacuterifie que le systegraveme lineacuteaire est celui attendu

import pandasdf = pandasDataFrame(matL)df[B] = matBdf

from numpylinalg import invpoints = (inv(matL) matB)reshape((32))points

168 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

array([[3 412377262][503684606 02827372 ][548745959 018503334]])

x = points[0 ]c1 = (LxT)Travel() + Bx = points[1 ]c2 = (LxT)Travel() + Bx = points[2 ]c3 = (LxT)Travel() + Bnumpyvstack([c1c2c3])

array([[ 986655487 -402070972 -607697098][-1061997713 326728747 31110941 ][-1213641872 365091377 380710713]])

ax = draw_border(clr X y incx=2 incy=2)axplot(points[ 0] points[ 1] ro)

Reacutegression logistique dans un quadrillage

On srsquointeacuteresse un problegraveme de reacutegression logistique ougrave le problegraveme est tregraves facile mais pas forceacutement eacutevident du pointde vue drsquoune reacutegression logistique

Xs = []Ys = []n = 20for i in range(0 4)

for j in range(0 3)x1 = numpyrandomrand(n) + i11x2 = numpyrandomrand(n) + j11Xsappend(numpyvstack([x1x2])T)Ysextend([i3+j] n)

(suite sur la page suivante)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 169

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

X = numpyvstack(Xs)Y = numpyarray(Ys)Xshape Yshape

((240 2) (240))

set(Y)

0 1 2 3 4 5 6 7 8 9 10 11

On veacuterifie que le nuage de points est tel qursquoindiqueacute

fig ax = pltsubplots(1 1 figsize=(64))for i in range(0 12)

axplot(X[Y==i0] X[Y==i1] o label=cldi color=pltcmtab20colors[i])axlegend()axset_title(Classification agrave neuf classesndans un quadrillage)

from sklearnlinear_model import LogisticRegressionclr = LogisticRegression()clrfit(X Y)

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovr n_jobs=1penalty=l2 random_state=None solver=liblinear tol=00001verbose=0 warm_start=False)

170 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

ax = draw_border(clr X Y incx=1 incy=1 figsize=(128) border=False)axset_title(Reacutegression logistique dans un quadrillage)

clrscore(X Y)

06958333333333333

On copie les features en les mettant au carreacute Le problegraveme est toujours aussi simple mais la reacutegression logistique a plusde variables non correacuteleacutees sur lesquelles srsquoappuyer

def create_feat(X)X2 = Xcopy()X2[ 0] = X2[ 0] X2[ 0]X2[ 1] = X2[ 1] X2[ 1]XX2 = numpyhstack([X X2])return XX2

clr2 = LogisticRegression()clr2fit(create_feat(X) Y)

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovr n_jobs=1penalty=l2 random_state=None solver=liblinear tol=00001verbose=0 warm_start=False)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 171

Machine Learning Statistiques et Programmation Version 035930

def fct_predict(clr X)return clrpredict(create_feat(X))

ax = draw_border(clr2 X Y fct=fct_predict incx=1 incy=1 figsize=(128)rarrborder=False)axset_title(Reacutegression logistique dans un quadrillage avec X2)

clr2score(create_feat(X) Y)

09583333333333334

Du fait que ce problegraveme de classification est eacutequivalent agrave un diagramme de Voronoiuml il a eacuteteacute construit comme tel lefait que la reacutegression logistique semble ecirctre provenir drsquoun problegraveme de convergence numeacuterique plutocirct que du modegraveletheacuteorique Pour veacuterfier on joue avec les paramegravetres drsquoapprentissage Tout drsquoabord lrsquoalgorithme de descente de gradient

clr_t = LogisticRegression(solver=lbfgs)clr_tfit(X Y)clr_tscore(X Y)

09

ax = draw_border(clr_t X Y incx=1 incy=1 figsize=(64) border=False)axset_title(Reacutegression logistique dans un quadrillage avec L-BFGS)

172 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Ensuite on change la faccedilon de reacutesoudre le problegraveme Plutocirct que de reacutesoudre n problegravemes de classifications binaireson reacutesoud un seul problegraveme avec une erreur de classification eacutegale agrave la Multinomial logistic regression162

clr_t = LogisticRegression(solver=lbfgs multi_class=multinomial)clr_tfit(X Y)clr_tscore(X Y)

09875

fig ax = pltsubplots(1 2 figsize=(12 4))draw_border(clr_t X Y incx=1 incy=1 figsize=(64) border=False ax=ax[0])draw_border(clr_t X Y incx=1 incy=1 figsize=(64) border=True ax=ax[1])ax[0]set_title(Reacutegression logistique dans un quadrillagenavec L-BFGS + multinomial)ax[1]set_title(Reacutegression logistique dans un quadrillagenavec L-BFGS + multinomial)

162 httpsenwikipediaorgwikiMultinomial_logistic_regression

41 Reacutegression logistique diagramme de Voronoiuml k-Means 173

Machine Learning Statistiques et Programmation Version 035930

Les frontiegraveres entre une classes et les autres nrsquoont plus lrsquoair drsquoavoir de signification geacuteomeacutetrique Lrsquoapproche une classecontre toutes les autres marchent bien si celles-ci ont des frontiegraveres convexes sans angles aigus et si elles ne sont pasborneacutees En gros cette approche rapide fonctionne bien si toutes les classes sont disposeacutees autour de la boule uniteacute oudrsquoune boule uniteacute composeacutee sur un sous-ensemble des dimensions

Reacutegression logistique autour drsquoun cercle

from math import cos sin piXs = []Ys = []n = 20for i in range(0 12)

x1 = numpyrandomrand(n) + 23cos(i 12 2 pi)x2 = numpyrandomrand(n) + 23sin(i 12 2 pi)Xsappend(numpyvstack([x1x2])T)Ysextend([i] n)

X = numpyvstack(Xs)Y = numpyarray(Ys)Xshape Yshape

((240 2) (240))

fig ax = pltsubplots(1 1 figsize=(64))for i in range(0 12)

axplot(X[Y==i0] X[Y==i1] o label=cldi color=pltcmtab20colors[i])axlegend()axset_title(Classification agrave neuf classesndans un quadrillage)

174 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

clr_c = LogisticRegression()clr_cfit(X Y)clr_cscore(X Y)

09833333333333333

ax = draw_border(clr_c X Y incx=1 incy=1 figsize=(64) border=False)axset_title(Reacutegression logistique autour dun cercle)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 175

Machine Learning Statistiques et Programmation Version 035930

Rien nrsquoest prouveacute ce ne sont que des observations On peut se poser la question si le problegraveme preacuteceacutedent nrsquoeacutetait pasjustement choisi pour montrer que dans un cas lrsquoapproche une classe contre les autres dans le cas drsquoun quadrillage estparticuliegraverement malvenue On accroicirct lrsquoespace entre les classes

Xs = []Ys = []n = 20for i in range(0 4)

for j in range(0 3)x1 = numpyrandomrand(n) + i3x2 = numpyrandomrand(n) + j3Xsappend(numpyvstack([x1x2])T)Ysextend([i3+j] n)

X = numpyvstack(Xs)Y = numpyarray(Ys)Xshape Yshape

((240 2) (240))

clr_q = LogisticRegression()clr_qfit(X Y)clr_qscore(X Y)

07875

ax = draw_border(clr_q X Y incx=1 incy=1 figsize=(64) border=False)axset_title(Reacutegression logistique autour dun cercle)

176 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

A priori non mais on preacutefegravere lrsquoapproche une classe contre les autres car elle est beaucoup plus rapide Lrsquoapprochemultinomiale requiert de changer drsquoalgorithme de descente de gradient

clr_q = LogisticRegression()timeit clr_qfit(X Y)

425 ms plusmn 148 ţs per loop (mean plusmn std dev of 7 runs 100 loops each)

clr_qmn = LogisticRegression(multi_class=multinomial solver=lbfgs)timeit clr_qmnfit(X Y)

554 ms plusmn 118 ms per loop (mean plusmn std dev of 7 runs 10 loops each)

Pousser les classes sur la boule uniteacute

Puisque le modegravele est plus facile agrave apprendre lorsque les classes sont reacuteparties sur la boule uniteacute lrsquoideacuteal serait drsquoavoirune transformation qui le fait comme drsquoajouter des dimensions La reacutegression logistique ne peut modeacuteliser que desclasses convexes Cela veut dire que le barycentre sous cette hypothegraveses appartient agrave la zone que le modegravele attribute agraveune classe donneacutee On calcule ce barycentre pour toutes les classes et on ajoute comme variables la distance agrave chacunde ces centres On reprend le problegraveme du quadrillage

Xs = []Ys = []n = 20for i in range(0 4)

for j in range(0 3)x1 = numpyrandomrand(n) + i11x2 = numpyrandomrand(n) + j11

(suite sur la page suivante)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 177

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

Xsappend(numpyvstack([x1x2])T)Ysextend([i3+j] n)

X = numpyvstack(Xs)Y = numpyarray(Ys)Xshape Yshape

((240 2) (240))

bary = []for i in range(12)

b = X[Y==i]mean(axis=0)baryappend(b)

barys = numpyvstack(bary)barysshape

(12 2)

from sklearnmetricspairwise import euclidean_distancesdist = euclidean_distances(X barys)distshape

(240 12)

Xext = numpyhstack([X dist])

clr_ext = LogisticRegression()clr_extfit(Xext Y)clr_extscore(Xext Y)

09916666666666667

def fct_predict(clr X)dist = euclidean_distances(X barys)Xext = numpyhstack([X dist])return clrpredict(Xext)

ax = draw_border(clr_ext X Y fct=fct_predict incx=1 incy=1 figsize=(64)rarrborder=False)axset_title(Reacutegression logistique dans un quadrillagenavec des distances auxrarrbarycentres)

178 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Cela reacutepond eacutegalement agrave une question Que faire lorsque les classes ne sont pas convexes Une ideacutee consiste agraveeffectuer un k-means163 par classe jusqursquoagrave ce que chaque classe soit agrave peu pregraves converte par un ensemble de clusterappris sur cette classe

Cas presque hexagonal

Pour tester quelques ideacutees et parce crsquoest joli Lrsquoideacuteal serait de se rapprocher drsquoun pavage de Penrose164

import mathn = 4a = mathpi 2 3points = []Ys = []for i in range(n)

for j in range(n)dil = ((i+1)2 + (j+1)2) 06for k in range(020)

x = i + j mathcos(a)y = j mathsin(a)pointsappend([x dil y dil])Ysappend(in+j)mi = 05for r in [01 03 mi]

nb = 6 if r == mi else 12for k in range(0 nb)

(suite sur la page suivante)

163 httpscikit-learnorgstablemodulesgeneratedsklearnclusterKMeanshtml164 httpsfrwikipediaorgwikiRoger_Penrose

41 Reacutegression logistique diagramme de Voronoiuml k-Means 179

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

x = i + j mathcos(a) + r mathcos(mathpi2nb k + mathpi6)y = j mathsin(a) + r mathsin(mathpi2nb k + mathpi6)pointsappend([x dil y dil])Ysappend(in+j)

X = numpyarray(points)Y = numpyarray(Ys)set(Y)

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

fig ax = pltsubplots(1 1 figsize=(64))for i in range(0 max(Y)+1)

axplot(X[Y==i0] X[Y==i1] o label=cldi color=pltcmtab20colors[i20])axset_title(Classification agrave 16 classesndans un quadrillage hexagonal)

clr_hex = LogisticRegression(multi_class=multinomial solver=lbfgs max_iter=200)clr_hexfit(X Y)clr_hexscore(X Y)

09919354838709677

ax = draw_border(clr_hex X Y incx=1 incy=1 figsize=(64) border=False)axset_title(Reacutegression logistique dansnun quadrillage hexagonal)

180 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Diagramme de Voronoiuml approcheacute

On pousse lrsquoideacutee impleacutementeacutee dans le cas de trois classes pour un nombre de classes quelconque Il nrsquoexiste pas defaccedilon geacuteneacuterique de diagramme de Voronoiuml eacutequivalent On reacutesoud le systegraveme lineacuteaire avec une reacutegression quantile etdrsquoautres astuces de calculs agrave deacutecouvrir dans le code de la fonction voronoi_estimation_from_lr165

Xs = []Ys = []n = 20for i in range(0 4)

for j in range(0 3)x1 = numpyrandomrand(n) + i11x2 = numpyrandomrand(n) + j11Xsappend(numpyvstack([x1x2])T)Ysextend([i3+j] n)

X = numpyvstack(Xs)Y = numpyarray(Ys)Xshape Yshape

((240 2) (240))

fig ax = pltsubplots(1 1 figsize=(64))for i in range(0 12)

axplot(X[Y==i0] X[Y==i1] o label=cldi color=pltcmtab20colors[i])(suite sur la page suivante)

165 httpwwwxavierduprefrappmlstatpyhelpsphinxmlstatpymlvoronoihtml

41 Reacutegression logistique diagramme de Voronoiuml k-Means 181

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

axlegend()axset_title(Classification agrave neuf classesndans un quadrillage)

from sklearnlinear_model import LogisticRegressionclr = LogisticRegression()clrfit(X Y)

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovr n_jobs=1penalty=l2 random_state=None solver=liblinear tol=00001verbose=0 warm_start=False)

from mlstatpyml import voronoi_estimation_from_lrpoints = voronoi_estimation_from_lr(clrcoef_ clrintercept_ max_iter=20 verbose=True)points

[voronoi_estimation_from_lr] iter=120 score=00953 tol=348e-10 del P29 d=319[voronoi_estimation_from_lr] iter=220 score=00939 tol=348e-10 del P19 d=272[voronoi_estimation_from_lr] iter=320 score=0089 tol=348e-10 del P26 d=25[voronoi_estimation_from_lr] iter=420 score=00892 tol=348e-10 del P011 d=246[voronoi_estimation_from_lr] iter=520 score=00894 tol=348e-10 del P210 d=242[voronoi_estimation_from_lr] iter=620 score=00882 tol=348e-10 del P110 d=244[voronoi_estimation_from_lr] iter=720 score=00889 tol=348e-10 del P010 d=23[voronoi_estimation_from_lr] iter=820 score=00877 tol=348e-10 del P59 d=229[voronoi_estimation_from_lr] iter=920 score=00869 tol=348e-10 del P111 d=218[voronoi_estimation_from_lr] iter=1020 score=0088 tol=348e-10 del P23 d=22[voronoi_estimation_from_lr] iter=1120 score=0089 tol=348e-10 del P08 d=214

(suite sur la page suivante)

182 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

[voronoi_estimation_from_lr] iter=1220 score=00884 tol=348e-10 del P16 d=22[voronoi_estimation_from_lr] iter=1320 score=00871 tol=348e-10 del P211 d=207[voronoi_estimation_from_lr] iter=1420 score=00874 tol=348e-10 del P05 d=21[voronoi_estimation_from_lr] iter=1520 score=00868 tol=348e-10 del P02 d=21[voronoi_estimation_from_lr] iter=1620 score=0087 tol=348e-10 del P09 d=206[voronoi_estimation_from_lr] iter=1720 score=00876 tol=348e-10 del P89 d=199[voronoi_estimation_from_lr] iter=1820 score=00878 tol=348e-10 del P27 d=193[voronoi_estimation_from_lr] iter=1920 score=00889 tol=348e-10 del P911 d=193[voronoi_estimation_from_lr] iter=2020 score=00875 tol=348e-10 del P17 d=197

array([[059042773 041675379][019276405 161586254][038750542 234848342][170510075 05341869 ][169940467 150388896][166571087 215827251][223834543 06114512 ][214600591 13636044 ][208762755 204091816][25732091 0170076 ][281087731 140217985][249984364 202978587]])

ax = draw_border(clr X Y incx=1 incy=1 figsize=(85) border=False)axplot(points[ 0] points[ 1] ro ms=10)axset_title(Diagramme de Voronoi approcheacute)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 183

Machine Learning Statistiques et Programmation Version 035930

42 Reacutegression logistique par morceaux arbres de deacutecision

Ce qui suit explore une faccedilon fantaisiste de construire des reacutegressions logistiques agrave mi-chemin entre les arbres dedeacutecisions et les reacuteseaux de neurones Dans un premier temps on srsquointeacuteresse uniquement agrave une classification binaire

bull Parallegravele entre un neurone et une reacutegression logistique (page 185)bull Principe drsquoun arbre de deacutecision (page 185)bull Construction drsquoun pseudo arbre (page 187)bull Aparteacute matheacutematique (page 188)bull Approche EM et reacutegression logistique (page 189)bull Lien vers les reacuteseaux de neurones (page 189)bull Plan orthogonal (page 192)bull Interpreacutetabiliteacute (page 192)bull Bibliographie (page 192)

184 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

421 Parallegravele entre un neurone et une reacutegression logistique

Les paragraphes Classification (page 54) et La classification (page 32) preacutesente le problegraveme de la classification quiconsiste agrave trouver une fonction f qui maximise la vraisemblance du nuage de points (Xi yi)i ougraveXi isin Rd et yi isin 0 1

lnL(Θ X y) =

nsumi=1

yi ln f(Θ Xi) + (1minus yi) ln(1minus f(Θ Xi))

Dans le cas de la reacutegression logistique la fonction f est deacutefinie comme suit

f(Θ Xi) =1

1 + eminussumd

k=1 θkxik

Cela ressemble beaucoup agrave la deacutefinition drsquoun neurone (page 25) ougrave la fonction drsquoactivation f(x) = 11+eminusx est une

fonction sigmoiumlde

422 Principe drsquoun arbre de deacutecision

Un arbre de deacutecision se construit peu agrave peu en reacutepeacutetant toujours la mecircme optimisation sur des sous-ensemble de plusen plus petit Il faut drsquoabord un critegravere qui permette drsquoeacutevaluer la pertinence de la division effectueacutee par un noeud delrsquoarbre Pour un ensemble (Xi yi)1⩽i⩽n on peut estimer la probabiliteacute p(y1 yn) = p(Y ) = 1

n

sumi = 1nyi Le

critegravere de Gini G qui eacutevalue la pertinence drsquoune classification est deacutefini par G(Y ) = p(Y )(1minus p(Y )) Un autre critegravereest le gain drsquoinformation ou entropie H H(Y ) = minusp(Y ) ln p(Y )minus (1minus p(Y )) ln(1minus p(Y ))On note YS lrsquoensemble des yi|i isin S ougrave S est un sous-ensemble SC est noteacute le compleacutementairePour le premier noeud de lrsquoarbre de deacutecision on calcule pour toutes les variables et toutes les observations la diminutiondu critegravere choisi

Sik = m|xmk ⩽ xik∆ik = H(Y )minus (H(YSik

) +H(YSCik)

On choisit alors la variable k et le seuil xik qui maximise le gain Dans le cas drsquoune reacutegression logistique lavraisemblance correspond agrave

lnL(Θ X y) =

nsumi=1

yi ln f(Θ Xi) + (1minus yi) ln(1minus f(Θ Xi))

Si on suppose que la fonction f retourne une constante c cette expression devient

lnL(Θ X y) =

nsumi=1

yi ln c+ (1minus yi) ln(1minus c) = p(Y ) ln c+ (1minus p(Y )) ln(1minus c)

Or cette expression admet un maximum pour c = p(Y ) puisque la deacuteriveacutee srsquoannule de faccedilon eacutevidente pour cette valeur

part lnL(Θ X y)

partc=

p(Y )

cminus 1minus p(Y )

1minus c

On remarque que lrsquooptimisation drsquoun noeud drsquoun arbre de deacutecision correspond agrave lrsquooptimisation de la vraisemblance parune fonction constante Une reacutegression logistique calculeacutee sur une seule variable est en quelque sorte une geacuteneacuteralisationde ce modegravele On apprend un arbre de deacutecision qursquoon exporte au format dot166ltltlt

166 httpsfrwikipediaorgwikiDOT_(langage)

42 Reacutegression logistique par morceaux arbres de deacutecision 185

Machine Learning Statistiques et Programmation Version 035930

from sklearndatasets import load_irisfrom sklearntree import DecisionTreeClassifier export_graphvizds = load_iris()X y = dsdata dstargety = y 2dt = DecisionTreeClassifier(max_depth=3 criterion=entropy)dtfit(X y)print(dt) export_graphviz(dt)

gtgtgt

DecisionTreeClassifier(criterion=entropy max_depth=3)

Ce qui donne

X[3] lt= 08entropy = 0918samples = 150

value = [100 50]

entropy = 00samples = 50

value = [50 0]

True

X[3] lt= 175entropy = 10samples = 100

value = [50 50]

False

X[2] lt= 495entropy = 0445

samples = 54value = [5 49]

X[2] lt= 485entropy = 0151

samples = 46value = [45 1]

entropy = 0146samples = 48

value = [1 47]

entropy = 0918samples = 6

value = [4 2]

entropy = 0918samples = 3

value = [2 1]

entropy = 00samples = 43

value = [43 0]

186 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

423 Construction drsquoun pseudo arbre

Et si on remplaccedilait chaque noeud par une reacutegression logistique appris sur les exemples passant par ce noeud Plutocirctque de prendre une deacutecision baseacutee sur une variable donneacutee et de retourner une probabiliteacute constante on estime unereacutegression logistique et on retourne la probabiliteacute retourneacutee par la reacutegressionSrsquoil nrsquoy a theacuteoriquement aucun obstacle en pratique certains cas posent quelques problegravemes comme le montrelrsquoexemple Arbre drsquoindeacutecision (page 323) et repris ci-dessous La fonction criteria calcule les diffeacuterents gains selonles points de coupure

import matplotlibpyplot as pltfrom mlstatpymllogreg import criteria random_set_1d plot_ds

X1 y1 = random_set_1d(1000 2)X2 y2 = random_set_1d(1000 3)X3 y3 = random_set_1d(1000 4)df1 = criteria(X1 y1)df2 = criteria(X2 y2)df3 = criteria(X3 y3)

fig ax = pltsubplots(1 3 figsize=(14 5) sharey=True)plot_ds(X1 y1 ax=ax[0] title=easy)plot_ds(X2 y2 ax=ax[1] title=difficult)plot_ds(X3 y3 ax=ax[2] title=more difficult)df1plot(x=X y=[Gini Gain p1 p2] ax=ax[0] lw=5)df2plot(x=X y=[Gini Gain p1 p2] ax=ax[1] lw=5)df3plot(x=X y=[Gini Gain p1 p2] ax=ax[2] lw=5)pltshow()

Le seuil de coupure est eacutevident dans le premier cas et quasiment impossible agrave trouver de faccedilon numeacuterique dans lesecond avec les algorithmes tels qursquoils sont impleacutementeacutes Les arbres de deacutecision contournent ce problegraveme en imposantque le seuil de coupure laisse au moins quelques exemples de chaque cocircteacute ce que la reacutegression logistique ne fait pasOn peut reacuteflechir agrave drsquoautres critegraveres Le suivant explore la log-vraisemblance

import matplotlibpyplot as pltfrom mlstatpymllogreg import criteria2 random_set_1d plot_ds

X1 y1 = random_set_1d(1000 2)X2 y2 = random_set_1d(1000 3)

(suite sur la page suivante)

42 Reacutegression logistique par morceaux arbres de deacutecision 187

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

X3 y3 = random_set_1d(1000 4)df1 = criteria2(X1 y1)df2 = criteria2(X2 y2)df3 = criteria2(X3 y3)print(df3)

fig ax = pltsubplots(1 3 figsize=(14 5) sharey=True)plot_ds(X1 y1 ax=ax[0] title=easy)plot_ds(X2 y2 ax=ax[1] title=difficult)plot_ds(X3 y3 ax=ax[2] title=more difficult)df1plot(x=X y=[LL LL-10 LL-100] ax=ax[0] lw=5)df2plot(x=X y=[LL LL-10 LL-100] ax=ax[1] lw=5)df3plot(x=X y=[LL LL-10 LL-100] ax=ax[2] lw=5)pltshow()

La log-vraisemblance dans ce problegraveme agrave une dimension est assez simple agrave eacutecrire Pour avoir une expression qui nechange pas en invertissant les classes on considegravere le maxiimum des vraisemblance en consideacuterant deux classifieursopposeacutes Le graphe preacuteceacutedent fait varier x0 avec diffeacuterents θ

LL(x0 θ) = max

1

1+exp ( xminusx0θ )

1

1+exp (minus xminusx0θ )

424 Aparteacute matheacutematique

La log-vraisemblance drsquoune reacutegression logistique pour un jeu de donneacutees (Xi yi) srsquoexprime comme suit pour unereacutegression logistique de paramegravetre β

L(βX y) =sumn

i=1 yi ln f(βXi) + (1minus yi) ln(1minus f(βXi))avec f(βXi) = 1

1+exp(minus(β0+sumd

k=1 xikβk))

On remarque que

f(x) = 11+eminusx

rArr f(minusx) = 11+ex = eminusx

1+eminusx

rArr f(x) + f(minusx) = 11+eminusx + eminusx

1+eminusx = 1

188 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Cela explique pour on utilise souvent cette fonction pour transformer une distance en probabiliteacute pour unclassifieur binaire Lrsquoapprentissage drsquoun arbre de deacutecision sklearntreeDecisionTreeClassifier167 propose le paramegravetremin_samples_leaf On se propose dans le cadre de la reacutegression logistique de chercher le paramegravetre β0 qui permet deveacuterifier la contrainte fixeacutee par min_samples_leaf Cela revient agrave trounver un classifieur lineacuteaire parallegravele au premierqui veacuterifie les contraintes

425 Approche EM et reacutegression logistique

Lrsquoarticle [Scott2013] explicite un algorithme drsquoapprentissage EM pour une reacutegression logistique

Il faudrait adapter cet agorithme pour apprendre deux reacutegressions logistiques dont la combinaison sur deux partiesdisjointes serait meilleure qursquoune seule reacutegression logistique sur la reacuteunion des deux parties Cet algorithme devraittrouver agrave la fois les modegraveles et la seacuteparation entre les deux parties

A faire(ideacutee) Arbre de reacutegressions logistiques et EMChaque noeud du graphe serait modeacuteliseacute comme eacutetant la reacuteunion de trois reacutegressions logistiques une pour diviserlrsquoespace en deux deux autres apprenant agrave classifier sur chacune des partiesissue168

426 Lien vers les reacuteseaux de neurones

En remplaccedilant chaque noeud par une reacutegression logistique lrsquoarbre de deacutecision deviendrait un reacuteseau de neurones avecune structure particuliegravere certes mais un reacuteseau de neurones tout de mecircme Chaque noeud du graphe serait transformeacuteen un neurone avec une reacutegression logistique impliquant toutes les variables Il ne resterait plus qursquoagrave continuerlrsquoapprentissage avec des algorithmes agrave base de gradient stochastique Cela reviendrait agrave changer lrsquoinitialisation dureacuteseau de neurones On considegravere le petit arbre deacutecision suivant trois features trois noeuds deux classes

167 httpsscikit-learnorgstablemodulesgeneratedtreeDecisionTreeClassifierhtml168 httpsgithubcomsdpythonmlstatpyissues28

42 Reacutegression logistique par morceaux arbres de deacutecision 189

Machine Learning Statistiques et Programmation Version 035930

X1 lt 5

X2 lt 3 X3 lt 2

0 1 0 1

On souhaite le transformer en reacuteseau de neurones avec une structure qui serait celle qui suit On note tout drsquoabordla fonction sigmoiumlde f(x s h) = 1

1+eminush(xminuss) Elle vaut 12 lorsque x vaut s vaut 1 lorsque x est tregraves grand et 0lorsque x est tregraves petit Crsquoest eacutequivalent agrave la fonction f(x s h) = g(XS v0 h)

11+eh(ltXV gt+v0) ougrave X = (x1 x2 x3)

V = (minus1 0 0) et v0 = s

y1=g(X (-1 0 0) 5 h)

y4=g((y1 y2) (-1 -1) 1 h) y5=g((y1 y3) (-1 -1) 1 h)

y2=g(X (0 -1 0) 3 h) y3=g(X (0 0 -1) 2 h)

y6=g((y4 y5) (-1 -1) 1 h)

ltc0gt 0|ltc1gt 1

Le problegraveme avec la structure proposeacutee est que chaque noeud final retourne toujours une classe alors que dans un arbrede deacutecision seule une feuille reacutepond Un noeud final fait la somme de toutes les feuilles deux dans cet exemple

190 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Lrsquoimpleacutementation de scikit-learn169 nrsquoest pas la plus facile agrave manipuler dans le sens ougrave chaque couche ne peut prendrecomme entreacutee que les sorties de la preacuteceacutedente et la fonction drsquoactivation est la mecircme pour tous les neurones On nepeut pas non plus geler certains coefficients lors de lrsquoapprentissage Crsquoest agrave ce moment-lagrave qursquoon se demande si ccedila vautle coup de se lancer dans une impleacutementation agrave la rigueur jolie mais sans doute pas porteuse drsquoune innovation majeureEt ce nrsquoest pas la premiegravere fois que quelqursquoun se lance dans la conversion drsquoun arbre en reacuteseaux de neuronesJrsquoai quand mecircme essayeacute avec le notebook Un arbre de deacutecision en reacuteseaux de neurones (page 87) et les classesNeuralTreeNode NeuralTreeNet Si lrsquoideacutee de deacutepart est seacuteduisante elle requiert une contrainte suppleacutementaire quiest de creacuteer un reacuteseau de neurones qui ne soit pas un minimum local de la fonction drsquoerreur auquel cas un apprentissageavec un algorithme agrave base de gradient ne pourra pas ameacuteliorer les performances du reacuteseau de neurones

La structure proposeacutee nrsquoest cependant pas la meilleure et elle pourrait ecirctre simplifieacutee Drsquoautres projets srsquoappuie deslibrairies existantes

bull Soft-Decision-Tree170

bull Neural-Decision-Forests171

bull hummingbird172

Ce dernier package convertit un reacuteseau de neurones en autant de couches que la profondeur de lrsquoarbre Lrsquoimage qui suitest tireacute de lrsquoarticle [Nakandalam2020] et qui reacutesume leur ideacutee

169 httpsscikit-learnorg170 httpsgithubcomkimhc6028soft-decision-tree171 httpsgithubcomjingxilNeural-Decision-Forests172 httpsgithubcommicrosofthummingbird

42 Reacutegression logistique par morceaux arbres de deacutecision 191

Machine Learning Statistiques et Programmation Version 035930

427 Plan orthogonal

Dans un espace agrave plusieurs dimensions la reacutegression logistique divise lrsquoespace agrave lrsquoaide drsquoun hyperplan La fonction dedeacutecision reste similaire puisque la probabiliteacute de classification deacutepend de la distance agrave cet hyperplan On suppose qursquoilexiste une reacutegression logistique binaire apprise sur un nuage de points (Xi yi) La probabiliteacute de bonne classificationest deacutefinie par

f(Θ Xi) =1

1 + eminusθ0+sumd

k=1 θkxik

Le vecteur Θ deacutefinit un hyperplan On choisit un vecteur Θprime de telle sorte que lt ΘΘprime gt= 0 Les deux vecteurs sontorthogonaux On deacutefinit maintenant deux autres vecteurs Θ1Θ2 pour deux autres reacutegressions logistiques Pour classerun point X on procegravede comme suit

bull si lt Θprime X gtlt 0 on classe le point en appliquant la reacutegression logistique deacutefinie par Theta1bull si lt Θprime X gt⩽ 0 on classe le point en appliquant la reacutegression logistique deacutefinie par Theta2

De maniegravere eacutevidente les performances en classification sont les mecircmes que la premiegravere reacutegression logistique On peutensuite reacuteestimer les vecteurs Θ1Θ2 pour maximiser la vraisemblance sur chacune des parties Il ne reste plus qursquoagravemontrer que la vraisemblance globale sera supeacuterieur agrave celle obtenue par la premiegravere reacutegression logistique

A faire(ideacutee) Arbre de reacutegressions logistiques en cascade orthogonaleImpleacutementer la lrsquoalgorithme suivant

bull Apprendre une reacutegression logistiquebull Choisir un hyperplan perpendiculaire en optimisation un critegravere Construction drsquoun pseudo arbre (page 187)bull Apprendre une reacutegression logistique sur chacune des partiesbull Continuer jusqursquoagrave ce lrsquoameacutelioration soit neacutegligeable

issue173

428 Interpreacutetabiliteacute

429 Bibliographie

[Scott2013] Expectation-maximization for logistic regression174 James G Scott Liang Sun[Nakandalam2020] A Tensor-based Approach for One-size-fits-all ML Prediction Serving Supun Nakandalam

Karla Saur Gyeong-In Yu Konstantinos Karanasos Carlo Curino Markus Weimer Matteo Interlandi To appearat OSDI 2020175

43 Reacuteseaux de neurones

Reacuteseaux de neurones avec scikit-learn

matplotlib inline

173 httpsgithubcomsdpythonmlstatpyissues29174 httpsarxivorgpdf13060040pdf175 httpswwwusenixorgconferenceosdi20

192 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

from sklearnlinear_model import PerceptronX = [[0 0] [1 1]]y = [0 1]clf = Perceptron()clffit(X y)

Perceptron(alpha=00001 class_weight=None eta0=10 fit_intercept=Truen_iter=5 n_jobs=1 penalty=None random_state=0 shuffle=Trueverbose=0 warm_start=False)

import matplotlibpyplot as pltimport numpydef softmax(x)

return 10 (1 + numpyexp(-x))def dsoftmax(x)

t = numpyexp(-x)return t (1 + t)2

x = numpyarange(-1010 01)y = softmax(x)dy = dsoftmax(x)fig ax = pltsubplots(11)axplot(xy label=softmax)axplot(xdy label=deacuteriveacutee)axset_ylim([-01 11])axplot([-5 -5] [-01 11] r)axplot([5 5] [-01 11] r)axlegend(loc=2)

ltmatplotliblegendLegend at 0x1b651aeacf8gt

43 Reacuteseaux de neurones 193

Machine Learning Statistiques et Programmation Version 035930

x

array([ -100000000e+01 -990000000e+00 -980000000e+00-970000000e+00 -960000000e+00 -950000000e+00-940000000e+00 -930000000e+00 -920000000e+00-910000000e+00 -900000000e+00 -890000000e+00-880000000e+00 -870000000e+00 -860000000e+00-850000000e+00 -840000000e+00 -830000000e+00-820000000e+00 -810000000e+00 -800000000e+00-790000000e+00 -780000000e+00 -770000000e+00-760000000e+00 -750000000e+00 -740000000e+00-730000000e+00 -720000000e+00 -710000000e+00-700000000e+00 -690000000e+00 -680000000e+00-670000000e+00 -660000000e+00 -650000000e+00-640000000e+00 -630000000e+00 -620000000e+00-610000000e+00 -600000000e+00 -590000000e+00-580000000e+00 -570000000e+00 -560000000e+00-550000000e+00 -540000000e+00 -530000000e+00-520000000e+00 -510000000e+00 -500000000e+00-490000000e+00 -480000000e+00 -470000000e+00-460000000e+00 -450000000e+00 -440000000e+00-430000000e+00 -420000000e+00 -410000000e+00-400000000e+00 -390000000e+00 -380000000e+00-370000000e+00 -360000000e+00 -350000000e+00-340000000e+00 -330000000e+00 -320000000e+00-310000000e+00 -300000000e+00 -290000000e+00-280000000e+00 -270000000e+00 -260000000e+00-250000000e+00 -240000000e+00 -230000000e+00-220000000e+00 -210000000e+00 -200000000e+00-190000000e+00 -180000000e+00 -170000000e+00-160000000e+00 -150000000e+00 -140000000e+00-130000000e+00 -120000000e+00 -110000000e+00-100000000e+00 -900000000e-01 -800000000e-01-700000000e-01 -600000000e-01 -500000000e-01-400000000e-01 -300000000e-01 -200000000e-01-100000000e-01 -355271368e-14 100000000e-01200000000e-01 300000000e-01 400000000e-01500000000e-01 600000000e-01 700000000e-01800000000e-01 900000000e-01 100000000e+00110000000e+00 120000000e+00 130000000e+00140000000e+00 150000000e+00 160000000e+00170000000e+00 180000000e+00 190000000e+00200000000e+00 210000000e+00 220000000e+00230000000e+00 240000000e+00 250000000e+00260000000e+00 270000000e+00 280000000e+00290000000e+00 300000000e+00 310000000e+00320000000e+00 330000000e+00 340000000e+00350000000e+00 360000000e+00 370000000e+00380000000e+00 390000000e+00 400000000e+00410000000e+00 420000000e+00 430000000e+00440000000e+00 450000000e+00 460000000e+00470000000e+00 480000000e+00 490000000e+00

(suite sur la page suivante)

194 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

500000000e+00 510000000e+00 520000000e+00530000000e+00 540000000e+00 550000000e+00560000000e+00 570000000e+00 580000000e+00590000000e+00 600000000e+00 610000000e+00620000000e+00 630000000e+00 640000000e+00650000000e+00 660000000e+00 670000000e+00680000000e+00 690000000e+00 700000000e+00710000000e+00 720000000e+00 730000000e+00740000000e+00 750000000e+00 760000000e+00770000000e+00 780000000e+00 790000000e+00800000000e+00 810000000e+00 820000000e+00830000000e+00 840000000e+00 850000000e+00860000000e+00 870000000e+00 880000000e+00890000000e+00 900000000e+00 910000000e+00920000000e+00 930000000e+00 940000000e+00950000000e+00 960000000e+00 970000000e+00980000000e+00 990000000e+00])

44 Analyse de survie

Liquestanalyse de survie176 est un sujet qursquoon commence agrave voir poindre en assurance et plus geacuteneacuteralement en assuranceCrsquoest domaine deacuteveloppeacute pour mesurer les effets drsquoune substance drsquoun meacutedicament sur un corps vivant une personne

bull Lien avec le machine learning (page 195)bull Courbe de Kaplan-Meier (page 196)bull Reacutegression de Cox (page 196)bull Notebooks (page 197)bull Liens articles (page 200)bull Modules (page 200)

441 Lien avec le machine learning

En assurance on cherche souvent agrave preacutedire si une personne aura un accident ou pas Pour cela il faut avoir des donneacuteesune base de donneacutees dans laquelle sont enregistreacutes des accidents Lrsquoaccident en question peut avoir lieu au deacutebut ducontrat quelques anneacutees plus tard ou jamais Lorsqursquoaucun accident nrsquoest associeacute agrave une personne il se peut qursquoil nese produise aucun accident ou que celui-ci ne srsquoest pas encore produit Modeacuteliser ce problegraveme de preacutediction permetdrsquointroduire le temps et prendre en compte le fait que les donneacutees sont tronqueacutees on ne sait pour une personne que siun accident srsquoest produit ou pas entre le deacutebut du contrat et aujourdrsquohui

176 httpsfrwikipediaorgwikiAnalyse_de_survie

44 Analyse de survie 195

Machine Learning Statistiques et Programmation Version 035930

442 Courbe de Kaplan-Meier

On reprend la mecircme terminologie A une date t0 on administre un traitement agrave une personne un animal une planteCet ecirctre vivant meurt agrave un temps t + d Le traitement a-t-il ameacutelioreacute sa survie On considegravere deux temps t1 et t2la probabiliteacute de deacutecegraves entre ces deux temps peut ecirctre estimeacute par nt2minusnt1

nt1ougrave nti est la population vivante au temps ti

(depuis le deacutebut du traitement)On en deacuteduit la probabiliteacute de rester vivant jusqursquoau temps ti qui est lrsquoestimateur de Kaplan-Meier177 S(ti)

S(ti) =prodi

i=1

(1minus ntiminus1

minusnti

ntiminus1

)=

prodii=1

nti

ntiminus1=prodi

i=1ni

niminus1

Par simplification on note ni = nti On suppose les ti des dates agrave intervalles plutocirct reacuteguliers et croissants La suite(ni) est deacutecroissantes (on ne rescuscite pas) Ces calculs rappellent les calculs lieacutes agrave lrsquoespeacuterance de vie (voir Evoluationdrsquoune population - eacutenonceacute178 Evoluation drsquoune population (correction)179) Lrsquoespeacuterance de vie est deacutefinie par

E(D) =

infinsumi=1

tiP (mort au temps ti) =infinsumi=1

tini minus ni+1

ni

iprodj=0

nj

njminus1=

infinsumi=1

tini minus ni+1

ni

ni

n0=

infinsumi=1

tini minus ni+1

n0

La courbe S(t) est aussi appeleacutee la fonction de survie Si T est la dureacutee de vie drsquoune personne S(t) = P (T gt t) Onappelle λ(t) le taux de deacutefaillance crsquoest la probabiliteacute que le deacutecegraves survienne au temps t

λ(t)dt = P (t ⩽ T lt t+ dt|T ⩾ T ) = minusSprime(t)

S(t)dt

443 Reacutegression de Cox

Le modegravele de Cox180 modeacutelise le risque de deacutecegraves instantaneacute au temps t selon le modegravele qui suit Une personne estdeacutecrite par les variables X1 Xk

λ(tX1 Xk) = λ0(t) exp

(ksum

i=1

βiXi

)= λ0(t) exp(βX)

La partie λ0(t) correspond agrave ce qursquoon observe sans autre informations que les deacutecegraves On lrsquoappelle aussi le risque debase Crsquoest la probabiliteacute moyenne de deacutecegraves instantaneacutee La seconde partie permet de faire varier cette quantiteacute selonce qursquoon sait de chaque personneOn dit que crsquoest un modegravele agrave risque proportionnel car si deux personnes sont quasiment identiques excepteacute sur unevariable Xi (comme la quantiteacute drsquoun poison ingeacutereacutee) alors le ratio de probabiliteacute est

λ(tX1 Xai Xk)

λ(tX1 Xbi Xk)

=exp(βiX

ai )

exp(βiXbi )

= exp(βi(X

ai minusXb

i ))

Lrsquohypothegravese des risques proportionnel est en quelque sorte intuitive Plus on ingegravere un poison plus on a de chancesdrsquoen subir les conseacutequences Mais ce nrsquoest pas toujours le cas le documentaire La fabrique de lrsquoignorance181 revientsur les effets du bispheacutenol A182 qui serait deacutejagrave pertubateur agrave tregraves petite dose Il ne prend pas en compte les effets croiseacutesnon plus (voir Les perturbateurs endocriniens Comprendre ougrave en est la recherche183)

177 httpsfrwikipediaorgwikiEstimateur_de_Kaplan-Meier178 httpwwwxavierduprefrappactuariat_pythonhelpsphinxnotebooksseance4_projection_population_enoncehtml179 httpwwwxavierduprefrappactuariat_pythonhelpsphinxnotebooksseance4_projection_population_correctionhtml180 httpsfrwikipediaorgwikiRC3A9gression_de_Cox181 httpswwwartetvfrvideos091148-000-Ala-fabrique-de-l-ignorance182 httpsfrwikipediaorgwikiBisphC3A9nol_A183 httpshal-ansesarchives-ouvertesfranses-02289024document

196 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

La fonction λ0(t) est en quelque sorte le taux de deacutefaillance moyen On peut le calculer agrave partir des formules introduitesau paragraphe preacuteceacutedent en lissant la courbe de Kaplan-Meier avec des splines On peut aussi le calculer aveclrsquoestimateur de Breslow (voir Analyse de survie Meacutethodes non parameacutetriques184 Introduction agrave lrsquoanalyse des dureacuteesde survie185) qui repose aussi la courbe de Kaplan-Meier

On sait que si g(t) = logSprime(t) alors gprime(t) = Sprime(t)S(t) On en deacuteduit que

λ0(t) = minusd(log(S(t)))

dt

Pour la suite on pose h(Xi β) = exp(βXi) et lrsquoindividu meurt au temps ti de lrsquoexpeacuterience Une expeacuterience estdeacutefinie par la liste des couples (Xi ti) On souhaite trouver les paramegravetres β qui repreacutesentent au mieux les donneacutees delrsquoexpeacuterience On deacutefinit donc

bull Rt lrsquoensemble des personnes en vie au temps tbull Dt lrsquoensemble qui deacutecegravedent au t

Par deacutefinition i isin Rti et i isin Dti On calcule le ratio

Pr(β tXi) =h(Xi β)λ0(t)sum

jisinRth(Xj β)λ0(t)

=h(Xi β)sum

jisinRth(Xj β)

Pour une personne qui deacutecegravede au temps t ce ratio devrait ecirctre proche de 1 car on souhaite que h(Xi β) soit grand ettous les autres nuls On deacutefinit la vraisemblance partielle du modegravele par

L(β) =prodi

Pr(β ti Xi) =prodi

h(Xi β)sumjisinRti

h(Xj β)

Une fois qursquoon a calculeacute les coefficients β optimaux on peut affiner la partie λ0(t) Lrsquoestimateur de Breslow est

B(t) =sumi|ti⩽t

1sumjisinRti

h(βXj)

Crsquoest un estimateur de la fonction de survie

S(t) = exp(minusB(t))

444 Notebooks

Analyse de survie

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Quelques donneacutees (page 198)bull Reacutegression de Cox (page 199)

184 httpheliosmiparisdescartesfr~obouazizKMSurvpdf185 httpwwwlstaupmcfrpspCours_Survie_1pdf

44 Analyse de survie 197

Machine Learning Statistiques et Programmation Version 035930

Quelques donneacutees

On reacutecupegravere les donneacutees disponibles sur opendatagouvfr Donneacutees hospitaliegraveres relatives agrave lrsquoeacutepideacutemie de COVID-19186 Ces donneacutees ne permettent pas de construire la courbe de Kaplan-Meier187 On sait combien de personnesrentrent et sortent chaque jour mais on ne sait pas quand une personne qui sort un 1er avril est entreacutee

import numpyrandom as rnd

import pandasdf = pandasread_csv(httpswwwdatagouvfrendatasetsr63352e38-d353-4b54-bfd1-rarrf1b3ee1cabd7 sep=)gr = df[[jour rad dc]]groupby([jour])sum()diff = grdiff()reset_index(drop=False)diffhead()

def donnees_artificielles(hosp mu=14 nu=21)dt = pandasto_datetime(hosp[jour])res = []for i in range(hospshape[0])

date = dt[i]dayofyearh = hospiloc[i 1]delay = rndexponential(mu int(h))for j in range(delayshape[0])

resappend([date - int(delay[j]) date 1])h = hospiloc[i 2]delay = rndexponential(nu int(h))for j in range(delayshape[0])

resappend([date - int(delay[j]) date 0])return pandasDataFrame(res columns=[entree sortie issue])

data = donnees_artificielles(diff[1]reset_index(drop=True))sort_values(entree)datahead()

Chaque ligne est une personne entree est le jour drsquoentreacutee agrave lrsquohocircpital sortie celui de la sortie issue 0 pour deacutecegraves1 pour en vie

datadescribe()

Il y a environ 80 de survie dans ces donneacutees

import numpyduree = datasortie - dataentreedeces = (dataissue == 0)astype(numpyint32)

import numpyimport matplotlibpyplot as pltfrom lifelines import KaplanMeierFitterfig ax = pltsubplots(1 1 figsize=(10 4))kmf = KaplanMeierFitter()kmffit(duree deces)

(suite sur la page suivante)

186 httpswwwdatagouvfrfrdatasetsdonnees-hospitalieres-relatives-a-lepidemie-de-covid-19187 httpsfrwikipediaorgwikiEstimateur_de_Kaplan-Meier

198 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

kmfplot(ax=ax)axlegend()

Reacutegression de Cox

On reprend les donneacutees artificiellement geacuteneacutereacutees et on ajoute une variable identique agrave la dureacutee plus un bruit mais quasinul

import pandasdata_simple = pandasDataFrame(duree duree deces deces

X1 duree 057 deces + numpyrandomrandn(dureerarrshape[0])

X2 duree (-057) deces + numpyrandomrandn(dureerarrshape[0]))data_simplehead()

from sklearnmodel_selection import train_test_splitdata_train data_test = train_test_split(data_simple test_size=08)

from lifelinesfitterscoxph_fitter import CoxPHFittercox = CoxPHFitter()coxfit(data_train[[duree deces X1]] duration_col=duree event_col=deces

show_progress=True)

Iteration 1 norm_delta = 013943 step_size = 09000 log_lik = -25065836250 newton_rarrdecrement = 88993933 seconds_since_start = 00Iteration 2 norm_delta = 000660 step_size = 09000 log_lik = -24986237270 newton_rarrdecrement = 281312 seconds_since_start = 00Iteration 3 norm_delta = 000073 step_size = 09000 log_lik = -24985957376 newton_rarrdecrement = 003357 seconds_since_start = 01Iteration 4 norm_delta = 000000 step_size = 10000 log_lik = -24985954017 newton_rarrdecrement = 000000 seconds_since_start = 01Convergence success after 4 iterations

44 Analyse de survie 199

Machine Learning Statistiques et Programmation Version 035930

ltlifelinesCoxPHFitter fitted with 124826 total observations 100754 right-censoredrarrobservationsgt

coxprint_summary()

cox2 = CoxPHFitter()cox2fit(data_train[[duree deces X2]] duration_col=duree event_col=deces

show_progress=True)cox2print_summary()

Iteration 1 norm_delta = 013946 step_size = 09000 log_lik = -25065836250 newton_rarrdecrement = 88892089 seconds_since_start = 00Iteration 2 norm_delta = 000667 step_size = 09000 log_lik = -24986361089 newton_rarrdecrement = 286434 seconds_since_start = 00Iteration 3 norm_delta = 000074 step_size = 09000 log_lik = -24986076079 newton_rarrdecrement = 003426 seconds_since_start = 01Iteration 4 norm_delta = 000000 step_size = 10000 log_lik = -24986072650 newton_rarrdecrement = 000000 seconds_since_start = 01Convergence success after 4 iterations

coxpredict_cumulative_hazard(data_test[5])

coxpredict_survival_function(data_test[5])

445 Liens articles

bull Notes de lectures188

bull On the Breslow estimator189

446 Modules

bull lifelines190

bull scikit-survival191

188 httpwwwstatsoxacuk~mlunnlecturenotes2pdf189 httpsdlinwebunceduwp-contentuploadssites1568201304Lin07pdf190 httpslifelinesreadthedocsioenlatest191 httpsscikit-survivalreadthedocsioenlatest

200 Chapter 4 Reacutegression logistique

CHAPTER 5

NLP

NLP ou Natural Language Processing u traitement du langage naturel192

51 Compleacutetion

La compleacutetion193 est un meacutechanisme qui permet agrave un utilisateur de saisir les mots de sa recherche avec moins decaractegraveres qursquoelle nrsquoen contient Lrsquoutilisateur saisit plus rapidement

Si ces outils sont appreacuteciables du point de vue utilisateurs ils le sont tout autant cocircteacute site web en reacuteduisant la variabiliteacutedans le texte saisie en particulier les fautes drsquoorthographes Lrsquoutilisateur a besoin de moins de requecirctes pour trouverson produits et cela diminue drsquoautant la charge du serveur qui lui fournit ses reacutesultats

192 httpsfrwikipediaorgwikiTraitement_automatique_du_langage_naturel193 httpsfrwikipediaorgwikiComplC3A8tement

201

Machine Learning Statistiques et Programmation Version 035930

Ce chapitre aborde diffeacuterentes probleacutematiques lieacutees agrave ce genre de systegravemes qui sont preacutesents partout sur Internetmoteurs de recherches sites de ventes en ligne journaux Il existe de nombreuses librairies qui les impleacutementent Laplus connue en Python est whoosh194Quelques eacuteleacutements de codes sont disponibles dans le module completion et le notebook Compleacutetion (page 370)Vous pouvez eacutegalement lire How to Write a Spelling Corrector195 de Peter Norvig196 et deacutecouvrir le sujet avec On UserInteractions with Query Auto-Completion197 de Bhaskar Mitra Milad Shokouhi Filip Radlinski Katja Hofmann

511 Formalisation

bull Problegraveme drsquooptimisation (page 202)bull Ensemble des compleacutetions (page 203)bull Gain (page 203)

Problegraveme drsquooptimisation

Je me reacutefegravere pour cela agrave lrsquoarticle [Sevenster2013] (voir aussi [Bampoulidis2017]) qui introduit diffeacuterentes faccedilons deconstruire un systegraveme drsquoautocompeacutetion et qui les compare agrave lrsquousage Et srsquoil existe plusieurs faccedilons de faire il fautdrsquoabord mettre au point une faccedilon de les comparer Je me place dans le cadre drsquoun moteur de recherche car crsquoestlrsquousage principal que celui-ci soit un moteur de recherche ou une recherche incluse sur un site de vente A la fin de lajourneacutee on sait quelles sont les requecirctes saisies par les utilisateurs et le nombre de fois qursquoelles ont eacuteteacute saisies (qi wi)pour i isin [[1 N ]]

Sans systegraveme de compleacutetion les utilisateurs saisissent doncK =sumN

i=1 l(qi)wi ougrave l(qi) est la longueur de la compleacutetionqi Avec le systegraveme de compleacutetion les utilisateurs saisissent moins de caractegraveres crsquoest ce chiffre lagrave qursquoon cherche agraveminimiser Lrsquouniteacute est le charactegravere saisi ou keystroke en anglaisMecircme avec le mecircme systegraveme de compleacutetion il nrsquoest pas dit que tous les utilisateurs saisissent la mecircme requecircte de lamecircme faccedilon Pour simplifier on va supposer que si malgreacute tout et ne consideacuterer que la faccedilon minimale de saisir unerequecircte

Lrsquoexemple preacuteceacutedent illustrent deux faccedilons de saisir le terme autocompleacutetion (sur Wikipeacutedia) autocom + 4 touchesvers le bas ou autocomp + 1 touche vers le bas soit 7+4=11 touches dans le premier cas ou 8+1=9 touches dans lesecond cas

194 httpswhooshreadthedocsioenlatest195 httpnorvigcomspell-correcthtml196 httpnorvigcom197 httpswwwsemanticscholarorgpaperOn-user-interactions-with-query-auto-completion-Mitra-Shokouhi71e953caa2542a61b52e684649b3569c00251021

pdf

202 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

Deacutefinition D1 Minimum KeystrokeOn deacutefinit la faccedilon optimale de saisir une requecircte sachant un systegraveme de compleacutetion S comme eacutetant le minimum obtenu

M(q S) = min0⩽k⩽l(q)

k +K(q k S) (51)

La quantiteacute K(q k S) repreacutesente le nombre de touche vers le bas qursquoil faut taper pour obtenir la chaicircne q avec lesystegraveme de compleacutetion S et les k premiegraveres lettres de q

De faccedilon eacutevidente K(q l(q) S) = 0 et M(q S) ⩽ l(q) et K(q k S) gt 0 si k lt l(q) On prend eacutegalement commeconvention forallq isin S K(q k S) = infin et forallq isin S M(q S) = l(q) Certains systegravemes proposent des requecirctes avantde saisir quoique ce soit crsquoest pourquoi on inclut la valeur M(q 0) qui repreacutesente ce cas Construire un systegraveme decompleacutetion revient agrave minimiser la quantiteacute

M(S) =

Nsumi=1

M(qi S)wi

Ensemble des compleacutetions

Il nrsquoy a pas de restriction sur la fonction K(q k S) mais on se limitera dans un premier temps agrave une fonction simpleOn suppose que le systegraveme drsquoautocompleacutetion dispose drsquoun ensemble de requecirctes ordonneacutees S = (si) et la fonction

K(q k S) = position(q S(q[1k]))

Ougrave S(q[1k]) est le sous-ensemble ordonneacute de S des compleacutetions qui commencent par les k premiegraveres lettres de q etde longueur supeacuterieure strictement agrave k position(q S(q[1k])) est la position de q dans cet ensemble ordonneacute ouinfin sielle nrsquoy est pas Cette position est strictement positive K(q k S) ⩾ 1 sauf si k = l(q) auquel cas elle est nulle Celasignifie que lrsquoutilisateur doit descendre drsquoau moins un cran pour seacutelectionner une compleacutetion On note σ(q) la positionde la compleacutetion q dans lrsquoensemble S Par construction s = s2 =rArr σ(s1) = σ(s2)

K(q k S) = i|si ≻ q[1k] si isin S σ(si) lt σ(q) (52)

deacutesigne le cardinal de lrsquoensemble Trouver le meilleur systegraveme de compleacutetion S revient agrave trouver la meilleurefonction K(q k S) et dans le cas restreint lrsquoordre sur S qui minimise cette fonction Le plus souvent on se contentede trier les compleacutetions par ordre deacutecroissant de populariteacute On consideacuterera par la suite qursquoon est dans ce cas

Gain

On deacutefinit le gain en keystroke comme eacutetant le nombre de caractegraveres saisis en moins

G(q S) = l(s)minusM(q S)

Minimier M(S) ou maximiser G(S) =sumN

i=1 G(qi S)wi revient au mecircme

G(S) =

Nsumi=1

wi(l(s)minusM(q S)) =

Nsumi=1

wil(s)minusNsumi=1

wiM(q S)) = K minusM(S)

Ougrave K =sumN

i=1 l(qi)wi lrsquoensemble des caractegraveres tapeacutes par les utilisateurs G(S)K est en quelque sorte le ratio de

caractegraveres eacuteconomiseacutes par le systegraveme de compleacutetion

51 Compleacutetion 203

Machine Learning Statistiques et Programmation Version 035930

512 Fausses ideacutees reccedilues

bull Il faut trier les compleacutetions par freacutequence deacutecroissante (page 204)bull Il faut placer les compleacutetions courtes avant (page 205)bull Il faut montrer toutes les compleacutetions (page 205)bull Et si le poids de chaque compleacutetion est uniforme (page 205)

Il faut trier les compleacutetions par freacutequence deacutecroissante

En pratique cela marche plutocirct bien En theacuteorie cette assertion est fausse Prenons les quatre compleacutetions suivantes

q freacutequence ordrea 4 1ab 3 2abc 2 3abcd 1 4

Dans cet exemple si lrsquoutilisateur tape ab il verra les compleacutetions

abcabcd

Dans tous les cas K(q k S) = l(q) minus k Cela veut dire que lrsquoutilisateur ne gagnera rien En revanche avec lrsquoordresuivant

q ordrea 4ab 2abc 3abcd 1

Si lrsquoutilisateur tape ab il verra les compleacutetions

abcdabc

Le nombre de caractegraveres eacuteconomiseacutes sera

q freacutequence ordre M(q S)a 4 4 1ab 3 2 2abc 2 3 3abcd 1 1 1 = K(q 0 S)

Drsquoougrave un gain total de G(S) = 3

204 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

Il faut placer les compleacutetions courtes avant

Le cas preacuteceacutedent est deacutejagrave un contre exemple Mais drsquoun point de vue utilisateur il nrsquoest pas facile de lire des compleacutetionsde longueurs diffeacuterentes Cela veut peut-ecirctre dire aussi que la meacutetrique consideacutereacutee pour choisir le meilleur systegraveme decompleacutetion est faux Cela sera discuteacute agrave la prochaine section

Il faut montrer toutes les compleacutetions

Le premier exemple offre aussi un contre exemple Dans cet exemple lrsquoensemble Q = (qi) des requecirctes utilisateurs etlrsquoensemble S = (si) des compleacutetions ou requecirctes complegravetes est le mecircme Il suffit de la modifier un peu On enlegravevela requecircte ab de S

q freacutequence ordre M(q S)a 4 1 1ab 3 infin 2abc 2 2 2abcd 1 3 3

Drsquoougrave un gain total de G(S) = 2 En conclusion si jrsquoenlegraveve une petite compleacutetion pour laquelle le gain est nul il estpossible que le gain pour les suivantes soit positif On en retient qursquoil ne faut pas montrer trop de compleacutetions qui sedistinguent drsquoun caractegravere Plus geacuteneacuteralement il ne sert agrave rien de montrer des compleacutetions plus longue que le preacutefixedrsquoun caractegravere Par extension si une compleacutetion est plus longue que le preacutefixe de d caractegraveres il faut la montrer agrave uneposition infeacuterieure agrave d

Et si le poids de chaque compleacutetion est uniforme

On suppose que les compleacutetions ont toutes le mecircme poids wi = 1 Dans quel ordre faut-il ranger les compleacutetionspour eacuteconomiser le plus de caractegraveres On aurait tendance agrave dire la plus longue drsquoabord ce qursquoon peut veacuterifier dans lenotebook Compleacutetion (page 370)

q freacutequence ordre M(q S)a 1 4 1ab 1 3 2abc 1 2 2abcd 1 1 1

Ajouter deux autres compleacutetions disjointes edf edfh Le gain maximum est 6 et il y a plusieurs ordres

edf edfh abc abcd a ababcd abc edfh edf ab a

On a presque lrsquoimpression qursquoon peut traiter chaque bloc seacutepareacutement a ab abc abcd drsquoun cocircteacute et edf edfh de lrsquoautreA lrsquointeacuterieur des blocs les regravegles seront les mecircmes

51 Compleacutetion 205

Machine Learning Statistiques et Programmation Version 035930

En reacutesumeacute si on connaicirct le meilleur ordre pour toutes les mots sur les noeuds terminaux dans les bulles rouges dansla bulle verte le meilleur ordre sera une fusion des deux listes ordonneacuteesQuelques essais sur le notebook ont tendance agrave montrer que lrsquoordre a peu drsquoimpact sur le reacutesultat final lorsque lescompleacutetions ont le mecircme poids Avec quatre mots la somme des gains est identique quelque soit lrsquoordre

p=poids g=gain

200 - actuellement p=10 g=110 | acte p=10 g=20 | actes p=10 g=20 | actualiteacute p=1rarr0 g=50200 - acte p=10 g=30 | actuellement p=10 g=100 | actualiteacute p=10 g=60 | actes p=1rarr0 g=10200 - acte p=10 g=30 | actes p=10 g=30 | actualiteacute p=10 g=60 | actuellement p=10rarrg=80

Mais si on change le poids de lrsquoune drsquoelles elle se retrouve en premiegravere position

192 - actes p=20 g=40 | actuellement p=10 g=100 | acte p=10 g=10 | actualiteacute p=1rarr0 g=50192 - actes p=20 g=40 | actuellement p=10 g=100 | actualiteacute p=10 g=60 | acte p=1rarr0 g=00

206 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

513 Nouvelle meacutetrique

bull Intuitions (page 207)bull Formalisation (page 208)bull Quelques reacutesultats (page 208)bull Deacutefinition avanceacutee (page 208)bull Questions (page 209)

Intuitions

1 La meacutetrique actuelle nrsquoest pas la meilleure2 Si les mots nrsquoont pas de long preacutefixes en commun il vaut mieux placer le mot le plus freacutequent en premiegravere

position Pour les mots de freacutequence identique lrsquoordre a peu drsquoimportance3 Srsquoil existe une seacutequence de mots emboicircteacutes les gains sont minimes agrave moins drsquoenlever des mots ou de poser les

grandes compleacutetions drsquoabordLes intuitions 2 et 3 seront sans doute remise en question en consideacuterant une nouvelle meacutetrique On considegraverelrsquoensemble des compleacutetions S composeacute de deux mots actuellement actualiteacute Le gain moyen par mots est de 9caractegraveres eacuteconomiseacutes Si on ajoute le grand preacutefixe commun agrave la liste actu ce gain moyen tombe agrave 633 (voirCompleacutetion (page 370)) quelque soit lrsquoordre choisi pour les compleacutetions Toutefois si on ne prend pas en comptele gain sur le mot actu car ce nrsquoest pas un mot correct mais plus un mot qui aide la lecture de la liste ce gain moyentombe agrave 8 seulement En conclusion si lrsquoutilisateur tape la lettre a et qursquoon lui montre ceci

actuactualiteacuteactuellement

Au lieu de

actualiteacuteactuellement

Il doit taper en moyenne un caractegravere de plus pour obtenir le mot qursquoil cherche Et la meacutetrique ne montre pas reacuteellementde preacutefeacuterence pour lrsquoordre drsquoaffichage des compleacutetions Pourtant lrsquoutilisateur pourrait tregraves bien utiliser la seacutequence detouches suivantes

touche mot composeacutea abas actu (compleacutetion)e actuebas actuellement

Dans cet exemple aussi petit on ne gagnerait pas grand-chose mais cela vaut le coup drsquoeacutetudier cette piste pour desvocabulaires plus grand se servir des preacutefixes commun comme tremplin pour les mots plus grand Lrsquoeffect positionperdrait un peu de son influence

51 Compleacutetion 207

Machine Learning Statistiques et Programmation Version 035930

Formalisation

On reprend la premiegravere meacutetrique (51)

M(q S) = min0⩽k⩽l(q)

k +K(q k S)

La fonction K(q k S) est deacutefinie par (52)

Deacutefinition D1 Dynamic Minimum KeystrokeOn deacutefinit la faccedilon optimale de saisir une requecircte sachant un systegraveme de compleacutetion S comme eacutetant le minimum obtenu

M prime(q S) = min0⩽kltl(q)

M prime(q[1k] S) + min(K(q k S) l(q)minus k)

On prend comme convention M prime(empty S) = 0 Le calcul de la meacutetrique se construit comme une suite qui part des chaicircnesles plus courtes aux plus longues La meacutetrique est donc bien deacutefinie Contrairement agrave la premiegravere meacutetrique le calculdeacutepend du reacutesultat pour tous les preacutefixes drsquoune compleacutetion

proprieacuteteacute P1 meacutetriquesforallq M prime(q S) ⩽ M(q S)

Si q isin S crsquoest eacutevident puisque M prime(q S) ⩽ M prime(empty S) + l(q) Si q isin S cela deacutecoule de la constation preacuteceacutedentepuisque M prime(q S) ⩽ M prime(q[[1k]] S) +K(q k S) ⩽ k +K(q k S)

Quelques reacutesultats

On considegravere la liste des mots actuellement actualiteacute actuel On compare les ordres qui maximisent la premiegravereet la seconde meacutetriques ainsi que le gain obtenu Premiegravere meacutetrique

70 - actuellement p=10 g=110 | actuel p=10 g=40 | actualiteacute p=10 g=6070 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actuel p=10 g=3070 - actuel p=10 g=50 | actuellement p=10 g=100 | actualiteacute p=10 g=60

Seconde meacutetrique

7333 - actuel p=10 g=50 | actualiteacute p=10 g=70 | actuellement p=10 g=10070 - actuellement p=10 g=110 | actuel p=10 g=40 | actualiteacute p=10 g=60

On note que la seconde meacutetrique propose un meilleur gain ce qui est attendu mais aussi que le mot actuel sera placeacutedevant le mot actuellement plus long sans que cela souffre drsquoambiguiumlteacute

Deacutefinition avanceacutee

Dans les faits le Dynamic Minimum Keystroke sous-estime le nombre de caractegraveres neacutecessaires Lorsqursquoon utilise unmot comme tremplin on peut aiseacutement le compleacuteter mais il faut presser une touche ou attendre un peu pour voir lesnouvelles compleacutetions associeacutees agrave la premiegravere compleacutetion choisie et maintenant consideacutereacute comme preacutefixe Crsquoest ceque prend en compte la deacutefinition suivante

Deacutefinition D2 Dynamic Minimum Keystroke modifieacute

208 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

On deacutefinit la faccedilon optimale de saisir une requecircte sachant un systegraveme de compleacutetion S comme eacutetant le minimum obtenu

Mrdquo(q S) = min

min1⩽k⩽l(q) Mrdquo(q[1k minus 1] S) + 1 +min(K(q k S) l(q)minus k)min0⩽k⩽l(q) Mrdquo(q[1k] S) + δ +min(K(q k S) l(q)minus k)

Si on prend comme exemple la requecircte machine learning le premier cas correspond agrave la seacutequence bull seacutelection de la compleacutetion machinebull pression de la touche espacebull seacutelection de la compleacutetion machine learning

Et le second cas agrave la seacutequence bull seacutelection de la compleacutetion machinebull pression de la touche droite pour afficher les nouvelles compleacutetionsbull seacutelection de la compleacutetion machine learning

Le coucirct de la pression de la touche droite est noteacute δ ⩽ 1 qursquoon prendra infeacuterieur agrave 1 On remarque eacutegalement qursquoaveccette nouvelle meacutetrique il est possible de diminuer le nombre minimum de touches agrave presser pour des requecirctes en dehorsde lrsquoensemble S agrave partir du moment ougrave elles prolongent une compleacutetion existante Crsquoest lagrave un point tregraves inteacuteressant decette meacutetrique De maniegravere eacutevidente forallq M prime(q S) ⩽ Mrdquo(q S)

Questions

Gracircce agrave cette meacutetrique on peut envisager de trouver des reacuteponses agrave certaines questions 1 Les diffeacuterences entre les trois meacutetriques sont-elles neacutegligeables ou non 2 Ajouter des compleacutetions non preacutesentes dans le corpus ameacuteliore-t-elle la meacutetrique Mecircme question pour la

suppression 3 Existe-t-il un moyen de construire de faccedilon iteacuterative lrsquoensemble des compleacutetions ou plutocirct lrsquoordre qui minimise

la meacutetrice M prime(q S) 4 Comment calculer rapidement les meacutetriques pour les requecirctes dans lrsquoensemble S et en dehors

Pour la premiegravere question une expeacuterience devrait donner une piste agrave deacutefaut drsquoy reacutepondre Pour la seconde il nrsquoestpas neacutecessaire drsquoenvisager la suppression de compleacutetions car celles-ci devraient naturellement se positionner en fin deliste Lrsquoajout correspond agrave la situation ougrave beaucoup de compleacutetions partagent le mecircme preacutefixe sans pour autant que cepreacutefixe fasse partie de la liste des compleacutetions

maceacuterermalinemachineriemachinerie infernalemachinerie infernalissimemachine artistiquemachine automatiquemachine chaplinmachine intelligentemachine learning

Lrsquoideacutee consiste agrave ajouter la compleacutetion machine qui sert de preacutefixe commun agrave beaucoup de compleacutetions et cela ameacuteliorele gain moyen dans le cas preacutesent (sans compter le gain sur la requecircte machine) Enfin la troisiegraveme et la quatriegravemequestion la reacuteponse requiert la deacutemonstration de quelques proprieacuteteacutes matheacutematiques Mais avant jrsquoajouterai que lapremiegravere meacutetrique M correspond agrave la ligne de commande Windows et la meacutetrique M prime correspond agrave la ligne decommande Linux

51 Compleacutetion 209

Machine Learning Statistiques et Programmation Version 035930

514 Proprieacuteteacutes matheacutematiques

On srsquointeacuteresse principalement agrave la meacutetrique M prime deacutefinie par Dynamic Minimum Keystroke mais les reacutesultats seronteacutetendues aux autres quand cela est possible

bull Calcul pour une compleacutetion (page 210)bull Calcul pour une requecircte en dehors (page 211)bull Compleacutetions emboicircteacutees (page 211)bull Listes tronqueacutees de compleacutetions (page 212)

Calcul pour une compleacutetion

On a besoin drsquoune proprieacuteteacute pour calculer eacuteleacutegamment les meacutetriques pour lrsquoensemble des compleacutetions

Lemme L1 Dynamic Minimum KeystrokeOn note d(q S) la longueur du plus long preacutefixe de q inclus dans S

d(q S) = max l(p)|p ≺ q p isin S p = q

M prime(q S) = mind(qS)⩽kltl(q)

M prime(q[1k] S) + min(K(q k S) l(q)minus k)

Il nrsquoest pas neacutecessaire de regarder tous les preacutefixes mais seulement ceux entre le plus long preacutefixe qui est aussi unecompleacutetion et la requecircte q La deacutemonstration est identique agrave la deacutemonstration du lemme qui suit Lrsquoideacutee de cetteproprieacuteteacute est de pouvoir reacuteduire le coucirct de lrsquoalgorithme de calcul des meacutetriques Ce nrsquoest pas la seule eacutecriture qursquoonpuisse en faitLe calcul de la meacutetrique M prime suggegravere qursquoon doit faire ce calcul dans le sens des preacutefixes croissants mais il serait plussimple de le faire dans le sens des compleacutetions de poids croissant (les compleacutetions de moindre poids sont toujoursafficheacutees avant)

Si lrsquoalgorithme est plus simple (sens de la fleacuteche dans le figure preacuteceacutedente) il faut parfois plusieurs iteacuterations pourobtenir la valeur finale

210 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

Calcul pour une requecircte en dehors

Mais il est faux de dire que pour deux requecirctes en dehors de lrsquoensemble des compleacutetions q1 ⪯ q2 =rArr M prime(q1 S) ⩽M prime(q2 S) Le lemme suivant preacutecise pourquoi

Lemme L2 calcul de Miquest(q S)On suppose que p(q S) est la compleacutetion la plus longue de lrsquoensemble S qui commence q

klowast = max k|q[[1k]] ≺ q et q isin Sp(q S) = q[[1klowast]]

La meacutetrique M prime(q S) veacuterifie la proprieacuteteacute suivante

M prime(q S) = M prime(p(q S) S) + l(q)minus l(p(q S))

La meacutetrique M prime(q S) est eacutegale agrave celle du plus long preacutefixe inclus dans lrsquoensemble les compleacutetions agrave laquelle on ajoutela diffeacuterence des longueurs Cela correspond aux caractegraveres que lrsquoutilisateur doit saisir La deacutemonstration est assezsimple On suppose que cela nrsquoest pas vrai et qursquoil existe un existe k lt klowast tel que

M prime(q[[1k]] S) + l(q)minus l(q[[1k]]) lt M prime(q[[1klowast]] S) + l(q)minus l(q[[1klowast]])

=rArr M prime(q[[1k]] S)minus k lt M prime(q[[1klowast]] S)minus klowast

=rArr M prime(q[[1k]] S) + (klowast minus k) lt M prime(q[[1klowast]] S)

Cela signifie qursquoon a reacuteussi une faccedilon plus efficace drsquoeacutecrire le preacutefixe q[[1klowast]] Or par deacutefinition M prime(q[[1klowast]] S) estcenseacutee ecirctre le nombre de caractegraveres minimal pour obtenir q[[1klowast]] Ce nrsquoest donc pas possible Cette proprieacuteteacute estimportante puisque pour calculer M prime(q[[1klowast]] S) il suffit de regarder le plus long preacutefixe appartenant agrave lrsquoensembledes compleacutetions et seulement celui-ci Cet algorithme et impleacutementeacute par la meacutethode enumerate_test_metric Ence qui concerne la meacutetrique M par deacutefinition forallq isin S M(q S) = 0 La meacutetrique Mrdquo mrsquoeacutevoque la cocircte anglaise198Lrsquoiteacuterationn fonctionne de la mecircme maniegravere agrave partir du moment ougrave la requecircte consideacutereacutee ne fait pas partie de lrsquoensembledes compleacutetions mais il y a lrsquoeacutetage drsquoen dessous qui pose un doute Il y a un brin de poeacutesie dans ce +1 Lrsquoapplicationde lrsquoimpleacutementation du calcul de la meacutetrique montre que M prime et Mrdquo sont tregraves souvent eacutegales Je vais laisser ce δ sousforme de poeacutesie pour le moment

A faire terminer la deacutemonstration pour MLa cocircte anglaise

Compleacutetions emboicircteacutees

On considegravere les compleacutetions suivantes

actuactualiteacuteactualiteacutesactuelactuellement

Pour le preacutefixe actue on suggegravere actuel at actuellement Pour le preacutefixe actua on suggegravere actualiteacute at actualiteacutes Pourle preacutefixe actu on suggegravere la concateacutenation de ces deux listes Par conseacutequent pour construire les listes de compleacutetionsassocieacutees agrave chaque preacutefixe il paraicirct de partir des feuilles de lrsquoarbre puis de fusionner les listes de compleacutetions jusqursquoau

198 httpswwwyoutubecomwatchv=YV54e3R-rLg

51 Compleacutetion 211

Machine Learning Statistiques et Programmation Version 035930

noeud racine Plus concregravetement si deux compleacutetions veacuterifie q1 ⪯ q2 alors lrsquoensemble des compleacutetions veacuterifieC(q1) supC(q2) On peut mecircme dire que C(q) = cupC(s)|s ≻ q isin S Cela signifie qursquoune fois qursquoon a construit un trierepreacutesentant lrsquoensemble des compleacutetions il suffit de partir des feuilles de lrsquoarbre jusqursquoagrave la racine pour construire laliste des compleacutetions agrave chaque eacutetape et que pour un noeud preacutecis la liste des compleacutetions est lrsquounion des listes decompleacutetions des noeuds fils

Listes tronqueacutees de compleacutetions

On reprend la premiegravere meacutetrique (51) qui utilise la fonction K(q k S) deacutefinie en (52)

M(q S) = min0⩽k⩽l(q)

k +K(q k S)

Etant donneacute que le nombre minimum de caractegraveres pour obtenir une compleacutetion dans le trie ne peut pas ecirctre supeacuterieuragrave la longueur si K(q k S) gt l(q)minus k on sait deacutejagrave que que le preacutefixe q[1k] ne sera pas le minimum Cette remarqueest applicable aux meacutetriques M prime et Mrdquo

515 Problegraveme drsquooptimisation

bull Enonceacute 1 (page 212)bull Enonceacute 2 (page 213)bull Une ideacutee (page 213)

Enonceacute 1

Problegraveme P1 Optimiser un systegraveme de compleacutetionOn suppose que lrsquoensemble des compleacutetions C = cj est connu On souhaite ordonner cet ensemble pour obtenirlrsquoensemble ordonneacute des compleacutetions S = (si) qursquoon considegravere comme une permutation σ de lrsquoensemble de deacutepart S(σ) = (si) = (cσ(j)) Ce systegraveme de compleacutetion est destineacute agrave un des utilisateurs qui forment des recherches ourequecirctesQ = (qi wi)1⩽i⩽NQ

qi est la requecircte wi est la freacutequence associeacutee agrave cette requecircte On deacutefinit lrsquoeffort demandeacuteaux utilisateurs par ce systegraveme de compleacutetion

E(CQ σ) =

NQsumi=1

wiMprime(qi S(σ))

Deacuteterminer le meilleur systegraveme de compleacutetion revient agrave trouver la permutation σ qui minimise E(CQ σ)

La meacutetrique M prime peut ecirctre remplaceacutee par Mrdquo La diffeacuterence peut paraicirctre insignifiante mais elle ne lrsquoest pas tant queccedila Le systegraveme de compleacutetion peut se concevoir comme une compression le systegraveme de compleacutetion permet de coderlrsquoensemble des recherches drsquoun utilisateur Q avec moins de caractegraveres que celui-ci en a besoin pour les taper Onajoute les caractegraveres rightarrow et darr aux lettres de lrsquoalphabet et cela permet de coder plus rapidement une requecirctesLa quantiteacute suivante peut ecirctre consideacutereacutee comme le taux de compression

t(CQ σ) =E(CQ σ)sumNQ

i=1 wil(qi)

Lrsquoideacutee derriegravere cette meacutetaphore est le fait drsquoavoir une ideacutee de la borne infeacuterieure pour ce taux de compression Onsrsquoinspirer de la complexiteacute de Lempel-Ziv199 (calculating Lempel-Ziv (LZ) complexity (aka sequence complexity) of

199 httpsfrwikipediaorgwikiComplexitC3A9_de_Lempel-Ziv

212 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

a binary string200) ou du codage de Huffman201 M prime permet une compression avec perte et Mrdquo sans perte Le calculde M prime autorise deux jumps de suite

abb(darrdarrdarrdarrdarr)

Mais les deux derniegraveres touches darr peuvent srsquoappliquer au premier preacutefixe ou aux suggestions montreacutees par la compleacutetionobtenue apregraves trois darr

abb(darrdarrdarr)(darrdarr)

La meacutetrique Mrdquo interdit ce cas

Enonceacute 2

Problegraveme P2 Optimiser un systegraveme de compleacutetion filtreacuteOn suppose que lrsquoensemble des compleacutetions C = cj est connu On souhaite ordonner cet ensemble pour obtenirlrsquoensemble ordonneacute des compleacutetions S = (si) qursquoon considegravere comme une permutation σ de lrsquoensemble de deacutepart S(σ) = (si) = (cσ(j)) On utilise aussi une fonction f qui filtre les suggestions montreacutees agrave lrsquoutilisateur elle ne changepas lrsquoordre mais peut cacher certaines suggestions si elles ne sont pas pertinentes Ce systegraveme de compleacutetion est destineacuteagrave un des utilisateurs qui forment des recherches ou requecirctes Q = (qi wi)1⩽i⩽NQ

qi est la requecircte wi est la freacutequenceassocieacutee agrave cette requecircte On deacutefinit lrsquoeffort demandeacute aux utilisateurs par ce systegraveme de compleacutetion

E(CQ σ f) =

NQsumi=1

wiMprime(qi S(σ) f)

Deacuteterminer le meilleur systegraveme de compleacutetion revient agrave trouver la permutation σ qui minimise E(CQ σ f)

Comme suggeacutereacute au paragraphe Il faut montrer toutes les compleacutetions (page 205) le filtre f peut rejetter une suggestionsi elle est montreacutee agrave une position qui ne permet aucun gain agrave lrsquoutilisateur crsquoest-agrave-dire que la diffeacuterence des longueurscompleacutetion - preacutefixe est plus petite que la position ougrave elle est montreacutee

Une ideacutee

On aimerait bien pouvoir trouver lrsquoordre optimal par morceau supposer que lrsquoordre optimal pour lrsquoensemble descompleacutetions correspond agrave lrsquoordre des compleacutetions sur un sous-ensemble partageant le mecircme preacutefixe

Lemme L1 Miquestet sous-ensembleOn suppose que la compleacutetion q est preacutefixe pour la requecircte qprime et σ(q) lt σ(qprime) ce qui signifie que la compleacutetionq est toujours afficheacutee avant la compleacutetion qprime si elles apparaissent ensemble Alors M prime(q S) lt M prime(qprime S) Plusspeacutecifiquement si on considegravere lrsquoensemble Sprime(q) = sminus q isin S|q ≺ s (sminus q est la compleacutetion s sans son preacutefixe q)

M prime(qprime S) = M prime(qprime minus q Sprime) +M prime(q S)

On sait deacutejagrave par construction que M prime(qprime S) ⩽ M prime(qprimeminusq Sprime)+M prime(q S) Par lrsquoabsurde on suppose que M prime(qprime S) ltM prime(qprimeminusq Sprime)+M prime(q S) comme la requecircte qminusqprime est toujours afficheacutee avant la requecircte qprime cela voudrait dire qursquoon auraittrouveacute une faccedilon plus optimale drsquoeacutecrire la requecircte qminus qprime avec le systegraveme S ce qui impossible drsquoapregraves la deacutefinition de lameacutetrique M prime Cette proprieacuteteacute nrsquoaide pas forcmeacutement agrave trouver un algorithme pour optimiser lrsquoordre des compleacutetionsdans la mesure ougrave la proprieacuteteacute suppose qursquoune compleacutetion soit afficheacute avant toutes celles dont elle est le preacutefixe La

200 httpstackoverflowcomquestions4946695calculating-lempel-ziv-lz-complexity-aka-sequence-complexity-of-a-binary-str201 httpsfrwikipediaorgwikiCodage_de_Huffman

51 Compleacutetion 213

Machine Learning Statistiques et Programmation Version 035930

proprieacuteteacute suivante est eacutevidemment vraie pour le cas particulier qursquoon vient de mentionner Si elle est vraie cela devraitpermettre de proceacuteder par sous-ensemble pour trouver lrsquoordre optimal

Theacuteoregraveme T1 Miquest ordre et sous-ensembleSoit q une requecircte de lrsquoensemble de compleacutetion S ordonneacutees selon sigma Si cet ordre veacuterifie

forallk σ(q[1k]) ⩽ σ(q[1k + 1]) (53)

On note lrsquoensemble Sprime(q[1k]) = q[k + 1len(q)] isin S alors

forallk M prime(q[1k] S) = M prime(q[k + 1l(q)] Sprime(q[1k]) +M prime(q[1k] S)

Ceci deacutecoule de lrsquoapplication du lemme preacuteceacutedent Ce theacuteoregraveme permet presque de deacuteterminer le meilleur ordre sigmaparmi ceux qui veacuterifie la contrainte (53) agrave savoir une requecircte courte est toujours afficheacutee avant celles qui la complegravetentOn procegravede par reacutecurrence on suppose connu les ordres σ(q) pour lrsquoensemble des compleacutetions qui commencent par lepreacutefixe p = q[1k] Sprime(q[1k]) = q|q[1k] = p q isin S Pour i = kminus 1 le meilleur ordre σ revient agrave fusionner leslistes ordonneacutees obtenues pour chaque preacutefixe de longueur k Il faut deacutemontrer la possibiliteacute de traiter les compleacutetionspar ordre croissant

516 Impleacutementation

bull Notion de trie (page 214)bull Algorithme eacuteleacutegant (page 215)

Jrsquoallais vous raconter en deacutetail ce qursquoest un trie202 et le paragraphe suivant vous en dira sans doute un peu plus agrave cesujet Le trie203 est le moyen le plus efficace de trouver un mot aleacuteatoire ou un preacutefixe aleacuteatoire dans une liste Mais il ya mieux et plus simple dans notre cas ougrave il faut trouver une longue liste de mots connue agrave lrsquoavance - donc pas aleacuteatoire- Et puis crsquoeacutetait sous mes yeux Il y a plus simple et aussi efficace quand les listes des mots et des compleacutetions sontconnues agrave lrsquoavance

Notion de trie

Une impleacutementation des tries est deacutecrites dans deux notebooks Arbre et Trie204 Les reacutesultats de ce chapitre onteacuteteacute produits avec le module completion et le notebook Compleacutetion (page 370) Le notebook Completion profiling(page 363) montre les reacutesultats du profiling Lrsquoimpleacutementation Python est tregraves gourmande en meacutemoire et elle seraitplus efficace en C++utilisation ou rechercheCrsquoest diffeacuterent de construire toutes les compleacutetions pour un preacutefixe plutocirct que toutes les compleacutetions pour tous lespreacutefixes Le premier cas correspond agrave un utilisateur qui cherche quelque chose Il faut ecirctre rapide quitte agrave retourner unreacutesultat tronqueacuteLe second cas correspond agrave objectif de recherche des drsquooptimisation Les enjeux sont plus de reacuteussir agrave calculer toutesles compleacutetions en un temps raisonnable et avec une utilisation meacutemoire raisonnable eacutegalementmeacutemoireDrsquoapregraves la remarque preacuteceacutedente il nrsquoest pas utile de conserver pour un preacutefixe donneacute lrsquointeacutegraliteacute des compleacutetions quicommencent par ce preacutefixe Dans le pire des cas cette liste a besoin de contenir autant de compleacutetions que le nombrede caractegraveres de la plus longue compleacutetioms

202 httpsfrwikipediaorgwikiTrie_(informatique)203 httpsfrwikipediaorgwikiTrie_(informatique)204 httpwwwxavierduprefrappensae_teaching_cshelpsphinxnotebooks_gs1a_A_arbre_triehtml

214 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

Algorithme eacuteleacutegant

Il faut relire le premier problegraveme diquestoptimisation (page 212) pour commencer agrave se poser la question comment calculerla quantiteacute E(CC σ) lorsque σ correspond agrave lrsquoordre alphabeacutetique La reacuteponse est simple il suffit de parcourir lescompleacutetions une et une seule fois Supposons qursquoau cours de ce parcours on est agrave la compleacutetion drsquoindice i On conserveun compteur p(k i) = K(c(i) k C) qui repreacutesente la position de la compleacutetion c(i) dans la liste des compleacutetionsafficheacutees par le systegraveme de compleacutetion pour le preacutefixe c(i)[[1k]] Le coucirct de lrsquoalgorithme est en O(N lnN +LN) ougraveN est le nombre de compleacutetions et L la longueur maximale drsquoune compleacutetionDans le cas ougrave σ est quelconque et C = Q on procegravede en deux eacutetapes Dans un premier temps on utilise une variantede lrsquoalgorithme preacuteceacutedent pour calculer M prime(q C) pour les requecirctes q dans lrsquoensemble des compleacutetionsDans un second temps on effectue une sorte de fusion entre les deux listes trieacutees alphabeacutetiquement Le coucirct delrsquoalgorithme est en O(ILN + 2N lnN +M lnM +max(NM)) ougrave M est le nombre de requecirctes dans lrsquoensembleQ Cette partie repose sur le lemme (page 211) lieacute au calcul des meacutetriques pour les reacutequecirctes hors de lrsquoensembledes compleacutetions I est un nombre drsquoiteacuteration neacutecessaires pour que les meacutetriques M prime convergent pour lrsquoensemble descompleacutetions En pratique crsquoest tregraves petitLrsquoalgorithme est impleacutementeacute dans le module completion_simple et plus particuliegraverement la fonctionCompletionSystemcompute_metrics

517 Digressions

bull Synonymes Contexte (page 215)bull Source (page 216)bull Fonction de gain (page 216)bull Minuscules majuscules (page 216)bull Suppression de caractegraveres (page 216)bull Coucirct drsquoun caractegravere (page 216)bull Compleacutetion partielle (page 216)bull Utilisateurs (page 217)bull Revenir en arriegravere (page 217)

Synonymes Contexte

On utilise dabord les preacutefixes pour chercher les mots dans un trie mails il est tout agrave fait possible de consideacuterer dessynonymes Avec les preacutefixes un noeud a au plus 27 (26 lettres + espaces) caractegraveres suivant possibles Si le preacutefixea des synonymes rien nrsquoempecircche de relier ce noeud avec les successeurs de ses synonymes A ce sujet voir Context-Sensitive Query Auto-Completion205 de Ziv Bar-Yossef et Naama Kraus

205 httptechnionacil~nkrauspapersfr332-bar-yossefpdf

51 Compleacutetion 215

Machine Learning Statistiques et Programmation Version 035930

Source

Dans le cas drsquoun moteur de recherche le trie ou lrsquoensemble S des requecirctes complegravetes est construit agrave partir des requecirctesdes utilisateurs Lorsque le systegraveme de compleacutetion est mise en place la distribution des requecirctes changent Les requecirctesles plus utiliseacutees vont ecirctre encore plus utiliseacutees car les utilisateurs vont moins srsquoeacutegarer en chemin comme srsquoeacutegarer versune faute drsquoorthographe Comment corriger la distribution des requecirctes malgreacute lrsquointervention du systegraveme de compleacutetion Cela pourrait faire lrsquoobjet drsquoun sujet de recherche

Fonction de gain

Jusqursquoagrave preacutesent on a consideacutereacute uniquement le nombre de caractegraveres eacuteconomiseacutes pour deacuteterminer le meilleur ordreRien nrsquoempecircche drsquoajouter une coucirct suppleacutemenaires lieacute agrave lrsquoordre des compleacutetions Une requecircte est peacutenaliseacutee si lescompleacutetions associeacutees sont loin de lrsquoordre alphabeacutetique On peut peacutenaliser un ordre eacuteloigneacute agrave chaque caractegravere ajouteacute

Minuscules majuscules

Crsquoest bien connu on fait peu de ces des accents sur internet De fait mecircme si lrsquoaccent apparaicirct agrave lrsquoeacutecran le systegravemede compleacutetion verra peut de diffeacuterences entre le e et eacute Sur Wikpeacutedia les homonymes sont distingueacutes par un sous-titreentre parenthegravese lrsquoanneacutee pour un eacuteveacutenement sportif reacutegulier On peut imaginer que plusieurs seacutequences de caractegraveresaboutissent agrave la mecircme entreacutee

Suppression de caractegraveres

Nous pourrions consideacuterer le fait de pouvoir supprimer des caractegraveres afin de trouver le chemmin le plus court pourobtenir une requecircte

Coucirct drsquoun caractegravere

Jusqursquoagrave preacutesent la pression drsquoune touche a le mecircme coucirct quelque soit la source un caractegravere une touche vers le basPourtant plus il y a de lettres dans lrsquoalphabet plus le systegraveme de compleacutetion sera performant agrave supposer que les motssoient plus ou moins eacutequireacutepartis selon les caractegraveres (la probabiliteacute du prochain caractegravere est uniforme) On peutconcevoir que chercher une touche lorsque lrsquoalphabet est grand peut prendre un certain temps Le cas du chinois estinteacuteressant car la saisie des caractegraveres206 peut prendre plusieurs touches Faut-il consideacuterer un caractegravere chinois commeuniteacute de deacutecomposition drsquoun mot ougrave la seacutequence des touches qui le construisent Dans le premier cas il faudrait sansdoute peacutenaliser la saisie drsquoun caractegravere en fonction du nombre de touches neacutecessaires pour le former par rapport agrave laseacutelection drsquoune compleacutetion

Compleacutetion partielle

On rappelle la meacutetrique (513) (voir aussi (52))

M prime(q S) = min0⩽k⩽l(q)

M prime(q[1k] S) +K(q k S)

Si on note L(p S) lrsquoensemble des compleacutetions pour le preacutefixe p Que dire de la deacutefinition suivante

M primep(q S) = min

0⩽k⩽l(q)

11L(q[1k]S)=empty

[M prime

p(q[1k] S) +K(q k S)]+

11L(q[1k]S)=empty[minj M

primep(q[1j] S) +M prime

p(q[j + 1] S)]

Cela revient agrave consideacuterer que si le systegraveme de compleacutetion ne propose aucune compleacutetion avec le preacutefixe en cours onpropose des compleacutetions avec un preacutefixe qui ne tient compte que des derniegraveres lettres

206 httpsfrwikipediaorgwikiSaisie_du_chinois_sur_ordinateur

216 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

Utilisateurs

La modeacutelisation matheacutematique aboutit agrave lrsquooptimisation drsquoune meacutetrique qui ne coiumlncide pas forceacutement agrave la logique delrsquoutilisateur Le fait de montrer une suggestion dans la liste donne en quelques sortes un signal qui indique que cetterequecircte a une bonne drsquoaboutir Crsquoest en particulier vrai si elle est identique agrave celle que lrsquoutilisateur est en train de saisirquand mecircme mecircme elle nrsquoaurait aucun sens La preacutesence drsquoune suggestion conforte lrsquoutilisateur dans le chemin qursquoilchoisitUn autre aspect est le fait qursquoune suggestion la premiegravere par exemple doit rester agrave lrsquoeacutecran si celle-ci inclut le preacutefixesaisit par lrsquoutilisateur Supposons que ce dernier saisisse fac le moteur de suggestions lui montrera en premier facebookIl faudra que facebook demeure en premiegravere position jusqursquoagrave ce lrsquoutilisateur ait soit cliqueacute dessus soit saisi quelquechose de plus long Enlever la suggestion facebook alors que le preacutefixe en cours est faceboo perturbe

Revenir en arriegravere

On pourrait eacutegalement imaginer une meacutetrique qui calcule le meilleur chemin en donnant la possibiliteacute de revenir enarriegravere Par exemple pour saisir eacuteleacutephant un utilisateur pourrait utiliser la suggestion eacuteleacutephants puis enlever le derniers On note la meacutetrique M prime

b

Deacutefinition D1 Dynamic Minimum Keystroke arriegravereOn deacutefinit la faccedilon optimale de saisir une requecircte sachant un systegraveme de compleacutetion S comme eacutetant le minimum obtenu

M primeb(q S) = min

min0⩽kltl(q) M prime

b(q[1k] S) + min(K(q k S) l(q)minus k)mins≻q M prime

b(s S) + l(s)minus l(q)

Le second terme de la meacutetrique neacutecessite de consideacuterer toutes les suggestions dans S qui commencent par le preacutefixe qLe calcul de la meacutetrique peut ecirctre fait en adaptant lrsquoalgorithme reprend les ideacutees du paragraphe Formalisation (page 208)mais il faudra parcourir les suggestions dans lrsquoordre alphabeacutetique puis mettre agrave jour la meacutetrique en les parcourant danslrsquoautre sens On recommence jusqursquoagrave convergenceNotebooks associeacutes

bull Compleacutetion (page 370)bull Completion profiling (page 363)bull Completion Trie and metrics (page 355)bull Compleacutetion Simple (page 376)

51 Compleacutetion 217

Machine Learning Statistiques et Programmation Version 035930

218 Chapter 5 NLP

CHAPTER 6

Meacutetriques

61 Courbe ROC

bull Deacutefinitions (page 220)bull Aire sous la courbe (page 222)

ndash Expression (page 222)ndash Intervalles de confiance (page 223)

bull Intervalles de confiance sur la courbe (page 224)ndash Construction de la courbe ROC (page 224)ndash Meacutethode boostrap (page 225)ndash Aire sous la courbe (page 226)

bull Distribution des scores mauvais et bons (page 226)bull Variantes (page 227)

ndash Taux de lecture ou de reconnaissance (page 227)bull Classification multi-classe (page 228)bull Exemple (page 229)

Ce document introduit la courbe ROC207 (Receiving Operator Characteristic) qui est communeacutement utiliseacutee pourmesurer la performance drsquoun classifieur Il introduit aussi des termes comme preacutecision rappel AUC208 qui sontpreacutesents dans la plupart des articles qui traitent de machine learning Le module roc impleacutemente les calculs ci-dessousqursquoon peut tester avec le notebook ROC (page 332)

207 httpsenwikipediaorgwikiReceiver_operating_characteristic208 httpsenwikipediaorgwikiReceiver_operating_characteristicArea_under_the_curve

219

Machine Learning Statistiques et Programmation Version 035930

611 Deacutefinitions

Supposons que nous avons un classifieur qui classe des observations en un ensemble de classes De plus il donne cettereacuteponse accompagneacutee drsquoun score de pertinence Deux cas sont possibles soit la reacuteponse est bonne (1) soit la reacuteponseest fausse (0) Pour chaque observation on associe un couple (r x) ougrave r est eacutegal agrave 0 ou 1 x est le score de pertinenceOn cherche agrave deacuteterminer agrave partir de quel seuil de pertinence la reacuteponse du classifieuur est fiable En faisant varier xon obtient une courbe (source wikipedia209)

Cette courbe sert eacutegalement agrave comparer diffeacuterents classifieurs Plus une courbe a des valeurs eacuteleveacutees plus lrsquoaire sousla courbe est grande moins le classifieur fait drsquoerreurDrsquoune maniegravere simplifieacutee le classifieur retourne une reacuteponse qui est soit mauvaise (-) soit bonne (+) On peut lrsquoeacutevaluercar pour construire un classifier on dispose toujours drsquoune base contenant les reacuteponses attendues En fonction du scorex et drsquoun seuil s on deacutefinit quatre cas

cas reacuteponse preacutedite est bonne (+) reacuteponse preacutedite est mauvaise (-)x ⩾ s TP vrai (true) positif FP faux positifx lt s TN vrai (true) neacutegatif FN faux neacutegatif

Ces reacutesultats sont souvent preacutesenteacutes selon une matrice confusion

reacuteponse attendue 0 10 TN FP1 FN TP

A partir de ces deacutefinitions on deacutefinit bull la preacutecision210 TP

TP+FP

bull le rappel ou recall211 TPTP+TN

En choisissant un seuil relatif au score de pertinence x au-dessus on valide la reacuteponse du classifieur en-dessous onne la valide pas On peut toujours calculer la preacutecision et le rappel pour toutes les reacuteponses dont le score est au-dessusdrsquoun seuil s La courbe ROC srsquoobtient en faisant varier s

209 httpenwikipediaorgwikiFileRoccurvespng210 httpsenwikipediaorgwikiInformation_retrievalPrecision211 httpsenwikipediaorgwikiInformation_retrievalRecall

220 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

Deacutefinition D1 Courbe ROCOn suppose que Y est la variable aleacuteatoire des scores des expeacuteriences qui ont reacuteussi X est celle des scores desexpeacuteriences qui ont eacutechoueacute On suppose eacutegalement que tous les scores sont indeacutependants On note FY et FX lesfonctions de reacutepartition de ces variables FY (s) = P (Y ⩽ s) et FX(s) = P (X ⩽ s) On deacutefinit en fonction drsquounseuil s isin R

bull R(s) = 1minus FY (s) = P (Y gt s)

bull E(s) = 1minus FX(s) = P (X gt s)

La courbe ROC est le graphe (E(s) R(s)) lorsque s varie dans R

TP (s) deacutesigne les true positifs au-dessus du seuil s avec les notations TP FP FN TN cela revient agrave

E(s) = 1minus TP (s)

TP (s) + TN(s)

R(s) = 1minus FN(s)

FP (s) + FN(s)

On remarque que foralls TP (s) + TN(s) est constant De mecircme pour FP (s) + FN(s)

On remarque que les fonctions s minusrarr E(s) et s minusrarr R(s) sont deacutecroissantes toutes deux Elles sont donc inversiblesDans le cas ougrave la variable aleacuteatoire θ est indeacutependante de la variable X la courbe ROC est une droite reliant les points(0 0) et (1minus p p) ougrave p = P (θ = 1) Ceci signifie que la connaissance du score X nrsquoapporte pas drsquoinformation quantagrave la reacuteussite de lrsquoexpeacuterienceIl peut paraicirctre complexe de distinguer la reacuteponse et le score du classifieur Crsquoest pourtant neacutecessaire dans le cas ougravele classifieur retourne un entier qui deacutesigne une classe parmi n Un cas positif est lorsque la classe preacutedite est eacutegale agravela classe attendue il est neacutegatif dans le cas contraire La courbe peut ecirctre adapteacutee pour drsquoautres problegravemes tels que leranking (voir [Agarwal2005])

61 Courbe ROC 221

Machine Learning Statistiques et Programmation Version 035930

Une autre faccedilon de lrsquoexprimer car je ne retiens jamais la deacutefinition des FP TP FN TN Pour quelqursquoun qui doitreacutefleacutechir trois secondes agrave chaque fois qursquoon me demande ougrave est la gauche ce nrsquoest jamais eacutevident

N+ =sumn

i=1 11yi==1TPR(s) = 1

N+

sumni=1 11score(Xi)⩾s11yi==1

FPR(s) = 11minusN+

sumni=1 11score(Xi)⩾s11yi =1

x = FPR(s) y = TPR(s) (FPR = False Positive Rate TPR = True Positive Rate)

612 Aire sous la courbe

Expression

Lrsquoaire sous la courbe (AUC) correspond agrave lrsquointeacutegrale de la fonction ROC Elle se calcule agrave partir du theacuteoregraveme suivant

Theacuteoregraveme T1 Aire sous la courbe (AUC)On utilise les notations de la deacutefinition de la Courbe ROC (page 221) Lrsquoaire sous la courbe ROC est eacutegale agrave P (Y gt X)

RappelSoit X une variable aleacuteatoire de densiteacute f et de fonction de reacutepartition F Si U = F (X) alors

P (U ⩽ t) = P (F (X) ⩽ t) = P(X ⩽ Fminus1(t)

)= F

(Fminus1(t)

)= t

La variable U est de loi uniforme sur [0 1] De plus soit g une fonction inteacutegrable quelconque on pose u = F (x) et intRg(x) f(x) dx =

int[01]

g(Fminus1(u)) du

DeacutemonstrationOn note fX la densiteacute de la variable X et fY celle de la variable Y On peut alors deacutefinir la probabiliteacute P (Y gt X) parune inteacutegrale

P (Y gt X) =

intx

inty

fX(x) fY (y) 11ygtxdxdy

On note FX la fonction de reacutepartition de X soit FX(x) =int x

minusinfin fX(u)du On pose comme changement de variable u = FX(x) On en deacuteduit que du = fX(x)dx La variable aleacuteatoire U = FX(X) est uniforme et comprise dans [0 1]

P (Y gt X) =

intx

fX(x)dx

inty

fY (y) 11ygtxdy

=

intu

du

inty

fY (y) 11ygtFminus1X (u)dy

=

intu

du P(Y gt Fminus1

X (u))

222 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

Or si u = FX(s) = E(s) alors Fminus1X (u) = s et P

(Y gt Fminus1

X (u))= Rprime(s) Par conseacutequent

P (Y gt X) =

intu

du P(Y gt Fminus1

X (u))=

intu

du Rprime(Fminus1X (u))

Cette derniegravere expression est lrsquoaire rechercheacutee Ce theacuteoregraveme nous permet de deacutefinir un estimateur pour lrsquoaire sous lacourbe ROC agrave lrsquoaide des U-statistiques212 de Mann-Whitney213 (voir [Saporta1990])

Corollaire C1 Estimateur de lrsquoaire sous la courbe ROCOn dispose des scores (Y1 Yn) des expeacuteriences qui ont reacuteussi et (X1 Xm) les scores des expeacuteriences qui onteacutechoueacute On suppose eacutegalement que tous les scores sont indeacutependants Les scores (Yi) sont identiquement distribueacutesil en est de mecircme pour les scores (Xi) Un estimateur de lrsquoaire A sous la courbe ROCiquestest

A =1

nm

msumi=1

nsumj=1

(11YjgtXi +

1

211Yj=Xi

)(61)

DeacutemonstrationLa deacutemonstration est eacutevidente

E(A)=

1

nm

msumi=1

nsumj=1

(P (Yj gt Xi) +

1

2P (Xi = Yj)

)= P (Y gt X) +

1

2P (Y = X)

Dans le cas ougrave X ou Y sont continues P (X = Y ) = 0

Intervalles de confiance

Il est possible de deacuteterminer un intervalle de confiance pour cet estimateur Le theacuteoregraveme central limite nous permet dedire que cet estimateur tend vers une loi normale lorsque n et m tendent vers lrsquoinfini

Corollaire C2 Variance de lrsquoestimateur AUCOn note PX = P (X lt min Yi Yj) et PY = P (max Xi Xj lt Y ) Xi et Xj sont de mecircme loi que X Yi Yj

sont de mecircme loi que Y La variance de lrsquoestimateur A deacutefinie par (61) est

VA =A(1minus A)

nm

[1 + (nminus 1)

PY minus A2

A(1minus A)+ (mminus 1)

PX minus A2

A(1minus A)

]

DeacutemonstrationCette deacutemonstration nrsquoest vraie que dans le cas continu Par conseacutequent P (X = Y ) = 0 On calcule tout drsquoabordEA2 et on utilise le fait que VA = E

(A2)minus A2

A2 =1

n2m2

msumi=1

nsumj=1

11XiltYj

2

=1

n2m2

msumi=1

nsumj=1

msumk=1

nsuml=1

11XiltYj11XkltYl

A2 = 1n2m2

summi=1

sumnj=1 11XiltYj

+ 1n2m2

summi=1

sumnj=1

sumk =i 11XiltYj11XkltYj

+ 1n2m2

summi=1

sumnj=1

suml =j 11XiltYj11XiltYl

+ 1n2m2

summi=1

sumnj=1

sumk =i

suml =j 11XiltYj11XkltYl

212 httpsenwikipediaorgwikiU-statistic213 httpsfrwikipediaorgwikiTest_de_Wilcoxon-Mann-Whitney

61 Courbe ROC 223

Machine Learning Statistiques et Programmation Version 035930

On en deacuteduit que

EA2 =A

nm+

nminus 1

nmP (max Xi Xk lt Yj) +

mminus 1

nmP (Xi lt min Yj Yl) +

nmminus nminusmminus 1

nmA2

VA2 =1

nm

[A+ (nminus 1)PY + (mminus 1)PX minus (n+m+ 1)A2

]=

1

nm

[A+ (nminus 1)

(PY minus A2

)+ (mminus 1)

(PX minus A2

)+ A2

]On retrouve lrsquoexpression chercheacutee

613 Intervalles de confiance sur la courbe

Les systegravemes de reconnaissance sont souvent ajusteacutes de telle maniegravere que le taux drsquoerreur soit constant par exemple1 Crsquoest la proportion de documents reconnus qui deacutetermine la performance de ce systegraveme Lrsquoobjectif ce paragrapheest de deacuteterminer un intervalle de confiance du taux de reconnaissance pour un taux drsquoerreur fixeacute

Construction de la courbe ROC

Ce premier paragraphe deacutetaille la maniegravere dont est construite une courbe ROC (voir Courbe ROC (page 221))

Algorithme A1 Courbe ROCOn suppose qursquoon dispose drsquoun ensemble de points (Xi θi) isin Rtimes0 1 pour i isin 1 n X_i est le score obtenupour lrsquoexpeacuterience i theta_i vaut 1 si elle a reacuteussi et 0 si elle a eacutechoueacute On suppose eacutegalement que cette liste est trieacuteepar ordre croissant forall i X_i infegal X_i+1 On souhaite eacutegalement tracer k points sur la courbe on deacuteterminepour cela k seuils ensembles_1s_k deacutefinis par forallj sk = X j k

n

On construit ensuite les points (Rj Ej) deacutefinis par

Rj =1

n

nsumi=1

θi11Xi⩾sj et Ej =1

n

nsumi=1

(1minus θi) 11Xi⩾sj

La courbe ROC est composeacutee de lrsquoensemble ROC = (Ej Rj) |1 ⩽ j ⩽ k

Les deux suites (Rj)j et (Ej)j sont toutes les deux deacutecroissantes drsquoapregraves leur deacutefinition La courbe peut ecirctre renduecontinue par interpolation

Deacutefinition D2 taux de classification agrave erreur fixeOn cherche un taux de reconnaissance pour un taux drsquoerreur donneacute On dispose pour cela drsquoune courbe ROC obtenuepar lrsquoalgorithme de la courbe ROC (page 224) et deacutefinie par les points ROC = (ej rj) |1 ⩽ j ⩽ k On suppose icique (e1 r1) = (1 1) et (ek rk) = (0 ) Si ce nrsquoest pas le cas on ajoute ces valeurs agrave lrsquoensemble ROC Pour un taux drsquoerreur donneacute elowast on cherche jlowast tel que

ejlowast+1 ⩽ elowast ⩽ ejlowast

Le taux de reconnaissance ρ chercheacute est donneacute par

ρ =elowast minus xjlowast

xjlowast+1 minus xjlowast[rjlowast+1 minus rjlowast ] + rjlowast

Il ne reste plus qursquoagrave deacutetailler la meacutethode bootstrap

224 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

Meacutethode boostrap

Une seule courbe ROC ne permet drsquoobtenir qursquoun seul taux On cherche ici agrave construire plusieurs courbes ROC agravepartir de la mecircme expeacuterience de faccedilon agrave obtenir plusieurs taux de reconnaissance pour le mecircme taux drsquoerreur De cettemaniegravere il sera possible de deacuteterminer un intervalle de confiance On srsquoinspire pour cela des meacutethodes de bootstrap214

Algorithme A2 Courbe ROC meacutethode boostrapOn dispose toujours du nuage de points E = (Xi θi) isin Rtimes 0 1 avec i isin 1 n On choisit C isin N le nombrede courbes ROC qursquoon deacutesire tracer Pour chaque courbe c isin 1 C

bull On construit un nouvel ensemble (X primei θ

primei)1⩽i⩽n construit par un tirage aleacuteatoire dans lrsquoensemble E avec remise

bull Lrsquoalgorithme de la courbe ROC (page 224) permet de constuire la courbe RkOC

bull Lrsquoalgorithme de taux de classification agrave erreur fixe (page 224) permet ensuite de deacuteterminer un taux dereconnaissance ρk pour le taux drsquoerreur elowast

La liste (ρ1 ρC) est trieacutee par ordre croissant Les quantiles sont ensuite utiliseacutes pour deacuteterminer lrsquointervalle deconfiance [ρ1 ρ2] du taux de reconnaissance pour le taux drsquoerreur elowast de telle sorte que

P (ρ isin [ρ1 ρ2]) = 1minus α

On prend geacuteneacuteralement α = 005

Cet algorithme aboutit aux reacutesultats suivants

La premiegravere image est celle drsquoune courbe ROC (lrsquoaxe des abscisses est inverseacute) la seconde repreacutesente toutes cellesobtenues par la meacutethode bootstrap pour trois courbes La troisiegraveme image superpose cent courbes Moins il y a depoints pour estimer une partie de la courbe plus les courbes sont espaceacutees Ces courbes ont eacuteteacute construites avec 12000points Le taux de lecture pour 1 drsquoerreur est eacutegal agrave 6809 Lrsquointervalle de confiance agrave 95 est [6610 7016](construit avec 500 courbes) Moyenne (6825) et meacutediane (6812) sont sensiblement eacutegales au taux calculeacute sur lapremiegravere courbe construite sans tirage aleacuteatoire Lrsquoeacutecart-type est 1 10 cela donne un intervalle de confiance eacutequivalentau preacuteceacutedent si on considegravere que la moyenne des taux suit asymptotiquement une loi normale Cette expeacuterience a eacuteteacutereproduite plusieurs fois et ces bornes sont assez stables contrairement (pm 005 ) aux extremas (pm 1)

214 httpsfrwikipediaorgwikiBootstrap_(statistiques)

61 Courbe ROC 225

Machine Learning Statistiques et Programmation Version 035930

Aire sous la courbe

La meacutethode bootstrap peut elle aussi ecirctre appliqueacutee pour calculer un intervalle de confiance pour lrsquoaire sous la courbe(AUC)

Courbe ROC (lrsquoaxe des abscisse est inverseacute) obtenue pour 100 tirages aleacuteatoires Lrsquoaire sous la courbe est eacutegale agrave080 et lrsquointervalle de confiance agrave 95 mesureacutee par la meacutethode bootsrap est [079 080] Les extremas sont presqueidentiques agrave ces chiffres

614 Distribution des scores mauvais et bons

On appelle un mauvais score un score associeacute agrave un mauvais reacutesultat de mecircme un bon score est le score drsquoun bonreacutesultat Si le score est une probabiliteacute on srsquoattend agrave trouver les bons scores regroupeacutes autour de la valeur 1 Si le scoreest un mauvais score il devrait ecirctre plus proche de zeacutero La figure qui suit montre des distributions obtenues pour deuxproblegravemes diffeacuterents Dans les deux cas le but rechercheacute est la deacutetermination drsquoun seuil seacuteparant le score drsquoun bonreacutesultat de celui drsquoun mauvais reacutesultat Lorsque ceci nrsquoest pas possible le score ne peut correspondre agrave un quelconquecritegravere confiance

La premiegravere courbe montre deux distributions qui se chevauchent mecircme si les bons scores semblent plus concentreacutes

226 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

autour des grandes valeurs Le seconde courbe montre un problegraveme mieux seacuteparable Lrsquoexistence drsquoun seuil entre unbon et un mauvais score est plus plausible

615 Variantes

Taux de lecture ou de reconnaissance

Il nrsquoexiste pas une grande diffeacuterence lorsque le taux drsquoerreur est faible Le taux de lecture est simplement la proportionde documents pour lesquels le score est aussi drsquoun seuil s que la reacuteponse du classifieur soit bonne ou mauvaise Parexemple pour un taux de substitution de 1 si on a 70 en taux de lecture cela signifie que sur 100 documents lesystegraveme va en accepter 70 et parmi ces 70 1 seront mal traiteacutes Le taux de substitution est un taux drsquoerreur rapporteacuteagrave un taux de lecture donneacute Lrsquoinconveacutenient du taux de lecture rapporteacute au taux de substitution est que la meacutethodedeacuteveloppeacutee au paragraphe Intervalles de confiance sur la courbe (page 224) ne srsquoapplique plus aussi bien car pour untaux de substitution donneacute il peut exister plusieurs taux de lecture

La premiegravere image montre 5 courbes taux de lecture taux de substitutions Les courbes ne sont pas monotones etmontre qursquoil existe parfois plusieurs taux de lecture pour un mecircme taux de substitution Comme le calcul des intervallesde confiance fait intervenir une interpolation lineacuteaire lorsque les courbes sont trop cahotiques le calcul retourne desvaleurs faussesOn peut deacutemontrer que la courbe taux de lecture taux de substitution nrsquoest pas une courbe ni monotone ni inversiblePour cela on dispose drsquoune suite de couple (Xi θi) croissante selon les Xi θi vaut 1 si lrsquoexpeacuterience a reacuteussi 0 sinonPour un seuil donneacute s on note Eprime(s) le taux de substitution et Rprime(s) le taux de lecture on obtient

Rprime(s) =1

n

nsumi=1

11Xi⩾s

Eprime(s) =1

nRprime(s)

nsumi=1

(1minus θi) 11Xi⩾s

61 Courbe ROC 227

Machine Learning Statistiques et Programmation Version 035930

On eacutecrit diffeacuteremment ces expressions en supposant que Xi(s1)minus1 lt s1 ⩽ Xi(s1) math

Rprime(s1) =nminus i(s1)

n

Eprime(s1) =1

nminus i(s1)

nsumi=i(s1)

(1minus θi)

On suppose maintenant que Xi(s2)minus1 lt s2 ⩽ Xi(s2) math et i(s1) + 1 = i(s2)

Rprime(s2) =nminus i(s2)

nlt Rprime(s1)

Eprime(s2) =1

nminus i(s2)

nsumi=i(s2)

(1minus θi) =1

nminus i(s2)

nminus i(s1)

nminus i(s1)

minus (1minus θi(s1))+

nsumi=i(s1)

(1minus θi)

= minus

(1minus θi(s1)

)nminus i(s2)

+

sumni=i(s1)

(1minus θi)

nminus i(s1)

nminus i(s1)

nminus i(s2)= minus

(1minus θi(s1)

)nminus i(s2)

+ Eprime(s1)nminus i(s1)

nminus i(s2)

Si on suppose que θi(s1) = 1 autrement dit lrsquoexpeacuterience s1 a reacuteussi on en deacuteduit que

Eprime(s2) = Eprime(s1)nminus i(s1)

nminus i(s2)= Eprime(s1)

nminus i(s2) + 1

nminus i(s2)gt Eprime(s1)

En revanche si θi = 0

Eprime(s2) = Eprime(s1)

(1 +

1

nminus i(s2)

)minus 1

nminus i(s2)= Eprime(s1) +

E(s1)minus 1

nminus i(s2)lt Eprime(s1)

Il nrsquoexiste donc pas toujours une fonction f reliant Rprime(s) agrave Eprime(s) agrave moins de construire cette courbe de telle sorteqursquoelle soit monotone en ne choisissant qursquoune sous-suite (Eprime(Xi) R

prime(Xi))i qui veacuterifie cette hypothegravese

616 Classification multi-classe

Une courbe ROC se construit avec deux informations une reacuteponse binaire et un score Que signifie cette reacuteponsebinaire Elle peut ecirctre

1 Le fait que le preacutedicteur ait bien preacutedit une classe en particulier Le score associeacute est celui que le preacutedicteurdonne pour cette classe

2 Le fait que le preacutedicteur ait bien preacutedit crsquoest-agrave-dire que la reacuteponse binaire signifie que la classe preacutedite est laclasse attendue le score associeacute est celui de la classe preacutedite crsquoest-agrave-dire le score maximum obtenu pour lrsquounedes classes

Plus formellement le preacutedicteur retourne un vecteur Si qui contient les probabiliteacutes drsquoappartenance agrave toutes les classesaussi appeleacutees plus geacuteneacuteralement score de confiance ou juste score Si(c) est la probabiliteacute de preacutedire la classe c Laclasse attendue est noteacutee yi crsquoest celle que le preacutedicteur doit preacutedire Dans le premier cas on construit le couple (bi si)de telle sorte que

bi = 1 si yi = c sinon 0si = Si(c)

Dans le second cas bi = 1 si maxSi = Si(yi) sinon 0si = maxSi

Le premier cas correspond par exemple agrave des problegravemes de deacutetection de fraude215 Le second cas correspond agrave tauxde classification global La courbe ROC pour ce cas est en regravegle geacuteneacuteral moins bonne que la plupart des courbes ROCobtenues pour chacune des classes prise seacutepareacutement (voir Reacutegression logistique216)

215 httpsenwikipediaorgwikiPredictive_analyticsFraud_detection216 httpwwwxavierduprefrapppapierstathelpsphinxnotebookswines_colorhtml

228 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

617 Exemple

Voir ROC217

62 Confidence Interval and p-Value

bull Introduction (page 229)bull p-value (page 230)bull Significant difference between samples mean (page 230)bull Application on binomial variables (page 231)bull Estimate a p-value by using the distribution function (page 231)bull Correlated variables (page 232)bull Multiple comparisons problem (page 234)bull Algorithm Expectation-Maximization (page 235)bull Notebooks (page 235)bull Bibliographie (page 246)

This document explains the relationship between p-value and confidence intervals It goes on with the specific caseof a binamial law Assuming we want to determine whether or not two binomial laws are significantly different howmany observations we need to get the p-value under a given threshold

621 Introduction

The term p-value218 is very popular in the world of search engines I usually prefer confidence interval 95 I think itis easier to understand Plus because p-Value are real values we could be tempted to compare them and it is usuallywrong On the other hand it is more difficult to compare confidence intervals especially if they are related to completedifferent variables Their nature prevents you from doing that Howerver p-Values and confidence interval are similarthey tell you whether or not a metric difference is significantUsually it starts from a set of identically distributed random variables (Xi)1⩽i⩽N We then estimate the averageθN = 1

N

sumNi=1 Xi and we ask the question is θN null In others terms we want to know if the average is significantly

different from zero If the random variable X follows a random law which has a standard deviation we can use thecentral limit theorem219 which tells us

radicNθN minusrarr

NrarrinfinN (0 σ)

Not all of them have a standard deviation For example if X follows a Cauchy law220 EX2 simint

x2

1+x2 dx which doesnot exist This remark also concerns every distribution known as heavy tail distributionIf Y sim N (0 σ) then we have P (|Y | ⩽ 196) = 095 That is why we can say

θN is not null with 95 confidence ifradicN|θN |σ

gt 196

217 httpwwwxavierduprefrappensae_teaching_cshelpsphinxantisechesml_basicplot_regressionhtmlsphx-glr-antiseches-ml-basic-plot-roc-py218 httpsfrwikipediaorgwikiValeur_p219 httpsenwikipediaorgwikiCentral_limit_theorem220 httpsenwikipediaorgwikiCauchy_distribution

62 Confidence Interval and p-Value 229

Machine Learning Statistiques et Programmation Version 035930

And the confidence intervalle at 95 would be[minus196σradic

N196σradic

N

]When EθN = θ0 = 0 it becomes

radicN[θN minus θ0

]minusrarrNrarrinfin

N (0 σ)

We usually want to check if the mean is equal to a specific value using a statistical test

H0 θN = θ0

H1 θN = θ0

We validate H0 if

θN isin[θ0 minus

196σradicN

θ0 +196σradic

N

]

622 p-value

With confidence intervals you first choose a confidence level and then you get an interval You then check if your valueis inside or outside your interval Inside the gain is not significant outside it is

With a p-value we consider the problem the other way given θN what is the probability that the difference∣∣∣θN minus θ0

∣∣∣is significant Letrsquos consider Y following a normal law N (0 1) We are looking for

P

(|Y | gt

radicN|θN |σ

)= α

α is the p-value

α = 1minusint βN

minusβN

1radic2π

eminusx2

2 dx = 2

int infin

βN

1radic2π

eminusx2

2 dx

where βN =radicN|θN |σ

At this point we should not forget that we use a theorem which tells us thatradicN |θN |

σ sim N (0 1) when N rarrinfin whichmeans everything we said is true when N is great enough

623 Significant difference between samples mean

Usually we do not want to test if an average is null but if the difference between two averages is null We consider tworandom samples having the same size each of them described by (Xi) and (Yi) All variables are independant (Xi)are distributed according the same law we assume the same for (Yi) We expect the following difference to be null

ηN =1

N

Nsumi=1

Xi minus1

N

Nsumi=1

Yi =1

N

[Nsumi=1

Xi minus Yi

]Considering expression (623) we can applying the central limit theorem on variable Z = X minus Y we get (η0 = 0)

radicNηN minusrarr

NrarrinfinN

(η0

radicVZN

)If both samples do not have the same number of observations this expression becomes

radicNηN minusrarr

N1rarrinfinN2rarrinfinN1N2

rarrx

N

(η0

radicVXN1

+VYN2

)

230 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

624 Application on binomial variables

A binomial variable X sim B (p) is defined by

P (X = 0) = 1minus p

P (X = 1) = p

Letrsquos consider two series of observations (Xi) sim B (p) and (Yi) sim B (q) We assume p = q and we want to determinehow many observations we need to get a p-value below 5 We know that V (Xi) = p(1minus p) and V (Yi) = q(1minus q)Next table shows the values First column contains values for p first row contains values for qminus p We also assume wehave the same number N of random observations for each variable The statistical test cen be defined like following

H0 p = q = p0

H1 p = q

If H0 is true thenradicNθN minusrarr

NrarrinfinN(0radic

p0(1minus p0)

radic1

N1+

1

N2

)(62)

pd -0200 -0100 -0020 -0010 -0002 -0001 0001 0002 0010 0020 0100 0200005 913 3650 91235 364939 364939 91235 3650 913 37 10010 70 1729 6915 172866 691463 691463 172866 6915 1729 70 18015 98 2449 9796 244893 979572 979572 244893 9796 2449 98 25020 31 123 3074 12293 307317 1229267 1229267 307317 12293 3074 123 31025 37 145 3602 14406 360137 1440548 1440548 360137 14406 3602 145 37030 41 162 4034 16135 403354 1613413 1613413 403354 16135 4034 162 41035 44 175 4370 17479 436966 1747864 1747864 436966 17479 4370 175 44040 47 185 4610 18440 460976 1843901 1843901 460976 18440 4610 185 47045 48 191 4754 19016 475381 1901523 1901523 475381 19016 4754 191 48050 49 193 4802 19208 480183 1920730 1920730 480183 19208 4802 193 49055 48 191 4754 19016 475381 1901523 1901523 475381 19016 4754 191 48060 47 185 4610 18440 460976 1843901 1843901 460976 18440 4610 185 47065 44 175 4370 17479 436966 1747864 1747864 436966 17479 4370 175 44070 41 162 4034 16135 403354 1613413 1613413 403354 16135 4034 162 41075 37 145 3602 14406 360137 1440548 1440548 360137 14406 3602 145 37080 31 123 3074 12293 307317 1229267 1229267 307317 12293 3074 123 31085 25 98 2449 9796 244893 979572 979572 244893 9796 2449 98090 18 70 1729 6915 172866 691463 691463 172866 6915 1729 70095 10 37 913 3650 91235 364939 364939 91235 3650 913

Given a binomial law with parameter p and a difference d this table gives the number of observations needed on bothsides to get a significant difference assuming p is the expected pourcentage

625 Estimate a p-value by using the distribution function

Expression (622) gives a way to estimate the p-value Computing the integral is not always possible but there is a wayto do it using Monte Carlo method221 Letrsquos assume X sim N (0 1) We denote fX as the density function of X Wealso consider an interval I = [minusa a] Then we have f(a) = f(minusa) and

P (X isin I) = P (|X| ⩽ a) = P (f(X) ⩾ f(a))

This is true because f is decreasing for x gt 0 The p-value α for a estimator β using Monte Carlo method is

1

N

Nsumi=1

11f(Xi)ltf(β) minusrarr α (63)

221 httpsenwikipediaorgwikiMonte_Carlo_method

62 Confidence Interval and p-Value 231

Machine Learning Statistiques et Programmation Version 035930

Assuming every (Xi)i follows a normal law N (0 1)

626 Correlated variables

Letrsquos assume we now have a vector a correlated variables X = (X1 Xd) drawn following a law N (θ0Σ)The central limit theorem is still valid

radicNθN minusrarr

NrarrinfinN (θ0Σ)

We know estimators for the average and the covariance matrix defined as follows

θN =1

n

Nsumi=1

Xi

ΣN =1

n

Nsumi=1

(Xi minus θN )(Xi minus θN )prime

We usually want to check if

H0 θN = θ0

H1 θN = θ0

If Λ is diagonal matrix of Σ (diagonal matrix with eigen values) All eigen values are real and positive we then define

Σ = PΛP prime and Σ12 = PΛ

12P prime

We consider Zi = (Xi minus θN )Σminus 12 We then have EZi = 0 and VZi = I2 where I2 is the identity matrix We could

now consider each dimension of Zi independently as illustrated in next figure it shows the difference on an example

if we consider the correlation of two variables correlated such as Σ =

(01 005005 02

)

232 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

We assume we observe two Bernouilli222 variables correlated Red points represents the area for which we would accepthypothesis H0 in case both variables are independant Blue area represents the same but with the correlation But thatwould not be the best way to do it The confidence interval for a couple of indenpendant gaussian (N1 N2) variables isan ellipse Two independent normal variables N2

1 +N22 with a null mean and standard deviation equal to one follows

a χ2 law Based on that we can deduce a boundary for the confidence zone at 95 Next figure shows this zone for a

non-correlated couple and a correlated couple (Σ =

(01 005005 02

))

222 httpsenwikipediaorgwikiBernoulli_distribution

62 Confidence Interval and p-Value 233

Machine Learning Statistiques et Programmation Version 035930

We assume we observe two Bernouilli variables correlated Red points represents the area for which we would accepthypothesis H0 in case both variables are independant Blue area represents the same but with the correlation

627 Multiple comparisons problem

The problem of Multiple comparisons223 happens when dealing with many metrics measyring a change Thatrsquos allwaysthe case when two version of the sam websire are compared in a test AB224 The metrics are correlated but it is unlikelythat all metrics differences will be significant or not The HolmndashBonferroni method225 proposes a way to define anhypthesis on the top of the existing ones

223 httpsenwikipediaorgwikiMultiple_comparisons_problem224 httpsfrwikipediaorgwikiTest_AB225 httpsenwikipediaorgwikiHolmE28093Bonferroni_method

234 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

628 Algorithm Expectation-Maximization

We here assume there are two populations mixed defined by random variable C Letrsquos X be a mixture of two binomiallaws of parameters p and q It is for example the case for a series draws coming from two different coins

P (X) = P (X|C = a)P (C = a) + P (X|X = b)P (C = b)

The likelihood of a random sample (X1 Xn) the class we do not observe are (C1 Cn)

L(θ) =prodi

[pXi(1minus p)(1minusXi)π

]1minusCi[qXi(1minus q)(1minusXi)(1minus π)

]Ci

(64)

The parameters are θ = (π p q) We use an algorithm Expectation-Maximization (EM)226 to determine the parametersWe define at iteration t

wi = ECi|Xiθt (Xi)

=pXit (1minus pt)

1minusXiπt

pXit (1minus pt)1minusXiπt + qXi

t (1minus qt)1minusXi(1minus πt)

We then update the parameters

π =1

n

nsumi=1

wi

p =

sumni=1 wiXisumni=1 wi

q =

sumni=1(1minus wi)Xisumni=1(1minus wi)

See also Applying the EM Algorithm Binomial Mixtures227

629 Notebooks

The following notebook produces the figures displayed in this document

p-values

Compute p-values and heavy tails estimators

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull p-value table (page 236)bull p-values in 2D (page 237)bull p-value ratio (page 239)bull p-values and EM (page 240)bull p-value and heavy tail (page 243)

226 httpsenwikipediaorgwikiExpectationE28093maximization_algorithm227 httpstatisticalrecipesblogspotfr201204applying-em-algorithm-binomial-mixtureshtml

62 Confidence Interval and p-Value 235

Machine Learning Statistiques et Programmation Version 035930

matplotlib inline

p-value table

from scipystats import normimport pandasfrom pandas import DataFrameimport numpy

def pvalue(p q N)theta = abs(p-q)var = p(1-p)bn = (2N)05 theta var05ret = (1 - normcdf(bn))2return ret

def pvalue_N(p q alpha)theta = abs(p-q)var = p(1-p)rev = abs(normppf (alpha2))N = 2 (rev var05 theta) 2return int(N+1)

def alphatable(ps dps alpha)values = []for p in ps

row=[]for dp in dps

q = p+dpr = pvalue_N(pqalpha) if 1 gt= q gt= 0 else numpynanrowappend (r)

valuesappend (row)return values

def dataframe(psdpstable)columns = dpsdf = pandasDataFrame(data=table index=ps)dfcolumns = dpsreturn df

print (normppf(0025)normppf (0025)) -19599639845400545ps = [0001 0002] + [ 005i for i in range (120) ]dps = [ -02 -01 -002 -001 -0002 -0001

02 01 002 001 0002 0001 ]dpssort()t = alphatable(ps dps 005)dataframe (ps dps t)

236 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

normppf(0025) -19599639845400545

p-values in 2D

import numpy matplotlib random mathimport matplotlibpyplot as pylab

def matrix_square_root(sigma) eigen vect = numpylinalgeig(sigma)dim = len(sigma)res = numpyidentity(dim)for i in range(0dim)

res[ii] = eigen[i]05return vect res vecttranspose()

def chi2_level (alpha = 095) N = 1000x = [ randomgauss(01) for _ in range(0N) ]y = [ randomgauss(01) for _ in range(0N) ]r = map ( lambda c (c[0]2+c[1]2)05 zip(xy))r = list(r)rsort()res = r [ int (alpha N) ]return res

def square_figure(mat a) x = [ ]y = [ ]for i in range (0100)

xappend( a mat[0][0]05 )yappend( (randomrandom ()-05) a mat[1][1]052 )xappend( -a mat[0][0]05 )yappend( (randomrandom ()-05) a mat[1][1]052 )

yappend( a mat[1][1]05 )xappend( (randomrandom ()-05) a mat[0][0]052 )yappend( -a mat[1][1]05 )xappend( (randomrandom ()-05) a mat[0][0]052 )

pylabplot(xy ro)

x = [ ]y = [ ]for i in range (0100)

xappend( a )yappend( (randomrandom ()-05) a2 )xappend( -a )yappend( (randomrandom ()-05) a2 )

yappend( a )(suite sur la page suivante)

62 Confidence Interval and p-Value 237

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

xappend( (randomrandom ()-05) a2 )yappend( -a )xappend( (randomrandom ()-05) a2 )

xsys = [][]for ab in zip (xy)

ar = numpymatrix( [ [a] [b] ] )transpose()we = ar rootxsappend( we [00] )ysappend( we [01] )

pylabplot(xsys bo)pylabshow()

def circle_figure (mat a) x = [ ]y = [ ]for i in range (0200)

z = randomrandom() mathpi 2i = a mat[0][0]05 mathcos(z)j = a mat[0][0]05 mathsin(z)xappend ( i )yappend ( j )

pylabplot(xy ro)

x = [ ]y = [ ]for i in range (0200)

z = randomrandom() mathpi 2i = a mathcos(z)j = a mathsin(z)xappend ( i )yappend ( j )

xsys = [][]for ab in zip (xy)

ar = numpymatrix( [ [a] [b] ] )transpose()we = ar rootxsappend( we [00] )ysappend( we [01] )

pylabplot(xsys bo)pylabshow()

level = chi2_level ()mat = [ [01 005] [005 02] ]npmat = numpymatrix(mat)root = matrix_square_root (npmat)square_figure (mat 196)circle_figure (mat level)

238 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

p-value ratio

import random math

def densite_gauss (mu sigma x) e = -(x - mu)2 (sigma2 2)d = 1 ((2mathpi)05 sigma)return d mathexp (e)

(suite sur la page suivante)

62 Confidence Interval and p-Value 239

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

def simulation_vector (N mu sigma) return [ randomgauss(musigma) for n in range(N) ]

def ratio (vector x fdensite) under = 0above = 0fx = fdensite(x)for u in vector

f = fdensite (u)if f gt= fx

above += 1else

under += 1return float(above) float (above + under)

x = 196N = 10000mu = 0sigma = 1

v = simulation_vector(N mu sigma)g = ratio(v x lambda y densite_gauss (mu sigma y) )print (g)

09487

p-values and EM

See Applying the EM Algorithm Binomial Mixtures228

from scipystats import normimport random math

def average_std_deviation(sample)mean = 0var = 0for x in sample

mean += xvar += xx

mean = len(sample)var = len(sample)var -= meanmeanreturn meanvar 05

def bootsample(sample)n = len(sample)-1return [ sample[ randomrandint(0n) ] for _ in sample ]

(suite sur la page suivante)

228 httpstatisticalrecipesblogspotfr201204applying-em-algorithm-binomial-mixtureshtml

240 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

def bootstrap_difference(sampleX sampleY draws=2000 confidence=005)diff = [ ]for n in range (0draws)

if n 1000 == 0print(n)

sx = bootsample(sampleX)sy = bootsample(sampleY)px = sum(sx) 10 len(sx)py = sum(sy) 10 len(sy)diffappend (px-py)

diffsort()n = int(len(diff) confidence 2)av = sum(diff) len(diff)return av diff [n] diff [len(diff)-n]

generation of a sample

def generate_obs(p)x = randomrandom()if x lt= p return 1else return 0

def generate_n_obs(p n)return [ generate_obs(p) for i in range (0n) ]

std deviation

def diff_std_deviation(px py)s = px(1-px) + py(1-py)return px py s05

def pvalue(diff std N)theta = abs(diff)bn = (2N)05 theta stdpv = (1 - normcdf(bn))2return pv

def omega_i (X pi p q) np = p pi if X == 1 else (1-p)pinq = q (1-pi) if X == 1 else (1-q)(1-pi)return np (np + nq)

def likelihood (X pi p q) np = p pi if X == 1 else (1-p)pinq = q (1-pi) if X == 1 else (1-q)(1-pi)return mathlog(np) + mathlog(nq)

def algoEM (sample)p = randomrandom()q = randomrandom()pi = randomrandom()iter = 0

(suite sur la page suivante)

62 Confidence Interval and p-Value 241

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

while iter lt 10 lk = sum ( [ likelihood (x pi p q) for x in sample ] )wi = [ omega_i (x pi p q) for x in sample ]sw = sum(wi)pin = sum(wi) len(wi)pn = sum([ x w for xw in zip (samplewi) ]) swqn = sum([ x (1-w) for xw in zip (samplewi) ]) (len(wi) - sw)

pipq = pinpnqniter += 1

lk = sum ( [ likelihood (x pi p q) for x in sample ] )return pipq lk

mixpq = 020 080pi = 07N = 1000na = int(N pi)nb = N - na

print(------- sample)sampleX = generate_n_obs(p na) + generate_n_obs (q nb)randomshuffle(sampleX)print(ave p pi + q(1-pi))print(mea sum(sampleX)1len(sampleX))

lk = sum ( [ likelihood (x pi p q) for x in sampleX ] )print (min lk lk sum (sampleX)1 len(sampleX))res = []for k in range (0 10)

r = algoEM (sampleX)resappend ( (r[-1] r) )

ressort ()

rows = []for r in res

pipqlk = r[1]rowsappend( [p pi + q(1-pi)] + list(r[1]))

df = pandasDataFrame(data=rows)dfcolumns = [average pi p q likelihood]df

------- sampleave 038mea 0373min lk -33932292120130046 0373

242 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

p-value and heavy tail

from scipystats import norm zipfimport sys

def generate_n_obs_zipf (tail_index n) return list(zipfrvs(tail_index size=n))

def hill_estimator (sample) sample = list(sample)samplesort(reverse=True)end = len(sample)10end = min(end100)s = 0res = []for k in range (0end)

s += mathlog(sample[k])h = (s - (k+1)mathlog(sample[k+1]))(k+1)h = 1hresappend( [k h] )

return res

mixtail_index = 105N = 10000

sample = generate_n_obs_zipf(tail_index N)sample[5]

[357621 148 18 1812876449 36150]

import pandas

def graph_XY(curves xlabel=None ylabel=None marker=Truelink_point=False title=None format_date=Y-m-dlegend_loc=0 figsize=None ax=None)

if ax is Noneimport matplotlibpyplot as plt pylint disable=C0415fig ax = pltsubplots(1 1 figsize=figsize)

smarker = (True True) o- (True False) o (False True) - (False False) [marker link_point]

has_date = Falsefor xf yf label in curves

axplot(xf yf smarker label=label)axlegend(loc=legend_loc)return ax

(suite sur la page suivante)

62 Confidence Interval and p-Value 243

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

def draw_variance(sample) avg = 0std = 0n = 0w = 1add = []for ix in enumerate(sample)

x = float (x)avg += x wstd += xx wn += wval = (stdn - (avgn)2)05addappend ( [ i avgn val] )

print(add[-1])table = pandasDataFrame(add columns=[index avg(n) std(n)])return graph_XY([

[table[index] table[avg(n)] avg(n)][table[index] table[std(n)] std(n)]

] marker=False link_point=True)

draw_variance(sample)

[9999 551868710339 23334255446156308]

def draw_hill_estimator (sample) res = hill_estimator(sample)table = DataFrame(res columns=[d hill])return graph_XY(

(suite sur la page suivante)

244 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

[[table[d] table[hill] Hill]]marker=False link_point=True)

draw_hill_estimator(sample)

def draw_heavy_tail (sample) table = DataFrame([[_] for _ in sample ] columns=[obs])std = 1

normal = normrvs(size = len(sample))normal = [ xstd for x in normal ]nortbl = DataFrame([ [_] for _ in normal ] columns=[obs])nortbl[iobs] = (nortbl[obs] 10)astype(numpyint64)

histon = nortbl[[iobs obs]]groupby(iobs as_index=False)count()histoncolumns = [iobs nb]histon = histonsort_values(nb ascending=False)reset_index(drop=True)

table[one] = 1histo = tablegroupby(obs as_index=False)count()histocolumns = [obs nb]histo = histosort_values(nb ascending=False)reset_index(drop=True)historeset_index(drop=True inplace=True)histo[index] = histoindex + 1

vec = list(histon[nb])vec += [0] len(histo)histo[nb_normal] = vec[len(histo)]

histo[log(index)] = numpylog(histo[index]) numpylog(10)(suite sur la page suivante)

62 Confidence Interval and p-Value 245

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

histo[log(nb)] = numpylog(histo[nb]) numpylog(10)histo[log(nb_normal)] = numpylog(histo[nb_normal]) numpylog(10)return graph_XY ([

[histo[log(index)] histo[log(nb)] Zipf][histo[log(index)] histo[log(nb_normal)] Gauss] ]

marker=False link_point=True)

draw_heavy_tail(sample)

cpython372_x64libsite-packagespandascoreseriespy679 RuntimeWarning divide by zerorarrencountered in logresult = getattr(ufunc method)(inputs kwargs)

6210 Bibliographie

bull p-Value and Statistical Practice229

bull An investigation of the false discovery rate and the misinterpretation of p-values230

bull HolmndashBonferroni method231

229 httpwwwstatcolumbiaedu~gelmanresearchpublishedpvalues3pdf230 httprsosroyalsocietypublishingorgcontentroyopensci13140216fullpdf231 httpsenwikipediaorgwikiHolmE28093Bonferroni_method

246 Chapter 6 Meacutetriques

CHAPTER 7

Algorithmes

Le machine learning propose un grand nombre de modegraveles pour des problegravemes standardiseacutes Au delagrave il faut savoir ecirctreinventifs crsquoest-agrave-dire la grande majoriteacute des cas

71 Distance drsquoeacutedition

Les distances drsquoeacutedition permettent de comparer deux mots entre eux ou plus geacuteneacuteralement deux seacutequences de symbolesentre elles Lrsquousage le plus simple est de trouver pour un mot mal orthographieacute le mot le plus proche dans undictionnaire crsquoest une option proposeacutee dans la plupart des traitements de texte La distance preacutesenteacutee est la distancede Levenshtein232 (voir [Levenstein1966]) Elle est parfois appeleacutee Damerau Levenstein Matching (DLM)233 (voireacutegalement [Damerau1964]) Cette distance fait intervenir trois opeacuterations eacuteleacutementaires

bull comparaison entre deux caractegraveresbull insertion drsquoun caractegraverebull suppression drsquoun caractegravere

Pour comparer deux mots il faut construire une meacutethode associant ces trois opeacuterations afin que le premier mot setransforme en le second mot Lrsquoexemple suivant utilise les mots idstzance et distances il montre une meacutethodepermettant de passer du premier au second La distance sera la somme des coucircts associeacutes agrave chacune des opeacuterationschoisies La comparaison entre deux lettres identiques est en geacuteneacuteral de coucirct nul toute autre opeacuteration eacutetant de coucirctstrictement positif

232 httpsfrwikipediaorgwikiDistance_de_Levenshtein233 httpsfrwikipediaorgwikiDistance_de_Damerau-Levenshtein

247

Machine Learning Statistiques et Programmation Version 035930

Table1 distance drsquoeacuteditionmot 1 mot 2 opeacuteration coucircti d comparaison entre i et d 1d i comparaison entre d et i 1s s comparaison entre s et s 0t t comparaison entre t et t 0z suppression de z 1a a comparaison entre a et a 0n n comparaison entre n et n 0c c comparaison entre c et c 0e e comparaison entre e et e 0

s insertion de s 1somme 4

Pour cette distance drsquoeacutedition entre les mots idstzance et distances La succession drsquoopeacuterations proposeacutee nrsquoest pasla seule qui permettent de construire le second mot agrave partir du premier mais crsquoest la moins coucircteuse

711 Deacutefinition et proprieacuteteacutes

Deacutefinition

Tout drsquoabord il faut deacutefinir ce qursquoest un mot ou une seacutequence

Deacutefinition D1 motOn note C lrsquoespace des caractegraveres ou des symboles Un mot ou une seacutequence est une suite finie de C On note SC =cupinfink=1C

k lrsquoespace des mots formeacutes de caractegraveres appartenant agrave C

On peut deacutefinir la distance drsquoeacutedition

Deacutefinition D2 distance drsquoeacuteditionLa distance drsquoeacutedition d sur SC est deacutefinie par

d SC times SC minusrarr R+

(m1m2) minusrarr minO seacutequencedrsquoopeacuterations

d (m1m2 O)

La distance est le coucirct de la transformation du mot m1 en m2 la moins coucircteuse Il reste agrave deacutemontrer que cette distanceen est bien une puis agrave proposer une meacutethode de calcul plus rapide que celle suggeacutereacutee par cette deacutefinition

Proprieacuteteacutes

Ce paragraphe a pour objectif de deacutemontrer que la distance (page 248) en est bien une

Deacutefinition D3 distance entre caractegraveresSoit Cprime = C

⋃ lrsquoensemble des caractegraveres ajouteacute au caractegravere vide On note c (Cprime)2 minusrarr R+ la fonction coucirct

deacutefinie comme suit

forall (x y) isin (Cprime)2 c (x y) est le coucirct

drsquoune comparaison si (x y) isin (C)2drsquoune insertion si (x y) isin (C)times drsquoune suppression si (x y) isin times (C)0 si (x y) = ( )

248 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

On note S2Cprime = cupinfinn=1

(Cprime2)n

lrsquoensemble des suites finies de Cprime

Pour modeacuteliser les transformations drsquoun mot vers un autre on deacutefinit pour un mot m un mot acceptable

Deacutefinition D4 mot acceptableSoit m = (m1 mn) un mot tel qursquoil est deacutefini preacuteceacutedemment Soit M = (Mi)i⩾1 une suite infinie de caractegravereson dit que M est un mot acceptable pour m si et seulement si la sous-suite extraite de M contenant tous les caractegraveresdiffeacuterents de est eacutegal au mot m On note acc (m) lrsquoensemble des mots acceptables pour le mot m

Par conseacutequent tout mot acceptable mprime pour le mot m est eacutegal agrave m si on supprime les caractegraveres du mot mprime Enparticulier agrave partir drsquoun certain indice mprime est une suite infinie de caractegraveres Il reste alors agrave exprimer la deacutefinitionde la distance drsquoeacutedition en utilisant les mots acceptables

Deacutefinition D5 distance drsquoeacuteditionSoit c la distance drsquoeacutedition (page 248) d deacutefinie sur SC est deacutefinie par

d SC times SC minusrarr R+

(m1m2) minusrarr minsum+infin

i=1 c(M i

1Mi2

)| (M1M2) isin acc (m1)times acc (m2)

(71)

Il est eacutevident que la seacuteriesum+infin

i=1 c(M i

1Mi2

)est convergente La ref`distance de caractegraveres

ltedition_distance_definition_1gt` implique que les distance drsquoeacutedition deacutefinies en 1 (page 248) et 2 (page 249)sont identiques

Theacuteoregraveme T1 distance drsquoeacuteditionSoit c et d les fonctions deacutefinies respectivement par (711) et (711) alors

c est une distance sur C lArrrArr d est une distance sur SC

On cherche drsquoabord agrave deacutemontrer quec est une distance sur Cprime lArr= d est une distance sur SC

Cette assertion est eacutevidente car si (m1m2) sont deux mots de un caractegravere la distance d sur SC deacutefinit alors la distancec sur CprimeOn deacutemontre ensuite que

c est une distance sur Cprime =rArr d est une distance sur SCSoient deux mots (m1m2) soit (M1M2) isin acc (m1) times acc (m2) comme c est une distance sur Cprime alorsd (M1M2) = d (M2M1)Drsquoougrave drsquoapregraves la deacutefinition 2 (page 249)

d (m1m2) = d (m2m1) (72)

Soit (N1 N2) isin acc (m1)times acc (m2) tels que d (m1m2) = d (N2 N1) alors

d (m1m2) = 0 =rArr d (N1 N2) = 0

=rArr+infinsumi=1

c(N i

1 Ni2

)= 0

=rArr foralli ⩾ 1 N i1 = N i

2

=rArr N1 = N2

d (m1m2) = 0 =rArr m1 = m2

71 Distance drsquoeacutedition 249

Machine Learning Statistiques et Programmation Version 035930

Il reste agrave deacutemontrer lrsquoineacutegaliteacute triangulaire Soient trois mots (m1m2m3) on veut deacutemontrer que d (m1m3) ⩽d (m1m2) + d (m2m3) On deacutefinit

(N1 N2) isin acc (m1)times acc (m2) tels que d (m1m2) = d (N1 N2)

(P2 P3) isin acc (m2)times acc (m3) tels que d (m2m3) = d (P2 P3)

(O1 O3) isin acc (m1)times acc (m3) tels que d (m1m3) = d (O1 O3)

Mais il est possible drsquoapregraves la deacutefinition drsquoun mot acceptable (page 249) drsquoinseacuterer des caractegraveres dans les motsN1 N2 P2 P3 O1 O3 de telle sorte qursquoil existe (M1M2M3) isin acc (m1)times isin acc (m2)times isin acc (m3) tels que

d (m1m2) = d (M1M2)

d (m2m3) = d (M2M3)

d (m1m3) = d (M1M3)

Or comme la fonction c est une distance sur Cprime on peut affirmer que d (M1M3) ⩽ d (M1M2)+ d (M2M3) Drsquoougrave

begineqnarray dpam_1m_3 infegal dpam_1m_2 + d pam_2m_3 labeledit_demo_eq_3endeqnarray

Les assertions 1 2 3 montrent que d est bien une distance Le tableau suivant illustre la deacutemonstration pour les suitesM1M2M3 pour les mots et les mots idtzance tonce distances

M1 i d t z a n c eM2 t o n c eM3 d i s t a n c e s

La distance drsquoeacutedition 2 (page 249) ne tient pas compte de la longueur des mots qursquoelle compare On serait tenteacute dedeacutefinir une nouvelle distance drsquoeacutedition inspireacutee de la preacuteceacutedente

Deacutefinition D6 distance drsquoeacutedition eacutetendueSoit d^ la distance drsquoeacutedition deacutefinie en 2 (page 249) pour laquelle les coucircts de comparaison drsquoinsertion et desuppression sont tous eacutegaux agrave 1 La distance drsquoeacutedition dprime sur SC est deacutefinie par

dprime SC times SC minusrarr R+

(m1m2) minusrarr dprime (m1m2) =dlowast (m1m2)

max l (m1) l (m2)

ougrave l (m) est la longueur du mot m

Le tableau suivant donne un exemple pour lequel lrsquoineacutegaliteacute triangulaire nrsquoest pas veacuterifieacutee La fonction dlowast nrsquoest doncpas une distance

mot 1 mot 2 distance dlowast distance dprime

APPOLLINE APPOLINE 1 1 9APPOLLINE APOLLINE 1 1 9APOLLINE APPOLINE 2 2 8

Par conseacutequent d (APOLLINEAPPOLINE) gt d (APOLLINEAPPOLLINE) +d (APPOLLINEAPPOLINE) et la la fonction dlowast ne veacuterifie pas lrsquoineacutegaliteacute triangulaire

250 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

712 Factorisation des calculs

La deacutefinition de la distance drsquoeacutedition ne permet pas drsquoenvisager le calcul de la distance dans un temps raisonnable Il estpossible neacuteanmoins drsquoexprimer cette distance drsquoune autre maniegravere afin de reacutesoudre ce problegraveme (voir [Wagner1974])On deacutefinit la suite suivante

Deacutefinition D7 distance drsquoeacutedition tronqueacuteeSoient deux mots (m1m2) on deacutefinit la suite (

dm1m2

ij

)0⩽i⩽n10⩽j⩽n2

(= (dij)0⩽i⩽n1

0⩽j⩽n2

pour ne pas alourdir les notations)

Par d00 = 0

dij = min

diminus1jminus1 + comparaison

(mi

1mj2

)

dijminus1 + insertion(mj

2

)

diminus1j + suppression(mi

1

)

Cette suite tronqueacutee permet drsquoobtenir le reacutesultat de la proprieacuteteacute suivante

Proprieacuteteacute P1 calcul rapide de la distance drsquoeacuteditionLa suite deacutefinie par 3 (page 251) veacuterifie d (m1m2) = dn1n2 ougrave d est la distance drsquoeacutedition deacutefinie en 1 (page 248) ou2 (page 249)

Cette factorisation des calculs est illustreacutee par les tableaux de cette figure La deacutemonstration srsquoeffectue par reacutecurrencela deacutefinition 3 (page 251) est bien sucircr eacutequivalente 1 (page 248) pour des mots de longueur un On suppose donc quece reacutesultat est vrai pour un couple de mots (m1m2) de longueur (l1 l2) veacuterifiant l1 ⩽ i et l_2 infegal j avec au plusune eacutegaliteacute Soit m un mot on note n le nombre de lettres qursquoil contient On note m (l) le mot formeacute des l premiegravereslettres de m Alors

dm1m2

ij = d (m1 (i) m2 (j))

d (m1 (i) m2 (j)) = min

d (m1 (iminus 1) m2 (j minus 1)) + comparaison (m1im2j) d (m1 (i) m2 (j minus 1)) + insertion (m2j) d (m1 (iminus 1) m2 (j)) + suppression (m1i)

Le calcul factoriseacute de la distance drsquoeacutedition entre deux mots de longueur l1 et l2 a un coucirct de lrsquoordre O (l1l2) Ilest souvent illustreacute par un tableau comme celui de la figure suivante qui permet eacutegalement de retrouver la meilleureseacutequence drsquoopeacuterations permettant de passer du premier mot au second

dans ce sens

crsquoest unecomparaison

minusrarr jdans ce sens crsquoest une insertion

dans ce sensdarr crsquoest unei suppression

d i s t a n c e s0

i 1d 2s 2t 2z 3a 3n 3c 3e 3 4

d i s t a n c e s0

i 1d 2 3 4s 4t 4z 5a 5 6 7n 8c 9e 9 10

71 Distance drsquoeacutedition 251

Machine Learning Statistiques et Programmation Version 035930

Chaque case (i j) contient la distance qui seacutepare les i premiegraveres lettres du mot 1 des j premiegraveres lettres du mot 2 selonle chemin ou la meacutethode choisie La derniegravere case indique la distance qui seacutepare les deux mots quel que soit le cheminchoisi

713 Extension de la distance drsquoeacutedition

Jusqursquoagrave preacutesent seuls trois types drsquoopeacuterations ont eacuteteacute envisageacutes pour constuire la distance drsquoeacutedition tous trois portentsur des caractegraveres et aucunement sur des paires de caractegraveres Lrsquoarticle [Kripasundar1996] (voir aussi [Seni1996]suggegravere drsquoeacutetendre la deacutefinition 3 (page 251) aux permutations de lettres

Deacutefinition D8 distance drsquoeacutedition tronqueacutee eacutetendueSoit deux mots (m1m2) on deacutefinit la suite

(dm1m2

ij

)0⩽i⩽n10⩽j⩽n2

(= (dij)0⩽i⩽n1

0⩽j⩽n2

pour ne pas alourdir les notations)

par

d00 = 0

dij = min

diminus1jminus1 + comparaison

(mi

1mj2

)

dijminus1 + insertion(mj

2 i)

diminus1j + suppression(mi

1 j)

diminus2jminus2 + permutation((

miminus11 mi

1

)(mjminus1

2 mj2

))

La distance drsquoeacutedition chercheacutee est toujours d (m1m2) = dn1n2

mais la deacutemonstration du fait que d est bien unedistance ne peut pas ecirctre copieacutee sur celle du theacuteoregraveme 1 (page 249) mais sur les travaux preacutesenteacutes dans lrsquoarticle[Wagner1974]

714 Apprentissage drsquoune distance drsquoeacutedition

Lrsquoarticle [Waard1995] suggegravere lrsquoapprentissage des coucircts des opeacuterations eacuteleacutementaires associeacutees agrave une distance drsquoeacutedition(comparaison insertion suppression permutation ) On note lrsquoensemble de ces coucircts ou paramegravetres Θ =(θ1 θn) On considegravere deux mots X et Y la distance drsquoeacutedition d (XY ) est une fonction lineacuteaire des coucirctsSoit D = ((X1 Y1) (XN YN )) une liste de couple de mots pour lesquels le reacutesultat de la distance drsquoeacutedition estconnu et noteacute (c1 cN ) il est alors possible de calculer une erreur srsquoexprimant sous la forme

E =

Nsumi=1

(d (Xi Yi)minus ci)2=

Nsumi=1

(nsum

k=1

αik (Θ) θk minus ci

)2

Les coefficients αik (Θ) deacutependent des paramegravetres Θ car la distance drsquoeacutedition correspond au coucirct de la transformationde moindre coucirct drsquoapregraves la deacutefinition ref`2 ltdefition_distance_edition_2gt` αik (Θ) correspond au nombre de fois quele paramegravetre θk intervient dans la transformation de moindre coucirct entre Xi et Yi Cette expression doit ecirctre minimaleafin drsquooptenir les coucircts Θ optimaux Toutefois les coucircts θk sont tous strictement positifs et plutocirct que drsquoeffectuer uneoptimisation sous contrainte ces coucircts sont modeacuteliseacutes de la faccedilon suivante

E =

Nsumi=1

(nsum

k=1

αik (Ω)1

1 + eminusωkminus ci

)2

Les fonctions αik (Ω) ne sont pas deacuterivable par rapport Ω mais il est possible drsquoeffectuer une optimisation sanscontrainte par descente de gradient Les coucircts sont donc appris en deux eacutetapes

252 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

Algorithme A1 Apprentissage drsquoune distance drsquoeacuteditionLes notations sont celles utiliseacutes pour lrsquoeacutequation (714) Les coucircts Ω sont tireacutes aleacuteatoirementestimationLes coefficients αik (Ω) sont calculeacuteescalcul du gradientDans cette eacutetape les coefficients αik (Ω) restent constants Il suffit alors de minimiser la fonction deacuterivable E (Ω) surRn ceci peut ecirctre effectueacute au moyen drsquoun algorithme de descente de gradient similaire agrave ceux utiliseacutes pour les reacuteseauxde neuronesTant que lrsquoerreurE (Ω) ne converge pas on continue Lrsquoerreur E diminue jusqursquoagrave converger puisque lrsquoeacutetape qui reacuteestimeles coefficients αik (Ω) les minimise agrave Ω = (ω1 ωn) constant

715 Bibliographie

72 Distance between two graphs

This page gathers some thoughts about comparing two graphs without any cycle This problem is known as graphsimilarity or graph matching234 One of the solution is the Graph Edit Distance235 a better solution is described in[Blondel2004] You can also read Graph similarity236

bull Definitions (page 254)bull Problem (page 254)bull First approach (page 255)

ndash Step 1 edit distance (page 255)ndash Step 2 Kruskal kind (bijection on paths) (page 256)ndash Step 3 Matching (page 256)ndash Step 4 Kruskal kind the return (bijection on edges and vertices) (page 256)ndash Step 5 Merging the two graphs (page 257)

bull Distance between graphs (page 257)bull Second approach faster (page 258)bull Bibliography (page 258)

234 httpsenwikipediaorgwikiGraph_matching235 httpsenwikipediaorgwikiGraph_edit_distance236 httpwwwcsuoigr~pvassildownloadsGraphDistanceLauraZagerpdf

72 Distance between two graphs 253

Machine Learning Statistiques et Programmation Version 035930

721 Definitions

The first approach is implemented in module graph_distance Example of use

graph1 = [ (ab) (bc) (bd) (de) (ef) (bf) (bg) (f g)(ag) (ag) (cd) (d g)(dh) (aah) (aac) (f h) ]

graph2 = copydeepcopy(graph1) + [ (h m) (m l) (l C) (C r)(a k) (k l) (k C)]

graph1 = Graph(graph1)graph2 = Graph(graph2)

distance graph = graph1distance_matching_graphs_paths(graph2 use_min=Falserarrstore=store)

graph is the merged graph mentioned below

722 Problem

This graph distance aims at computing a distance between graphs but also to align two graphs and to merge them intoa single one For example letrsquos consider the following graphs

We would like to merge them and to know which vertices were merged which ones were added and deleted Thefollowing ideas and algorithm are only applicable on graphs without cycles To simplify we assume there are only oneroot and one leave If there are mulitple we then create a single root we connect to all the existing ones We do the

254 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

same for the unique leave we create if there are multiple It will have all the existing ones as predecessors We alsoassume each vertex and each edge holds a label used during the matching It is better to match vertices or edges holdingthe same label A weight can be introduced to give more important to some elements (vertex edge)

723 First approach

Step 1 edit distance

The main idea consists in using Levensteinrsquos edit distance237 This algorithm applies on sequences but not on graphsBut because both graphs do not contain any cycle we can extract all paths from them Every path starts with the samevertex - the only root - and ends with the same one - the only leave - We also consider each edge or vertex as an elementof the sequence Before describing the edit distance letrsquos denote p1 as a path from the first graph p2 as a path from thesecond one pk(i) is the element i of this sequence Following Levenstein description we denote d(ij) as the distancebetween the two subsequences p1(1i) p2(1j) Based on that we use an edit distance defined as follows

d(i j) = min

d(iminus 1 j) + insertion(p1(i))d(i j minus 1) + insertion(p2(j))d(iminus 1 j minus 1) + comparison(p1(i) p2(j))

First of all we are not only interested in the distance but also in the alignment which would imply to keep which elementwas chosen as a minimum for each d(ij) If we denote nk the length of path k then d(n1 n2) is the distance we arelooking forSecond if two paths do not have the same length it implies some elements could be compared between each otherseven if one is an edge and the other one is a vertex This case is unavoidable if two paths have different lengthsThird the weight we use for the edit distance will be involved in a kind of tradeof do we prefer to boost the structureor the label when we merge the graphs Those weights should depend on the task whether or not it is better to alignvertices with the same label or to keep the structure Here are the chosen weights

operation weight conditioninsertion(c) w(c) weight held by the edge or the vertexcomparison(ab) 0 if vertices a and b share the same labelcomparison(ab) 0 if edges a and b share the same label and if vertices at both ends share the same

labelcomparison(ab) w(a) +

w(b)if edges a and b share the same label and if vertices at both ends do not share thesame label

comparison(ab) w(a)+w(b)2 if a and b do not share the same kind

comparison(ab) 3(w(a)+w(b))2 if a and b share the same kind but not the label

Kind means in this context edge or vertex In that case we think that sharing the same kind but not the same labelis the worst case scenario Those weights avoid having multiples time the same distance between two random pathswhich will be important during the next step In fact because the two graphs do not contain cycles they have a finitenumber of paths We will need to compute all distances between all possible pairs The more distinct values we havefor a distance between two paths the better it is

237 httpsenwikipediaorgwikiLevenshtein_distance

72 Distance between two graphs 255

Machine Learning Statistiques et Programmation Version 035930

Step 2 Kruskal kind (bijection on paths)

Among all possible distances we compute between two paths some of them might be irrelevant If for some reasonsthere is an edge which connects the root to the leave computing the edit distance between this short path and any otherone seems weird Thatrsquos why we need to consider a kind of paths association We need to associate a path from a graphto another from the other graph and the association needs to be a bijection assuming two close paths will have a lowdistanceAfter the first step we ended up with a matrix containing all possible distances We convert this matrix into a graphwhere each path is a vertex each distance is a weighted edge We use a kind of Kruskal algorithm to remove heavyweighted edges until we get a kind of bijection

bull We sort all edges by weight (reverse order)bull We remove the first ones until we get an injection on both sides a path from a graph must be associated to only

one pathBasically some paths from the bigger graph will not be teamed up with another path

Step 3 Matching

Now that we have a kind of bijection between paths it also means we have a series of alignments between paths onefrom the first graph one from the second graph and an alignment between them computed during the step We buildtwo matrices one for the edges Me one for the vertices Mv defined as follows

bull Me(i j) contains the number of times edge i from graph 1 is associated to edge j from graph 2 among all pathsassociated by the previous step

bull Mv(i j) contains the same for the vertices

Step 4 Kruskal kind the return (bijection on edges and vertices)

We now have two matrices which contains pretty much the same information as we have in step 2 each element isthe number of times an edge or a vertex was associated with an edge or a vertex of the other graph We use the samealgorithm until we get a kind of bijection between vertices or edges from both matrices

256 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

Step 5 Merging the two graphs

Once we finalized the previous steps we know which vertices and edges will be associated with vertices and edgesfrom the other graph Whatrsquos left is to add the left over to the picture which is shown by next Figure

Red and symbol - means deleted from graph~1 and not present in graph 2 Green and symbol + means not present ingraph 1 and added in graph 2 The black pieces remains unchangedThe main drawback of this algorithm is its speed It is very time consuming We need to compute distances between allpaths which is ok when graphs are small but very long when graphs are bigger Many paths share the same beginningand we could certainly avoid wasting time computing edit distances between those paths

724 Distance between graphs

We defined a distance between two sequences based on the sum of operations needed to switch from the first sequenceto the second one we can follow the same way here The alignment we were able to build between two graphs showsinsertions deletions and comparisons of different edges of vertices By giving a weight of each kind we can sum themto build the distance we are looking for We use the same weights we defined to compute the alignment between twopaths from both graphs Letrsquos defined an aligned graph G = (ab) G is the set of edges and vertices of the finalgraph a b are an edge of a vertex from the first graph for a and from the second graph for b a or b can be null Wealso defined insertion(a) = comparison(empty a)

d(G1 G2) =sum

aisinG1cupemptybisinG2cupempty

comparison(a b)11(ab)isinG

It is obvioulsy symmetric To proove it verifies d(G1 G2) = 0 lArrrArr G1 = G2 we could proove that every path fromG1 will be associated to itself during the first step It is not necessarily true because two different paths could share the

72 Distance between two graphs 257

Machine Learning Statistiques et Programmation Version 035930

same sequence of labels Letrsquos consider the following example

begin

FFF

FFFF

F 1 a 2 b

end

3 a 4 b

==

This graph contains three paths

path1 1 2 abpath2 3 4 abpath3 1 2 3 4 abab

The matrix distance between paths will give (xgt 0) 0 0 x0 0 xx x 0

The bolded values 0 represent one possible association between paths which could lead to the possible associationbetween vertices

1 0 1 00 1 0 11 0 1 00 1 0 1

In that particular case the algorithm will not return a null distance mostly because while aligning sequences we do notpay too much attention to the local structure One edge could be missing from the alignment We could try to correctthat by adding some cost when two vertices do not have the number of input or output edges instead of consideringonly the labels

725 Second approach faster

No implemented yet

726 Bibliography

73 Deacutetection de segments

bull Lrsquoideacutee (page 259)bull Illustration (page 261)bull Explications (page 266)

ndash Bibliographie (page 266)

258 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

731 Lrsquoideacutee

Une image aleacuteatoire ressemble agrave la mire en un temps ougrave la teacuteleacutevision ne rediffusait pas les programmes diurne la nuit

Dans ce brouillard aleacuteatoire la probabiliteacute drsquoavoir des points aligneacutes est tregraves faible si faible que le simple fait drsquoen voirest un eacuteveacutenement extraordinaire Trois points aligneacutes ne sont pas rares quatre un peu plus cinq encore plus A partirdrsquoun certain seuil on peut consideacuterer que trop de points aligneacutes forme une droite et un eacuteveacutenement trop rare pour ecirctreignoreacute On cherche agrave deacutetecter les arecirctes dans une image comme la suivante

On calcule le gradient drsquoune image en noir et blanc

73 Deacutetection de segments 259

Machine Learning Statistiques et Programmation Version 035930

Puis on extrait les segments en les consideacuterant comme des anomalies par rapport agrave un champ de pixels aleacuteatoire

260 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

732 Illustration

Deacutetection de segments dans une image

Crsquoest une technique assez vieille et qui consiste agrave deacutetecter des segments comme des anomalies lrsquoalignement de pointsest un eacuteveacutenement assez rare dans un nuage de points mais rare comment Cette ideacutee megravene agrave la probabilisation drsquouneimage pour quantifier ce qursquoest un alignement de points neacutecessairement rare

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Une image aleacuteatoire (page 261)bull Gradient (page 263)bull Deacutetection de segments (page 263)bull Deacutetection de segments sur une image (page 264)

Une image aleacuteatoire

On considegravere un bruit aleacuteatoire uniforme dans une image et on ajoute des points aleacuteatoires tireacutes le long drsquoune ligneselon une loi gaussienne uniforme sur la ligne gaussien autour du segment

from mlstatpyimagedetection_segment import random_noise_image convert_array2PILimg = random_noise_image((100 100))convert_array2PIL(img mode=binary)

from mlstatpyimagedetection_segment import random_segment_imagerandom_segment_image(img density=3 lmin=03)

size 36angle 2285619160431492x1 23597410654261072y1 40x2 0y2 6718753777770554nbpoints 108

convert_array2PIL(img mode=binary)

73 Deacutetection de segments 261

Machine Learning Statistiques et Programmation Version 035930

random_segment_image(img density=5 lmin=03)random_segment_image(img density=5 lmin=03)convert_array2PIL(img mode=binary)

pilimg = convert_array2PIL(img mode=binary)convert(RGB)pilimg

from PIL import ImageFilter

pilimg = pilimgfilter(ImageFilterBLUR)filter(ImageFilterBLUR)filter(ImageFilterrarrBLUR)filter(ImageFilterBLUR)pilimg

from PIL import ImageEnhanceenh = ImageEnhanceSharpness(pilimg)

(suite sur la page suivante)

262 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

final_img = enhenhance(4)final_img

Gradient

La deacutetection des segments est baseacutee sur le gradient

from mlstatpyimagedetection_segment import compute_gradient plot_gradientgrad = compute_gradient(final_img color=0)

plot_gradient(pilimgcopy() grad direction=-2)

Deacutetection de segments

from mlstatpyimagedetection_segment import detect_segmentsseg = detect_segments(final_img verbose=1 seuil_nfa=1e-1)len(seg)

n = 1000 82 temps 027 sec nalign 298n = 2000 82 temps 052 sec nalign 671n = 3000 164 temps 083 sec nalign 964n = 4000 164 temps 110 sec nalign 1357n = 5000 249 temps 139 sec nalign 1544n = 6000 252 temps 166 sec nalign 1924n = 7000 374 temps 195 sec nalign 2183n = 8000 375 temps 223 sec nalign 2460n = 9000 379 temps 256 sec nalign 2728

379

73 Deacutetection de segments 263

Machine Learning Statistiques et Programmation Version 035930

from mlstatpyimagedetection_segment import plot_segmentsplot_segments(final_imgcopy() seg)

Deacutetection de segments sur une image

from PIL import Imageegl = Imageopen(eglise_zoom2jpg)egl

On reacuteduit la taille de lrsquoimage

egl2 = eglcrop((0 0 eglsize[0]3 3eglsize[1]4))egl2

264 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

grad2 = compute_gradient(egl2 color=0)plot_gradient(egl2copy() grad2 direction=-2)

seg2 = detect_segments(egl2)len(seg2)

490

from mlstatpyimagedetection_segment import plot_segmentsres = plot_segments(egl2copy() seg2)res

73 Deacutetection de segments 265

Machine Learning Statistiques et Programmation Version 035930

Il faudrait fusionner les segments mais cela a lrsquoair de marcherLa fonction detect_segments lance la deacutetection des segments

733 Explications

La preacutesentation Deacutetection des images dans les images digitales239 deacutetaille le principe de lrsquoalgorithme Lrsquoideacutee delrsquoalgorithme est assez proche de la transformeacutee de Hough240 Celle-ci est impleacutementeacutee dans le module scikit-image241

ou opencv242

Bibliographie

bull From Gestalt Theory to Image Analysis243 Agnegraves Desolneux Lionel Moisan Jean-Michel Morelbull Learning Equivariant Functions with Matrix Valued Kernels244

bull The Hough Transform Estimator245

bull An Extension to Hough Transform Based on Gradient Orientation246

239 httpsgithubcomsdpythonmlstatpyblobmaster_todosegment_detectionpresentationpdf240 httpsfrwikipediaorgwikiTransformC3A9e_de_Hough241 httpscikit-imageorgdocsdevapiskimagetransformhtml242 httpsdocsopencvorg24136doctutorialsimgprocimgtranshough_lineshough_lineshtmlhighlight=hough243 httpwwwmath-infouniv-paris5fr~moisanpapers2006-9pdf244 httpwwwjmlrorgpapersvolume8reisert07areisert07apdf245 httpsarxivorgpdfmath0503668pdf246 httpsarxivorgftparxivpapers1510151004863pdf

266 Chapter 7 Algorithmes

CHAPTER 8

Peacutereacutegrinations

Ce sont quelques notebooks sur des points particuliers qui surgissent au quotidien quand on traite des donneacutees Souventplus pratiques que theacuteoriques crsquoest lrsquooccasion de deacutecouvrir quelques poussiegraveres sous le tapis

81 Reacutepartir en base drsquoapprentissage et de test

Crsquoest un problegraveme plutocirct facile puisqursquoil srsquoagit de reacutepartir aleacuteatoirement les lignes drsquoune base de donneacutees drsquoun cocircteacute oude lrsquoautre Lorsque le problegraveme de machine learning agrave reacutesoudre est un problegraveme de classification il faut srsquoassurer quechaque cocircteacute contient une proportion raisonnable de chaque classe

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Reacutepartition naiumlve (page 268)bull Reacutepartition stratifieacutee (page 271)bull Streaming splitting (page 276)bull Streaming distribueacute (page 282)

import matplotlibpyplot as pltmatplotlib inline

267

Machine Learning Statistiques et Programmation Version 035930

811 Reacutepartition naiumlve

On considegravere une base de donneacutees qursquoon divise en 23 apprentissage 13 test On note cette proportion t Deux classes0 et 1 la proportion de la classe 1 est de p qursquoon choisit petit

import randomdef generate_dataset(n t)

return [1 if randomrandom() lt t else 0 for i in range(0n)]

ens = generate_dataset(4000 001)sum(ens)

40

Et on divise en base drsquoapprentissage et de test

def custom_split_train_test(ens p)choice = generate_dataset(len(ens) p)train = [x for x c in zip(ens choice) if c == 1]test = [x for x c in zip(ens choice) if c == 0]return train test

train test = custom_split_train_test(ens 066)print(len(train) sum(train) sum(train)len(train))print(len(test) sum(test) sum(test)len(test))

2683 27 0010063361908311591317 13 0009870918754745633

On recommence un grand nombre de fois et on repreacutesente la proportion obtenue dans la base de test

tirages = [sum(test)len(test) for train test in [custom_split_train_test(ens 066)rarrfor i in range(0100)]]

pltplot(tirages o)pltylabel(proportion classe 1)pltxlabel(tirages)

268 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

On considegravere maintenant la moyenne les valeurs extrecircmes de la proportion en faisant varier p

ps = [0001 i for i in range(1 50)]tmin tmax tmean = [] [] []for p in ps

ens = generate_dataset(4000 p)tirages = [sum(test)len(test) for train test in [custom_split_train_test(ens 0

rarr66) for i in range(0200)]]tiragessort()tminappend(tirages[int(len(tirages)005)])tmaxappend(tirages[-int(len(tirages)005)])tmeanappend(sum(tirages) len(tirages))

fig ax = pltsubplots(1 1)axplot(ps ps -- label=expected proportion)axplot(ps tmin label=min)axplot(ps tmax label=max)axplot(ps tmean label=mean)axlegend()

81 Reacutepartir en base drsquoapprentissage et de test 269

Machine Learning Statistiques et Programmation Version 035930

Et train_test_split247

from sklearnmodel_selection import train_test_splitimport pandas

ps = [0001 i for i in range(1 50)]tmin tmax tmean = [] [] []for p in ps

ens = pandasSeries(generate_dataset(4000 p))tirages = [sum(test)len(test) for train test in [train_test_split(ens test_size=0

rarr66) for i in range(0200)]]tiragessort()tminappend(tirages[int(len(tirages)005)])tmaxappend(tirages[-int(len(tirages)005)])tmeanappend(sum(tirages) len(tirages))

fig ax = pltsubplots(1 1)axplot(ps ps -- label=expected proportion)axplot(ps tmin label=min)axplot(ps tmax label=max)axplot(ps tmean label=mean)axset_title(train_test_split from sklearn)axlegend()

247 httpscikit-learnorgstablemodulesgeneratedsklearnmodel_selectiontrain_test_splithtml

270 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Lrsquoeacutecart entre les extrecircmes paraicirct plus petit Le geacuteneacuterateur pseudo aleacuteatoire utiliseacute par scikit-learn248 paraicirct de meilleurqualiteacute Nous y reviendront peut-ecirctre un jour

812 Reacutepartition stratifieacutee

Nous utilisons maintenant le paramegravetre stratify qui permet de srsquoassurer que les deux classes sont eacutequitablement reacutepartiesentre les deux ensembles train et test

from sklearnmodel_selection import train_test_splitimport pandas

ps = [0001 i for i in range(1 50)]tmin tmax tmean = [] [] []for p in ps

ens = pandasSeries(generate_dataset(4000 p))

traintest = []excs = []for i in range(0 200)

trytrain test = train_test_split(ens test_size=066 stratify=ens)traintestappend((traintest))

except ValueError as eprint(Skipping small class too small in one side e)excsappend(e)

if len(traintest) lt 100ex = excs[0] if len(excs) gt 0 else no exceptionraise Exception(Too few you should check the implementation is okn0

rarrformat(ex))(suite sur la page suivante)

248 httpscikit-learnorg

81 Reacutepartir en base drsquoapprentissage et de test 271

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

tirages = [sum(test)len(test) for train test in traintest]tiragessort()tminappend(tirages[int(len(tirages)005)])tmaxappend(tirages[-int(len(tirages)005)])tmeanappend(sum(tirages) len(tirages))

fig ax = pltsubplots(1 1)axplot(ps ps -- label=expected proportion)axplot(ps tmin label=min)axplot(ps tmax label=max)axplot(ps tmean label=mean)axset_title(stratified train_test_split from sklearn)axlegend()

La proportion initiale est bien respecteacutee Comment faire cela en pratique Le plus simple est sans doute de bull De trier les observations qui appartiennent agrave chaque classebull De les permuter de faccedilon aleacuteatoirebull Puis de prendre les premiers eacuteleacutements pour la base drsquoapprentissage dans chaque classe et les derniers pour la

base de test

def custom_statitied_split_train_test(ens p stratify)strat = set(stratify)train = []test = []for st in strat

cl = [e for e s in zip(ens stratify) if s == st]randomshuffle(cl)i = int(len(cl) p)trainextend(cl[i])

(suite sur la page suivante)

272 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

testextend(cl[i])return train test

ps = [0001 i for i in range(1 50)]tmin tmax tmean = [] [] []for p in ps

ens = generate_dataset(4000 p)tirages = [sum(test)len(test) for train test in [custom_statitied_split_train_

rarrtest(ensp=066 stratify=ens) for i in range(0200)]]

tiragessort()tminappend(tirages[int(len(tirages)005)])tmaxappend(tirages[-int(len(tirages)005)])tmeanappend(sum(tirages) len(tirages))

fig ax = pltsubplots(1 1)axplot(ps ps -- label=expected proportion)axplot(ps tmin label=min)axplot(ps tmax label=max)axplot(ps tmean label=mean)axset_title(custom stratified train_test_split)axlegend()

La meacutethode est simple mais plus coucircteuse puisqursquoelle neacutecessite un tri

import time

ns = []tn = []

(suite sur la page suivante)

81 Reacutepartir en base drsquoapprentissage et de test 273

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

ts = []

ii = 5for N in [10000 20000 50000 100000 200000 500000 int(1e6)

int(2e6) int(5e6)]print(N)ens = pandasSeries(generate_dataset(N 005))nsappend(N)

tt = []for i in range(0ii)

t = timeperf_counter()train_test_split(ens test_size=066)d = 10 (timeperf_counter()-t) iittappend(d)

ttsort()tnappend(tt[len(tt)2])

tt = []for i in range(0ii)

t = timeperf_counter()train_test_split(ens test_size=066 stratify=ens)d = 10 (timeperf_counter()-t) iittappend(d)

ttsort()tsappend(tt[len(tt)2])

100002000050000100000200000500000100000020000005000000

import mathfig ax = pltsubplots(1 1)dd = tn[-1] - (ts[-1] - tn[-1])13axplot(ns [x dd ns[-1] for x in ns] label=O(x))axplot(ns [x mathlog(x) ns[0] dd ns[-1] (ns[0] mathlog(ns[0])) for x inrarrns] label=O(x ln x))axplot(ns tn label=split)axplot(ns ts label=stratified split)axset_title(processing time for train_test_split)axgrid(True)axset_xscale(log nonposx=clip)axset_yscale(log nonposy=clip)axset_xlabel(N)axset_ylabel(time(s))axlegend()

274 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Le coucirct de la fonction train_test_split249 semble ecirctre entre O(n) et O(n lnn) Regardons

import mathfig ax = pltsubplots(1 1)axplot(ns [(x tn[-1]) (n mathlog(n) (ns[-1] mathlog(ns[-1]))) for x n inrarrzip(tn ns)]

label=split n ln s)axplot(ns [(x ts[-1]) (n mathlog(n) (ns[-1] mathlog(ns[-1]))) for x n inrarrzip(ts ns)]

label=stratified n ln s)axplot(ns [(x tn[-1]) (n ns[-1]) for x n in zip(tn ns)] label=split n)axplot(ns [(x ts[-1]) (n ns[-1]) for x n in zip(ts ns)] label=stratified nrarr)

axset_title(processing time for train_test_split)axgrid(True)axset_xscale(log nonposx=clip)axset_xlabel(N)axset_ylabel(time(s) (s ln s))axset_ylim([0515])axlegend()

249 httpscikit-learnorgstablemodulesgeneratedsklearnmodel_selectiontrain_test_splithtml

81 Reacutepartir en base drsquoapprentissage et de test 275

Machine Learning Statistiques et Programmation Version 035930

Crsquoest difficile agrave voir sur ce scheacutema Il faudrait tirer plus drsquoexemple regader les quantiles plutocirct que la seule meacutedianeLe code de scikit-learn250 est plus explicite une permutation preacutecegravede la reacutepartition en train test

813 Streaming splitting

Streaming veut dire qursquoon traite les donneacutees sous la forme drsquoun flux et qursquoon ne sait pas combien il y en Concregravetementil faut commencer la reacutepartition train test au moment sans savoir quand elle srsquoarrecirctera Par conseacutequent il faut qursquoagravetout instant on soit capable drsquointerrompre la reacutepartition et celle-ci doit ecirctre valideLe premier algorithme qui consiste agrave tirer un nombre aleacuteatoire et agrave le reacutepartir en train ou test selon le nombre tireacuteChaque observation est traiteacutee indeacutependamment A tout moment la reacutepartition peut ecirctre interrompue En pratique onimpleacutemente ce type de processus sous la forme drsquoiteacuterateur ou de mapper Crsquoest une fonction qui accepte un iteacuterateursur un ensemble et qui retourne un iteacuterateur sur les valeurs transformeacutees Dans notre cas on retourne lrsquoobservationsuivi de 0 si elle est classeacutee en train et 1 en test

def streaming_split_train_test(stream p)for obs in stream

x = randomrandom()yield obs 0 if x lt= p else 1

def iterate_data(n t)while n gt 0

yield 1 if randomrandom() lt t else 0n -= 1

for obs s in streaming_split_train_test(iterate_data(10 005) 066)print(obs=0 traintest=1format(obs s))

250 httpsgithubcomscikit-learnscikit-learnblobmastersklearnmodel_selection_splitpyL1048

276 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

obs=0 traintest=1obs=0 traintest=0obs=0 traintest=0obs=0 traintest=1obs=0 traintest=0obs=1 traintest=0obs=0 traintest=0obs=0 traintest=0obs=0 traintest=0obs=0 traintest=0

La reacutepartition stratifieacutee repose sur une permutation aleacuteatoire et cela implique drsquoavoir accegraves agrave lrsquointeacutegraliteacute des donneacuteesau preacutealable En streaming ce nrsquoest pas possible Il faut donc penser agrave autre chose pour obtenir une version stratifieacuteede la version streaming Rien nrsquoempecircche en version streaming de garder les derniegraveres observations en meacutemoire pourfaire une mini-permutation Nous allons introduire quelques changements

1 Le stream est maintenant un flux sur deux valeurs lrsquoobservation et la classe agrave laquelle il appartient2 La fonction va conserver les derniegraveres valeurs pour chaque classe3 La fonction va produire des observations de temps en temps quand elle sera sucircre que les observations seront

stratifieacutees4 Nuos allons compter les observations distribueacutees dans chaque base

def streaming_stratified_split_train_test(stream p)n = max(1p 1(1-p))if n gt 10000

raise Exception(Cette reacutepartition train test est vraiment deacuteseacutequilibreacutee)memory = for obs strat in stream

if strat not in memorymemory[strat] = []

memory[strat]append(obs)

for k in memoryv = memory[k]if len(v) gt= n

on permute aleacuteatoirementrandomshuffle(v)i = int(len(v) p + 05)for j in range(0i)

yield v[j] 0 apprentissagefor j in range(ilen(v))

yield v[j] 1 test on efface de la meacutemoire les informations produitesmemory[k] = []

lorsquon a fini il faut tout de mecircme reacutepartir les observations stockeacuteesfor k in memory

v = memory[k] on permute aleacuteatoirementrandomshuffle(v)i = int(len(v) p)for j in range(0i)

(suite sur la page suivante)

81 Reacutepartir en base drsquoapprentissage et de test 277

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

yield v[j] 0 apprentissagefor j in range(ilen(v))

yield v[j] 1 test

iter = streaming_stratified_split_train_test( ((ii) for i in iterate_data(10000 005))rarr 066)df = pandasDataFrame(iter)dfcolumns = [obs train_test]print(dfshape)dfhead()

(10000 2)

df2 = dfcopy()df2[un] = 1piv = df2groupby([obs train_test] as_index=False)count()pivot(train_test obsrarr un)piv

Il y a juste un petit problegraveme avec cette impleacutementation On multiplie la taille du buffer par un reacuteel Je suggegravere drsquoenleverle nombre 05 dans le code pour voir ce qursquoil se passe La somme des arrondis est loin drsquoecirctre un arrondi mecircme si Nchoisi tel que N = max( 1p

11minusp )

piv[sum] = piv[0] + piv[1]piv[ratio] = piv[1] piv[sum]piv

Il faut corriger ces erreurs drsquoarrondi On srsquoinspire de lrsquoalgorithme de Bresenham251 et meacutemoriser les eacuteleacutements reacutepartis

def streaming_stratified_split_train_test2(stream p)n = max(1p 1(1-p))if n gt 10000

raise Exception(Cette reacutepartition train test est vraiment deacuteseacutequilibreacutee)counts = memory = for obs strat in stream

if strat not in memorymemory[strat] = []

memory[strat]append(obs)

for k in memoryv = memory[k]if len(v) gt= n

on permute aleacuteatoirementrandomshuffle(v)if (0k) in counts

tt = counts[1k] + counts[0k]delta = - int(counts[0k] - ttp + 05)

elsedelta = 0

(suite sur la page suivante)

251 httpsfrwikipediaorgwikiAlgorithme_de_tracC3A9_de_segment_de_Bresenham

278 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

i = int(len(v) p + 05)i += deltai = max(0 min(len(v) i))for j in range(0i)

yield v[j] 0 apprentissagefor j in range(ilen(v))

yield v[j] 1 testif (0k) not in counts

counts[0k] = icounts[1k] = len(v)-i

elsecounts[0k] += icounts[1k] += len(v)-i

on efface de la meacutemoire les informations produitesmemory[k] = []

lorsquon a fini il faut tout de mecircme reacutepartir les observations stockeacuteesfor k in memory

v = memory[k] on permute aleacuteatoirementrandomshuffle(v)if (0k) in counts

tt = counts[1k] + counts[0k]delta = - int(counts[0k] - ttp + 05)

elsedelta = 0

i = int(len(v) p + 05)i += deltai = max(0 min(len(v) i))for j in range(0i)

yield v[j] 0 apprentissagefor j in range(ilen(v))

yield v[j] 1 testif (0k) not in counts

counts[0k] = icounts[1k] = len(v)-i

elsecounts[0k] += icounts[1k] += len(v)-i

iter = streaming_stratified_split_train_test2( ((ii) for i in iterate_data(10000 0rarr05)) 066)df = pandasDataFrame(iter)dfcolumns = [obs train_test]df2 = dfcopy()df2[un] = 1piv = df2groupby([obs train_test] as_index=False)count()pivot(train_test obsrarr un)piv[sum] = piv[0] + piv[1]piv[ratio] = piv[1] piv[sum]print(ratio de classe 1 dans leacutechantillon entier 15f

(suite sur la page suivante)

81 Reacutepartir en base drsquoapprentissage et de test 279

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

((piviloc[11] + piviloc[01]) (piviloc[01] + piviloc[00] + piviloc[11]rarr+ piviloc[10]) ))piv

ratio de classe 1 dans leacutechantillon entier 004980

Pas trop mal Le dernier inconveacutenient est la taille de la fenecirctre Dans lrsquoexemple qui suit elle sera de 3 Lrsquoalgorithme vadonc grouper les eacuteleacutements par trois les permuter aleacuteatoirement et les laisser filer Nous ne pourrons jamais avoir troiseacuteleacutements de suite du mecircme cocircteacute train ou test On peut bidouiller comme suit (ligne marqueacutees changement) Lafonction qui suit ne permet toujours pas drsquoavoir de grandes seacutequences reacutepartie du mecircme cocircteacute mais ce sera lrsquoinconveacutenientde ce type drsquoalgorithme La taille du buffer limite cette possibiliteacute

def streaming_stratified_split_train_test3(stream p)n = 2 max(1p 1(1-p)) changementif n gt 10000

raise Exception(Cette reacutepartition train test est vraiment deacuteseacutequilibreacutee)counts = memory = for obs strat in stream

if strat not in memorymemory[strat] = []

memory[strat]append(obs)

for k in memoryv = memory[k]if len(v) gt= n + randomrandint(0 10) changement

on permute aleacuteatoirementrandomshuffle(v)if (0k) in counts

tt = counts[1k] + counts[0k]delta = - int(counts[0k] - ttp + 05)

elsedelta = 0

i = int(len(v) p + 05)i += deltai = max(0 min(len(v) i))for j in range(0i)

yield v[j] 0 apprentissagefor j in range(ilen(v))

yield v[j] 1 testif (0k) not in counts

counts[0k] = icounts[1k] = len(v)-i

elsecounts[0k] += icounts[1k] += len(v)-i

on efface de la meacutemoire les informations produitesmemory[k] = []

lorsquon a fini il faut tout de mecircme reacutepartir les observations stockeacuteesfor k in memory

(suite sur la page suivante)

280 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

v = memory[k] on permute aleacuteatoirementrandomshuffle(v)if (0k) in counts

tt = counts[1k] + counts[0k]delta = - int(counts[0k] - ttp + 05)

elsedelta = 0

i = int(len(v) p + 05)i += deltai = max(0 min(len(v) i))for j in range(0i)

yield v[j] 0 apprentissagefor j in range(ilen(v))

yield v[j] 1 testif (0k) not in counts

counts[0k] = icounts[1k] = len(v)-i

elsecounts[0k] += icounts[1k] += len(v)-i

iter = streaming_stratified_split_train_test3( ((ii) for i in iterate_data(10000 0rarr05)) 066)df = pandasDataFrame(iter)dfcolumns = [obs train_test]df2 = dfcopy()df2[un] = 1piv = df2groupby([obs train_test] as_index=False)count()pivot(train_test obsrarr un)piv[sum] = piv[0] + piv[1]piv[ratio] = piv[1] piv[sum]print(ratio de classe 1 dans leacutechantillon entier 15f

((piviloc[11] + piviloc[01]) (piviloc[01] + piviloc[00] + piviloc[11]rarr+ piviloc[10]) ))piv

ratio de classe 1 dans leacutechantillon entier 005000

81 Reacutepartir en base drsquoapprentissage et de test 281

Machine Learning Statistiques et Programmation Version 035930

814 Streaming distribueacute

Crsquoest possible mais crsquoest un peu plus compliqueacute parce que le hasard en distribueacute crsquoest compliqueacute On nrsquoest jamais sucircrque des seacuteries pseudo-aleacuteatoires soient tout-agrave-fait indeacutependantes lorsqursquoelles sont geacuteneacutereacutees en parallegraveles

82 Correacutelations non lineacuteaires

Les correacutelations indiquent si deux variables sont lineacuteairement eacutequivalentes Comment eacutetendre cette notion agrave desvariables lieacutees mais pas de faccedilon lineacuteaire

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Un exemple (page 282)bull Un peu de theacuteorie (page 284)bull Veacuterifications (page 284)bull Overfitting (page 285)bull Correacutelations de variables cateacutegorielles (page 290)bull Maximal information coefficient (page 298)

matplotlib inline

821 Un exemple

from sklearn import datasets

iris = datasetsload_iris()X = irisdataY = iristargetimport pandasdf = pandasDataFrame(X)dfcolumns = [X1 X2 X3 X4]dfhead()

import seaborn as snssnsset()snspairplot(df)

282 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Et les correacutelations

dfcorr()

82 Correacutelations non lineacuteaires 283

Machine Learning Statistiques et Programmation Version 035930

822 Un peu de theacuteorie

Le coefficient de correacutelation252 de Pearson est calculeacute comme suit

cor(Xi Xj) =cov(Xi Yi)

σ(Xi)σ(Xj)

Lorsque les variables sont centreacutees EXi = EXj = 0 cette formule devient

cor(Xi Xj) =E(XiXj)radicEX2

i EX2j

Lorsque les variables sont reacuteduites EX2i = EX2

j = 1 cette formule devient cor(Xi Xj) = E(XiXj) Admettonsmaintenant que lrsquoon cherche agrave trouver le coefficient αij qui minimise la variance du bruit ϵij

Xj = αijXi + ϵij

Le coefficient αij est le reacutesultat drsquoune reacutegression lineacuteaire qui minimise E(Xj minus αijXi)2 Si les variables Xi Xj

sont centreacutees et reacuteduites αlowastij = E(XiXj) = cor(Xi Xj) On eacutetend cette deacutefinition dans le cas drsquoune fonction

parameacutetrable f f(ωX) rarr R et drsquoune reacutegression non lineacuteaire On suppose que les paramegravetres ωlowast minimisentla quantiteacute minω(Xj minus f(ωXi))

2 On eacutecrit alors Xj = αijf(ωlowastXi)

αij+ ϵij et on choisit αij de telle sorte que

E(

f(ωlowastXi)2

α2ij

)= 1 On deacutefinit la correacutelation non lineacuteaire au sens de f

corf (Xi Xj) =radic

E(f(ωXi)2)

On veacuterifie que ce coefficient est compris entre [0 1] Il est positif de maniegravere eacutevidente Il est eacutegalement infeacuterieur agrave1 si cela nrsquoeacutetait pas le cas nous pourrions construire une fonction f(ωlowast X) + c qui est une meilleur solution pour leprogramme de minimisation Ce nombre ressemble agrave une correacutelation agrave ceci pregraves qursquoelle ne peut ecirctre neacutegative

823 Veacuterifications

Tout drsquoabord le cas lineacuteaire

from sklearnpreprocessing import scaleimport numpy

def correlation_etendue(df model params)cor = dfcorr()df = scale(df)for i in range(corshape[0])

xi = df[ ii+1]for j in range(corshape[1])

mod = model(params)xj = df[ j]modfit(xi xj)v = modpredict(xi)c = numpystd(v)coriloc[ij] = c

return cor

from sklearnlinear_model import LinearRegressioncor = correlation_etendue(df LinearRegression fit_intercept=False)cor

252 httpsfrwikipediaorgwikiCorrC3A9lation_(statistiques)

284 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

On affiche agrave nouveau les correacutelations qui sont identiques au signe pregraves

dfcorr()

Et le cas non lineacuteaire

from sklearntree import DecisionTreeRegressorcor = correlation_etendue(df DecisionTreeRegressor)cor

from sklearnensemble import RandomForestRegressorcor = correlation_etendue(df RandomForestRegressor n_estimators=10)cor

824 Overfitting

Ces chiffres sont beaucoup trop optimistes Les modegraveles de machine learning peuvent tout agrave fait faire de lrsquooverfittingIl faut ameacuteliorer la fonction en divisant en apprentissage et test plusieurs fois Il faut eacutegalement tenir compte de lrsquoerreurde preacutediction On rappelle que

Xj = αijf(ωlowast Xi)

αij+ ϵij = corf (Xi Xj)

f(ωlowast Xi)radicE(f(ωXi)2)

+ ϵij

Or E(X2j ) = 1 et on suppose que les bruits ne sont pas correacuteleacutees lineacuteairement aux f(ωlowast Xi) On en deacuteduit que

corf (Xi Xj) =radic1minus Eϵ2ij

from sklearnmodel_selection import train_test_splitimport numpy

def correlation_cross_val(df model draws=5 params)cor = dfcorr()df = scale(df)for i in range(corshape[0])

xi = df[ ii+1]for j in range(corshape[1])

xj = df[ j]mem = []for k in range(0 draws)

xi_train xi_test xj_train xj_test = train_test_split(xi xj test_rarrsize=05)

mod = model(params)modfit(xi_train xj_train)v = modpredict(xi_test)c = (1 - numpyvar(v - xj_test))memappend(max(c 0) 05)

coriloc[ij] = sum(mem) len(mem)return cor

cor = correlation_cross_val(df LinearRegression fit_intercept=False draws=20)cor

cor = correlation_cross_val(df DecisionTreeRegressor)cor

82 Correacutelations non lineacuteaires 285

Machine Learning Statistiques et Programmation Version 035930

cor = correlation_cross_val(df RandomForestRegressor n_estimators=10)cor

Les reacutesultats sont assez fluctuants lorsque les donneacutees sont mal correacuteleacutees On remarque eacutegalement que la matrice nrsquoestplus neacutecessairement symmeacutetrique

import matplotlibpyplot as plt

def pairplot_cross_val(data model=None ax=None params)if ax is None

fig ax = pltsubplots(datashape[1] datashape[1] figsize=paramsget(figsizerarr (1010)))if figsize in params

del params[figsize]if model is None

from sklearnlinear_model import LinearRegressionmodel = LinearRegression

df = scale(data)cor = numpycorrcoef(dfT)for i in range(corshape[0])

xi = df[ ii+1]for j in range(corshape[1])

xj = df[ j]mem = []xi_train xi_test xj_train xj_test = train_test_split(xi xj test_size=0

rarr5)mod = model(params)modfit(xi_train xj_train)v = modpredict(xi_test)mod = model(params)modfit(xi_test xj_test)v2 = modpredict(xi_train)ax[ij]plot(xj_test v )ax[ij]plot(xj_train v2 )if j == 0

ax[ij]set_ylabel(datacolumns[i])if i == datashape[1]-1

ax[ij]set_xlabel(datacolumns[j])mi = min(min(xj_test) min(v) min(xj_train) min(v2))ma = max(max(xj_test) max(v) max(xj_train) max(v2))ax[ij]plot([mi ma] [mi ma] --)

return ax

ax = pairplot_cross_val(df)ax

286 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

ax = pairplot_cross_val(df model=DecisionTreeRegressor)ax

82 Correacutelations non lineacuteaires 287

Machine Learning Statistiques et Programmation Version 035930

ax = pairplot_cross_val(df model=RandomForestRegressor n_estimators=10)ax

288 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

from sklearnneighbors import KNeighborsRegressorax = pairplot_cross_val(df model=KNeighborsRegressor)ax

82 Correacutelations non lineacuteaires 289

Machine Learning Statistiques et Programmation Version 035930

825 Correacutelations de variables cateacutegorielles

Crsquoest le problegraveme eacutepineux si on se restreint au lineacuteaire Cela nrsquoa pas trop de sens drsquoaffecter une valeur agrave chaque cateacutegorieet la correacutelation de deux variables binaires (des modaliteacutes) est toujours eacutetrange car il nrsquoy a que deux valeurs possibles

cov(XY ) = E [(X minus EX)(Y minus EY )] = E(XY )minus EXEY = P(X = 1 et Y = 1)minus EXEY

Dans le cas de variables binaires geacuteneacutereacutees de modaliteacutes de la mecircme variables cateacutegorielles le premier terme est toujoursnul puisque les modaliteacutes sont exclusives et la correacutelation est toujours neacutegative

import randomex = numpyzeros((100 2))for i in range(0 exshape[0])

h = randomrandint(0 exshape[1]-1)(suite sur la page suivante)

290 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

ex[i h] = 1ex[5]

array([[1 0][0 1][1 0][1 0][1 0]])

numpycorrcoef(exT)

array([[ 1 -1][-1 1]])

import randomex = numpyzeros((100 3))for i in range(0 exshape[0])

h = randomrandint(0 exshape[1]-1)ex[i h] = 1

ex[5]numpycorrcoef(exT)

array([[ 1 -051449576 -051449576][-051449576 1 -047058824][-051449576 -047058824 1 ]])

Supposons maintenant que nous avons deux variables cateacutegorielles tregraves proches bull X1 est une couleur rouge bleu grisbull X2 est une nuance rose orange cyan magenta blanc noir

c1 = [rouge bleu gris]c2 = [rose orange cyan magenta blanc noir]ind = [randomrandint(0 2) for i in range(0 100)]x1 = [c1[i] for i in ind]x2 = [c2[i2 + randomrandint(01)] for i in ind]df = pandasDataFrame(dict(X1=x1 X2=x2))dfhead()

On peut eacutevidemment transformer en entier

dummies = pandasget_dummies(df)dummieshead()

dummiescorr()

Ca ne dit pas grand-chose

from sklearnpreprocessing import LabelEncoderenc = LabelEncoder()df[X1e] = encfit_transform(df[X1])

(suite sur la page suivante)

82 Correacutelations non lineacuteaires 291

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

df[X2e] = encfit_transform(df[X2])dfhead()

dfcorr()

Ca ne veut toujours pas dire grand-chose Et si on change la premiegravere colonne en permutant les lables

df[X1e] = df[X1e]apply(lambda i (i+1)3)dfhead()

dfcorr()

La correacutelation lineacuteaire sur des variables cateacutegorielles nrsquoa pas de sens Essayons avec un arbre de deacutecision Crsquoest lemodegravele adeacutequat pour ce type de valeur discregravetes

cor = correlation_cross_val(df[[X1e X2e]] DecisionTreeRegressor)cor

Et si on permute le premier label

df[X1e] = df[X1e]apply(lambda i (i+1)3)correlation_cross_val(df[[X1e X2e]] DecisionTreeRegressor)

Mecircme reacutesultat qui srsquointerpregravete de la sorte bull La variable X1e se deacuteduit de X2e (car cor(X2e X1e) = 1)bull La variable X2e et fortement lieacute agrave X2e

La valeur numeacuterique choisie pour repreacutesente la variable cateacutegorielle nrsquoa pas drsquoimpact sur les reacutesultats

ax = pairplot_cross_val(df[[X1e X2e]] model=DecisionTreeRegressor)ax

292 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Et sur un jeu de donneacutees plus complet

from sklearndatasets import load_bostondf = load_boston()df = pandasDataFrame(dfdata columns=dffeature_names)dfhead()

Cxavierdupre__home_github_forkscikit-learnsklearnutilsdeprecationpy87 FutureWarningrarrFunction load_boston is deprecated load_boston is deprecated in 10 and will berarrremoved in 12

The Boston housing prices dataset has an ethical problem You can refer tothe documentation of this function for further detailsThe scikit-learn maintainers therefore strongly discourage the use of thisdataset unless the purpose of the code is to study and educate aboutethical issues in data science and machine learningIn this special case you can fetch the dataset from the original

82 Correacutelations non lineacuteaires 293

Machine Learning Statistiques et Programmation Version 035930

sourceimport pandas as pdimport numpy as np

data_url = httplibstatcmuedudatasetsbostonraw_df = pdread_csv(data_url sep=s+ skiprows=22 header=None)data = nphstack([raw_dfvalues[2 ] raw_dfvalues[12 2]])target = raw_dfvalues[12 2]

Alternative datasets include the California housing dataset (iefetch_california_housing()253) and the Ames housingdataset You can load the datasets as follows

from sklearndatasets import fetch_california_housinghousing = fetch_california_housing()

for the California housing dataset andfrom sklearndatasets import fetch_openmlhousing = fetch_openml(name=house_prices as_frame=True)

for the Ames housing datasetwarningswarn(msg category=FutureWarning)

dfcorr()

On dessine les 5 premiegraveres variables On voit que la variable CHAS est binaire

snspairplot(df[dfcolumns[6]])

253 httpsscikitunhboxvoidbxkernzcharlsquoprotectdiscretionarycharhyphencharfontlearnorgstablemodulesgeneratedsklearndatasetsfetch_california_housinghtmlsklearndatasetsfetch_california_housing

294 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

correlation_cross_val(df DecisionTreeRegressor)

pairplot_cross_val(df[dfcolumns[6]] model=DecisionTreeRegressor figsize=(1616))

82 Correacutelations non lineacuteaires 295

Machine Learning Statistiques et Programmation Version 035930

On regarde en pariculier les variables TAX RAD PTRATIO

snspairplot(df[[RAD TAX PTRATIO]])

296 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

df[[RAD TAX PTRATIO]]corr()

pairplot_cross_val(df[[RAD TAX PTRATIO]] model=DecisionTreeRegressor)

82 Correacutelations non lineacuteaires 297

Machine Learning Statistiques et Programmation Version 035930

correlation_cross_val(df[[RAD TAX PTRATIO]] DecisionTreeRegressor)

Les variables sont toutes trois lieacutees de faccedilon non lineacuteaire

826 Maximal information coefficient

Cette approche est plutocirct pragmatique mais peut se reacuteveacuteler coucircteuse en terme de calculs Elle permet aussi decomprendre qursquoun coefficient de correacutelation deacutepend des hypothegraveses qursquoon choisi pour les donneacutees On peut toujoursconstruire un coefficient de correacutelation qui soit eacutegal agrave 1 mais il correspond agrave toujours agrave un pheacutenomegravene qursquoon souhaiteeacutetudier La correacutelation lineacuteaire recherche des relations lineacuteaires On peut chercher une relation polynomiale Les arbresde deacutecision recherche une correacutelation construite agrave partir de fonction en escalier Plus la relation a de degreacute de liberteacuteplus le coefficient a de chance de tendre vers 1 moins il a de chance drsquoecirctre aussi eacuteleveacute sur de nouvelles donneacuteesCela permet neacuteanmoins de mieux comprendre les avantages et les inconveacutenients de meacutetriques du type MIC254 ouMaximal information coefficient Plus de deacutetails sont disponibles dans cet article Equitability mutual information

254 httpsenwikipediaorgwikiMaximal_information_coefficient

298 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

and the maximal information coefficient255 Le module minepy256 impleacutemente cette meacutetrique ainsi que drsquoautres quipoursuivent le mecircme objectif Lrsquoinformation mutuelle est deacutefinie comme ceci pour deux variables discregravetes

MI(XY ) =sumxisinX

sumyisinY

p(x y) ln2p(x y)

p(x)p(y)

La fonction p(x y) deacutefinit la distribution conjointe des deux variables p(x) p(y) les deux probabiliteacutes marginales Ilexiste une extension pour les variables continues

MIC(XY ) =

intxisinXisinyisinY p(x y) ln2

p(x y)

p(x)p(y)dxdy

Une faccedilon de calculer une approximation du coefficient MIC(x y) est de discreacutetiser les deux variables X et Y ceqursquoon fait en appliquant un algorithme similaire agrave celui utiliseacute pour construire un arbre de deacutecision agrave ceci pregraves que qursquoilnrsquoy a qursquoune seule variable et que la variable agrave preacutedire est elle-mecircmeLrsquoinformation mutuelle est inspireacute de la distance de Kullback-Leiber257 qui est une distance entre deux probabiliteacutes quisont ici la disribution du couple (XY ) et la distribution que ce couple aurait si les deux variables eacutetaient indeacutependantescrsquoest agrave dire le produit de leur distribution

matplotlib inline

import numpy as npimport matplotlibpyplot as plt

rs = nprandomRandomState(seed=0)

def mysubplot(x y numRows numCols plotNumxlim=(-4 4) ylim=(-4 4))

r = nparound(npcorrcoef(x y)[0 1] 1)

deacutebut ajoutdf = pandasDataFrame(dict(x=x y=y))cor = correlation_cross_val(df DecisionTreeRegressor)dt = max(coriloc[10] coriloc[01])

ax = pltsubplot(numRows numCols plotNumxlim=xlim ylim=ylim)

axset_title(Pearson r=1fnDT=1f (r dt)fontsize=10)axset_frame_on(False)axaxesget_xaxis()set_visible(False)axaxesget_yaxis()set_visible(False)axplot(x y )axset_xticks([])axset_yticks([])return ax

def rotation(xy t)return npdot(xy [[npcos(t) -npsin(t)] [npsin(t) npcos(t)]])

(suite sur la page suivante)

255 httpsarxivorgabs13017745v1256 httpminepyreadthedocsioenlatestpythonhtml257 httpsfrwikipediaorgwikiDivergence_de_Kullback-Leibler

82 Correacutelations non lineacuteaires 299

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

def mvnormal(n=1000)cors = [10 08 04 00 -04 -08 -10]for i cor in enumerate(cors)

cov = [[1 cor][cor 1]]xy = rsmultivariate_normal([0 0] cov n)mysubplot(xy[ 0] xy[ 1] 3 7 i+1)

def rotnormal(n=1000)ts = [0 nppi12 nppi6 nppi4 nppi2-nppi6

nppi2-nppi12 nppi2]cov = [[1 1][1 1]]xy = rsmultivariate_normal([0 0] cov n)for i t in enumerate(ts)

xy_r = rotation(xy t)mysubplot(xy_r[ 0] xy_r[ 1] 3 7 i+8)

def others(n=1000)x = rsuniform(-1 1 n)y = 4(x2-05)2 + rsuniform(-1 1 n)3mysubplot(x y 3 7 15 (-1 1) (-13 1+13))

y = rsuniform(-1 1 n)xy = npconcatenate((xreshape(-1 1) yreshape(-1 1)) axis=1)xy = rotation(xy -nppi8)lim = npsqrt(2+npsqrt(2)) npsqrt(2)mysubplot(xy[ 0] xy[ 1] 3 7 16 (-lim lim) (-lim lim))

xy = rotation(xy -nppi8)lim = npsqrt(2)mysubplot(xy[ 0] xy[ 1] 3 7 17 (-lim lim) (-lim lim))

y = 2x2 + rsuniform(-1 1 n)mysubplot(x y 3 7 18 (-1 1) (-1 3))

y = (x2 + rsuniform(0 05 n)) nparray([-1 1])[rsrandint(0 1 size=n)]

mysubplot(x y 3 7 19 (-15 15) (-15 15))

y = npcos(x nppi) + rsuniform(0 18 n)x = npsin(x nppi) + rsuniform(0 18 n)mysubplot(x y 3 7 20 (-15 15) (-15 15))

xy1 = nprandommultivariate_normal([3 3] [[1 0] [0 1]] int(n4))xy2 = nprandommultivariate_normal([-3 3] [[1 0] [0 1]] int(n4))xy3 = nprandommultivariate_normal([-3 -3] [[1 0] [0 1]] int(n4))xy4 = nprandommultivariate_normal([3 -3] [[1 0] [0 1]] int(n4))xy = npconcatenate((xy1 xy2 xy3 xy4) axis=0)mysubplot(xy[ 0] xy[ 1] 3 7 21 (-7 7) (-7 7))

pltfigure(figsize=(147))mvnormal(n=800)

(suite sur la page suivante)

300 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

rotnormal(n=200)others(n=800) plttight_layout() pltshow()

83 File drsquoattente un petit exemple

Psychokinegravese les ampoules grillent agrave distance

bull Petite histoire (page 302)bull Un peu de theacuteorie (page 302)

ndash File drsquoattente cas MM1 (page 303)ndash File drsquoattente cas MMS (page 304)ndash Retour aux ampoules (page 305)ndash Application numeacuterique (page 306)

bull Programme informatique (page 306)bull Bibliographie (page 308)

83 File drsquoattente un petit exemple 301

Machine Learning Statistiques et Programmation Version 035930

831 Petite histoire

Cet eacutenonceacute srsquoinspire du livre Devenez sorciers devenez savants258 de Georges Charpak et Henri Broch dont est tireacutelrsquoextrait suivant

Le preacutesentateur se tourne vers la cameacutera principale et drsquoun air tregraves seacuterieux et enjocircleur regarde leteacuteleacutespectateur droit dans les yeux en deacuteclarant Allez-y Allumez cinq ou six lampes agrave cocircteacute de vousPuis il se tourne vers le meacutedium et demande Vous pensez reacuteellement pouvoir le faire Apregraves quelquesmoments drsquoheacutesitation le mage se prononce Jrsquoespegravere avoir suffisamment de concentration ce soir maisje ne suis pas dans les conditions vraiment ideacuteales pour produire ce genre de pheacutenomegravene agrave distancedrsquohabitude je me retire pendant plusieurs jours dans une solitude totale et une profonde obscuriteacute apregravesun jeucircne strict

Si jamais il eacutechoue le public le mettra au compte des circonstances et non pas de ces compeacutetences Et pourtant lemeacutedium nrsquoeacutechoue pas Des ampoules grillent chez les teacuteleacutespectateurs qui regardent cette eacutemission Ils font part austandard teacuteleacutephonique de la chaicircne qui diffuse en direct cet extraordinaire moment de culture Le meacutedium a donc bienreacuteussi - comme il le preacutetendait - en concentrant sa puissance spirituelle sur la matiegravere agrave griller des ampoules eacutelectriquesagrave distanceSupposons que cette eacutemission soit suivie par environ un million de teacuteleacutespectateurs et qursquoelle dure une heure ou plusCela signifie qursquoenviron cinq agrave six millions drsquoampoules ont eacuteteacute allumeacutees pendant une heure ou plus Supposons que cenombre soit de deux millionsLa dureacutee de vie moyenne drsquoune ampoule agrave incandescence est de mille heures Ce qui signifie que pendant la dureacutee delrsquoeacutemission il y aura environ deux milles lampes grilleacutees

832 Un peu de theacuteorie

Ce problegraveme ressemble agrave un problegraveme de files drsquoattente Ce dernier consiste agrave deacuteterminer un nombre adeacutequat deguichets en fonction de la vitesse de remplissage drsquoune file drsquoattente afin de limiter le temps drsquoattente On deacutesignesouvent cette probleacutematique par un sigle du type MMS Le premier M signifie qursquoon suppose que la probabiliteacute quen personnes arrivent pendant une dureacutee t suit une loi de Poisson de paramegravetre λt Le second M signifie qursquoon supposeque le temps de traitement drsquoune personne par un guichetier suit une loi exponentielle de paramegravetre micro S deacutesigne lenombre de guichets Pour de tels problegravemes on cherche agrave deacuteterminer la probabiliteacute que le systegraveme (file drsquoattente +guichets) contienne n personnes De cette probabiliteacute on peut deacuteduire par exemple le temps drsquoattente moyen pour unepersonne qui entre dans la file drsquoattente On suppose que le systegraveme est stationnaire les probabiliteacutes ne deacutependent pasdu temps

Deacutefinition D1 loi de Poisson et loi exponentielleSi une variable X suit une loi de Poisson de paramegravete λt elle a pour densiteacute

P (X = n) =(λt)n

neminusλt (81)

Si une variable X suit une loi exponentielle de paramegravetre micro elle a pour densiteacute

f(t) = micro eminusmicrot et P (X ⩽ t) =

int t

0

micro eminusmicroxdx = 1minus eminusmicrot (82)

258 httpsfrwikipediaorgwikiDevenez_sorciers_devenez_savants

302 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

File drsquoattente cas MM1

On srsquointeacuteresse drsquoabord agrave un systegraveme MM1 Il nrsquoy a donc qursquoun seul guichet λ est le nombre moyen drsquoarriveacutee paruniteacute de temps tandis que micro est le nombre moyen de clients traiteacutes par uniteacute de temps On suppose eacutegalement queλ lt micro Dans le cas contraire la file drsquoattente devient infinie On deacutesigne par pn(t) la probabiliteacute que la file drsquoattentecontiennent n personne Que vaut cette probabiliteacute agrave lrsquoinstant t+ dt On considegravere que pendant la dureacutee t+dt au plus une personne peut srsquoajouter agrave la file drsquoattente et au plus une personnepeut ecirctre traiteacutee par un guichetier Les autres cas sont neacutegligeables On deacutesigne par B(x t dt) le fait qursquoune personnequitte un guichet pendant les instants t et t + dt sachant qursquoelle est arriveacutee au guichet agrave lrsquoinstant x On chercheagrave deacuteterminer la probabiliteacute P (B(x t dt)) On peut dire aussi que P (B(x t dt) est la probabiliteacute que le temps detraitement drsquoune personne est infeacuterieur agrave t+ dtminus x sachant qursquoil est supeacuterieur agrave tminus x Si D est une variable de dureacuteesuivant une loi exponentielle alors

P (B(x t dt)) = P (D ⩽ t+ dtminus x|D gt tminus x)

=P (t+ dtminus x ⩾ D gt tminus x)

P (D gt tminus x)

=

int t+dtminusx

tminusxmicroeminusmicrouduintinfin

tminusxmicroeminusmicroudu

=eminusmicro(tminusx) minus eminusmicro(tminusx+dt)

eminusmicro(tminusx)

= 1minus eminusmicrodt

P (B(x t dt)) = minusmicrodt+ o(dt)

Cette probabiliteacute ne deacutepend ni de x ni de t En ce qui concerne les arriveacutees la probabiliteacute qursquoune personne arrivependant les instants t et t + dt ne deacutepend pas du passeacute et suit une loi de Poisson de paramegravetre λ Cette constation etlrsquoeacutequation (832) nous permettent drsquoeacutecrire que

P (une personne arrive pendant dt) = λdt eminusλdt sim λdt+ o(dt) (83)P (une personne part pendant dt) = 1minus eminusmicrodt sim microdt+ o(dt) (84)

De plus pendant la dureacutee dt quatre cas sont possibles bull Une personne peut arriver sans qursquoaucune ne parte drsquoun guichetbull Une personne peut partir drsquoun guichet sans qursquoaucune autre nrsquoarrivebull Une personne peut arriver et une autre partir drsquoun guichetbull Aucune personne nrsquoarrive et aucune ne part drsquoun guichet

Ces quatre cas permettent drsquoeacutecrire la relation suivante

pn(t+ dt) = pnminus1(t) λdt+ pn+1(t) microdt+

pn(t) (microdtλdt) + pn(t) (1minus microdt) (1minus λdt)

On neacuteglige les termes du second degreacute en (dt)2

pn(t+ dt) = pnminus1(t) λdt+ pn+1(t) microdt+ pn(t) (1minus microdtminus λdt)

lArrrArr pn(t+ dt)minus pn(t)

dt= λpnminus1(t) + micropn+1(t)minus (micro+ λ) pn(t)

Cette relation nrsquoest vraie que lorsque n gt 0 lorsque n = 0 aucune personne deacutejagrave preacutesente ne peut ecirctre traiteacutee par unguichetier on a donc

p0(t+ dt)minus p0(t)

dt= microp1(t)minus λp0(t)

Comme le systegraveme est stationnaire toutes les deacuteriveacutees sont nulles Les probabiliteacutes ne deacutependent pas du temps Cecidonne les relations suivantes

λpnminus1 + micropn+1 minus (micro+ λ) pn = 0microp1 minus λp0 = 0

lArrrArr

micropn+1 = (micro+ λ) pn minus λ pnminus1

microp1 = λp0

83 File drsquoattente un petit exemple 303

Machine Learning Statistiques et Programmation Version 035930

On veacuterifie par reacutecurrence que

pn =

micro

)n

p0

Il reste agrave deacuteterminer p0 Or commesuminfin

0 pn = 1 = p0suminfin

0

(λmicro

)n on obtient que fracp_0 1 - fraclambdamu

= 1 Longleftrightarrow p_0 = 1 - fraclambdamuExemple On suppose qursquoun meacutedecin traite en moyenne quatre patients par heure tandis qursquoil accepte trois rendez-vous par heureDonc λ = 3 et micro = 4 Le nombre moyen n de patients dans sa salle drsquoattente est donneacute par

n =

infinsum0

npn =

(1minus λ

micro

) infinsum0

n

micro

)n

=

λmicro

1minus λmicro

microminus λ

Il y a donc en moyenne trois personnes dans la salle drsquoattente de ce meacutedecin Comme le temps moyen de traitement dechacun est 1

micro le temps moyen drsquoattente drsquoun patient arrivant dans la salle drsquoattente est λmicromicrominusλ Ce temps est eacutegal agrave trois

quarts drsquoheure pour cet exemple

File drsquoattente cas MMS

Le systegraveme contient doreacutenavant S guichets on suppose que la vitesse micro de traitement des clients est commune agrave tousles guichets On cherche tout drsquoabord la probabiliteacute qursquoune personne srsquoen aille parmi les k qui occupent un guichet Ondeacutesigne par (D1 Dk) k variables indeacutependantes suivant une loi exponentielle de paramegravetre micro pendant un tempsdt la probabiliteacute qursquoune personne parmi k quitte un guichet est

P (min D1 Dk ⩽ dt) = 1minus P (min D1 Dk gt dt)

= 1minus

[kprod

n=1

P (Dn gt dt)

]

= 1minus

[kprod

n=1

1minus P (Dn ⩽ dt)

]

= 1minus

[kprod

n=1

eminusmicrodt

]= 1minus eminuskmicrodt sim kmicrodt+ o(dt)

Pour deacuteterminer les probabiliteacutes (pn)n on applique le mecircme raisonnement que pour un systegravemeMM1 en distinguantles cas n ⩽ S et n gt S On adapte la reacutecurrence donneacutee par le systegraveme drsquoeacutequations (832) au cas MMS microp1 minus λp0 = 0

λpnminus1 + (n+ 1)micropn+1 minus (nmicro+ λ) pn = 0 si 1 ⩽ n lt Sλpnminus1 + Smicropn+1 minus (Smicro+ λ) pn = 0 si n ⩾ S

On suppose que λSmicro lt 1 afin que la file drsquoattente ne devienne infinie Comme pour un systegraveme MM1 ces formules

de reacutecurrences et le fait quesuminfin

0 pn = 1 permet de deacuteduire que

p0 =1

(λmicro )

S

S(1minus λSmicro )

+sumSminus1

k=1(λ

micro )n

n

pn =1

n

micro

)n

p0 si n lt S

pn =1

SnminusSS

micro

)n

p0 si n ⩾ S

304 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Ces calculs sont utiliseacutes pour optimiser le nombre de guichets Chaque guichetier a un coucirct qui doit ecirctre compareacute avecle coucirct associeacute au temps drsquoattente des clients Ces reacutesultats sont extraits du livre [Faure2000]

La theacuteorie des files drsquoattente remonte aux premiers travaux de K Erlang (1917) sur le calcul dunombre drsquoorganes de chaque type agrave installer dans un central teacuteleacutephonique automatique Deacuteveloppeacuteeaussi par Engset (1918) cette theacuteorie srsquoest amplifieacutee sous lrsquoimpulsion de nombreux chercheurs (E BorelD Kendall A Kolmogorov Khintchine LC Palm F Pollaczek L Feller ) Les informaticienslrsquoutilisent notamment pour lrsquoeacutevaluation de performances agrave titre preacutevisionnel des systegravemes ou des reacuteseauxinformatiques

Retour aux ampoules

La dureacutee de traitement drsquoun client fait penser agrave la dureacutee de vie drsquoune ampoule Les lampes font office de guichetstandis que le rocircle des clients est joueacute par des lumiegraveres Toutefois ce nrsquoest pas le temps drsquoattente moyen ni la longueurmoyenne de la file drsquoattente qui nous inteacuteresse mais en quelque sorte le nombre de clients qui sont traiteacutes pendant unedureacutee T En fait plus exactement crsquoest le nombre de guichets qui auront traiteacutes au moins un client pendant une dureacuteeT qui nous inteacuteresse Il correspond exactement au nombre drsquoampoules qui vont griller pendant cette mecircme peacuteriode T Il reste agrave deacutefinir ce qursquoest une file drsquoattente drsquoampoules et surtout son paramegravetre λLorsqursquoune ampoule grille elle est a priori changeacutee dans les plus brefs deacutelais comme si la file drsquoattente des ampouleseacutetait infinie Ceci signifie que λ gtgt micro configuration qui sort du champ drsquoapplication des files drsquoattente MMSLe paramegravetre λ nrsquoa a priori aucun rocircle agrave jouer On peut neacuteanmoins srsquoinspirer de la meacutethode deacuteveloppeacutee dans lesparagraphes preacuteceacutedants pour aborder le problegraveme des ampoulesOn suppose que la dureacutee de vie drsquoune ampoule suit toujours une loi exponentielle de paramegravetre micro et qursquoil y en aexactement S qui brillent en mecircme temps On note pn(t) la probabiliteacute que n ampoules aient grilleacutees agrave lrsquoinstant t SiN(t) est le nombre drsquoampoules grilleacutees agrave lrsquoinstant t pn(t) = P (N(t) = n) Cette fonction nrsquoest plus stationnaire etdeacutecroicirct avec le temps agrave partir drsquoun certain moment Plus on avance dans le temps plus le nombre drsquoampoules grilleacuteesaugmente Par conseacutequent la probabiliteacute qursquoil y ait n ampoules grilleacutees augmente tout drsquoabord puis agrave partir drsquounmoment t elle diminue On utilise un raisonnement similaire agrave celui qui a permis drsquoeacutecrire les eacutequations (832)(832) pour obtenir

pn(t+ dt) = (1minus Smicrodt) pn(t) + Smicropnminus1(t)dt

lArrrArr pn(t+ dt)minus pnminus1(t)

dt= minusSmicropn(t) + Smicropnminus1(t)

lArrrArr pprimen(t) = minusSmicropn(t) + Smicropnminus1(t)

On connaicirct la fonction p0(t) puisqursquoelle correspond agrave la probabiliteacute qursquoaucune des S ampoules nrsquoait grilleacute depuislrsquoinstant~0 jusqursquoagrave lrsquoinstant t par conseacutequent

p0(t) = P ( dureacutee de vie des S ampoules soient toutes supeacuterieures agrave t)

=rArr p0(t) =

[int infin

t

microeminusmicroudu

]S=rArr p0(t) = eminusSmicrot

Lrsquoeacutequation (832) permet de deacutefinir une suite drsquoeacutequations diffeacuterentielles du premier degreacute

p0(t) = eminusSmicrot

pprime1(t) = minusSmicrop1(t) + SmicroeminusSmicrot

pprime2(t) = minusSmicrop2(t) + p1(t)

pprimen(t) = minusSmicropn(t) + Smicropnminus1(t)

On peut donc calculer par reacutecurrence la suite de fonction (pn(t))n La solution de lrsquoeacutequation diffeacuterentielle homogegraveneest eminusSmicrot On utilise la meacutethode de la variation de la constante en posant pn(t) = Cn(t)e

minusSmicrot On aboutit agrave lrsquoeacutequation

83 File drsquoattente un petit exemple 305

Machine Learning Statistiques et Programmation Version 035930

pprimen(t) = minusSmicropn(t) + Smicropnminus1(t) = minusSmicropn(t) + C primen(t)e

minusSmicrot

=rArr C primen(t)e

minusSmicrot = Smicropnminus1(t)

=rArr C primen(t) = Smicropnminus1(t)e

Smicrot

Pour n = 1 on obtient C prime1(t) = Smicro =rArr C prime

1(t) = Smicrot + A1 Par conseacutequent p1(t) = (Smicrot+A1) eminusSmicrot On

sait que foralltsuminfin

0 pn(t) = 1 mais cela ne permet pas de deacuteterminer la constante A1 Neacuteanmoins en faisant tendret minusrarr 0 neacutecessairement p1(t) minusrarr 0 Par conseacutequent A1 = 0 et p1(t) = Smicrot eminusSmicrot On pose maintenantp2(t) = C2(t)e

minusSmicrot La reacutesolution de lrsquoeacutequation diffeacuterentielle (832) pour n = 2 aboutit agrave

C prime2(t) = Smicrop1(t)e

Smicrot = (Smicrot)2

=rArr C2(t) =1

2S2micro2t2 +A2

=rArr p2(t) =

(1

2S2micro2t2 +A2

)eminusSmicrot

De mecircme en faisant tendre t minusrarr 0 on deacutemontre que A2 = 0 En poursuivant ce raisonnement par reacutecurrence ondeacutemontre que

pn(t) =(Smicrot)

n

neminusSmicrot (85)

pn(t) = P (N(t) = n) et drsquoapregraves lrsquoeacutequation (85) la variable aleacuteatoire N(t) suit une loi de Poisson de paramegravetre SmicrotN est aussi appeleacute processus de Poisson259 Lrsquoespeacuterance de N est eacutegale agrave EN(t) = Smicrot Pendant une dureacutee T lenombre moyen drsquoampoules grilleacutees est

EN(t)minusN(tminus T ) = EN(T )minus EN(tminus T ) = SmicroT

Ce nombre est indeacutependant du temps t

Application numeacuterique

Pour des ampoules drsquoune dureacutee de 1000 heures le paramegravetre micro = 11000 T = 1 Srsquoil y a deux millions drsquoampoules le

nombre moyen drsquoampoules grilleacutees par heure est SmicroT = 2000 On retrouve le reacutesultat eacutenonceacute

833 Programme informatique

La dureacutee de vie de chaque ampoule suit une loi exponentielle de paramegravetre micro Il faut donc simuler une telle variabledont la fonction de reacutepartition est Fmicro(x) = 1 minus emicrox On utilise pour cela une proprieacuteteacute qui deacutecoule de la fonction dereacutepartition On note Fminus1

micro (x) = minus ln(1minusx)micro Cette fonction veacuterifie Fminus1

micro (Fmicro(x)) = 1 Or si U est une variable aleacuteatoireuniforme sur [0 1] alors la variable V = Fminus1

micro (U) suit la loi exponentielle avec micro pour paramegravetre EffectivementP (V ⩽ t) = P

(Fminus1micro (U) ⩽ t

)= P (U ⩽ Fmicro(t)) = Fmicro(x) La fonction de reacutepartition de la variable V est Fmicro V est

donc une loi exponentielle de paramegravetre micro La premiegravere fonction simule une variable exponentielle de paramegravetre micro ltltlt

import mathimport random

def generate_expo(mu)(suite sur la page suivante)

259 httpsfrwikipediaorgwikiProcessus_de_Poisson

306 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

x = 0while x == 0

x = randomrandom()y = - mathlog(1 - x) mureturn y

print(generate_expo(2))

gtgtgt

0760195985951345

Le module random260 propose aussi une fonction qui simule automatiquement une variable exponentielleltltlt

import random

def generate_expo(mu)return randomexpovariate(mu)

print(generate_expo(2))

gtgtgt

01480834222333039

Pour reacutealiser cette simulation on suppose qursquoon a un tableau de S ampoules Chaque case de ce tableau contient ladureacutee de vie restante drsquoune ampoule simuleacutee selon une loi exponentielle Au deacutepart toutes les dureacutees de vie sontnulles On considegravere qursquoagrave chaque iteacuteration une heure passe Lors de chaque iteacuteration pour chaque ampoule on veacuterifiesa dureacutee de vie restante Si celle-ci est nulle on la remplace par une autre dont on choisit aleacuteatoirement la dureacutee de vie(arrondie agrave lrsquoentier le plus proche) Si la dureacutee de vie nrsquoest pas nulle on la diminue drsquoune heure A chaque iteacuteration oncompte le nombre drsquoampoules grilleacutees pour en faire la moyenne au bout de n iteacuterations Pour effectuer cette simulationles valeurs choisies sont

S = 10000 micro =1

100 n = 500

Le programme suivant reacutealise cette simulation On calcule la moyenne du nombre drsquoampoules grilleacutees par heure surles 500 iteacuterations excepteacute la premiegravere pour laquelle toutes les ampoules sont grilleacutees - configuration aberrante ou toutdu moins tregraves peu probable - La valeur obtenue est proche de Smicro = 100

260 httpsdocspythonorg3libraryrandomhtml

83 File drsquoattente un petit exemple 307

Machine Learning Statistiques et Programmation Version 035930

834 Bibliographie

84 Optimisation avec donneacutees aleacuteatoires

bull Un problegraveme simple (page 308)bull Modeacutelisation de la demande (page 310)bull Variations saisonniegraveres et prolongations (page 312)bull Bibliographie (page 313)

841 Un problegraveme simple

Un supermarcheacute pourrait vendre en moyenne 80 poulets par semaine srsquoil pouvait savoir agrave lrsquoavance combien de pouletsagrave acheter pour satisfaire la demainde En reacutealiteacute le magasin se reacuteapprovisionne une fois par semaine et lorsque la fin dela semaine arrive tous les poulets invendus sont soldeacutes et supposeacutes vendus Le geacuterant du supermarcheacute voudrait savoirquel est le nombre optimal de poulets agrave commander chaque semaine On suppose que le prix drsquoun poulet agrave lrsquoachat estp son prix agrave la vente est q gt p son prix soldeacute est s Admettons que le supermarcheacute achegravete X poulets en vende aumieux N non soldeacutes et X minusN soldeacutes srsquoil en reste Pour calculer son beacuteneacutefice B il faut tenir compte de deux cas et dufait que le supermarcheacute ne peut pas vendre plus de poulets qursquoil nrsquoen a acheteacute

B = X(q minus p) si N ⩾ XB = N(q minus p) + (X minusN)(sminus p) = X(sminus p) +N(q minus s) si N lt X

On peut reacuteduire ces deux expressions agrave une seule en utilisant la fonction indicatrice

B = f(NX p q s) = X(q minus p)11N⩾X + [X(sminus p) +N(q minus s)] 11NltX

Si N eacutetait connu avec certitude il suffirait de choisir X = N ce serait la reacuteponse optimale mais le nombre de pouletsN vendus est inconnu car il varie chaque semaine Pour avoir une ideacutee plus preacutecise le geacuterant du supermarcheacute adeacutelibeacutereacutement acheteacute trop de poulets pendant plusieurs semaines Il srsquoest aperccedilu que la variable aleacuteatoire N suit une loide Poisson261 de paramegravetre λ = 80 On connaicirct seulement la probabiliteacute que N soit eacutegale agrave une valeur fixeacutee La figuresuivante montre lrsquoallure de cette distribution

P (X = i) = eminusλλi

i

Comme le nombre de poulets acheteacutes varie drsquoune semaine agrave lrsquoautre le beacuteneacutefice du supermarcheacute varie aussi drsquounesemaine agrave lrsquoautre Ce que le geacuterant veut optimiser crsquoest la somme de ses profits sur une anneacutee ce qui est eacutequivalentagrave maximiser la moyenne de ses profits chaque semaine Il faut donc chercher agrave maximiser lrsquoespeacuterence de la variablealeacuteatoire B agrave p q s constant puis agrave obtenir la valeur X ayant meneacute agrave ce maximum

maxX

EB = maxX

Ef(NX p q s) = maxX

infinsumi=0

f(NX p q s)P (N = i)

Etant donneacute la forme de la fonction f il nrsquoest pas eacutevident de construire une expression exacte de Xlowast deacutefini parmaxX Ef(NX p q s) = f(NXlowast p q s) Comme l = 80 drsquoapregraves la figure preacuteceacutedente on cherche Xlowast danslrsquoensemble 0 2l = 180 aller au delagrave de 180 est inutile tant la probabiliteacute est faible Il suffit de calculer f pourchacune de ces valeurs et de prendre celle qui permet drsquoobtenir le maximum Ces calculs longs et reacutepeacutetitifs vont ecirctreeffectueacutes par un programme informatique qui sera deacutecoupeacute en fonctions comme ceci

261 httpsfrwikipediaorgwikiLoi_de_Poisson

308 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Figure1 Ce graphe reacutepresente la fonction de densiteacute drsquoune loi de Poisson de paramegravetre 80 On observe que le pic estobtenu pour une valeur proche de 80 crsquoest la valeur la plus probable Ceci signifie que le nombre de poulets acheteacutes leplus probable est 80

fonction objectiffactorielle(x) calcule xprofit(NXpqs) calcule la fonction fproba_poisson(l i) calcule la probabiliteacute de Poisson connaissant λ et iesperance(Xpqsl) calcule lrsquoespeacuterance (sa moyenne) de la fonction fmaximum(pqsl) construit une liste de toutes les valeurs de ffind_maximum (res) cherche le maximum dans la liste retourneacutee par la fonction maximum

Le programme obtenu ressemble agrave pouletpy les derniegraveres lignes servent agrave tracer la courbe preacutesenteacutee par la figurequi suitltltlt

from mlstatpygardenpoulet import maximumres = maximum(2 5 1 80) res est la courbe afficheacutee plus basprint(res[4])

gtgtgt

[(0 00) (1 29999999999999942) (2 59999999999999885) (3 8999999999999975)]

84 Optimisation avec donneacutees aleacuteatoires 309

Machine Learning Statistiques et Programmation Version 035930

842 Modeacutelisation de la demande

La repreacutesentation de la demande est essentielle crsquoest elle qui deacutetermine le reacutesultat Il est possible de lrsquoaffiner commepar exemple supposer que certaines personnes achegravetent deux ou trois poulets et que la somme des poulets acheteacutes peutecirctre deacutecomposeacutee comme N = N1 + 2N2 + 3N3 ougrave Ni est le nombre de personnes achetant i poulets Dans ce casce nrsquoest plus N qui suit une loi de Poisson mais N1 N2 N3 qui suivent chacune des lois de Poisson de paramegravetresdiffeacuterents dont il faudra estimer les paramegravetresCette modification implique lrsquoeacutecriture drsquoune fonction proba_poisson_melange au lieu de proba_poisson Lademande nrsquoest plus une loi connue mais un meacutelange de lois connues dont la densiteacute nrsquoa pas drsquoexpression connue ilfaut la tabuler Pour cela on utilise deux proprieacuteteacutes sur les lois exponentielles

Theacuteoregraveme T1 simulation drsquoune loi quelconqueSoit F =

intf une fonction de reacutepartition de densiteacute f veacuterifiant f gt 0 soit U une variable aleacuteatoire uniformeacutement

distribueacutee sur [0 1] alors Fminus1(U) est variable aleacuteatoire de densiteacute f

La deacutemonstration est courte Soit X une variable aleacuteatoire de densiteacute f par deacutefinition P (X ⩽ x) = F (x) Soit Uune variable aleacuteatoire uniformeacutement distribueacute sur [0 1] alors

forallu isin [0 1] P (U ⩽ u) = u

lArrrArr P(Fminus1(U) ⩽ Fminus1(u)

)= u

lArrrArr P(Fminus1(U) ⩽ Fminus1(F (t))

)= F (t)

lArrrArr P(Fminus1(U) ⩽ t

)= F (t)

Si la fonction F nrsquoest pas strictement croissante on pourra prendre Fminus1(t) = inf u|F (u) ⩾ t Ce theacuteoregraveme seraappliqueacute agrave une loi exponentielle de paramegravetre λ La densiteacute drsquoune telle loi est f(x) = λ expminusλx F (x) =

int x

0f(t)dt =

1minus expminusλx On en deacuteduit que Fminus1(t) = minus ln(1minust)λ par conseacutequent minus ln(1minusU)

λ suit une loi exponentielle de paramegravetreλ si U est une loi uniforme sur [0 1]

Theacuteoregraveme T2 simulation drsquoune loi de PoissonOn deacutefinit une suite infinie (Xi)i gt 0 de loi exponentielle de paramegravetre λ On deacutefinit ensuite la seacuterie de variablesaleacuteatoires Si =

sumik=1 Xk et enfin N(t) = inf i|Si gt t Alors la variable aleacuteatoire N(t) suit une loi de Poisson de

paramegravetre λt

La loi exponentielle est souvent utiliseacutee pour modeacuteliser le temps drsquoattente drsquoun eacuteveacutenement comme le temps drsquoattentedrsquoun meacutetro une fois sur le quai On lrsquoutilise aussi pour modeacuteliser la dureacutee de vie drsquoun outil drsquoune ampoule parexemple La loi de Poisson peut par exemple modeacuteliser le nombre drsquoampoules neacutecessaire pour eacuteclairer une piegravecesur une certaine dureacutee Avant de deacutemontrer le theacuteoregraveme il faut deacutefinir drsquoabord la loi Gamma262 On pose aupreacutealable Γ(α) =

intinfin0

uαminus1eminusudu Une variable aleacuteatoire de loi Gamma de paramegravetres (α λ) a pour densiteacute f(x) = λα

Γ(α) tαminus1eminusλt La fonction Γ veacuterifie une proprieacuteteacute utile par la suite foralln isin Nlowast Γ(n) = (nminus 1)

Theacuteoregraveme T3 somme de loi exponentielle iidSoit X1 Xn n variables aleacuteatoires indeacutependantes et identiquement distribueacutees de loi Exp(λ) alors la sommesumn

k=1 Xk suit une loi Gamma(n λ)

La deacutemonstration utilise lrsquouniciteacute de la fonction caracteacuteristique EeiX Il suffit de deacutemonstrer que la fonctioncaracteacuteristique de la somme est celle drsquoune loi Gamma On suppose que X1 Xn suivent des lois exponentielles

262 httpsfrwikipediaorgwikiLoi_Gamma

310 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

de paramegravetre λ et Y suit une loi Gamma(n λ)

Eexp

(i

nsumk=1

Xk

)=

nprodk=1

EeiXk

=

[int infin

0

λeixeminusλxdx

]n= λn

[int infin

0

e(iminusλ)xdx

]n= λn

[minus 1

(iminus λ)

]n=

λminus i

]nEeiY =

int infin

0

λn

Γ(n)tnminus1eminusλteitdt =

int infin

0

λn

Γ(n)tnminus1e(iminusλ)tdt

=λn

Γ(n)

Γ(n)

(iminus λ)n=

λminus i

]nCes lignes deacutemontrent le theacuteoregraveme On deacutemontre maintenant simulation drsquoune loi de Poisson (page 310) Ladeacutemonstration repose sur le fait que P (N(t) ⩾ n)lArrrArr P (Sn ⩽ t) On en deacuteduit que

P (N(t) = n) = P (N(t) ⩾ n)minus P (N(t) ⩾ n+ 1) = P (Sn ⩽ t)minus P (Sn+1 ⩽ t)

Or drsquoapregraves le theacuteoregraveme somme de loi exponentielle iid (page 310) Sn suit une loi Gamma(n λ)

P (N(t) = n) =

int t

0

λn

Γ(n)unminus1eminusλuduminus

int t

0

λn+1

Γ(n+ 1)uneminusλudu

=

int t

0

[λn

(nminus 1)unminus1eminusλu minus λn+1

nuneminusλu

]du

=

[λn

nuneminusλu

]t0

= eminusλt (λt)n

n

Il suffit drsquoutiliser ce theacuteoregraveme pour simuler une loi de Poisson de paramegravetre λ ce que fait la fonction poisson suivanteltltlt

import randomimport math

def exponentielle(l)u = randomrandom()return -10 l mathlog(10 - u)

def poisson(l)s = 0i = 0while s lt= 1

s += exponentielle(l)i += 1

return i - 1

print(poisson(2))

gtgtgt

84 Optimisation avec donneacutees aleacuteatoires 311

Machine Learning Statistiques et Programmation Version 035930

2

On veacuterifie que cette meacutethode de simulation permet de retrouver les reacutesultats theacuteoriques Pour cela on effectue 1000tirages drsquoune variable suivant une loi de Poisson avec λ = 10 puis on compte le nombre de fois qursquoon obtient chaqueentier compris entre 0 et 40 La figure qui suit permet de comparer les reacutesultats obtenus

Figure2 Comparaison entre une fonction de densiteacute estimeacutee empiriquement pour la loi de Poisson de paramegravetre λ = 10

et sa densiteacute theacuteorique f(i) = eminusλ λi

i

On cherche maintenant agrave calculer les probabiliteacutes P (N = i) sachant que N = N1 + 2N2 + 3N3 et N1 sim P(48)N2 sim P(10) N3 sim P(4) Lrsquoaddition de deux lois de Poisson indeacutependantes est une loi de Poisson En revanchesi N1 suit une loi de Poisson 2N1 ne suit pas une loi de Poisson 2N1 est une variable paire crsquoest une proprieacuteteacute quinrsquoest jamais veacuterifieacutee par une loi de Poisson Il nrsquoexiste pas drsquoexpression eacutevidente pour la densiteacute du meacutelange N ilfaut donc simuler cette variable Crsquoest lrsquoobjectif de la fonction poisson_melange De la mecircme maniegravere on estimelrsquohistogramme du meacutelange avec cette fois-ci un plus grand nombre de tirages (10000) pour aboutir agrave la figure suivanteOn utilise ces eacuteleacutements pour modeacuteliser la demande de poulets selon ce meacutelange de lois Poisson Le premier programmeest modifieacute pour aboutir au suivant

843 Variations saisonniegraveres et prolongations

Les paragraphes preacuteceacutedents supposent que la demande est constante et ne deacutepend pas des saisons Cette affirmation estpeut-ecirctre vraie en ce concerne les poulets mais ce nrsquoest certainement pas le cas des huicirctres qui sont traditionnellementconsommeacutees en deacutecembre Appliqueacute agrave lrsquoexemple des poulets deacutecrits dans cet eacutenonceacute la loi de Poisson appliqueacutee agrave laconsommation deacutepend maintenant de la semaineTenir compte de la saisonnaliteacute nrsquoest pas forceacutement un problegraveme de modeacutelisation mais plutocirct drsquoestimation Au lieudrsquoavoir une seule consommation moyenne il y a en aura maintenant 52 Ceci implique drsquoavoir des donneacutees ennombre suffisant pour estimer les paramegravetres du modegravele la preacutecision des reacutesultats deacutepend de celle de lrsquoestimationIl est possible drsquoestimer seacutepareacutement les variations saisonniegraveres et la demande elle-mecircme mais la preacutesentation de cestechniques deacutepassent le cadre de ce livre il est preacutefeacuterable de se reporter agrave [Gourieacuteroux1983] ou [Saporta2006]Les poulets soldeacutes ne sont pas plus mauvais que les poulets non soldeacutes bien que la date de peacuteremption soit certainementplus rapprocheacutee de la date drsquoachat On suppose qursquoun geacuterant concurrent de ce supermarcheacute a eu vent de la techniquedrsquooptimisation du magasin il connaicirct eacutegalement le prix du poulet et son prix soldeacute Il a eacutegalement accegraves au prixdrsquoachat puisqursquoil se fournit chez les mecircmes agriculteurs Il lui reste agrave connaicirctre le nombre de poulets commandeacutes etune estimation de la demande pour savoir si les poulets de son concurrents se vendent mieux que les siens Il se renddans le supermarcheacute concurrent tous les jours ougrave les poulets sont soldeacutes et les comptent Il voudrait pouvoir en deacuteduirele nombre de poulets vendus

312 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Figure3 Dans le cas du meacutelange de lois Poisson le maximum est cette-fois ci obtenu pour 87 poulets et est de 225euros Ces reacutesultats sont leacutegegraverement diffeacuterents de ceux obtenus par une simple loi Poisson (80)

844 Bibliographie

85 Le gradient et le discret

Les meacutethodes drsquooptimisation agrave base de gradient srsquoappuie sur une fonction drsquoerreur deacuterivable qursquoon devrait appliquer depreacutefeacuterence sur des variables aleacuteatoires reacuteelles Ce notebook explore quelques ideacutees

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Un petit problegraveme simple (page 314)bull Multiplication des observations (page 314)bull Introduire du bruit (page 316)bull Comparaisons de plusieurs modegraveles (page 317)bull Avec une ACP (page 318)bull Base drsquoapprentissage et de test (page 319)bull Petite explication (page 322)

85 Le gradient et le discret 313

Machine Learning Statistiques et Programmation Version 035930

851 Un petit problegraveme simple

On utilise le jeu de donneacutees iris disponible dans scikit-learn263

from sklearn import datasets

iris = datasetsload_iris()X = irisdata[ 2] we only take the first two featuresY = iristarget

On cale une reacutegression logistique On ne distingue pas apprentissage et test car ce nrsquoest pas le propos de ce notebook

from sklearnlinear_model import LogisticRegressionclf = LogisticRegression(multi_class=ovr solver=liblinear)clffit(X Y)

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovrn_jobs=None penalty=l2 random_state=None solver=liblineartol=00001 verbose=0 warm_start=False)

Puis on calcule la matrice de confusion

from sklearnmetrics import confusion_matrixpred = clfpredict(X)confusion_matrix(Y pred)

array([[49 1 0][ 2 21 27][ 1 4 45]] dtype=int64)

852 Multiplication des observations

Le paramegravetre multi_class=ovr stipule que le modegravele cache en fait lrsquoestimation de 3 reacutegressions logistiques binaireEssayons de nrsquoen faire qursquoune seule en ajouter le label Y aux variables Soit un couple (Xi isin R Yi isin N) qui correspondagrave une observation pour un problegraveme multi-classe Comme il y a C classes on multiplie cette ligne par le nombre declasses C pour obtenir

forallc isin [1 C]

X primei = (Xi1 Xid Yi1 YiC)

Y primei = 11Yi=c

Yik = 11c=k

Voyons ce que cela donne sur un exemple

import numpyimport pandas

def multiplie(X Y classes=None)if classes is None

classes = numpyunique(Y)XS = []YS = []

(suite sur la page suivante)

263 httpscikit-learnorgstableauto_examplesdatasetsplot_iris_datasethtml

314 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

for i in classesX2 = numpyzeros((Xshape[0] 3))X2[i] = 1Yb = Y == iXSappend(numpyhstack([X X2]))Yb = Ybreshape((len(Yb) 1))YSappend(Yb)

Xext = numpyvstack(XS)Yext = numpyvstack(YS)return Xext Yext

x y = multiplie(X[1] Y[1] [0 1 2])df = pandasDataFrame(numpyhstack([x y]))dfcolumns = [X1 X2 Y0 Y1 Y2 Y]df

Trois colonnes ont eacuteteacute ajouteacutees cocircteacute X la ligne a eacuteteacute multiplieacutee 3 fois la derniegravere colonne est Y qui ne vaut 1 quelorsque le 1 est au bon endroit dans une des colonnes ajouteacutees Le problegraveme de classification qui eacuteteacute de preacutedire labonne classe devient est-ce la classe agrave preacutedire est k On applique cela sur toutes les lignes de la base et cela donne

Xext Yext = multiplie(X Y)numpyhstack([Xext Yext])df = pandasDataFrame(numpyhstack([Xext Yext]))dfcolumns = [X1 X2 Y0 Y1 Y2 Y]dfiloc[numpyrandompermutation(dfindex) ]head(n=10)

from sklearnensemble import GradientBoostingClassifierclf = GradientBoostingClassifier()clffit(Xext Yextravel())

GradientBoostingClassifier(criterion=friedman_mse init=Nonelearning_rate=01 loss=deviance max_depth=3max_features=None max_leaf_nodes=Nonemin_impurity_decrease=00 min_impurity_split=Nonemin_samples_leaf=1 min_samples_split=2min_weight_fraction_leaf=00 n_estimators=100n_iter_no_change=None presort=auto random_state=Nonesubsample=10 tol=00001 validation_fraction=01verbose=0 warm_start=False)

pred = clfpredict(Xext)confusion_matrix(Yext pred)

array([[278 22][ 25 125]] dtype=int64)

85 Le gradient et le discret 315

Machine Learning Statistiques et Programmation Version 035930

853 Introduire du bruit

Un des problegravemes de cette meacutethode est qursquoon ajoute une variable binaire pour un problegraveme reacutesolu agrave lrsquoaide drsquouneoptimisation agrave base de gradient Crsquoest moyen Pas de problegraveme changeons un peu la donne

def multiplie_bruit(X Y classes=None)if classes is None

classes = numpyunique(Y)XS = []YS = []for i in classes

X2 = numpyrandomrandn((Xshape[0] 3))reshape(Xshape[0] 3) 01X2 = numpyrandomrandom((Xshape[0] 3)) 02X2[i] += 1Yb = Y == iXSappend(numpyhstack([X X2]))Yb = Ybreshape((len(Yb) 1))YSappend(Yb)

Xext = numpyvstack(XS)Yext = numpyvstack(YS)return Xext Yext

x y = multiplie_bruit(X[1] Y[1] [0 1 2])df = pandasDataFrame(numpyhstack([x y]))dfcolumns = [X1 X2 Y0 Y1 Y2 Y]df

Le problegraveme est le mecircme qursquoavant excepteacute les variables Yi qui sont maintenant reacuteel Au lieu drsquoecirctre nul on prend unevaleur Yi lt 04

Xextb Yextb = multiplie_bruit(X Y)df = pandasDataFrame(numpyhstack([Xextb Yextb]))dfcolumns = [X1 X2 Y0 Y1 Y2 Y]dfiloc[numpyrandompermutation(dfindex) ]head(n=10)

from sklearnensemble import GradientBoostingClassifierclfb = GradientBoostingClassifier()clfbfit(Xextb Yextbravel())

GradientBoostingClassifier(criterion=friedman_mse init=Nonelearning_rate=01 loss=deviance max_depth=3max_features=None max_leaf_nodes=Nonemin_impurity_decrease=00 min_impurity_split=Nonemin_samples_leaf=1 min_samples_split=2min_weight_fraction_leaf=00 n_estimators=100n_iter_no_change=None presort=auto random_state=Nonesubsample=10 tol=00001 validation_fraction=01verbose=0 warm_start=False)

predb = clfbpredict(Xextb)confusion_matrix(Yextb predb)

316 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

array([[299 1][ 10 140]] dtype=int64)

Crsquoest un petit peu mieux

854 Comparaisons de plusieurs modegraveles

On cherche maintenant agrave comparer le gain en introduisant du bruit pour diffeacuterents modegraveles

def error(model x y)p = modelpredict(x)cm = confusion_matrix(y p)return (cm[10] + cm[01]) cmsum()

def comparaison(model X Y)

if isinstance(model tuple)clf = model[0](model[1])clfb = model[0](model[1])model = model[0]

elseclf = model()clfb = model()

Xext Yext = multiplie(X Y)clffit(Xext Yextravel())err = error(clf Xext Yext)

Xextb Yextb = multiplie_bruit(X Y)clfbfit(Xextb Yextbravel())errb = error(clfb Xextb Yextb)return dict(model=model__name__ err1=err err2=errb)

from sklearnlinear_model import LogisticRegressionfrom sklearntree import DecisionTreeClassifier ExtraTreeClassifierfrom sklearnensemble import RandomForestClassifier ExtraTreesClassifierrarrAdaBoostClassifierfrom sklearnneural_network import MLPClassifierfrom sklearnnaive_bayes import GaussianNBfrom sklearnneighbors import KNeighborsClassifier RadiusNeighborsClassifierfrom xgboost import XGBClassifier

models = [(LogisticRegression dict(multi_class=ovr solver=liblinear))GradientBoostingClassifier(RandomForestClassifier dict(n_estimators=20))DecisionTreeClassifierExtraTreeClassifierXGBClassifier(ExtraTreesClassifier dict(n_estimators=20))(MLPClassifier dict(activation=logistic))GaussianNB KNeighborsClassifier(AdaBoostClassifier dict(base_estimator=LogisticRegression(multi_class=ovr

rarrsolver=liblinear)(suite sur la page suivante)

85 Le gradient et le discret 317

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

algorithm=SAMME))]

res = [comparaison(model X Y) for model in models]df = pandasDataFrame(res)dfsort_values(model)

err1 correspond agrave Y0 Y1 Y2 binaire err2 aux mecircmes variables mais avec un peu de bruit Lrsquoajout ne semble pasfaire deacutecroicirctre la performance et lrsquoameacuteliore dans certains cas Crsquoest une piste agrave suivre Reste agrave savoir si les modegravelesnrsquoapprennent pas le bruit

855 Avec une ACP

On peut faire varier le nombre de composantes jrsquoen ai gardeacute qursquoune LrsquoACP est appliqueacutee apregraves avoir ajouteacute les variablesbinaires ou binaires bruiteacutees Le reacutesultat est sans eacutequivoque Aucun modegravele ne parvient agrave apprendre sans lrsquoajout debruit

from sklearndecomposition import PCA

def comparaison_ACP(model X Y)

if isinstance(model tuple)clf = model[0](model[1])clfb = model[0](model[1])model = model[0]

elseclf = model()clfb = model()

axes = 1solver = fullXext Yext = multiplie(X Y)Xext = PCA(n_components=axes svd_solver=solver)fit_transform(Xext)clffit(Xext Yextravel())err = error(clf Xext Yext)

Xextb Yextb = multiplie_bruit(X Y)Xextb = PCA(n_components=axes svd_solver=solver)fit_transform(Xextb)clfbfit(Xextb Yextbravel())errb = error(clfb Xextb Yextb)return dict(modelACP=model__name__ errACP1=err errACP2=errb)

res = [comparaison_ACP(model X Y) for model in models]dfb = pandasDataFrame(res)pandasconcat([ dfsort_values(model) dfbsort_values(modelACP)] axis=1)

318 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

856 Base drsquoapprentissage et de test

Cette fois-ci on srsquointeacuteresse agrave la qualiteacute des frontiegraveres que les modegraveles trouvent en veacuterifiant sur une base de test quelrsquoapprentissage srsquoest bien passeacute

from sklearnmodel_selection import train_test_split

def comparaison_train_test(models X Y mbruit=multiplie_bruit acp=None)

axes = acpsolver = full

ind = numpyrandompermutation(numpyarange(Xshape[0]))X = X[ind]Y = Y[ind]X_train X_test Y_train Y_test = train_test_split(X Y test_size=13)

res = []for model in models

if isinstance(model tuple)clf = model[0](model[1])clfb = model[0](model[1])model = model[0]

elseclf = model()clfb = model()

Xext_train Yext_train = multiplie(X_train Y_train)Xext_test Yext_test = multiplie(X_test Y_test)if acp

Xext_train_ = Xext_trainXext_test_ = Xext_testacp_model = PCA(n_components=axes svd_solver=solver)fit(Xext_train)Xext_train = acp_modeltransform(Xext_train)Xext_test = acp_modeltransform(Xext_test)

clffit(Xext_train Yext_trainravel())

err_train = error(clf Xext_train Yext_train)err_test = error(clf Xext_test Yext_test)

Xextb_train Yextb_train = mbruit(X_train Y_train)Xextb_test Yextb_test = mbruit(X_test Y_test)if acp

acp_model = PCA(n_components=axes svd_solver=solver)fit(Xextb_train)Xextb_train = acp_modeltransform(Xextb_train)Xextb_test = acp_modeltransform(Xextb_test)Xext_train = acp_modeltransform(Xext_train_)Xext_test = acp_modeltransform(Xext_test_)

clfbfit(Xextb_train Yextb_trainravel())

errb_train = error(clfb Xextb_train Yextb_train)errb_train_clean = error(clfb Xext_train Yext_train)

(suite sur la page suivante)

85 Le gradient et le discret 319

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

errb_test = error(clfb Xextb_test Yextb_test)errb_test_clean = error(clfb Xext_test Yext_test)

resappend(dict(modelTT=model__name__ err_train=err_train err2_train=errb_rarrtrain

err_test=err_test err2_test=errb_test err2b_test_clean=errb_test_cleanerr2b_train_clean=errb_train_clean))

dfb = pandasDataFrame(res)dfb = dfb[[modelTT err_train err2_train err2b_train_clean err_test

rarrerr2_test err2b_test_clean]]dfb = dfbsort_values(modelTT)return dfb

dfb = comparaison_train_test(models X Y)dfb

Les colonnes err2b_train_clean et err2b_test_clean sont les erreurs obtenues par des modegraveles appris sur des colonnesbruiteacutees et testeacutees sur des colonnes non bruiteacutees ce qui est le veacuteritable test On srsquoaperccediloit que les performances sonttregraves deacutegradeacutees sur la base drsquotest Une raison est que le bruit choisi ajouteacute nrsquoest pas centreacute Corrigeons cela

def multiplie_bruit_centree(X Y classes=None)if classes is None

classes = numpyunique(Y)XS = []YS = []for i in classes

X2 = numpyrandomrandn((Xshape[0] 3))reshape(Xshape[0] 3) 01X2 = numpyrandomrandom((Xshape[0] 3)) 02 - 01X2[i] += 1Yb = Y == iXSappend(numpyhstack([X X2]))Yb = Ybreshape((len(Yb) 1))YSappend(Yb)

Xext = numpyvstack(XS)Yext = numpyvstack(YS)return Xext Yext

dfb = comparaison_train_test(models X Y mbruit=multiplie_bruit_centree acp=None)dfb

Crsquoest mieux mais on en conclut que dans la plupart des cas la meilleure performance sur la base drsquoapprentissage avecle bruit ajouteacute est due au fait que les modegraveles apprennent par coeur Sur la base de test les performances ne sont pasmeilleures Une erreur de 33 signifie que la reacuteponse du classifieur est constante On multiplie les exemples

def multiplie_bruit_centree_duplique(X Y classes=None)if classes is None

classes = numpyunique(Y)XS = []YS = []for i in classes

(suite sur la page suivante)

320 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

for k in range(05)X2 = numpyrandomrandn((Xshape[0] 3))reshape(Xshape[0] 3) 03X2 = numpyrandomrandom((Xshape[0] 3)) 08 - 04X2[i] += 1Yb = Y == iXSappend(numpyhstack([X X2]))Yb = Ybreshape((len(Yb) 1))YSappend(Yb)

Xext = numpyvstack(XS)Yext = numpyvstack(YS)return Xext Yext

dfb = comparaison_train_test(models X Y mbruit=multiplie_bruit_centree_dupliquerarracp=None)dfb

Cela fonctionne un peu mieux le fait drsquoajouter du hasard ne permet pas drsquoobtenir des gains significatifs agrave part pour lemodegravele SVC264

def multiplie_bruit_centree_duplique_rebalance(X Y classes=None)if classes is None

classes = numpyunique(Y)XS = []YS = []for i in classes

X2 = numpyrandomrandom((Xshape[0] 3)) 08 - 04X2[i] += 1 ((i 2) 2 - 1)Yb = Y == iXSappend(numpyhstack([X X2]))Yb = Ybreshape((len(Yb) 1))YSappend(Yb)

Xext = numpyvstack(XS)Yext = numpyvstack(YS)return Xext Yext

dfb = comparaison_train_test(models X Y mbruit=multiplie_bruit_centree_duplique_rarrrebalance)dfb

264 httpscikit-learnorgstablemodulesgeneratedsklearnsvmSVChtml

85 Le gradient et le discret 321

Machine Learning Statistiques et Programmation Version 035930

857 Petite explication

Dans tout le notebook le score de la reacutegression logistique est nul Elle ne parvient pas agrave apprendre tout simplementparce que le problegraveme choisi nrsquoest pas lineacuteaire seacuteparable Srsquoil lrsquoeacutetait cela voudrait dire que le problegraveme suivant lrsquoestaussi

M = numpyzeros((9 6))Y = numpyzeros((9 1))for i in range(0 9)

M[i i3] = 1M[i i3+3] = 1Y[i] = 1 if i3 == i3 else 0

MY

(array([[1 0 0 1 0 0][1 0 0 0 1 0][1 0 0 0 0 1][0 1 0 1 0 0][0 1 0 0 1 0][0 1 0 0 0 1][0 0 1 1 0 0][0 0 1 0 1 0][0 0 1 0 0 1]]) array([[1][0][0][0][1][0][0][0][1]]))

clf = LogisticRegression(multi_class=ovr solver=liblinear)clffit(M Yravel())

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovrn_jobs=None penalty=l2 random_state=None solver=liblineartol=00001 verbose=0 warm_start=False)

clfpredict(M)

array([0 0 0 0 0 0 0 0 0])

A revisiter

322 Chapter 8 Peacutereacutegrinations

CHAPTER 9

Galleries

91 Gallery of examples

911 Arbre drsquoindeacutecision

La construction drsquoun arbre de deacutecision appliqueacute agrave une classification binaire suppose qursquoon puisse deacuteterminer un seuilqui seacutepare les deux classes ou tout du moins qui aboutisse agrave deux sous-ensemble dans lesquels une classe est majoritaireMais certains cas crsquoest une chose compliqueacutee

bull Un cas simple et un cas compliqueacute (page 323)ndash Seuil de deacutecision (page 324)

Un cas simple et un cas compliqueacute

Il faut choisir un seuil sur lrsquoaxe des abscisses qui permette de classer le jeu de donneacutees

import numpyimport matplotlibpyplot as pltfrom pandas import DataFrame

def random_set_1d(n kind)x = numpyrandomrand(n) 3 - 1if kind

y = numpyempty(xshape dtype=numpyint32)y[x lt 0] = 0y[(x gt= 0) amp (x lt= 1)] = 1y[x gt 1] = 0

elsey = numpyempty(xshape dtype=numpyint32)

(suite sur la page suivante)

323

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

y[x lt 0] = 0y[x gt= 0] = 1

x2 = numpyrandomrand(n)return numpyvstack([x x2])T y

def plot_ds(X y ax=None title=None)if ax is None

ax = pltgca()axscatter(X[ 0] X[ 1] c=y s=20 edgecolor=k lw=05)if title is not None

axset_title(title)return ax

X1 y1 = random_set_1d(1000 False)X2 y2 = random_set_1d(1000 True)

fig ax = pltsubplots(1 2 figsize=(12 6) sharey=True)plot_ds(X1 y1 ax=ax[0] title=easy)plot_ds(X2 y2 ax=ax[1] title=difficult)

Out

ltAxesSubplottitle=centerdifficultgt

Seuil de deacutecision

Les arbres de deacutecision utilisent comme critegravere le critegravere de Gini265 ou liquestentropie266 Lrsquoapprentissage drsquoune reacutegressionlogistique srsquoappuie sur la log-vraisemblance (page 185) du jeu de donneacutees On regarde lrsquoeacutevolution de ces critegraveres enfonction des diffeacuterents seuils possibles

def plog2(p)if p == 0

return 0return p numpylog(p) numpylog(2)

def logistic(x)return 1 (1 + numpyexp(-x))

def likelihood(x y theta=1 th=0)lr = logistic((x - th) theta)return y lr + (1 - y) (1 - lr)

def criteria(X y)res = numpyempty((Xshape[0] 8))

(suite sur la page suivante)

265 httpsfrwikipediaorgwikiArbre_de_dC3A9cision_(apprentissage)Cas_des_arbres_de_classification266 httpsfrwikipediaorgwikiEntropie_de_Shannon

324 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

res[ 0] = X[ 0]res[ 1] = yorder = numpyargsort(res[ 0])res = res[order ]copy()x = res[ 0]copy()y = res[ 1]copy()

for i in range(1 resshape[0] - 1) ginip1 = numpysum(y[i]) ip2 = numpysum(y[i]) (yshape[0] - i)res[i 2] = p1res[i 3] = p2res[i 4] = 1 - p12 - (1 - p1)2 + 1 - p22 - (1 - p2)2res[i 5] = - plog2(p1) - plog2(1 - p1) - plog2(p2) - plog2(1 - p2)th = x[i]res[i 6] = logistic(th 10)res[i 7] = numpysum(likelihood(x y 10 th)) resshape[0]

return DataFrame(res[1-1] columns=[X y p1 p2 Gini Gain lr LL-10])

X1 y1 = random_set_1d(1000 False)X2 y2 = random_set_1d(1000 True)

df = criteria(X1 y1)print(dfhead())

Out

X y p1 p2 Gini Gain lr LL-100 -0997743 00 00 0660661 0448376 0924185 0000046 06869061 -0991923 00 00 0661323 0447950 0923547 0000049 06880352 -0987839 00 00 0661986 0447521 0922906 0000051 06888473 -0987460 00 00 0662651 0447090 0922260 0000051 06889234 -0987248 00 00 0663317 0446655 0921610 0000052 0688965

Et visuellement

def plot_ds(X y ax=None title=None)if ax is None

ax = pltgca()axscatter(X[ 0] X[ 1] c=y s=20 edgecolor=k lw=05)if title is not None

axset_title(title)return ax

df1 = criteria(X1 y1)df2 = criteria(X2 y2)

fig ax = pltsubplots(1 2 figsize=(12 6) sharey=True)plot_ds(X1 y1 ax=ax[0] title=easy)

(suite sur la page suivante)

91 Gallery of examples 325

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

plot_ds(X2 y2 ax=ax[1] title=difficult)df1plot(x=X y=[Gini Gain LL-10 p1 p2] ax=ax[0] lw=5)df2plot(x=X y=[Gini Gain LL-10 p1 p2] ax=ax[1] lw=5)

Out

ltAxesSubplottitle=centerdifficult xlabel=Xgt

Le premier exemple est le cas simple et tous les indicateurs trouvent bien la fontiegravere entre les deux classes comme unextremum sur lrsquointervalle consideacutereacute Le second cas est lineacuteairement non seacuteparable Aucun des indicateurs ne sembletrouver une des deux frontiegraveres La log-vraisemblance montre deux maxima Lrsquoun est bien situeacute sur une frontiegraverele second est situeacute agrave une extreacutemiteacute de lrsquointervalle ce qui revient agrave construire un classifier qui retourneacute une reacuteponseconstante Crsquoest donc inutileTotal running time of the script ( 0 minutes 2776 seconds)

92 Galleries

Notebooks Coverage (page 380)

bull Le petit coin des data scientists (page 326)bull Images (page 332)bull Meacutetriques (page 332)bull Machine Learning (page 339)bull NLP - Natural Language Processing (page 355)

921 Le petit coin des data scientists

Ce sont quelques notebooks sur des points particuliers qui surgissent au quotidien quand on traite des donneacutees

Classification multiple

Explorations autour drsquoun problegraveme de classification multiple

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Deacutebut de lrsquohistoire (page 327)ndash Confusions (page 327)ndash Clustering (page 327)

bull Mise en pratique (page 328)

326 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Deacutebut de lrsquohistoire

11yi

Confusions

Un des premiers reacuteflexes apregraves avoir appris une classification multi-classe est de regarder la matrice de confusion267Certaines classes sont difficiles agrave classer drsquoautres non Je me demandais srsquoil existait un moyen de deacuteterminer cela sansapprendre un classifieur On souhaite apprendre la classification des points (Xi yi) Xi est un vecteur yi la classeattendue Si yi est la classe preacutedite lrsquoerreur de classification est

E =sumi

11yi =yi

On note cij = 11yi=j et cij = 11yi=j On note le vecteur Cj = (cij)i et Cj = (cij)i On peut reacuteeacutecrire lrsquoerreur comme

E =sumij

11yi=j11yi =j =sumij

11yi=j(1minus 11yi=j) =sumij

cij(1minus cij) =sumj

lt Cj 1minus Cj gt

Crsquoest aussi eacutegal agrave

E =sumk =j

lt Cj Ck gt

Et lt Cj Ck gt correspond au nombre drsquoerreurs de confusion le nombre drsquoeacuteleacutements de la classe j classeacutes dans laclasse k lt Cj Ck gt est le nombre drsquoeacuteleacutements correctement classeacutes dans la classe j On peut montrer quesum

kj

lt Cj Ck gt= N

ougrave N est le nombre drsquoobservations

Clustering

Et si nous introduisions un clustering intermeacutediaire On construit Q cluster qi est le cluster du point Xi et on notedil = 11qi=l et le vecteur Dl = (dil)i

E =sumk =j

lt Cj Ck gt

On note XY le produit terme agrave terme de deux vecteurs

E =sumk =jl

lt Cj Dl Ck gt=sumk =jl

lt Cj Dl CkDl gt

Le nombre drsquoerreurs est la somme des erreurs faites sur chaque cluster Supposons maintenant qursquoun classifieur retourneune reacuteponse constante sur chacun des clusters on choisit la classe plus repreacutesenteacutee Ca ressemble beaucoup agrave unclassifieur bayeacutesien268 On note f(l) cette classe la plus repreacutesenteacutee Elle veacuterifie

f(l) = argmaxj

lt Cj Dl gt

267 httpsfrwikipediaorgwikiMatrice_de_confusion268 httpscikit-learnorgstablemodulesnaive_bayeshtml

92 Galleries 327

Machine Learning Statistiques et Programmation Version 035930

Cela signifie que cij =sum

l 11j=f(l)dil Si on note l(i) le cluster associeacute agrave i On continue cij = 11j=f(l(i)) On deacutefinitlrsquoerreur e(l) lrsquoerreur de classification faite sur chaque cluster l

e(l) =sumi

dilsumj

cij(1minus 11j=f(l)) =sumi

dil

sumj

cij minussumj

cij11j=f(l)

=sumi

dil(1minus cif(l)

)=sumi

dil minussumi

dilcif(l)

Pour reacutesumer lrsquoerreur est le nombre drsquoeacuteleacutements moins le nombre drsquoeacuteleacutements dans la classe majoritaire du cluster Sile nombre de clusters Q devient supeacuterieur ou eacutegal au nombre drsquoobservations cette erreur devient nulle

Mise en pratique

Lrsquoideacutee est de voir comment eacutevolue cette erreur de classification naiumlve en fonction du nombre de clusters La diffeacuterencepar rapport agrave un classifieur est qursquoon sait comment sont fabriqueacutes les clusters et qursquoon peut imaginer les classes commeun assemblage de clusters drsquoune forme connue

File drsquoattente un exemple simple

Cet exemple vient illustrer le paragraphe sur les files drsquoattente et lrsquoespeacuterance de vie des ampoules

matplotlib inline

import mathimport random

def generate_expo(mu)return randomexpovariate(mu)

generate_expo(2)

00749720223112896

Les paramegravetres de la simulation

S = 10000iteration = 500mu = 10 100

On creacutee un tableau de S ampoules qui contient la dureacutee de vie restante de chaque ampoule

ampoule = [0 for a in range(0S)]moyenne_grille = 0stats = []

for i in range(0iteration)grille = 0mean = 0

for n in range(0S)mean += ampoule[n]if ampoule[n] == 0

remplacement dune ampoule grilleacutee(suite sur la page suivante)

328 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

grille += 1 on deacutetermine la dureacutee de vie de cette ampoule on arrondit agrave lentier le plus procheampoule[n] = int (generate_expo(mu))

else on enlegraveve une heure agrave la dureacutee de vie de lampouleampoule[n] -= 1

mean = S

statsappend(dict(i=i mean=mean grille=grille))

if i gt 0moyenne_grille += grille

if i 100 == 0print(iteacuteration i moyenne dureacutee mean grilleacutees grille)

moyenne_grille = float (moyenne_grille) float (iteration - 1)print(nombre moyen dampoules grilleacutees moyenne_grille)

iteacuteration 0 moyenne dureacutee 00 grilleacutees 10000iteacuteration 100 moyenne dureacutee 997184 grilleacutees 95iteacuteration 200 moyenne dureacutee 987154 grilleacutees 93iteacuteration 300 moyenne dureacutee 992155 grilleacutees 101iteacuteration 400 moyenne dureacutee 989101 grilleacutees 108nombre moyen dampoules grilleacutees 9988577154308618

import pandasdf = pandasDataFrame(stats)df = df[[i mean grille]]df[grille_sum] = df[grille]cumsum() - 10000dfhead()

import matplotlibpyplot as pltfig ax = pltsubplots(3 1 figsize=(148))df[1]plot(x=i y=mean label=dureacutee de vie moyenne restante ax=ax[0])df[1]plot(x=i y=grille label=ampoules grilleacutees ce jour ax=ax[1])df[2]plot(x=i y=grille_sum label=total des ampoules grilleacutees ax=ax[2])ax[0]set_xlabel(dureacutee)

ltmatplotlibtextText at 0x1e2155ce4a8gt

92 Galleries 329

Machine Learning Statistiques et Programmation Version 035930

330 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Classification multiple(page 326)

Explorations autour drsquoun problegraveme de classification multiple

Correacutelations nonlineacuteaires (page 282)

Les correacutelations indiquent si deux variables sont lineacuteairementeacutequivalentes Comment eacutetendre cette notion agrave des variables lieacuteesmais pas de faccedilon lineacuteaire

File drsquoattente unexemple simple(page 328)

Cet exemple vient illustrer le paragraphe sur les files drsquoattente etlrsquoespeacuterance de vie des ampoules

Le gradient et lediscret (page 313)

Les meacutethodes drsquooptimisation agrave base de gradient srsquoappuie sur une fonctiondrsquoerreur deacuterivable qursquoon devrait appliquer de preacutefeacuterence sur des variablesaleacuteatoires reacuteelles Ce notebook explore quelques ideacutees

Reacutegression lineacuteaire(page 107)

Ce notebook srsquointeacuteresse agrave la faccedilon drsquointerpreacuteter les reacutesultats drsquounereacutegression lineacuteaire lorsque les variables sont correacuteleacutees puis il explore unefaccedilon drsquoassocier arbre de deacutecision et reacutegression lineacuteaire pour construireune reacutegression lineacuteaire par morceaux

Reacutegression quantileillustreacutee (page 125)

La reacutegression quantile est moins sensible aux points aberrants Elle peutecirctre deacutefinie comme une reacutegression avec une norme L1 (une valeur absolue)Ce notebook explore des reacutegressions avec des quantiles diffeacuterents

Reacutepartir en basedrsquoapprentissage et detest (page 267)

Crsquoest un problegraveme plutocirct facile puisqursquoil srsquoagit de reacutepartir aleacuteatoirement leslignes drsquoune base de donneacutees drsquoun cocircteacute ou de lrsquoautre Lorsque le problegravemede machine learning agrave reacutesoudre est un problegraveme de classification il fautsrsquoassurer que chaque cocircteacute contient une proportion raisonnable de chaqueclasse

92 Galleries 331

Machine Learning Statistiques et Programmation Version 035930

922 Images

Deacutetection de segmentsdans une image(page 261)

Crsquoest une technique assez vieille et qui consiste agrave deacutetecter des segmentscomme des anomalies lrsquoalignement de points est un eacuteveacutenement assezrare dans un nuage de points mais rare comment Cette ideacutee megravene agrave laprobabilisation drsquoune image pour quantifier ce qursquoest un alignement depoints neacutecessairement rare

923 Meacutetriques

ROC

A few graphs about ROC on the iris datasets

matplotlib inlineimport matplotlibpyplot as pltpltstyleuse(ggplot)

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Iris datasets (page 332)bull ROC with scikit-learn (page 333)bull ROC - TPR FPR (page 334)bull ROC - score distribution (page 337)bull ROC - recall precision (page 338)

Iris datasets

from sklearn import datasetsiris = datasetsload_iris()X = irisdata[ 2]y = iristarget

from sklearnmodel_selection import train_test_splitX_train X_test y_train y_test = train_test_split(X y test_size=033)

from sklearnlinear_model import LogisticRegressionclf = LogisticRegression()clffit(X_train y_train)

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovr n_jobs=1

(suite sur la page suivante)

332 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

penalty=l2 random_state=None solver=liblinear tol=00001verbose=0 warm_start=False)

import numpyypred = clfpredict(X_test)yprob = clfpredict_proba(X_test)score = numpyarray(list(yprob[iypred[i]] for i in range(len(ypred))))

data = numpyzeros((len(ypred) 2))data[0] = scoreravel()data[ypred==y_test1] = 1data[5]

array([[ 070495209 1 ][ 056148737 0 ][ 056148737 1 ][ 077416227 1 ][ 058631799 0 ]])

ROC with scikit-learn

We use the following example Receiver Operating Characteristic (ROC)269

from sklearnmetrics import roc_curvefpr tpr th = roc_curve(y_test == ypred score)

import matplotlibpyplot as pltpltplot(fpr tpr label=ROC curve)pltplot([0 1] [0 1] linestyle=--)pltxlim([00 10])pltylim([00 10])pltxlabel(False Positive Rate)pltylabel(True Positive Rate)pltlegend(loc=lower right)

ltmatplotliblegendLegend at 0x268373a2128gt

269 httpscikit-learnorgstableauto_examplesmodel_selectionplot_rochtmlsphx-glr-auto-examples-model-selection-plot-roc-py

92 Galleries 333

Machine Learning Statistiques et Programmation Version 035930

import pandasdf = pandasDataFrame(dict(fpr=fpr tpr=tpr threshold=th))df

ROC - TPR FPR

We do the same with the class this module provides ROC270bull TPR = True Positive Ratebull FPR = False Positive Rate

You can see as TPR the distribution function of a score for a positive example and the FPR the same for a negativeexample

from mlstatpymlroc import ROC

roc = ROC(df=data)

roc

Overall precision 063 - AUC=0850594--------------

score label weight0 0375573 00 101 0385480 00 102 0412314 00 103 0412703 10 10

(suite sur la page suivante)

270 httpwwwxavierduprefrappmlstatpyhelpsphinxmlstatpymlrochtmlhighlight=rocmodule-mlstatpymlroc

334 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

4 0417941 00 10--------------

score label weight45 0863174 10 1046 0863174 10 1047 0869794 10 1048 0903335 10 1049 0910712 10 10--------------

False Positive Rate True Positive Rate threshold0 0000000 0032258 09107121 0000000 0193548 08286172 0000000 0354839 07909093 0000000 0516129 07370004 0052632 0645161 06275895 0157895 0741935 06079756 0263158 0838710 05614877 0526316 0838710 05422118 0684211 0903226 05208359 0842105 0967742 041794110 1000000 1000000 0375573--------------

error recall threshold0 0000000 002 09107121 0000000 012 08286172 0000000 022 07909093 0000000 032 07370004 0047619 042 06275895 0115385 052 06079756 0161290 062 05614877 0277778 072 05422118 0317073 082 05208359 0347826 092 041794110 0380000 100 0375573

rocauc()

085059422750424452

rocplot(nb=10)

ltmatplotlibaxes_subplotsAxesSubplot at 0x2683ff2b668gt

92 Galleries 335

Machine Learning Statistiques et Programmation Version 035930

This function draws the curve with only 10 points but we can ask for more

rocplot(nb=100)

ltmatplotlibaxes_subplotsAxesSubplot at 0x2683feba240gt

We can also ask to draw bootstropped curves to get a sense of the confidence

336 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

rocplot(nb=10 bootstrap=10)

ltmatplotlibaxes_subplotsAxesSubplot at 0x26840008748gt

ROC - score distribution

This another representation for the metrics FPR and TPRP (x lt s) is the probability that a score for a positive exampleto be less than s P (minus gt s) is the probability that a score for a negative example to be higher than s We assume inthis case that the higher the better for the score

rocplot(curve=ROCCurveTypePROBSCORE thresholds=True)

ltmatplotlibaxes_subplotsAxesSubplot at 0x268410618d0gt

92 Galleries 337

Machine Learning Statistiques et Programmation Version 035930

When curves intersects at score slowast error rates for positive and negative examples are equal If we show the confusionmatrix for this particular score slowast it gives

conf = rocconfusion()conf[P(+lts)] = 1 - conf[True Positive] confloc[len(conf)-1True Positive]conf[P(-gts)] = 1 - conf[True Negative] confloc[0True Negative]conf

ROC - recall precision

In this representation we show the score

import matplotlibpyplot as pltfig axes = pltsubplots(ncols=2 nrows=1 figsize=(144))rocplot(curve=ROCCurveTypeRECPREC thresholds=True ax=axes[0])rocplot(curve=ROCCurveTypeRECPREC ax=axes[1])

ltmatplotlibaxes_subplotsAxesSubplot at 0x2684151d3c8gt

338 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

ROC (page 332) A few graphs about ROC on the iris datasets

p-values (page 235) Compute p-values and heavy tails estimators

924 Machine Learning

Benchmark

Ce notebook compare diffeacuterents modegraveles depuis un notebook

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Petit bench sur le clustering (page 340)ndash Deacutefinition du bench (page 340)ndash Lancer le bench (page 340)ndash Reacutecupeacuterer les reacutesultats (page 341)ndash Dessin Graphs (page 341)

Si le message Widget Javascript not detected It may not be installed or enabled properly apparaicirct vous devriezexeacutecuter la commande jupyter nbextension enable --py --sys-prefix widgetsnbextension depuis laligne de commande Le code suivant vous permet de veacuterifier que cela a eacuteteacute fait

from tqdm import tnrange tqdm_notebookfrom time import sleep

for i in tnrange(3 desc=1st loop)for j in tqdm_notebook(range(20) desc=2nd loop)

sleep(001)

92 Galleries 339

Machine Learning Statistiques et Programmation Version 035930

matplotlib inline

Petit bench sur le clustering

Deacutefinition du bench

import dillfrom tqdm import tnrangefrom sklearncluster import AgglomerativeClustering KMeansfrom sklearndatasets import make_blobsfrom mlstatpyml import MlGridBenchMark

params = [dict(model=lambda KMeans(n_clusters=3) name=KMeans-3 shortname=km-3)dict(model=lambda AgglomerativeClustering() name=AgglomerativeClustering

rarrshortname=aggclus)]

datasets = [dict(X=make_blobs(100 centers=3)[0] Nclus=3name=blob-100-3 shortname=b-100-3 no_split=True)

dict(X=make_blobs(100 centers=5)[0] Nclus=5name=blob-100-5 shortname=b-100-5 no_split=True) ]

bench = MlGridBenchMark(TestName datasets fLOG=None clog=Nonecache_file=cachepickle pickle_module=dillrepetition=3 progressbar=tnrangegraphx=[_time time_train Nclus]graphy=[silhouette Nrows])

Lancer le bench

benchrun(params)

0|2017-03-19 201111 [BenchMarkrun] number of cached run 4 0|| 04 [0000lt rarrits]

3|2017-03-19 201113 [BenchMarkrun] done 75|| 34 [0002lt0000 110its] rarr 11its]_train 002142968022685221 time_test 0rarr0025012412126208527 _btry aggclus-b-100-5 _iexp 2 model_namerarrAgglomerativeClustering ds_name blob-100-5 Nrows 100 Nfeat 2 Nclusrarr5 no_split True _date datetimedatetime(2017 3 19 20 11 11 647355) _rarrtime 01007650830318858 _span datetimetimedelta(0 0 112581) _i 3 _namerarr TestName 75|| 34 [0000lt0000 422its]]000 353its]]

340 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Reacutecupeacuterer les reacutesultats

df = benchto_df()df

dfplot(x=time_train y=silhouette kind=scatter)

ltmatplotlibaxes_subplotsAxesSubplot at 0x122b8004748gt

Dessin Graphs

benchplot_graphs(figsize=(1212))

array([[ltmatplotlibaxes_subplotsAxesSubplot object at 0x00000122B8269A90gtltmatplotlibaxes_subplotsAxesSubplot object at 0x00000122B82E1DA0gt][ltmatplotlibaxes_subplotsAxesSubplot object at 0x00000122B83512E8gtltmatplotlibaxes_subplotsAxesSubplot object at 0x00000122B83A1828gt][ltmatplotlibaxes_subplotsAxesSubplot object at 0x00000122B8409D68gtltmatplotlibaxes_subplotsAxesSubplot object at 0x00000122B8462588gt]]

rarrdtype=object)

92 Galleries 341

Machine Learning Statistiques et Programmation Version 035930

Factorisation et matrice et ACP

Un exemple pour montrer lrsquoeacutequivalence entre lrsquoACP et une factorisation de matrice

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Factorisation de matrices (page 343)bull ACP analyse en composantes principales (page 344)

matplotlib inline

342 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Factorisation de matrices

def erreur_mf(M W H)d = M - W Ha = dravel()e = a aTe 05 (Mshape[0] Mshape[1])return e

On creacutee un nuage de points avec que des coordonneacutees positives pour satisfaire les hypothegraveses de la factorisation dematrices

from numpyrandom import randM = rand(2 20)M[1] += 3 M[0]M

array([[ 081960047 063887134 074019269 096110175 00685406 011103301 006033529 067913157 010460611 098860048050497448 026893866 073143267 032617974 01332449 083328515 03775355 069163261 053095348 015601268]

[ 248031078 22279066 285929872 327833973 027323095053806662 048019992 209428487 040521666 394539474236639105 166857684 314027534 194032092 122602705309679803 1696636 269144798 184350664 116862532]])

from sklearndecomposition import NMFmf = NMF(1)W = mffit_transform(M)H = mfcomponents_erreur_mf(M W H)

019729615330190822

wh = W H

import matplotlibpyplot as pltfig ax = pltsubplots(1 1)axplot(M[0] M[1] ob)axplot(wh[0] wh[1] or)axset_xlim([01])axset_ylim([04])

(0 4)

92 Galleries 343

Machine Learning Statistiques et Programmation Version 035930

ACP analyse en composantes principales

from sklearndecomposition import PCApca = PCA(n_components=1)pcafit(MT)

PCA(copy=True iterated_power=auto n_components=1 random_state=Nonesvd_solver=auto tol=00 whiten=False)

projected_points = pcainverse_transform(pcatransform(MT))pj = projected_pointsT

import matplotlibpyplot as pltfig ax = pltsubplots(1 1)axplot(M[0] M[1] ob)axplot(wh[0] wh[1] or)axplot(pj[0] pj[1] og)axset_xlim([01])axset_ylim([04])

(0 4)

344 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Les reacutesultats ne sont pas exactement identiques car lrsquoACP271 centre le nuage de points par deacutefaut On utilise celui destatsmodels272 pour eacuteviter cela

from statsmodelsmultivariatepca import PCApca = PCA(MT ncomp=1 standardize=False demean=False normalize=False)pca

Principal Component Analysis(nobs 20 nvar 2 transformation None normalizationrarrFalse number of components 1 SVD id 0x1c01a2861d0)

pj2 = pcaprojectionT

import matplotlibpyplot as pltfig ax = pltsubplots(1 1)axplot(M[0] M[1] ob)axplot(wh[0] wh[1] or)axplot(pj[0] pj[1] og)axplot(pj2[0] pj2[1] oy)axset_xlim([01])axset_ylim([04])

(0 4)

271 httpscikit-learnorgstablemodulesgeneratedsklearndecompositionPCAhtml272 httpwwwstatsmodelsorgdevgeneratedstatsmodelsmultivariatepcaPCAhtml

92 Galleries 345

Machine Learning Statistiques et Programmation Version 035930

On retrouve exactement les mecircmes reacutesultats

Valeurs manquantes et factorisation de matrices

Reacuteflexion autour des valeur manquantes et de la factorisation de matrice positive

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Matrice agrave coefficients aleacuteatoires (page 346)bull Matrice avec des vecteurs colonnes correacuteleacutes (page 348)bull Matrice identiteacute (page 350)bull Matrice identiteacute et repreacutesentation spatiale (page 351)

matplotlib inline

Matrice agrave coefficients aleacuteatoires

On eacutetudie la factorisation drsquoune matrice agrave coefficients tout agrave fait aleacuteatoires qui suivent une loi uniforme sur lrsquointervalle[0 1] Essayons sur une petite matrice

from numpyrandom import randM = rand(3 3)M

array([[ 005119593 043722929 09290821 ][ 04588466 014187813 023762633][ 09768084 047674026 079044526]])

346 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

from sklearndecomposition import NMFmf = NMF(1)mffit_transform(M)

array([[ 067825803][ 038030919][ 102295362]])

La matrice preacuteceacutedente est la matrice W dans le produit WH la matrice qui suit est H

mfcomponents_

array([[ 073190904 050765757 092611883]])

mfreconstruction_err_ (Mshape[0] Mshape[1])

007236890712696428

On recalcule lrsquoerreur

d = M - mffit_transform(M) mfcomponents_a = dravel()e = a aTe 05 (Mshape[0] Mshape[1])

0072368907126964283

eravel()

array([ 042421796])

Et maintenant sur une grande et plus neacutecessairement carreacutee

M = rand(300 10)mf = NMF(1)mffit_transform(M)mfreconstruction_err_ (Mshape[0] Mshape[1])

0004996164872801101

Lrsquoerreur est la mecircme

errs = []rangs = list(range(1 11))for k in rangs

mf = NMF(k)mffit_transform(M)e = mfreconstruction_err_ (Mshape[0] Mshape[1])errsappend(e)

92 Galleries 347

Machine Learning Statistiques et Programmation Version 035930

import pandasdf = pandasDataFrame(dict(rang=rangs erreur=errs))dfplot(x=rang y=erreur)

ltmatplotlibaxes_subplotsAxesSubplot at 0x199924d8668gt

Matrice avec des vecteurs colonnes correacuteleacutes

Supposons maintenant que la matrice preacuteceacutedente M est de rang 3 Pour srsquoen assurer on tire une matrice aleacutealatoireavec 3 vecteurs colonnes et on reacuteplique des colonnes jusqursquoagrave la dimension souhaiteacutee

from numpy import hstackM = rand(300 3)M = hstack([M M M M[1]])Mshape

(300 10)

errs = []rangs = list(range(1 11))for k in rangs

mf = NMF(k)mffit_transform(M)e = mfreconstruction_err_ (Mshape[0] Mshape[1])errsappend(e)

import pandasdf = pandasDataFrame(dict(rang=rangs erreur=errs))

(suite sur la page suivante)

348 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

dfplot(x=rang y=erreur)

ltmatplotlibaxes_subplotsAxesSubplot at 0x199925d6630gt

On essaye agrave nouveausur une matrice un peu plus petite

M = rand(3 2)M = hstack([M M[1]])M

array([[ 027190312 06497563 027190312][ 044853292 087097224 044853292][ 029424835 065106952 029424835]])

mf = NMF(2)mffit_transform(M)

array([[ 061835197 0 ][ 082887888 029866219][ 061960446 007743224]])

mfcomponents_

array([[ 043972536 105078419 043972536][ 028143493 0 028143493]])

La derniegravere colonne est identique agrave la premiegravere

92 Galleries 349

Machine Learning Statistiques et Programmation Version 035930

Matrice identiteacute

Et maintenant si la matrice M est la matrice identiteacute que se passe-t-il

from numpy import identityM = identity(3)M

array([[ 1 0 0][ 0 1 0][ 0 0 1]])

mf = NMF(1)mffit_transform(M)

array([[ 0][ 1][ 0]])

mfcomponents_

array([[ 0 1 0]])

mfreconstruction_err_ 2

20000000000000004

On essaye avec k = 2

mf = NMF(2)mffit_transform(M)

array([[ 0 0 ][ 0 103940448][ 095521772 0 ]])

mfcomponents_

array([[ 0 0 104688175][ 0 096208937 0 ]])

mfreconstruction_err_ 2

10

Avec des vecteurs normeacutes et indeacutependants (formant donc une base de lrsquoespace vectoriel) lrsquoalgorithme aboutit agrave unematrice W eacutegale au k premiers vecteurs et oublie les autres

350 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Matrice identiteacute et repreacutesentation spatiale

Pour comprendre un peu mieux ce dernier exemple il est utile de chercher drsquoautres solutions dont lrsquoerreur esteacutequivalente

def erreur_mf(M W H)d = M - W Ha = dravel()e = a aTe 05 (Mshape[0] Mshape[1])return e

M = identity(3)mf = NMF(2)W = mffit_transform(M)H = mfcomponents_erreur_mf(M W H)

10

W

array([[ 0 0 ][ 09703523 0 ][ 0 102721047]])

H

array([[ 0 103055354 0 ][ 0 0 097351032]])

W H

array([[ 0 0 0][ 0 1 0][ 0 0 1]])

from mpl_toolkitsmplot3d import Axes3Dimport matplotlibpyplot as pltfig = pltfigure()ax = figadd_subplot(111 projection=3d)wh = W Haxscatter(M[0] M[1] M[2] c=b marker=o s=20)axscatter(wh[0] wh[1] wh[2] c=r marker=^)

ltmpl_toolkitsmplot3dart3dPath3DCollection at 0x19992d2a5c0gt

92 Galleries 351

Machine Learning Statistiques et Programmation Version 035930

Et si on pose maintenant

import numpyW = numpyarray([[05 05 0] [0 0 1]])TH = numpyarray([[1 1 0] [00 00 10]])W

array([[ 05 0 ][ 05 0 ][ 0 1 ]])

H

array([[ 1 1 0][ 0 0 1]])

W H

array([[ 05 05 0 ][ 05 05 0 ][ 0 0 1 ]])

erreur_mf(M W H)

10

fig = pltfigure()ax = figadd_subplot(111 projection=3d)wh = W Haxscatter(M[0] M[1] M[2] c=b marker=o s=20)axscatter(wh[0] wh[1] wh[2] c=r marker=^)

352 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

ltmpl_toolkitsmplot3dart3dPath3DCollection at 0x19992a2e5f8gt

On peut voir la matrice M comme un ensemble de n points dans un espace vectoriel La matrice W est un ensemblede k lt n points dans le mecircme espace La matrice WH de rang k est une approximation de cet ensemble dans lemecircme espace crsquoest aussi n combinaisons lineacuteaires de k points de faccedilon agrave former n points les plus proches proches den points de la matrice M

92 Galleries 353

Machine Learning Statistiques et Programmation Version 035930

Analyse de survie(page 197)

Benchmark (page 339) Ce notebook compare diffeacuterents modegraveles depuis un notebook

Factorisation etmatrice et ACP(page 342)

Un exemple pour montrer lrsquoeacutequivalence entre lrsquoACP et une factorisation dematrice

Reacutegression lineacuteairepar morceaux(page 129)

La reacutegression lineacuteaire par morceaux a lrsquoavantage de produire un modegravelelocalement interpreacutetable Mais ce nrsquoest pas eacutevident drsquoestimer un tel modegravelequand on ne connaicirct pas les morceaux par avance

Reacutegression sansinversion (page 147)

Ce notebook mesure le temps de calcul dans deux algorithmes pourreacutesoudre une reacutegression lineacuteaire le premier inverse un matrice le secondle fait sans inverser une matrice le troisiegraveme reprend lrsquoideacutee du second maisutilise une deacutecomposition QR puis inverse la matrice R

Reacuteseaux de neurones(page 192)

Reacuteseaux de neurones avec scikit-learn

Un arbre de deacutecisionen reacuteseaux deneurones (page 87)

Lrsquoideacutee est de convertir sous la forme drsquoun reacuteseaux de neurones un arbrede deacutecision puis de continuer lrsquoapprentissage de faccedilon agrave obtenir unassemblage de reacutegression logistique plutocirct que de deacutecision binaire

Valeurs manquanteset factorisation dematrices (page 346)

Reacuteflexion autour des valeur manquantes et de la factorisation de matricepositive

Voronoiuml et reacutegressionlogistique (page 161)

Le notebook eacutetudie la pertinence drsquoun modegravele de reacutegression logistiquedans certaines configurations Il regarde aussi le diagramme de Voronoiumlassocieacute agrave une reacutegression logistique agrave trois classes Il donne quelquesintuitions sur les modegraveles que la reacutegression logistique peut reacutesoudre354 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

925 NLP - Natural Language Processing

Completion Trie and metrics

Evaluation of a completion system on wikpedia pages

matplotlib inlineimport matplotlibpyplot as pltpltstyleuse(ggplot)from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Wikipedia titles uniform (page 355)bull Reduce the alphabet size (page 358)bull Wikipedia titles uniform longer test (page 361)

Wikipedia titles uniform

from mlstatpydatawikipedia import download_titlesfile_titles = download_titles(country=fr)

from mlstatpydatawikipedia import enumerate_titleslist_titles = list(sorted(set(_ for _ in enumerate_titles(file_titles) if A lt= _[0] lt=rarrZ)))

len(list_titles) list_titles[5] list_titles[10000001000005]

(3108490[AA amp AA (Airport Express)A (Ayumi Hamasaki)A (Disque dAyumi Hamasaki)]

[Fantasy in the skyFantasy mythiqueFantasy of mannersFantasy tennisFantasy urbaine])

from mlstatpynlpcompletion import CompletionTrieNode

def gain_dynamique_moyen_par_mot(queries weights)per = list(zip(weights queries))total = sum(w len(q) for q w in zip(queries weights))res = []trie = CompletionTrieNodebuild([(None q) for _ q in per])trieprecompute_stat()trieupdate_stat_dynamic()wks = [(w p len(w)-triemin_keystroke0(w)[0]) for p w in per]

(suite sur la page suivante)

92 Galleries 355

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

wks_dyn = [(w p len(w)-triemin_dynamic_keystroke(w)[0]) for p w in per]wks_dyn2 = [(w p len(w)-triemin_dynamic_keystroke2(w)[0]) for p w in per]gain = sum( gptotal for w p g in wks)gain_dyn = sum( gptotal for w p g in wks_dyn)gain_dyn2 = sum( gptotal for w p g in wks_dyn2)ave_length = sum( len(w) p total for p w in per)return gain gain_dyn gain_dyn2 ave_length

import time random pandas

def benchmark(sizes)print(time 0)allres = []for size in sizes

begin = timeperf_counter()if size is None

size = len(list_titles)spl = list_titles

elsespl = randomsample(list_titles size)

splsort()res = gain_dynamique_moyen_par_mot(spl [10] len(spl))dt = timeperf_counter() - beginprint(time 0s - nb=1format(dt len(spl)) gain tuple(_res[-1] for _

rarrin res))allresappend((size dt) + res) with open(sampledtxt len(spl) w encoding=utf-8) as f fwrite(njoin(spl))

df = pandasDataFrame(allres columns=size time mks mks mks ave_lensplit())for c in mks mks mkssplit()

df[ + c] = df[c] df[ave_len]df[c + mks] = df[c] df[mks]

return df

df = benchmark([200 500 800 1000 2000 5000 8000 10000 20000])dftail(n=2)

time 0time 021504800644533353s - nb=200 gain (0820872274143302 0820872274143302 0rarr820872274143302 10)time 06058446756721159s - nb=500 gain (07976588628762532 07976588628762532 0rarr7976588628762532 10)time 1009366944402156s - nb=800 gain (0779308535065277 0779308535065277 0rarr779308535065277 10)time 12731077523609795s - nb=1000 gain (07819106501794998 07819106501794998 0rarr7819106501794998 10)time 30382918326608044s - nb=2000 gain (07491075326810025 07491075326810025 0rarr7491075326810025 10)time 6941259884811901s - nb=5000 gain (07193327903836085 07193534087277493 0rarr7193534087277493 10)time 12096078319013222s - nb=8000 gain (06971821041145199 06971821041145199 0rarr6971821041145199 10)

(suite sur la page suivante)

356 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

time 17030497306746902s - nb=10000 gain (06881011563817098 06881371807341721 0rarr6881371807341721 10)time 3055692095058407s - nb=20000 gain (06579791591697565 06582343738435791 0rarr6582343738435791 10)

import matplotlibpyplot as pltf ax = pltsubplots(2 2 figsize=(1410))dfplot(x=size y=time ax=ax[10])dfplot(x=size y=[mks mks mks ave_len] ax=ax[00])dfplot(x=size y=[mks mks mks] ax=ax[01])dfplot(x=size y=[mksmks mksmks] ax=ax[11])ax[00]legend()ax[01]legend()ax[10]legend()ax[11]legend()ax[11]set_ylim([09 11])ax[00]set_title(Raw Gain)ax[01]set_title(Relative Gain)ax[10]set_title(Time)ax[11]set_title(Comparison between MKS)

ltmatplotlibtextText at 0x15a756202b0gt

92 Galleries 357

Machine Learning Statistiques et Programmation Version 035930

Reduce the alphabet size

from mlstatpydatawikipedia import enumerate_titleslist_titles = list(sorted(set(_ for _ in enumerate_titles(file_titles) if A lt= _[0] lt=rarrZ)))

import time random pandas

def char_modulo(c size)if len(c) = 1

raise Exception(unexpected size s c) if len(c) = len(clower()) raise Exception(unexpected lower size s = s (d = d) (c clower()

rarrlen(c) len(clower())))if size is None

return celse

cl = clower()if len(cl) gt len(c)

cl = co = ord(cl)a = 97d = (o - a) + size 10return chr(97 + (d size))

def reduce_alphabet(sample size)return [join(char_modulo(c size) for c in word) for word in sample]

def benchmark_size(size alphabet_sizes)if size is None

size = len(list_titles)sample = list_titles

elsesample = randomsample(list_titles size)

print(time 0)allres = []for size in alphabet_sizes

begin = timeperf_counter()spl = reduce_alphabet(sample size)spl = list(sorted(set(spl)))res = gain_dynamique_moyen_par_mot(spl [10] len(spl))dt = timeperf_counter() - beginprint(time 0s - nb=1format(dt len(spl)) gain tuple(_res[-1] for _

rarrin res))if size is None

size = max(_ for _ in alphabet_sizes if _ is not None) + 5allresappend((size dt) + res) with open(sampledtxt len(spl) w encoding=utf-8) as f fwrite(njoin(spl))

df = pandasDataFrame(allres columns=size time mks mks mks ave_lensplit())for c in mks mks mkssplit()

df[ + c] = df[c] df[ave_len](suite sur la page suivante)

358 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

df[c + mks] = df[c] df[mks]return df

df = benchmark_size(5000 [None] + list(range(2 26)))dftail(n=2)

time 0time 759344921135289s - nb=5000 gain (0716585290640898 0716585290640898 0rarr716585290640898 10)time 38923985946166795s - nb=4581 gain (041594360086768417 04448874994683378 0rarr4448874994683378 10)time 5085379287694195s - nb=4942 gain (05571683533987387 05620376961406324 0rarr5620376961406324 10)time 5121866923020207s - nb=4974 gain (05983975448244626 06052151883090817 0rarr6052151883090817 10)time 5501076360438674s - nb=4991 gain (06380275314306908 06382847383691052 0rarr6382847383691052 10)time 5524899975880544s - nb=4988 gain (06475382003395598 06479497864896859 0rarr6479497864896859 10)time 6245833967660474s - nb=4997 gain (06639308855291576 06639308855291576 0rarr6639308855291576 10)time 6012760238038936s - nb=4997 gain (06712028636672216 06712028636672216 0rarr6712028636672216 10)time 6076252674864918s - nb=4997 gain (06838256469329845 06839490681696653 0rarr6839490681696653 10)time 6111897439143831s - nb=4999 gain (06822851853756178 06823160384634976 0rarr6823160384634976 10)time 5873518026578495s - nb=4997 gain (06900718921309502 06900718921309502 0rarr6900718921309502 10)time 6684070891827105s - nb=4999 gain (06925798323648767 06925798323648767 0rarr6925798323648767 10)time 6735858496876062s - nb=4997 gain (06969017445687994 06969017445687994 0rarr6969017445687994 10)time 6131690155300021s - nb=4999 gain (06960868000205542 06960868000205542 0rarr6960868000205542 10)time 62186773552921295s - nb=4999 gain (07022574175965309 07022574175965309 0rarr7022574175965309 10)time 5907541621836572s - nb=4998 gain (06991010265166325 06991010265166325 0rarr6991010265166325 10)time 631432889332882s - nb=4999 gain (07022368488712789 07022471332339055 0rarr7022471332339055 10)time 5892940837380593s - nb=4998 gain (07070717459272685 07070717459272685 0rarr7070717459272685 10)time 6061792582734597s - nb=4999 gain (07097547179513399 07097547179513399 0rarr7097547179513399 10)time 6094942944771901s - nb=4999 gain (07079858075795616 07080166606674415 0rarr7080166606674415 10)time 6141645954818159s - nb=4999 gain (07118732966524257 07118732966524257 0rarr7118732966524257 10)time 59873731844709255s - nb=4999 gain (07094359027099135 07094359027099135 0rarr7094359027099135 10)time 60718454556808865s - nb=4999 gain (07120892682675833 07120892682675833 0rarr7120892682675833 10) (suite sur la page suivante)

92 Galleries 359

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

time 6133951068150054s - nb=4999 gain (07124903584100222 07124903584100222 0rarr7124903584100222 10)time 6292655432947868s - nb=4999 gain (0713611353936324 0713611353936324 0rarr713611353936324 10)

df = dfsort_values(size)

import matplotlibpyplot as pltf ax = pltsubplots(2 2 figsize=(1410))dfplot(x=size y=time ax=ax[10])dfplot(x=size y=[mks mks mks ave_len] ax=ax[00])dfplot(x=size y=[mks mks mks] ax=ax[01])dfplot(x=size y=[mksmks mksmks] ax=ax[11])ax[00]legend()ax[01]legend()ax[10]legend()ax[11]legend()ax[11]set_ylim([09 11])ax[00]set_title(Raw Gain)ax[01]set_title(Relative Gain)ax[10]set_title(Time)ax[11]set_title(Comparison between MKS)

ltmatplotlibtextText at 0x15a74bf40b8gt

360 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Wikipedia titles uniform longer test

df2 = benchmark([50000])df2tail(n=2)

time 0time 52057980205573585s - nb=50000 gain (06162242515637921 0616305075104518 0rarr616305075104518 10)

df2 = benchmark([50000 100000 200000]) 500000 500000 1000000 2000000 None])rarrtoo long in pythondf2tail(n=2)

time 0time 5251158252780897s - nb=50000 gain (0615225173328998 06153599275825006 0rarr6153599275825006 10)time 1050721302614229s - nb=100000 gain (05836043296652512 05841384772496148 0rarr5841384772496148 10)time 18786111486480695s - nb=200000 gain (05507786166438062 05518801462043321 0rarr5518801462043321 10)

92 Galleries 361

Machine Learning Statistiques et Programmation Version 035930

dfall = pandasconcat([df df2])f ax = pltsubplots(2 2 figsize=(1410))dfallplot(x=size y=time ax=ax[10])dfallplot(x=size y=[mks mks mks ave_len] ax=ax[00])dfallplot(x=size y=[mks mks mks] ax=ax[01])dfallplot(x=size y=[mksmks mksmks] ax=ax[11])ax[00]legend()ax[01]legend()ax[10]legend()ax[11]legend()ax[11]set_ylim([09 11])ax[00]set_title(Raw Gain)ax[01]set_title(Relative Gain)ax[10]set_title(Time)ax[11]set_title(Comparison between MKS)

ltmatplotlibtextText at 0x15a132f8be0gt

362 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Completion profiling

Profiling avec cProfile273 memory_profiler274 pyinstrument275 snakeviz276line_profiler277 ne semble pas plus ecirctre maintenu

matplotlib inlineimport matplotlibpyplot as pltpltstyleuse(ggplot)from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Setup (page 363)ndash Function to profile (page 363)ndash Data (page 364)

bull Standard modules (page 364)ndash cProfile (page 364)

bull Others informations when profiling (page 366)ndash memory_profiler (page 366)

bull Static Visualization (page 368)ndash pyinstrument (page 368)

bull Javascript Visualization (page 369)ndash SnakeViz (page 369)ndash vprof py-spy (page 369)

Setup

Function to profile

from mlstatpynlpcompletion import CompletionTrieNode

def gain_dynamique_moyen_par_mot(queries weights)per = list(zip(weights queries))total = sum(weights) 10res = []trie = CompletionTrieNodebuild([(None q) for _ q in per])trieprecompute_stat()trieupdate_stat_dynamic()wks = [(w p len(w) - triemin_keystroke0(w)[0]) for p w in per]wks_dyn = [(w p len(w) - triemin_dynamic_keystroke(w)[0])

for p w in per]wks_dyn2 = [(w p len(w) - triemin_dynamic_keystroke2(w)[0])

(suite sur la page suivante)

273 httpsdocspythonorg37libraryprofilehtml274 httpspypiorgprojectmemory-profiler275 httpsgithubcomjoerickpyinstrument276 httpsjiffyclubgithubiosnakeviz277 httpsgithubcomrkernline_profiler

92 Galleries 363

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

for p w in per]gain = sum(g p total for w p g in wks)gain_dyn = sum(g p total for w p g in wks_dyn)gain_dyn2 = sum(g p total for w p g in wks_dyn2)ave_length = sum(len(w) p total for p w in per)return gain gain_dyn gain_dyn2 ave_length

Data

from mlstatpydatawikipedia import download_titlesfile_titles = download_titles(country=fr)

len(file_titles)

33

from mlstatpydatawikipedia import enumerate_titleslist_titles = list(sorted(set(_ for _ in enumerate_titles(file_titles) if A lt= _[0] lt=rarrZ)))

import randomsample1000 = randomsample(list_titles 1000)with open(sample1000txt w encoding=utf-8) as f

fwrite(njoin(sample1000))

Standard modules

cProfile

import cProfile io pstats os

def toprofile0(lines)gain_dynamique_moyen_par_mot(lines [10] len(lines))

def doprofile(lines filename)pr = cProfileProfile()prenable()toprofile0(lines)prdisable()s = ioStringIO()ps = pstatsStats(pr stream=s)sort_stats(cumulative)psprint_stats()rem = ospathnormpath(ospathjoin(osgetcwd() ))res = sgetvalue()replace(rem )psdump_stats(filename)return res

364 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

r = doprofile(sample1000 completionprof)print(r)

1311797 function calls in 1865 secondsOrdered by cumulative timencalls tottime percall cumtime percall filenamelineno(function)

1 0000 0000 1865 1865 ltipython-input-7-d2b6d910fdd7gt3(toprofile0)1 0000 0000 1865 1865 ltipython-input-2-684f3e860cf5gt3(gain_

rarrdynamique_moyen_par_mot)1 0241 0241 1232 1232 srcmlstatpynlpcompletionpy415(precompute_

rarrstat)15982 0244 0000 0770 0000 srcmlstatpynlpcompletionpy503(merge_

rarrcompletions)1 0088 0088 0366 0366 srcmlstatpynlpcompletionpy450(update_stat_

rarrdynamic)15982 0307 0000 0314 0000 built-in method builtins__build_class__

1 0194 0194 0220 0220 srcmlstatpynlpcompletionpy203(build)16982 0094 0000 0165 0000 srcmlstatpynlpcompletionpy555(update_

rarrdynamic_minimum_keystroke)36051 0114 0000 0130 0000 srcmlstatpynlpcompletionpy523(ltlistcompgt)37609 0035 0000 0071 0000 built-in method builtinsall16982 0051 0000 0058 0000 srcmlstatpynlpcompletionpy588(second_step)314299 0053 0000 0053 0000 built-in method builtinslen15983 0006 0000 0049 0000 method extend of collectionsdeque

rarrobjects16983 0031 0000 0047 0000 srcmlstatpynlpcompletionpy97(unsorted_iter)15982 0039 0000 0046 0000 srcmlstatpynlpcompletionpy542(update_

rarrminimum_keystroke)16982 0041 0000 0044 0000 srcmlstatpynlpcompletionpy624(init_dynamic_

rarrminimum_keystroke)1001 0028 0000 0043 0000 srcmlstatpynlpcompletionpy132(leaves)

115015 0041 0000 0041 0000 srcmlstatpynlpcompletionpy435(ltgenexprgt)15982 0024 0000 0032 0000 built-in method builtinssorted3000 0031 0000 0031 0000 srcmlstatpynlpcompletionpy257(find)

110110 0027 0000 0027 0000 built-in method builtinshasattr117519 0023 0000 0023 0000 method values of dict objects

1 0001 0001 0017 0017 ltipython-input-2-684f3e860cf5gt10(ltlistcompgt)16982 0015 0000 0017 0000 srcmlstatpynlpcompletionpy20(__init__)47946 0016 0000 0016 0000 method extend of list objects23287 0015 0000 0015 0000 built-in method builtinsmin1000 0002 0000 0015 0000 srcmlstatpynlpcompletionpy321(min_

rarrkeystroke0)1 0001 0001 0013 0013 ltipython-input-2-684f3e860cf5gt13(ltlistcompgt)

50946 0013 0000 0013 0000 method pop of list objects1 0001 0001 0013 0013 ltipython-input-2-684f3e860cf5gt11(ltlistcompgt)

20069 0012 0000 0012 0000 built-in method builtinsmax1000 0002 0000 0012 0000 srcmlstatpynlpcompletionpy382(min_dynamic_

rarrkeystroke2)1000 0002 0000 0012 0000 srcmlstatpynlpcompletionpy352(min_dynamic_

rarrkeystroke)56589 0011 0000 0011 0000 method popleft of collectionsdeque

rarrobjects52034 0011 0000 0011 0000 method append of list objects38608 0009 0000 0009 0000 method append of collectionsdeque

92 Galleries 365

Machine Learning Statistiques et Programmation Version 035930

rarrobjects16982 0008 0000 0008 0000 srcmlstatpynlpcompletionpy517(ltgenexprgt)16981 0007 0000 0007 0000 srcmlstatpynlpcompletionpy54(_add)15982 0007 0000 0007 0000 srcmlstatpynlpcompletionpy511(ltlistcompgt)15982 0007 0000 0007 0000 srcmlstatpynlpcompletionpy508(Fake)31964 0006 0000 0006 0000 method items of dict objects

5 0001 0000 0002 0000 built-in method builtinssum17982 0002 0000 0002 0000 built-in method builtinsisinstance1001 0000 0000 0001 0000 ltipython-input-2-684f3e860cf5gt18(ltgenexprgt)1001 0001 0000 0001 0000 ltipython-input-2-684f3e860cf5gt15(ltgenexprgt)

1 0000 0000 0000 0000 ltipython-input-2-684f3e860cf5gt7(ltlistcompgt)1001 0000 0000 0000 0000 ltipython-input-2-684f3e860cf5gt16(ltgenexprgt)1001 0000 0000 0000 0000 ltipython-input-2-684f3e860cf5gt17(ltgenexprgt)

1 0000 0000 0000 0000 method disable of _lsprofProfilerrarrobjects

Others informations when profiling

memory_profiler

See memory_profiler278 Version 056 is bugged (see 258279)

from memory_profiler import profile __version__load_ext memory_profiler

memit toprofile0(sample1000)

peak memory 41120 MiB increment 1840 MiB

from io import StringIOst = StringIO()profile(stream=st)def toprofile(lines)

gain_dynamique_moyen_par_mot(lines [10] len(lines))toprofile(sample1000)

ERROR Could not find file ltipython-input-11-7512ff5cdee3gtNOTE mprun can only be used on functions defined in physical files and not in therarrIPython environment

file temp_mem_profilepy

from mlstatpynlpcompletion import CompletionTrieNodefrom memory_profiler import profile

profile(precision=4)def gain_dynamique_moyen_par_mot(queries weights)

per = list(zip(weights queries))total = sum(weights) 10

(suite sur la page suivante)

278 httpspypipythonorgpypimemory_profiler041279 httpsgithubcompythonprofilersmemory_profilerissues258

366 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

res = []trie = CompletionTrieNodebuild([(None q) for _ q in per])trieprecompute_stat()trieupdate_stat_dynamic()wks = [(w p len(w) - triemin_keystroke0(w)[0]) for p w in per]wks_dyn = [(w p len(w) - triemin_dynamic_keystroke(w)[0])

for p w in per]wks_dyn2 = [(w p len(w) - triemin_dynamic_keystroke2(w)[0])

for p w in per]gain = sum(g p total for w p g in wks)gain_dyn = sum(g p total for w p g in wks_dyn)gain_dyn2 = sum(g p total for w p g in wks_dyn2)ave_length = sum(len(w) p total for p w in per)return gain gain_dyn gain_dyn2 ave_length

profile(precision=4)def toprofile()

with open(sample1000txt r encoding=utf-8) as flines = [_strip(nr ) for _ in freadlines()]

gain_dynamique_moyen_par_mot(lines [10] len(lines))toprofile()

Overwriting temp_mem_profilepy

import syscmd = sysexecutablefrom pyquickhelperloghelper import run_cmdcmd += -m memory_profiler temp_mem_profilepyout err = run_cmd(cmd wait=True)print(out)

Filename temp_mem_profilepyLine Mem usage Increment Line Contents================================================

5 567930 MiB 567930 MiB profile(precision=4)6 def gain_dynamique_moyen_par_mot(queries weights)7 567930 MiB 00000 MiB per = list(zip(weights queries))8 567930 MiB 00000 MiB total = sum(weights) 109 567930 MiB 00000 MiB res = []

10 633047 MiB 64492 MiB trie = CompletionTrieNodebuild([(None q) for _rarrq in per])

11 710742 MiB 77695 MiB trieprecompute_stat()12 806211 MiB 95469 MiB trieupdate_stat_dynamic()13 807305 MiB 01094 MiB wks = [(w p len(w) - triemin_keystroke0(w)[0])

rarrfor p w in per]14 807930 MiB 00469 MiB wks_dyn = [(w p len(w) - triemin_dynamic_

rarrkeystroke(w)[0])15 807930 MiB 00000 MiB for p w in per]16 808398 MiB 00430 MiB wks_dyn2 = [(w p len(w) - triemin_dynamic_

rarrkeystroke2(w)[0])17 808398 MiB 00000 MiB for p w in per]18 808398 MiB 00000 MiB gain = sum(g p total for w p g in wks)

92 Galleries 367

Machine Learning Statistiques et Programmation Version 035930

19 808398 MiB 00000 MiB gain_dyn = sum(g p total for w p g in wks_rarrdyn)

20 808398 MiB 00000 MiB gain_dyn2 = sum(g p total for w p g in wks_rarrdyn2)

21 808398 MiB 00000 MiB ave_length = sum(len(w) p total for p w inrarrper)

22 808398 MiB 00000 MiB return gain gain_dyn gain_dyn2 ave_length

Filename temp_mem_profilepyLine Mem usage Increment Line Contents================================================

24 565820 MiB 565820 MiB profile(precision=4)25 def toprofile()26 565820 MiB 00000 MiB with open(sample1000txt r

rarrencoding=utf-8) as f27 567930 MiB 00742 MiB lines = [_strip(nr ) for _ in f

rarrreadlines()]28 808398 MiB 240469 MiB gain_dynamique_moyen_par_mot(lines [10]

rarrlen(lines))

Static Visualization

pyinstrument

See pyinstrument280

from pyinstrument import Profiler

profiler = Profiler(use_signal=False)profilerstart()

toprofile0(sample1000)

profilerstop()out = profileroutput_text(unicode=False color=False)print(outreplace( ))

_ _ ____ _ _ _ _ __ Recorded 181734 Samples 1048__ _ _ _ Duration 1802 CPU time 1703 _ v301Program -f pstats completionprof -o completiondot1799 run_code IPythoncoreinteractiveshellpy3288`- 1799 ltmodulegt ltipython-input-18-f16978ea99efgt6`- 1799 toprofile0 ltipython-input-7-d2b6d910fdd7gt3`- 1799 gain_dynamique_moyen_par_mot ltipython-input-2-684f3e860cf5gt3

|- 1251 precompute_stat mlstatpynlpcompletionpy415| |- 0917 merge_completions mlstatpynlpcompletionpy503| | |- 0771 [self]| | `- 0136 ltlistcompgt mlstatpynlpcompletionpy523| |- 0224 [self]| |- 0051 update_minimum_keystroke mlstatpynlpcompletionpy542

(suite sur la page suivante)

280 httpsgithubcomjoerickpyinstrument

368 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

| |- 0037 ltgenexprgt mlstatpynlpcompletionpy435| `- 0021 leaves mlstatpynlpcompletionpy132|- 0289 update_stat_dynamic mlstatpynlpcompletionpy450| |- 0147 update_dynamic_minimum_keystroke mlstatpynlpcompletionpy555| | |- 0100 [self]| | `- 0046 second_step mlstatpynlpcompletionpy588| |- 0084 [self]| |- 0040 init_dynamic_minimum_keystroke mlstatpynlpcompletionpy624| `- 0018 unsorted_iter mlstatpynlpcompletionpy97|- 0204 build mlstatpynlpcompletionpy203| `- 0190 [self]|- 0020 ltlistcompgt ltipython-input-2-684f3e860cf5gt10| `- 0019 min_keystroke0 mlstatpynlpcompletionpy321`- 0018 ltlistcompgt ltipython-input-2-684f3e860cf5gt13

Javascript Visualization

SnakeViz

load_ext snakeviz

Lrsquoinstruction qui suit lance lrsquoexplorateur par deacutefaut avec les donneacutees du profilage

snakeviz toprofile0(sample1000)

from pyquickhelperhelpgen import NbImageNbImage(imagesfunc_infojpg width=400)

vprof py-spy

See vprof281 or py-spy282 The second one outputs a SVG file easy to handle

from vprof import profiler

needs to be run from a file not from a notebook profilerrun(toprofile0 cmh args=(sample1000) host=localhost port=8000)

281 httpsgithubcomnvdvvprof282 httpsgithubcombenfredpy-spy

92 Galleries 369

Machine Learning Statistiques et Programmation Version 035930

from pyquickhelperhelpgen import NbImageNbImage(imagesvprofjpg width=800)

Compleacutetion

Comparaion de plusieurs algorithmes pour impleacutementer un systegraveme de compleacutetion

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Tester des ideacutees (page 371)ndash Meilleur ordre pour a ab abc abcd (page 371)ndash Meilleur ordre pour a ab abc abcd edf edfh (page 371)ndash Influence du poids (page 372)

bull Nouvelle meacutetrique (page 374)ndash Intuition (page 374)

bull Veacuterification (page 375)bull Ajouter une compleacutetion (page 376)bull Wikipedia (page 376)

370 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Tester des ideacutees

Meilleur ordre pour a ab abc abcd

from mlstatpynlpcompletion import CompletionTrieNodeimport itertoolsqueries = [a ab abc abcd]for per in itertoolspermutations(queries)

trie = CompletionTrieNodebuild([(None w) for w in per])gain = sum( len(w) - triemin_keystroke(w)[0] for w in per)print(gain ordre per)

0 ordre (a ab abc abcd)1 ordre (a ab abcd abc)1 ordre (a abc ab abcd)2 ordre (a abc abcd ab)2 ordre (a abcd ab abc)2 ordre (a abcd abc ab)1 ordre (ab a abc abcd)2 ordre (ab a abcd abc)2 ordre (ab abc a abcd)3 ordre (ab abc abcd a)3 ordre (ab abcd a abc)3 ordre (ab abcd abc a)2 ordre (abc a ab abcd)3 ordre (abc a abcd ab)2 ordre (abc ab a abcd)3 ordre (abc ab abcd a)4 ordre (abc abcd a ab)4 ordre (abc abcd ab a)3 ordre (abcd a ab abc)3 ordre (abcd a abc ab)3 ordre (abcd ab a abc)3 ordre (abcd ab abc a)4 ordre (abcd abc a ab)4 ordre (abcd abc ab a)

Meilleur ordre pour a ab abc abcd edf edfh

queries = [a ab abc abcd edf edfh]res = []for per in itertoolspermutations(queries)

trie = CompletionTrieNodebuild([(None w) for w in per])gain = sum( len(w) - triemin_keystroke(w)[0] for w in per)resappend((gain ordre per))

ressort(reverse=True)for r in res[30]

print(r)

92 Galleries 371

Machine Learning Statistiques et Programmation Version 035930

(6 ordre (edfh edf abcd abc ab a))(6 ordre (edfh edf abcd abc a ab))(6 ordre (edfh edf abcd ab abc a))(6 ordre (edfh edf abcd ab a abc))(6 ordre (edfh edf abcd a abc ab))(6 ordre (edfh edf abcd a ab abc))(6 ordre (edfh edf abc abcd ab a))(6 ordre (edfh edf abc abcd a ab))(6 ordre (edf edfh abcd abc ab a))(6 ordre (edf edfh abcd abc a ab))(6 ordre (edf edfh abcd ab abc a))(6 ordre (edf edfh abcd ab a abc))(6 ordre (edf edfh abcd a abc ab))(6 ordre (edf edfh abcd a ab abc))(6 ordre (edf edfh abc abcd ab a))(6 ordre (edf edfh abc abcd a ab))(6 ordre (abcd abc edfh edf ab a))(6 ordre (abcd abc edfh edf a ab))(6 ordre (abcd abc edfh ab edf a))(6 ordre (abcd abc edfh ab a edf))(6 ordre (abcd abc edfh a edf ab))(6 ordre (abcd abc edfh a ab edf))(6 ordre (abcd abc edf edfh ab a))(6 ordre (abcd abc edf edfh a ab))(6 ordre (abcd abc edf ab edfh a))(6 ordre (abcd abc edf ab a edfh))(6 ordre (abcd abc edf a edfh ab))(6 ordre (abcd abc edf a ab edfh))(6 ordre (abcd abc ab edfh edf a))(6 ordre (abcd abc ab edfh a edf))

Influence du poids

queries = [actuellement actualiteacute acte actes]weights = [1 1 1 2]total = sum(weights) 10 len(queries)res = []for per in itertoolspermutations(zip(queries weights))

trie = CompletionTrieNodebuild([(None w) for w p in per])wks = [(w p len(w)-triemin_keystroke(w)[0]) for w p in per]gain = sum( gptotal for w p g in wks)resappend((gain wks))

ressort(reverse=True)for r in res

print(034 - 1format(r[0] | join(s p=11f g=11f _ for _ inrarrr[1])))

192 - actes p=20 g=40 | actuellement p=10 g=100 | acte p=10 g=10 | actualiteacute p=1rarr0 g=50192 - actes p=20 g=40 | actualiteacute p=10 g=70 | acte p=10 g=10 | actuellement p=10rarrg=80

(suite sur la page suivante)

372 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

192 - actes p=20 g=40 | acte p=10 g=20 | actualiteacute p=10 g=60 | actuellement p=10rarrg=80192 - actes p=20 g=40 | actuellement p=10 g=100 | actualiteacute p=10 g=60 | acte p=1rarr0 g=00192 - actes p=20 g=40 | actualiteacute p=10 g=70 | actuellement p=10 g=90 | acte p=10rarrg=00192 - actes p=20 g=40 | acte p=10 g=20 | actuellement p=10 g=90 | actualiteacute p=10rarrg=50184 - actuellement p=10 g=110 | actes p=20 g=30 | actualiteacute p=10 g=60 | acte p=1rarr0 g=00184 - actuellement p=10 g=110 | actes p=20 g=30 | acte p=10 g=10 | actualiteacute p=1rarr0 g=50184 - actualiteacute p=10 g=80 | actes p=20 g=30 | actuellement p=10 g=90 | acte p=10rarrg=00184 - actualiteacute p=10 g=80 | actes p=20 g=30 | acte p=10 g=10 | actuellement p=10rarrg=80184 - acte p=10 g=30 | actes p=20 g=30 | actuellement p=10 g=90 | actualiteacute p=10rarrg=50184 - acte p=10 g=30 | actes p=20 g=30 | actualiteacute p=10 g=60 | actuellement p=10rarrg=80176 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actes p=20 g=20 | acte p=1rarr0 g=00176 - actuellement p=10 g=110 | acte p=10 g=20 | actes p=20 g=20 | actualiteacute p=1rarr0 g=50176 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | actes p=20 g=20 | acte p=1rarr0 g=00176 - actualiteacute p=10 g=80 | acte p=10 g=20 | actes p=20 g=20 | actuellement p=10rarrg=80176 - acte p=10 g=30 | actuellement p=10 g=100 | actes p=20 g=20 | actualiteacute p=1rarr0 g=50176 - acte p=10 g=30 | actualiteacute p=10 g=70 | actes p=20 g=20 | actuellement p=10rarrg=80168 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | acte p=10 g=10 | actes p=2rarr0 g=10168 - actuellement p=10 g=110 | acte p=10 g=20 | actualiteacute p=10 g=60 | actes p=2rarr0 g=10168 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | acte p=10 g=10 | actes p=2rarr0 g=10168 - actualiteacute p=10 g=80 | acte p=10 g=20 | actuellement p=10 g=90 | actes p=20rarrg=10168 - acte p=10 g=30 | actuellement p=10 g=100 | actualiteacute p=10 g=60 | actes p=2rarr0 g=10168 - acte p=10 g=30 | actualiteacute p=10 g=70 | actuellement p=10 g=90 | actes p=20rarrg=10

92 Galleries 373

Machine Learning Statistiques et Programmation Version 035930

Nouvelle meacutetrique

Intuition

def gain_moyen_par_mot(queries weights)total = sum(weights) 10res = []for per in itertoolspermutations(zip(queries weights))

trie = CompletionTrieNodebuild([(None w) for w p in per])wks = [(w p len(w)-triemin_keystroke(w)[0]) for w p in per]gain = sum( gptotal for w p g in wks)resappend((gain wks))

ressort(reverse=True)for i r in enumerate(res)

print(034 - 1format(r[0] | join(s p=11f g=11f _ for _ inrarrr[1])))

if i gt 10print()break

queries = [actuellement actualiteacute actuel]weights = [1 1 1]gain_moyen_par_mot(queries weights)

70 - actuellement p=10 g=110 | actuel p=10 g=40 | actualiteacute p=10 g=6070 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actuel p=10 g=3070 - actuel p=10 g=50 | actuellement p=10 g=100 | actualiteacute p=10 g=6070 - actuel p=10 g=50 | actualiteacute p=10 g=70 | actuellement p=10 g=9070 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | actuel p=10 g=3070 - actualiteacute p=10 g=80 | actuel p=10 g=40 | actuellement p=10 g=90

queries = [actuellement actualiteacute actuel]weights = [1 1 0]gain_moyen_par_mot(queries weights)

90 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actuel p=00 g=3090 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | actuel p=00 g=3085 - actuellement p=10 g=110 | actuel p=00 g=40 | actualiteacute p=10 g=6085 - actualiteacute p=10 g=80 | actuel p=00 g=40 | actuellement p=10 g=9080 - actuel p=00 g=50 | actuellement p=10 g=100 | actualiteacute p=10 g=6080 - actuel p=00 g=50 | actualiteacute p=10 g=70 | actuellement p=10 g=90

queries = [actuellement actualiteacute]weights = [1 1]gain_moyen_par_mot(queries weights)

90 - actuellement p=10 g=110 | actualiteacute p=10 g=7090 - actualiteacute p=10 g=80 | actuellement p=10 g=100

374 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Veacuterification

def gain_dynamique_moyen_par_mot(queries weights permutation=True)total = sum(weights) 10res = []for per in itertoolspermutations(zip(queries weights))

trie = CompletionTrieNodebuild([(None w) for w p in per])trieprecompute_stat()trieupdate_stat_dynamic()wks = [(w p len(w)-triemin_dynamic_keystroke(w)[0]) for w p in per]gain = sum( gptotal for w p g in wks)resappend((gain wks))if not permutation

breakressort(reverse=True)for i r in enumerate(res)

print(034 - 1format(r[0] | join(s p=11f g=11f _ for _ inrarrr[1])))

if i gt 10print()break

Pas de changement

queries = [actuellement actualiteacute actuel]weights = [1 1 0]gain_dynamique_moyen_par_mot(queries weights)

90 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actuel p=00 g=3090 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | actuel p=00 g=3085 - actuellement p=10 g=110 | actuel p=00 g=40 | actualiteacute p=10 g=6085 - actuel p=00 g=50 | actualiteacute p=10 g=70 | actuellement p=10 g=10085 - actualiteacute p=10 g=80 | actuel p=00 g=40 | actuellement p=10 g=9080 - actuel p=00 g=50 | actuellement p=10 g=100 | actualiteacute p=10 g=60

Changements

queries = [actuellement actualiteacute actuel]weights = [1 1 1]gain_dynamique_moyen_par_mot(queries weights)

7333 - actuel p=10 g=50 | actualiteacute p=10 g=70 | actuellement p=10 g=10070 - actuellement p=10 g=110 | actuel p=10 g=40 | actualiteacute p=10 g=6070 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actuel p=10 g=3070 - actuel p=10 g=50 | actuellement p=10 g=100 | actualiteacute p=10 g=6070 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | actuel p=10 g=3070 - actualiteacute p=10 g=80 | actuel p=10 g=40 | actuellement p=10 g=90

gain_moyen_par_mot(queries weights)

70 - actuellement p=10 g=110 | actuel p=10 g=40 | actualiteacute p=10 g=6070 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actuel p=10 g=30

(suite sur la page suivante)

92 Galleries 375

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

70 - actuel p=10 g=50 | actuellement p=10 g=100 | actualiteacute p=10 g=6070 - actuel p=10 g=50 | actualiteacute p=10 g=70 | actuellement p=10 g=9070 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | actuel p=10 g=3070 - actualiteacute p=10 g=80 | actuel p=10 g=40 | actuellement p=10 g=90

Ajouter une compleacutetion

queries = [maceacuterer maline machinerie machinerie infernale machinerierarrinfernalissime

machine artistique machine automatiquemachine chaplin machine intelligente machine learning]

weights = [1] len(queries)gain_dynamique_moyen_par_mot(queries weights permutation=False)

101 - maceacuterer p=10 g=60 | maline p=10 g=40 | machinerie p=10 g=70 | machinerierarrinfernale p=10 g=160 | machinerie infernalissime p=10 g=200 | machine artistiquerarrp=10 g=120 | machine automatique p=10 g=120 | machine chaplin p=10 g=70 |rarrmachine intelligente p=10 g=110 | machine learning p=10 g=60

queries = [machine] + queriesweights = [1] len(queries)weights[queriesindex(machine)] = 00gain_dynamique_moyen_par_mot(queries weights permutation=False)

123 - machine p=00 g=60 | maceacuterer p=10 g=50 | maline p=10 g=30 | machinerie p=10rarrg=80 | machinerie infernale p=10 g=170 | machinerie infernalissime p=10 g=210 |rarrmachine artistique p=10 g=150 | machine automatique p=10 g=150 | machine chaplinrarrp=10 g=110 | machine intelligente p=10 g=160 | machine learning p=10 g=120

Wikipedia

bull PageCount283

bull dump284

Compleacutetion Simple

Evaluation drsquoune meacutetrique pour un systegraveme de compleacutetion sur quelques cas simples

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Meacutetrique Mrsquo (page 377)

283 httpsdumpswikimediaorgotherpagecounts-raw284 httpsdumpswikimediaorgbackup-indexhtml

376 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Meacutetrique Mrsquo

from mlstatpynlp import CompletionSystemmots = [po po rouge po vert po orange port port blanc port bleurarrport rouge]ens = CompletionSystem(mots)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

n=0 M=1 | pon=1 M=2 | po rougen=2 M=3 | po vertn=3 M=4 | po orangen=4 M=3 | portn=5 M=4 | port blancn=6 M=5 | port bleun=7 M=6 | port rouge

mots_rev = motscopy()mots_rev[4] mots_rev[-1] = mots_rev[-1] mots_rev[4]ens = CompletionSystem(mots_rev)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

n=0 M=1 | pon=1 M=2 | po rougen=2 M=3 | po vertn=3 M=4 | po orangen=4 M=3 | port rougen=5 M=4 | port blancn=6 M=5 | port bleun=7 M=3 | port

mots_court = [m[4] for m in mots if mstartswith(port) and len(m) gt 4]ens = CompletionSystem(mots_court)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

n=0 M=1 | blancn=1 M=2 | bleun=2 M=3 | rouge

mots_court = [m for m in mots if m = port]ens = CompletionSystem(mots_court)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

92 Galleries 377

Machine Learning Statistiques et Programmation Version 035930

n=0 M=1 | pon=1 M=2 | po rougen=2 M=3 | po vertn=3 M=4 | po orangen=4 M=3 | port blancn=5 M=4 | port bleun=6 M=5 | port rouge

couleur = [blanc vert orange rouge noir noire blanche]key = portesmots = [port port rouge port vert port orange pore pour]motsappend(key)mots += [key + + c for c in couleur]ens = CompletionSystem(mots)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

n=0 M=1 | portn=1 M=2 | port rougen=2 M=3 | port vertn=3 M=4 | port orangen=4 M=4 | poren=5 M=4 | pourn=6 M=3 | portesn=7 M=4 | portes blancn=8 M=5 | portes vertn=9 M=6 | portes orangen=10 M=6 | portes rougen=11 M=6 | portes noirn=12 M=7 | portes noiren=13 M=5 | portes blanche

mots2 = [m for m in mots if m = portes]ens = CompletionSystem(mots2)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

n=0 M=1 | portn=1 M=2 | port rougen=2 M=3 | port vertn=3 M=4 | port orangen=4 M=4 | poren=5 M=4 | pourn=6 M=3 | portes blancn=7 M=4 | portes vertn=8 M=5 | portes orangen=9 M=6 | portes rougen=10 M=6 | portes noirn=11 M=7 | portes noiren=12 M=4 | portes blanche

378 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

mots3 = mots2copy()mots3insert(1 portes)ens = CompletionSystem(mots3)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

n=0 M=1 | portn=1 M=2 | portesn=2 M=3 | port rougen=3 M=4 | port vertn=4 M=4 | port orangen=5 M=4 | poren=6 M=4 | pourn=7 M=3 | portes blancn=8 M=4 | portes vertn=9 M=5 | portes orangen=10 M=5 | portes rougen=11 M=5 | portes noirn=12 M=6 | portes noiren=13 M=4 | portes blanche

Completion Trie andmetrics (page 355)

Evaluation of a completion system on wikpedia pages

Completion profiling(page 363)

Profiling avec cProfile memory_profiler pyinstrument snakeviz

Compleacutetion(page 370)

Comparaion de plusieurs algorithmes pour impleacutementer un systegraveme decompleacutetion

Compleacutetion Simple(page 376)

Evaluation drsquoune meacutetrique pour un systegraveme de compleacutetion sur quelquescas simples

92 Galleries 379

Machine Learning Statistiques et Programmation Version 035930

Notebooks Coverage

Report on last executions100 2022-05-30

380 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

index coverageexetime

lastexecution

name title successtime nbcells

nbruns

nbvalid

0 100 0128 2022-05-30

dsgardenclassification_multipleipynb(page 326)

Classification multiple(page 326)

True 3270 2 2 2

1 100 1057502022-05-30

dsgardencorrelation_non_lineaireipynb(page 282)

Correacutelations nonlineacuteaires (page 282)

True 10893141 41 41

2 100 254842022-05-30

dsgardendiscret_gradientipynb(page 313)

Le gradient et le discret(page 313)

True 2863522 22 22

3 100 9101 2022-05-30

dsgardenfile_dattente_exipynb(page 328)

File drsquoattente unexemple simple(page 328)

True 122148 8 8

4 100 6688 2022-05-30

dsgardenquantile_regression_exampleipynb(page 125)

Reacutegression quantileillustreacutee (page 125)

True 9845 10 10 10

5 100 205002022-05-30

dsgardenregression_lineaireipynb(page 107)

Reacutegression lineacuteaire(page 107)

True 2365541 41 41

6 100 2670542022-05-30

dsgardensplit_train_testipynb(page 267)

Reacutepartir en basedrsquoapprentissage et detest (page 267)

True 27022029 29 29

7 100 451632022-05-30

imagesegment_detectionipynb(page 261)

Deacutetection de segmentsdans une image(page 261)

True 4832817 17 17

8 100 8300 2022-05-30

metricpvalues_examplesipynb(page 235)

p-values (page 235) True 1164011 11 11

9 100 103502022-05-30

metricroc_exampleipynb(page 332)

ROC (page 332) True 1350021 21 21

10 100 168982022-05-30

mlbenchmarkipynb(page 339)

Benchmark (page 339) True 202269 9 9

11 100 578262022-05-30

mllogreg_voronoiipynb(page 161)

Voronoiuml et reacutegressionlogistique (page 161)

True 6112464 64 64

12 100 8253 2022-05-30

mlmf_acpipynb(page 342)

Factorisation et matriceet ACP (page 342)

True 1138114 14 14

13 100 3167802022-05-30

mlneural_treeipynb(page 87)

Un arbre de deacutecisionen reacuteseaux de neurones(page 87)

True 32004362 62 62

14 100 110512022-05-30

mlpiecewise_linear_regressionipynb(page 129)

Reacutegression lineacuteaire parmorceaux (page 129)

True 142137 7 7

15 100 2835952022-05-30

mlregression_no_inversionipynb(page 147)

Reacutegression sansinversion (page 147)

True 28670317 17 17

16 100 4432 2022-05-30

mlreseau_neuronesipynb(page 192)

Reacuteseaux de neurones(page 192)

True 7580 5 5 5

17 100 1492502022-05-30

mlsurvivalipynb(page 197)

Analyse de survie(page 197)

True 15233215 15 15

18 100 9986 2022-05-30

mlvaleurs_manquantes_mfipynb(page 346)

Valeurs manquanteset factorisation dematrices (page 346)

True 1310035 35 35

19 100 967422022-05-30

nlpcompletion_profilingipynb(page 363)

Completion profiling(page 363)

True 9985720 20 20

20 100 0914 2022-05-30

nlpcompletion_simpleipynb(page 376)

Compleacutetion Simple(page 376)

True 4006 9 9 9

21 100 2270 2022-05-30

nlpcompletion_trieipynb(page 370)

Compleacutetion (page 370) True 5394 15 15 15

22 100 6436272022-05-11

nlpcompletion_trie_longipynb(page 355)

Completion Trie andmetrics (page 355)

True 64778116 16 16

92 Galleries 381

Machine Learning Statistiques et Programmation Version 035930

382 Chapter 9 Galleries

CHAPTER 10

API

101 Machine Learning

bull Meacutetriques (page 383)bull Tree and neural networks (page 384)

1011 Meacutetriques

mlstatpymlMlGridBenchMark (self name datasets clog = None fLOG = ltfunction noLOG at 0x7f0cecf745e0gtpath_to_images = iquestiquest cache_file = None progressbar = None graphx = None graphy = None params)

The class tests a list of model over a list of datasetsmlstatpymlROC (self y_true = None y_score = None sample_weight = None df = None)

Helper to draw a ROC285 curvemlstatpymlvoronoi_estimation_from_lr (L B C = None D = None cl = 0 qr = True max_iter = Noneverbose = False)

Determines a Voronoi diagram close to a convex partition defined by a logistic regression in n classesM isin Mnd a row matrix (L1 Ln) Every border between two classes i and j is defined by ⟨Li X⟩ +B = ⟨Lj X⟩+BThe function looks for a set of points from which the Voronoi diagram can be inferred It is done througha linear regression with norm L1 See Reacutegression logistique diagramme de Voronoiuml k-Means (page 155)

285 httpsfrwikipediaorgwikiCourbe_ROC

383

Machine Learning Statistiques et Programmation Version 035930

1012 Tree and neural networks

mlstatpyml_neural_tree_nodeNeuralTreeNode (self weights bias = None activation = iquestsigmoidiquest nodeid= -1 tag = None)

One node in a neural networkmlstatpymlneural_treeNeuralTreeNet (self dim empty = True)

Node ensemble

102 Optimisation

bull Gradient (page 384)

1021 Gradient

mlstatpyoptimSGDOptimizer (self coef learning_rate_init = 01 lr_schedule = iquestinvscalingiquest momentum = 09power_t = 05 early_th = None min_threshold = None max_threshold = None l1 = 00 l2 = 00)

Stochastic gradient descent optimizer with momentum

103 Traitement du langage naturel

bull Compleacutetion (page 384)bull Normalisation (page 386)

1031 Compleacutetion

mlstatpynlpCompletionElement (self value weight = 10 disp = None)Definition of an element in a completion system it contains the following members

bull value the completionbull weight a weight or a position we assume a completion with a lower weight is shown at a lower

positionbull disp display string (no impact on the algorithm)bull mks0 value of minimum keystrokebull mks0_ length of the prefix to obtain mks0bull mks1 value of dynamic minimum keystrokebull mks1_ length of the prefix to obtain mks1bull mks2 value of modified dynamic minimum keystrokebull mks2_ length of the prefix to obtain mks2

empty_prefix ()return an instance filled with an empty prefix

init_metrics (self position completions = None)

384 Chapter 10 API

Machine Learning Statistiques et Programmation Version 035930

initiate the metricsstr_all_completions (self maxn = 10 use_precompute = True)

builds a string with all completions for all prefixes along the paths this is only available ifparameter completions was used when calling method update_metrics

str_mks (self )return a string with metric information

str_mks0 (self )return a string with metric information

update_metrics (self prefix position improved delta completions = None iteration = -1)update the metrics

mlstatpynlpCompletionSystem (self elements)define a completion systemcompare_with_trie (self delta = 08 fLOG = ltfunction noLOG at 0x7f0cecf745e0gt)

Compares the results with the other implementationcompute_metrics (self ffilter = None delta = 08 details = False fLOG = ltfunction noLOG at0x7f0cecf745e0gt)

Computes the metric for the completion itselfenumerate_test_metric (self qset)

Evaluates the completion set on a set of queries the function returns a list ofCompletionElement with the three metrics M M prime Mrdquo for these particular queries

find (self value is_sorted = False)Not very efficient finds an item in a the list

items (self )Iterates on (evalue e)

sort_values (self )sort the elements by value

sort_weight (self )Sorts the elements by value

test_metric (self qset)Evaluates the completion set on a set of queries the function returns a dictionary with theaggregated metrics and some statistics about them

to_dict (self )Returns a dictionary

tuples (self )Iterates on (eweight evalue)

103 Traitement du langage naturel 385

Machine Learning Statistiques et Programmation Version 035930

1032 Normalisation

mlstatpydatawikipedianormalize_wiki_text (text)Normalizes a text such as a wikipedia title

mlstatpynlpremove_diacritics (input_str)remove diacritics

104 Source de donneacutees

bull Wikipeacutedia (page 386)

1041 Wikipeacutedia

mlstatpydatawikipediadownload_dump (country name folder = iquestiquest unzip = True timeout = -1 overwrite =False fLOG = ltfunction noLOG at 0x7f0cecf745e0gt)

Downloads wikipedia dumps from dumpswikimediaorgfrwikilatest286mlstatpydatawikipediadownload_pageviews (dt folder = iquestiquest unzip = True timeout = -1 overwrite = FalsefLOG = ltfunction noLOG at 0x7f0cecf745e0gt)

Downloads wikipedia pagacount for a precise date (up to the hours) the url follows the pattern

httpsdumpswikimediaorgotherpageviewsYY-mpagecounts-Ymd-H0000rarrgz

mlstatpydatawikipediadownload_titles (country folder = iquestiquest unzip = True timeout = -1 overwrite =False fLOG = ltfunction noLOG at 0x7f0cecf745e0gt)

Downloads wikipedia titles from dumpswikimediaorgfrwikilatestlatest-all-titles-in-ns0gz287mlstatpydatawikipediaenumerate_titles (filename norm = True encoding = iquestutf8iquest)

Enumerates titles from a filemlstatpydatawikipediadownload_dump (country name folder = iquestiquest unzip = True timeout = -1 overwrite =False fLOG = ltfunction noLOG at 0x7f0cecf745e0gt)

Downloads wikipedia dumps from dumpswikimediaorgfrwikilatest288

105 Graphes

bull Distance (page 387)

286 httpsdumpswikimediaorgfrwikilatest287 httpsdumpswikimediaorgfrwikilatestlatest-all-titles-in-ns0gz288 httpsdumpswikimediaorgfrwikilatest

386 Chapter 10 API

Machine Learning Statistiques et Programmation Version 035930

1051 Distance

mlstatpygraphGraphDistance (self edge_list vertex_label = None add_loop = False weight_vertex = 10weight_edge = 10)

Defines a graph to compute a distance between two graphsdistance_matching_graphs_paths (self graph2 function_mach_vertices = Nonefunction_match_edges = None noClean = False store = None use_min = True weight_vertex =10 weight_edge = 10 verbose = 0 fLOG = ltbuilt-in function printgt)

Computes an alignment between two graphs

106 Image

bull Conversion (page 387)bull Images aleacuteatoires (page 387)bull Segments (page 387)

1061 Conversion

mlstatpyimagedetection_segmentconvert_array2PIL (img mode = None)Convertit une image donneacutee sous la forme drsquoun array au format numpyarray289

mlstatpyimagedetection_segmentconvert_PIL2array (img)Convertit une image donneacutee sous la forme drsquoune image Pillow290 au format numpyarray291

1062 Images aleacuteatoires

mlstatpyimagedetection_segmentrandom_noise_image (size ratio = 01)Construit une image blanche de taille size noircit aleacuteatoirement ratio x nb pixels pixels

mlstatpyimagedetection_segmentrandom_segment_image (image lmin = 01 lmax = 10 noise = 001density = 10)

Ajoute un segment aleacuteatoire agrave une image Geacutenegravere des points le long drsquoun segment aleacuteatoire

1063 Segments

mlstatpyimagedetection_segmentdetect_segments (image proba_bin = 00625 cos_angle =09807852804032304 seuil_nfa = 1e-05 seuil_norme = 2 angle = 01308996938995747 stop = -1 verbose =False)

Deacutetecte les segments dans une imagemlstatpyimagedetection_segmentplot_segments (image segments outfile = None color = (255 0 0))

Dessine les segments produits par la fonction detect_segments

289 httpsdocsscipyorgdocnumpyreferencegeneratednumpyarrayhtml290 httpspillowreadthedocsio291 httpsdocsscipyorgdocnumpyreferencegeneratednumpyarrayhtml

106 Image 387

Machine Learning Statistiques et Programmation Version 035930

388 Chapter 10 API

CHAPTER 11

Index

389

Machine Learning Statistiques et Programmation Version 035930

390 Chapter 11 Index

Bibliography

[Arthur2007] k-means++ the advantages of careful seeding (2007) Arthur D Vassilvitskii S Proceedings ofthe eighteenth annual ACM-SIAM symposium on Discrete algorithms Society for Industrial and AppliedMathematics Philadelphia PA USA pp 1027ndash1035 PDF7

[Balakrishnan1996] Comparative performance of the FSCL neural net and K-means algorithm for market segmentation(1996) P V Sundar Balakrishnan Martha Cooper Varghese S Jacob Phillip A Lewis European Journalof Operation Research volume 93 pages 346-357

[Bahmani2012] Scalable K-Means++ (2012) Bahman Bahmani Benjamin Moseley Andrea Vattani Ravi KumarSergei Vassilvitskii Proceedings of the VLDB Endowment (PVLDB) Vol 5 No 7 pp 622-633 (2012)PDF8 arXiv9

[Cheung2003] klowast-Means A new generalized k-means clustering algorithm (2003) Yiu-Ming Cheung PatternRecognition Letters volume 24 2883-2893

[Davies1979] A cluster Separation Measure (1979) D L Davies D W Bouldin IEEE Trans Pattern Analysis andMachine Intelligence (PAMI) volume 1(2)

[Goodman1954] Measures of associations for cross-validations (1954) L Goodman W Kruskal J Am Stat Assocvolume 49 pages 732-764

[Herbin2001] Estimation of the number of clusters and influence zones (2001) M Herbin N Bonnet P VautrotPattern Recognition Letters volume 22 pages 1557-1568

[Kothari1999] On finding the number of clusters (1999) Ravi Kothari Dax Pitts Pattern Recognition Letters volume20 pages 405-416

[Liu2003] Strip line detection and thinning by RPCL-based local PCA (2003) Zhi-Yong Liu Kai-Chun Chiu Lei XuPattern Recognition Letters volume 24 pages 2335-2344

[Silverman1986] Density Estimation for Statistics and Data Analysis (1986) B W Silverman Monographs onStatistics and Applied Probability Chapman and Hall London volume 26

[Xu1993] Rival penalized competitive learning for clustering analysis rbf net and curve detection (1993) L Xu AKrzyzak E Oja IEEE Trans Neural Networks volume (4) pages 636-649

[Biernacki2001] Assessing a Mixture Model for Clustering with the Integrated Completed Likelihood (2001) CBiernacki G Deleux G Govaert IEEE Transactions on Image Analysis and Machine Intelligence volume22(7) pages 719-725

7 httpilpubsstanfordedu809077812006-13pdf8 httptheorystanfordedu~sergeipapersvldb12-kmparpdf9 httpsarxivorgabs12036402

391

Machine Learning Statistiques et Programmation Version 035930

[Celeux1985] The SEM algorithm a probabilistic teacher algorithm derived from the EM algorithm for the mixtureproblem (1985) G Celeux J Diebolt Computational Statistics Quarterly Volume 2(1) pages 73-82

[Celeux1985b] On stochastic version of the EM algorithm (1985) Gilles Celeux Didier Chauveau Jean DieboltRapport de recherche de lrsquoINRIA n 2514

[Dempster1977] Maximum-Likelihood from incomplete data via the EM algorithm (1977) A P Dempster N MLaird D B Rubin Journal of Royal Statistical Society B volume 39 pages 1-38

[Figueiredo2002] Unsupervised learning of finite mixture models (2002) M A T Figueiredo A K Jain IEEETransactions on Pattern Analysis and Machine Intelligence volume 24(3) pages 381-396

[ZhangB2004] Competitive EM algorithm for finite mixture models (2004) Baibo Zhang Changshui Zhang XingYi Pattern Recognition volume 37 pages 131-144

[Kohonen1982] Self-organized formation of topologically correct feature maps (1982) T Kohonen Biol Cybernvolume (43) pages 59-69

[Kohonen1997] Self-Organizing Map (1997) T Kohonen Springer[Lo1991] On the rate of convergence in topology preserving neural networks (1991) Z Lo B Bavarian Biological

Cybernetics volume 63 pages 55-63[Rougier] Dynamic Self-Organising Map16 Nicolas P Rougier and Yann Boniface[Wu2004] Clustering of the self-organizing map using a clustering validity index based on inter-cluster and intra-cluster

density (2004) Sitao Wu Tommy W S Chow Pattern Recognition volume (37) pages 175-188[Bottou1991] Une approche theacuteorique de lrsquoapprentissage connexionniste Application agrave la reconnaissance de la

parole Leacuteon BottouThegravese de lrsquoUniversiteacute de Paris Sud Centre drsquoOrsay

[Broyden1967] Quasi-Newton methods and their application to function minimization (1967) C G Broyden MathComput pages 21-368

[Bishop1995] Neural networks for pattern recognition (1995) C M Bishop Oxford University Press[Cottrel1995] Neural modeling for time series a statistical stepwise methode for weight elimination (1995) M Cottrel

B Girard M Mangeas C Muller IEEE Transaction On Neural Networks[Cybenko1989] Approximation by superpositions of a sigmoidal function (1989) G Cybenko Mathematics of

Controls Signals and Systems p 303-314[Davidon1959] Variable metric method for minimization (1959) C W Davidon AEC Research and Development

Report ANL-5990[Driancourt1996] Optimisation par descente de gradient stochastique de systegravemes modulaires combinant reacuteseaux de

neurones et programmation dynamique Application agrave la reconnaissance de la parole (1996) X DriancourtThegravese de lrsquoUniversiteacute de Paris Sud Centre drsquoOrsay

[Fletcher1963] A rapidly convergent descent method for minimization (1963) R Fletcher M J D Powell ComputerJournal 6 pages 163-168

[Fletcher1993] An overview of Unconstrained Optimization (1993) R Fletcher Numerical Analysis Report NA149[Kullback1951] On information and sufficiency (1951) S Kullback R A Leibler Ann Math Stat 22 pages 79-86[LeCun1985] Une proceacutedure drsquoapprentissage pour reacuteseaux agrave seuil asymeacutetrique (1985) Yann Le Cun Cognita p 599-

604[Moreacute1977] The Levenberg-Marquardt algorithm Implementation and theory (1977) J J Moreacute Proceedings of the

1977 Dundee Conference on Numerical Analysis G A Watson ed Lecture Notes in Mathematics vol630 Springer-Verlag Berlin pages 105-116

[Rumelhart1986] Learning internal representations by error propagation (1986) D E Rumelhart G E Hinton R JWilliams in Parallel distributed processing explorations in the microstructures of cohniyionn MIT PressCambridge

16 httpwwwlabrifrpersonrougiercodingarticlearticlehtml

392 Bibliography

Machine Learning Statistiques et Programmation Version 035930

[Saporta1990] Probabiliteacutes analyse des donneacutees et statistique (1990) Gilbert Saporta Editions Technip[Song1997] Self-organizing algorithm of robust PCA based on single layer NN (1997) Song Wang Shaowei Xia

Proceedings of the 4th International Conference Document Analysis and Recognition[Beckmann1990] The R$^$-tree an efficient and robust access method for points and rectangles N Beckmann H

P Kriegel P Schneider B Seeger Proceedings of SIGMOD conference Atlantic City pages 322-331[Berchtold1996] The X-Tree An index structure for high dimension data S Berchtold D A Keim H P Kriegel

Proceedings of the 22nd Internation Conference on Very Large Databases Bombay India[Farago1993] Fast Nearest-Neighbor Search in Dissimilarity Spaces A Farago T Linder G Lugosi IEEE

Transactions on Pattern Analysis and Machine Intelligence volume 15(9) pages 957-962[Guttman1984] R-Trees A Dynamic Index Structure for Spatial Searching A Guttman Proceedings ACM SIGMOD

pages 47-57[Moreno2003] A modification of the LAESA algorithm for approximated k-NN classification Francisco Moreno-Seco

Luisa Mico Jose Oncina Pattern Recognition Letters volumne 24 pages 47-53[Rico-Juan2003] Comparison of AESA and LAESA search algorithms using string and tree-edit-distances J R Rico-

Juan L Mico Pattern Recognition Letters volume 24 pages 1417-1426[Sellis1987] The R+tree - a Dynamic Index for Multi-Dimensional Objects T Sellis N Roussopoulos C Faloutos

Proceedings of the 13th VLDB conference pages 507-518[Acara2011] Scalable tensorfactorizations for incomplete data Evrim Acara Daniel MDunlavyc Tamara GKoldab

Morten Moslashrupd Chemometrics and Intelligent Laboratory Systems Volume 106 Issue 1 15 March 2011Pages 41-56 or ArXiv 1005219788

[Boutsidis2008] SVD-based initialization A head start for nonnegative matrix factorization Christos Boutsidis andEfstratios Gallopoulos Pattern Recognition 41(4) 1350-1362 2008

[Gilles2014] The Why and How of Nonnegative Matrix Factorization Nicolas Gillis ArXiv 1401522689

[Gupta2010] Additive Non-negative Matrix Factorization for Missing Data Mithun Das Gupta ArXiv 1007038090

[Koenker2017] Quantile Regression 40 years on109 Roger Koenker (2017)[Chen2014] Fast Iteratively Reweighted Least Squares Algorithms for Analysis-Based Sparsity Reconstruction110

Chen Chen Junzhou Huang Lei He Hongsheng Li[Acharya2016] Fast Algorithms for Segmented Regression145 Jayadev Acharya Ilias Diakonikolas Jerry Li Ludwig

Schmidt ICML 2016146

[Cai2020] Online Sufficient Dimension Reduction Through Sliced Inverse Regression147 Zhanrui Cai Runze LiLiping Zhu

[Nie2016] Online PCA with Optimal Regret148 Jiazhong Nie Wojciech Kotlowski Manfred K Warmuth[Preda2010] The NIPALS Algorithm for Missing Functional Data149 Cristian Preda Gilbert Saporta Mohamed Hadj

Mbarek Revue roumaine de matheacutematiques pures et appliqueacutees 2010 55 (4) pp315-326[Char] Regularization and Penalized Regression154 Arthur Charpentier[Bampoulidis2017] Does Online Evaluation Correspond to Offline Evaluation in Query Auto Completion (2017)

Alexandros Bampoulidis Joatildeo PalottiMihai LupuJon BrasseyAllan Hanbury ECIR 2017 Advances inInformation Retrieval

88 httpsarxivorgpdf10052197pdf89 httpsarxivorgabs1401522690 httpsarxivorgabs10070380

109 httpwwweconuiucedu~rogercoursesNIPEhandoutsQR40pdf110 httpsarxivorgabs14115057145 httpsarxivorgabs160703990146 httpsicmlcc2016indexhtml147 httpwwwjmlrorgpapersvolume2118-56718-567pdf148 httpjmlrorgpapersvolume1715-32015-320pdf149 httpshalarchives-ouvertesfrhal-01125940document154 httpsfreakonometricshypothesesorg58240

Bibliography 393

Machine Learning Statistiques et Programmation Version 035930

[Sevenster2013] Algorithmic and user study of an autocompletion algorithm on a large medical vocabulary (2013)Merlijn Sevenster Rob van Ommering Yuechen Qian Journal of Biomedical Informatics 45 pages 107-119

[Agarwal2005] Generalization Bounds for the Area Under the ROC Curve (2005) Shivani Agarwal Thore GraepelRalf Herbich Sariel Har-Peled Dan Roth Journal of Machine Learning Research volume 6 pages 393-425

[Saporta1990] Probabiliteacutes analyse des donneacutees et statistique (1990) Gilbert Saporta Editions Technip[Damerau1964] A technique for computer detection and correction of spelling errors (1964) F J Damerau Commun

ACM volume 7(3) pages 171-176[Kripasundar1996] Generating edit distance to incorporate domain information (1996) V Kripasunder G Seni R K

Srihari CEDARSUNY[Levenstein1966] Binary codes capables of correctiong deletions insertions and reversals (1966) V I Levenstein

Soviet Physics Doklady volume 10(8) pages 707-710[Seni1996] Generalizing edit distance to incorporate domain information handwritten text recognition as a case study

(1996) Giovanni Seni V Kripasundar Rohini K Srihari Pattern Recognition volume 29 pages 405-414[Waard1995] An optimised minimal edit distance for hand-written word recognition (1995) W P de Waard Pattern

Recognition Letters volume 1995 pages 1091-1096[Wagner1974] The string-to-string correction problem (1974) R A Wagner M Fisher Journal of the ACM volume

21 pages 168-178[Blondel2004] A measure of similarity between graph vertices Vincent Blondel Anahi Gajardo Maureen Heymans

Pierre Senellart Paul Van Dooren arxiv0407061238

[Faure2000] Preacutecis de recherche opeacuterationnelle 5iegraveme eacutedition Robert Faure Bernard Lemaire Christophe PicouleauDunod

[Gourieacuteroux1983] Analyse des seacuteries temporelles Christian Gourieacuteroux Alain Monfort Editions Economica[Saporta2006] Probabiliteacutes analyse des donneacutees et statistique Gilbert Saporta Editions Technip

238 httpsarxivorgabscs0407061

394 Bibliography

  • Clustering
    • k-means
      • Principe
        • Homogeacuteneacuteiteacute des dimensions
          • Ameacuteliorations de linitialisation
            • K-means++
            • K-means||
              • Estimation de probabiliteacutes
              • Seacutelection du nombre de classes
                • Critegravere de qualiteacute
                • Maxima de la fonction densiteacute
                • Deacutecroissance du nombre de classes
                  • Extension des nueacutees dynamiques
                    • Classes elliptiques
                    • Rival Penalized Competitive Learning (RPCL)
                    • RPCL-based local PCA
                    • Frequency Sensitive Competitive Learning (FSCL)
                      • k-means norme L1
                      • Bibliographie
                        • Meacutelange de lois normales
                          • Algorithme EM
                          • Competitive EM algorithm
                          • Bibliographie
                            • Carte de Kohonen
                              • Principe
                              • Carte de Kohonen et classification
                              • Autres utilisation des cartes de Kohenen
                              • Bibliographie
                                  • Non lineacuteaire
                                    • Reacuteseaux de neurones
                                      • Deacutefinition des reacuteseaux de neurones multi-couches
                                        • Un neurone
                                        • Une couche de neurones
                                        • Un reacuteseau de neurones le perceptron
                                          • La reacutegression
                                          • La classification
                                          • Deacutemonstration du theacuteoregraveme de la densiteacute des reacuteseaux de neurones
                                            • Formulation du problegraveme de la reacutegression
                                            • Densiteacute des reacuteseaux de neurones
                                              • Descente de gradient
                                                • Algorithme et convergence
                                                • Calcul du gradient ou reacutetropropagation
                                                  • Apprentissage dun reacuteseau de neurones
                                                    • Apprentissage avec gradient global
                                                      • Meacutethodes du premier ordre
                                                      • Meacutethodes du second ordre
                                                        • Apprentissage avec gradient stochastique
                                                          • Classification
                                                            • Vraisemblance dun eacutechantillon de variable suivant une loi multinomiale
                                                            • Problegraveme de classification pour les reacuteseaux de neurones
                                                            • Reacuteseau de neurones adeacutequat
                                                              • Prolongements
                                                                • Base dapprentissage et base de test
                                                                • Fonction de transfert agrave base radiale
                                                                • Poids partageacutes
                                                                • Deacuteriveacutee par rapport aux entreacutees
                                                                • Reacutegularisation ou Decay
                                                                • Problegravemes de gradients
                                                                • Seacutelection de connexions
                                                                  • Analyse en composantes principales (ACP) et Auto Encoders
                                                                    • Problegraveme de lanalyse en composantes principales
                                                                    • Reacutesolution dune ACP avec un reacuteseau de neurones diabolo
                                                                    • Calcul de valeurs propres et de vecteurs propres
                                                                    • Analyse en Composantes Principales (ACP)
                                                                      • Bibliographie
                                                                        • Classification agrave laide des plus proches voisins
                                                                          • Principe
                                                                          • B+ tree
                                                                          • R-tree ou Rectangular Tree
                                                                          • LAESA
                                                                          • Reacutesultats theacuteoriques
                                                                          • Impleacutementation
                                                                          • Bilbiographie
                                                                            • Liens entre factorisation de matrices ACP k-means
                                                                              • Factorisation de matrices et rang
                                                                              • Quelques cas simples
                                                                              • Intuition geacuteomeacutetrique
                                                                              • k-means
                                                                              • Quelques reacutesultats
                                                                              • Prolongements
                                                                                • Factorisation non-neacutegative
                                                                                • Preacutediction
                                                                                • Norme
                                                                                • Sparsiteacute
                                                                                • Valeurs manquantes
                                                                                • Interpreacutetation
                                                                                • NTF
                                                                                  • Bibliographie
                                                                                    • Un arbre de deacutecision en reacuteseaux de neurones
                                                                                      • Un exemple sur Iris
                                                                                      • Mecircme exemple en reacuteseau de neurones
                                                                                      • Intermegravede de simples neurones de reacutegression
                                                                                      • Intermegravede de simples neurones de classification
                                                                                      • Apprentissage du reacuteseau de neurones
                                                                                      • Autre architecture
                                                                                          • Reacutegression lineacuteaire
                                                                                            • Reacutegression lineacuteaire
                                                                                              • Un cas simple
                                                                                              • Evolution de R2
                                                                                              • Deux variables correacuteleacutees
                                                                                              • Indicatrices
                                                                                              • Reacutegression lineacuteaire par morceaux
                                                                                                • Reacutegression quantile
                                                                                                  • Meacutediane et valeur absolue
                                                                                                  • Reacutegression quantile
                                                                                                  • Reacutesolution dune reacutegression quantile
                                                                                                  • Quantile et optimisation
                                                                                                  • Reacutegression quantile pour un quantile p quelconque
                                                                                                  • Reacutesolution dune reacutegression quantile pour un quantile p quelconque
                                                                                                  • Notebook
                                                                                                    • Reacutegression quantile illustreacutee
                                                                                                      • Un jeu de donneacutees non symeacutetrique
                                                                                                      • Reacutegression lineacuteaire et reacutegression quantile
                                                                                                      • Diffeacuterents quantiles
                                                                                                          • Bilbiographie
                                                                                                            • Reacutegression lineacuteaire par morceaux
                                                                                                              • Exploration
                                                                                                                • Problegraveme et regreacutession lineacuteaire dans un espace agrave une dimension
                                                                                                                  • Reacutegression lineacuteaire par morceaux
                                                                                                                    • Des donneacutees artificielles
                                                                                                                    • Quelques exemples avec un arbre de deacutecision
                                                                                                                    • Quelques exemples avec un KBinsDiscretizer
                                                                                                                    • Arbre de deacutecision optimiseacute pour la reacutegression lineacuteaire
                                                                                                                        • Impleacutementation naiumlve dune reacutegression lineacuteaire par morceaux
                                                                                                                        • Aparteacute sur la continuiteacute de la reacutegression lineacuteaire par morceaux
                                                                                                                        • Reacutegression lineacuteaire et correacutelation
                                                                                                                        • Ideacutee de lalgorithme
                                                                                                                        • Un peu plus en deacutetail dans lalgorithme
                                                                                                                          • Synthegravese matheacutematique
                                                                                                                          • Streaming
                                                                                                                            • Streaming Gram-Schmidt
                                                                                                                            • Streaming Linear Regression
                                                                                                                            • Streaming Linear Regression version Gram-Schmidt
                                                                                                                              • Digressions
                                                                                                                              • Notebooks
                                                                                                                                • Reacutegression sans inversion
                                                                                                                                  • Streaming versions
                                                                                                                                      • Impleacutementations
                                                                                                                                      • Bilbiographie
                                                                                                                                        • Normalisation des coefficients
                                                                                                                                          • Reacuteduction de dimension
                                                                                                                                          • Peacutenalisation L1 et L2
                                                                                                                                          • Bibliographie
                                                                                                                                              • Reacutegression logistique
                                                                                                                                                • Reacutegression logistique diagramme de Voronoiuml k-Means
                                                                                                                                                  • Diagramme de Voronoiuml
                                                                                                                                                  • Reacutegression logistique
                                                                                                                                                  • Diagramme de Voronoiuml et partition convexe
                                                                                                                                                  • Reacutegression logistique et partition convexe
                                                                                                                                                  • Voronoiuml et reacutegression logistique
                                                                                                                                                  • Notebooks
                                                                                                                                                    • Voronoiuml et reacutegression logistique
                                                                                                                                                      • Reacutegression logistique
                                                                                                                                                      • Quelques diagramme de Voronoiuml
                                                                                                                                                      • Un diagramme de Voronoiuml proche
                                                                                                                                                      • Reacutegression logistique dans un quadrillage
                                                                                                                                                      • Reacutegression logistique autour dun cercle
                                                                                                                                                      • Pousser les classes sur la boule uniteacute
                                                                                                                                                      • Cas presque hexagonal
                                                                                                                                                      • Diagramme de Voronoiuml approcheacute
                                                                                                                                                        • Reacutegression logistique par morceaux arbres de deacutecision
                                                                                                                                                          • Parallegravele entre un neurone et une reacutegression logistique
                                                                                                                                                          • Principe dun arbre de deacutecision
                                                                                                                                                          • Construction dun pseudo arbre
                                                                                                                                                          • Aparteacute matheacutematique
                                                                                                                                                          • Approche EM et reacutegression logistique
                                                                                                                                                          • Lien vers les reacuteseaux de neurones
                                                                                                                                                          • Plan orthogonal
                                                                                                                                                          • Interpreacutetabiliteacute
                                                                                                                                                          • Bibliographie
                                                                                                                                                            • Reacuteseaux de neurones
                                                                                                                                                            • Analyse de survie
                                                                                                                                                              • Lien avec le machine learning
                                                                                                                                                              • Courbe de Kaplan-Meier
                                                                                                                                                              • Reacutegression de Cox
                                                                                                                                                              • Notebooks
                                                                                                                                                                • Analyse de survie
                                                                                                                                                                  • Quelques donneacutees
                                                                                                                                                                  • Reacutegression de Cox
                                                                                                                                                                      • Liens articles
                                                                                                                                                                      • Modules
                                                                                                                                                                          • NLP
                                                                                                                                                                            • Compleacutetion
                                                                                                                                                                              • Formalisation
                                                                                                                                                                                • Problegraveme doptimisation
                                                                                                                                                                                • Ensemble des compleacutetions
                                                                                                                                                                                • Gain
                                                                                                                                                                                  • Fausses ideacutees reccedilues
                                                                                                                                                                                    • Il faut trier les compleacutetions par freacutequence deacutecroissante
                                                                                                                                                                                    • Il faut placer les compleacutetions courtes avant
                                                                                                                                                                                    • Il faut montrer toutes les compleacutetions
                                                                                                                                                                                    • Et si le poids de chaque compleacutetion est uniforme
                                                                                                                                                                                      • Nouvelle meacutetrique
                                                                                                                                                                                        • Intuitions
                                                                                                                                                                                        • Formalisation
                                                                                                                                                                                        • Quelques reacutesultats
                                                                                                                                                                                        • Deacutefinition avanceacutee
                                                                                                                                                                                        • Questions
                                                                                                                                                                                          • Proprieacuteteacutes matheacutematiques
                                                                                                                                                                                            • Calcul pour une compleacutetion
                                                                                                                                                                                            • Calcul pour une requecircte en dehors
                                                                                                                                                                                            • Compleacutetions emboicircteacutees
                                                                                                                                                                                            • Listes tronqueacutees de compleacutetions
                                                                                                                                                                                              • Problegraveme doptimisation
                                                                                                                                                                                                • Enonceacute 1
                                                                                                                                                                                                • Enonceacute 2
                                                                                                                                                                                                • Une ideacutee
                                                                                                                                                                                                  • Impleacutementation
                                                                                                                                                                                                    • Notion de trie
                                                                                                                                                                                                    • Algorithme eacuteleacutegant
                                                                                                                                                                                                      • Digressions
                                                                                                                                                                                                        • Synonymes Contexte
                                                                                                                                                                                                        • Source
                                                                                                                                                                                                        • Fonction de gain
                                                                                                                                                                                                        • Minuscules majuscules
                                                                                                                                                                                                        • Suppression de caractegraveres
                                                                                                                                                                                                        • Coucirct dun caractegravere
                                                                                                                                                                                                        • Compleacutetion partielle
                                                                                                                                                                                                        • Utilisateurs
                                                                                                                                                                                                        • Revenir en arriegravere
                                                                                                                                                                                                          • Meacutetriques
                                                                                                                                                                                                            • Courbe ROC
                                                                                                                                                                                                              • Deacutefinitions
                                                                                                                                                                                                              • Aire sous la courbe
                                                                                                                                                                                                                • Expression
                                                                                                                                                                                                                • Intervalles de confiance
                                                                                                                                                                                                                  • Intervalles de confiance sur la courbe
                                                                                                                                                                                                                    • Construction de la courbe ROC
                                                                                                                                                                                                                    • Meacutethode boostrap
                                                                                                                                                                                                                    • Aire sous la courbe
                                                                                                                                                                                                                      • Distribution des scores mauvais et bons
                                                                                                                                                                                                                      • Variantes
                                                                                                                                                                                                                        • Taux de lecture ou de reconnaissance
                                                                                                                                                                                                                          • Classification multi-classe
                                                                                                                                                                                                                          • Exemple
                                                                                                                                                                                                                            • Confidence Interval and p-Value
                                                                                                                                                                                                                              • Introduction
                                                                                                                                                                                                                              • p-value
                                                                                                                                                                                                                              • Significant difference between samples mean
                                                                                                                                                                                                                              • Application on binomial variables
                                                                                                                                                                                                                              • Estimate a p-value by using the distribution function
                                                                                                                                                                                                                              • Correlated variables
                                                                                                                                                                                                                              • Multiple comparisons problem
                                                                                                                                                                                                                              • Algorithm Expectation-Maximization
                                                                                                                                                                                                                              • Notebooks
                                                                                                                                                                                                                                • p-values
                                                                                                                                                                                                                                  • p-value table
                                                                                                                                                                                                                                  • p-values in 2D
                                                                                                                                                                                                                                  • p-value ratio
                                                                                                                                                                                                                                  • p-values and EM
                                                                                                                                                                                                                                  • p-value and heavy tail
                                                                                                                                                                                                                                      • Bibliographie
                                                                                                                                                                                                                                          • Algorithmes
                                                                                                                                                                                                                                            • Distance deacutedition
                                                                                                                                                                                                                                              • Deacutefinition et proprieacuteteacutes
                                                                                                                                                                                                                                                • Deacutefinition
                                                                                                                                                                                                                                                • Proprieacuteteacutes
                                                                                                                                                                                                                                                  • Factorisation des calculs
                                                                                                                                                                                                                                                  • Extension de la distance deacutedition
                                                                                                                                                                                                                                                  • Apprentissage dune distance deacutedition
                                                                                                                                                                                                                                                  • Bibliographie
                                                                                                                                                                                                                                                    • Distance between two graphs
                                                                                                                                                                                                                                                      • Definitions
                                                                                                                                                                                                                                                      • Problem
                                                                                                                                                                                                                                                      • First approach
                                                                                                                                                                                                                                                        • Step 1 edit distance
                                                                                                                                                                                                                                                        • Step 2 Kruskal kind (bijection on paths)
                                                                                                                                                                                                                                                        • Step 3 Matching
                                                                                                                                                                                                                                                        • Step 4 Kruskal kind the return (bijection on edges and vertices)
                                                                                                                                                                                                                                                        • Step 5 Merging the two graphs
                                                                                                                                                                                                                                                          • Distance between graphs
                                                                                                                                                                                                                                                          • Second approach faster
                                                                                                                                                                                                                                                          • Bibliography
                                                                                                                                                                                                                                                            • Deacutetection de segments
                                                                                                                                                                                                                                                              • Lideacutee
                                                                                                                                                                                                                                                              • Illustration
                                                                                                                                                                                                                                                                • Deacutetection de segments dans une image
                                                                                                                                                                                                                                                                  • Une image aleacuteatoire
                                                                                                                                                                                                                                                                  • Gradient
                                                                                                                                                                                                                                                                  • Deacutetection de segments
                                                                                                                                                                                                                                                                  • Deacutetection de segments sur une image
                                                                                                                                                                                                                                                                      • Explications
                                                                                                                                                                                                                                                                        • Bibliographie
                                                                                                                                                                                                                                                                          • Peacutereacutegrinations
                                                                                                                                                                                                                                                                            • Reacutepartir en base dapprentissage et de test
                                                                                                                                                                                                                                                                              • Reacutepartition naiumlve
                                                                                                                                                                                                                                                                              • Reacutepartition stratifieacutee
                                                                                                                                                                                                                                                                              • Streaming splitting
                                                                                                                                                                                                                                                                              • Streaming distribueacute
                                                                                                                                                                                                                                                                                • Correacutelations non lineacuteaires
                                                                                                                                                                                                                                                                                  • Un exemple
                                                                                                                                                                                                                                                                                  • Un peu de theacuteorie
                                                                                                                                                                                                                                                                                  • Veacuterifications
                                                                                                                                                                                                                                                                                  • Overfitting
                                                                                                                                                                                                                                                                                  • Correacutelations de variables cateacutegorielles
                                                                                                                                                                                                                                                                                  • Maximal information coefficient
                                                                                                                                                                                                                                                                                    • File dattente un petit exemple
                                                                                                                                                                                                                                                                                      • Petite histoire
                                                                                                                                                                                                                                                                                      • Un peu de theacuteorie
                                                                                                                                                                                                                                                                                        • File dattente cas MM1
                                                                                                                                                                                                                                                                                        • File dattente cas MMS
                                                                                                                                                                                                                                                                                        • Retour aux ampoules
                                                                                                                                                                                                                                                                                        • Application numeacuterique
                                                                                                                                                                                                                                                                                          • Programme informatique
                                                                                                                                                                                                                                                                                          • Bibliographie
                                                                                                                                                                                                                                                                                            • Optimisation avec donneacutees aleacuteatoires
                                                                                                                                                                                                                                                                                              • Un problegraveme simple
                                                                                                                                                                                                                                                                                              • Modeacutelisation de la demande
                                                                                                                                                                                                                                                                                              • Variations saisonniegraveres et prolongations
                                                                                                                                                                                                                                                                                              • Bibliographie
                                                                                                                                                                                                                                                                                                • Le gradient et le discret
                                                                                                                                                                                                                                                                                                  • Un petit problegraveme simple
                                                                                                                                                                                                                                                                                                  • Multiplication des observations
                                                                                                                                                                                                                                                                                                  • Introduire du bruit
                                                                                                                                                                                                                                                                                                  • Comparaisons de plusieurs modegraveles
                                                                                                                                                                                                                                                                                                  • Avec une ACP
                                                                                                                                                                                                                                                                                                  • Base dapprentissage et de test
                                                                                                                                                                                                                                                                                                  • Petite explication
                                                                                                                                                                                                                                                                                                      • Galleries
                                                                                                                                                                                                                                                                                                        • Gallery of examples
                                                                                                                                                                                                                                                                                                          • Arbre dindeacutecision
                                                                                                                                                                                                                                                                                                            • Un cas simple et un cas compliqueacute
                                                                                                                                                                                                                                                                                                              • Seuil de deacutecision
                                                                                                                                                                                                                                                                                                                • Galleries
                                                                                                                                                                                                                                                                                                                  • Le petit coin des data scientists
                                                                                                                                                                                                                                                                                                                    • Classification multiple
                                                                                                                                                                                                                                                                                                                      • Deacutebut de lhistoire
                                                                                                                                                                                                                                                                                                                        • Confusions
                                                                                                                                                                                                                                                                                                                        • Clustering
                                                                                                                                                                                                                                                                                                                          • Mise en pratique
                                                                                                                                                                                                                                                                                                                            • File dattente un exemple simple
                                                                                                                                                                                                                                                                                                                              • Images
                                                                                                                                                                                                                                                                                                                              • Meacutetriques
                                                                                                                                                                                                                                                                                                                                • ROC
                                                                                                                                                                                                                                                                                                                                  • Iris datasets
                                                                                                                                                                                                                                                                                                                                  • ROC with scikit-learn
                                                                                                                                                                                                                                                                                                                                  • ROC - TPR FPR
                                                                                                                                                                                                                                                                                                                                  • ROC - score distribution
                                                                                                                                                                                                                                                                                                                                  • ROC - recall precision
                                                                                                                                                                                                                                                                                                                                      • Machine Learning
                                                                                                                                                                                                                                                                                                                                        • Benchmark
                                                                                                                                                                                                                                                                                                                                          • Petit bench sur le clustering
                                                                                                                                                                                                                                                                                                                                            • Deacutefinition du bench
                                                                                                                                                                                                                                                                                                                                            • Lancer le bench
                                                                                                                                                                                                                                                                                                                                            • Reacutecupeacuterer les reacutesultats
                                                                                                                                                                                                                                                                                                                                            • Dessin Graphs
                                                                                                                                                                                                                                                                                                                                                • Factorisation et matrice et ACP
                                                                                                                                                                                                                                                                                                                                                  • Factorisation de matrices
                                                                                                                                                                                                                                                                                                                                                  • ACP analyse en composantes principales
                                                                                                                                                                                                                                                                                                                                                    • Valeurs manquantes et factorisation de matrices
                                                                                                                                                                                                                                                                                                                                                      • Matrice agrave coefficients aleacuteatoires
                                                                                                                                                                                                                                                                                                                                                      • Matrice avec des vecteurs colonnes correacuteleacutes
                                                                                                                                                                                                                                                                                                                                                      • Matrice identiteacute
                                                                                                                                                                                                                                                                                                                                                      • Matrice identiteacute et repreacutesentation spatiale
                                                                                                                                                                                                                                                                                                                                                          • NLP - Natural Language Processing
                                                                                                                                                                                                                                                                                                                                                            • Completion Trie and metrics
                                                                                                                                                                                                                                                                                                                                                              • Wikipedia titles uniform
                                                                                                                                                                                                                                                                                                                                                              • Reduce the alphabet size
                                                                                                                                                                                                                                                                                                                                                              • Wikipedia titles uniform longer test
                                                                                                                                                                                                                                                                                                                                                                • Completion profiling
                                                                                                                                                                                                                                                                                                                                                                  • Setup
                                                                                                                                                                                                                                                                                                                                                                    • Function to profile
                                                                                                                                                                                                                                                                                                                                                                    • Data
                                                                                                                                                                                                                                                                                                                                                                      • Standard modules
                                                                                                                                                                                                                                                                                                                                                                        • cProfile
                                                                                                                                                                                                                                                                                                                                                                          • Others informations when profiling
                                                                                                                                                                                                                                                                                                                                                                            • memory_profiler
                                                                                                                                                                                                                                                                                                                                                                              • Static Visualization
                                                                                                                                                                                                                                                                                                                                                                                • pyinstrument
                                                                                                                                                                                                                                                                                                                                                                                  • Javascript Visualization
                                                                                                                                                                                                                                                                                                                                                                                    • SnakeViz
                                                                                                                                                                                                                                                                                                                                                                                    • vprof py-spy
                                                                                                                                                                                                                                                                                                                                                                                        • Compleacutetion
                                                                                                                                                                                                                                                                                                                                                                                          • Tester des ideacutees
                                                                                                                                                                                                                                                                                                                                                                                            • Meilleur ordre pour a ab abc abcd
                                                                                                                                                                                                                                                                                                                                                                                            • Meilleur ordre pour a ab abc abcd edf edfh
                                                                                                                                                                                                                                                                                                                                                                                            • Influence du poids
                                                                                                                                                                                                                                                                                                                                                                                              • Nouvelle meacutetrique
                                                                                                                                                                                                                                                                                                                                                                                                • Intuition
                                                                                                                                                                                                                                                                                                                                                                                                  • Veacuterification
                                                                                                                                                                                                                                                                                                                                                                                                  • Ajouter une compleacutetion
                                                                                                                                                                                                                                                                                                                                                                                                  • Wikipedia
                                                                                                                                                                                                                                                                                                                                                                                                    • Compleacutetion Simple
                                                                                                                                                                                                                                                                                                                                                                                                      • Meacutetrique M
                                                                                                                                                                                                                                                                                                                                                                                                        • Notebooks Coverage
                                                                                                                                                                                                                                                                                                                                                                                                          • API
                                                                                                                                                                                                                                                                                                                                                                                                            • Machine Learning
                                                                                                                                                                                                                                                                                                                                                                                                              • Meacutetriques
                                                                                                                                                                                                                                                                                                                                                                                                              • Tree and neural networks
                                                                                                                                                                                                                                                                                                                                                                                                                • Optimisation
                                                                                                                                                                                                                                                                                                                                                                                                                  • Gradient
                                                                                                                                                                                                                                                                                                                                                                                                                    • Traitement du langage naturel
                                                                                                                                                                                                                                                                                                                                                                                                                      • Compleacutetion
                                                                                                                                                                                                                                                                                                                                                                                                                      • Normalisation
                                                                                                                                                                                                                                                                                                                                                                                                                        • Source de donneacutees
                                                                                                                                                                                                                                                                                                                                                                                                                          • Wikipeacutedia
                                                                                                                                                                                                                                                                                                                                                                                                                            • Graphes
                                                                                                                                                                                                                                                                                                                                                                                                                              • Distance
                                                                                                                                                                                                                                                                                                                                                                                                                                • Image
                                                                                                                                                                                                                                                                                                                                                                                                                                  • Conversion
                                                                                                                                                                                                                                                                                                                                                                                                                                  • Images aleacuteatoires
                                                                                                                                                                                                                                                                                                                                                                                                                                  • Segments
                                                                                                                                                                                                                                                                                                                                                                                                                                      • Index
                                                                                                                                                                                                                                                                                                                                                                                                                                      • Bibliography
Page 2: Machine Learning, Statistiques et Programmation

Contents

1 Clustering 111 k-means 112 Meacutelange de lois normales 1713 Carte de Kohonen 20

2 Non lineacuteaire 2521 Reacuteseaux de neurones 2522 Classification agrave lrsquoaide des plus proches voisins 7223 Liens entre factorisation de matrices ACP k-means 8124 Un arbre de deacutecision en reacuteseaux de neurones 87

3 Reacutegression lineacuteaire 10731 Reacutegression lineacuteaire 10732 Reacutegression quantile 12133 Reacutegression lineacuteaire par morceaux 12834 Normalisation des coefficients 152

4 Reacutegression logistique 15541 Reacutegression logistique diagramme de Voronoiuml k-Means 15542 Reacutegression logistique par morceaux arbres de deacutecision 18443 Reacuteseaux de neurones 19244 Analyse de survie 195

5 NLP 20151 Compleacutetion 201

6 Meacutetriques 21961 Courbe ROC 21962 Confidence Interval and p-Value 229

7 Algorithmes 24771 Distance drsquoeacutedition 24772 Distance between two graphs 25373 Deacutetection de segments 258

8 Peacutereacutegrinations 26781 Reacutepartir en base drsquoapprentissage et de test 267

i

82 Correacutelations non lineacuteaires 28283 File drsquoattente un petit exemple 30184 Optimisation avec donneacutees aleacuteatoires 30885 Le gradient et le discret 313

9 Galleries 32391 Gallery of examples 32392 Galleries 326

10 API 383101 Machine Learning 383102 Optimisation 384103 Traitement du langage naturel 384104 Source de donneacutees 386105 Graphes 386106 Image 387

11 Index 389

Bibliography 391

ii

CHAPTER 1

Clustering

11 k-means

bull Principe (page 2)ndash Homogeacuteneacuteiteacute des dimensions (page 4)

bull Ameacuteliorations de lrsquoinitialisation (page 5)ndash K-means++ (page 5)ndash K-means|| (page 5)

bull Estimation de probabiliteacutes (page 6)bull Seacutelection du nombre de classes (page 7)

ndash Critegravere de qualiteacute (page 7)ndash Maxima de la fonction densiteacute (page 8)ndash Deacutecroissance du nombre de classes (page 9)

bull Extension des nueacutees dynamiques (page 11)ndash Classes elliptiques (page 11)ndash Rival Penalized Competitive Learning (RPCL) (page 12)ndash RPCL-based local PCA (page 14)ndash Frequency Sensitive Competitive Learning (FSCL) (page 16)

bull k-means norme L1 (page 16)bull Bibliographie (page 17)

Deacutenomination franccedilaise algorithme des centres mobiles

1

Machine Learning Statistiques et Programmation Version 035930

111 Principe

Les centres mobiles ou nueacutees dynamiques sont un algorithme de classification non superviseacutee A partir drsquoun ensemblede points il deacutetermine pour un nombre de classes fixeacute une reacutepartition des points qui minimise un critegravere appeleacute inertieou variance intra-classe

Algorithme A1 centre mobile k-meansOn considegravere un ensemble de points

(Xi)1⩽i⩽P isin(RN)P

A chaque point est associeacutee une classe (ci)1⩽i⩽P isin 1 CP On deacutefinit les barycentres des classes (Gi)1⩽i⩽C isin(

RN)C

InitialisationLrsquoinitialisation consiste agrave choisir pour chaque point une classe aleacuteatoirement dans 1 C On pose t = 0Calcul des barycentres

for k in 1C

Gtk larrminus

sumPi=1 Xi 1cti=k

sumPi=1 1cti=k

Calcul de lrsquoinertie

It larrminussumP

i=1 d2(Xi G

tcti

)t larrminus t+ 1

if t gt 0 et It sim Itminus1

arrecirct de lrsquoalgorithmeAttribution des classes

for in 1P

ct+1i larrminus argmin

kd (Xi G

tk)

ougrave d (Xi Gtk) est la distance entre Xi et Gt

k

Retour agrave lrsquoeacutetape du calcul des barycentres jusqursquoagrave convergence de lrsquoinertie It

Theacuteoregraveme T1 convergence des k-meansQuelque soit lrsquoinitialisation choisie la suite (It)t⩾0 construite par lrsquoalgorithme des k-means (page 2) converge

La deacutemonstration du theacuteoregraveme neacutecessite le lemme suivant

Lemme L1 inertie minimumSoit (X1 XP ) isin

(RN)P P points de RN le minimum de la quantiteacute Q

(Y isin RN

)

Q (Y ) =

Psumi=1

d2 (Xi Y ) (11)

2 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

est atteint pour Y = G =1

P

sumPi=1 Xi le barycentre des points (X1 XP )

Soit (X1 XP ) isin(RN)P P points de RN

Psumi=1

minusminusrarrGXi =

minusrarr0 =rArr

Psumi=1

d2 (Xi Y ) =

Psumi=1

d2 (Xi G) + P d2 (GY )

=rArr argminY isinRN

Psumi=1

d2 (Xi Y ) = G

On peut maintenant deacutemontrer le theacuteoregraveme Lrsquoeacutetape drsquoattribution des classes consiste agrave attribuer agrave chaque point lebarycentre le plus proche On deacutefinit Jt par

J t+1 =

Psumi=1

d2(Xi G

tct+1i

)(12)

On en deacuteduit que

J t+1 =sum

icti =ct+1i

d2(Xi G

tct+1i

)+ J t+1

sumicti=ct+1

i

d2(Xi G

tct+1i

)(13)

J t+1 ⩽sum

icti =ct+1i

d2(Xi G

tcti

)+

sumicti=ct+1

i

d2(Xi G

tcti

)(14)

J t+1 ⩽ It (15)

Le lemme preacuteceacutedent appliqueacute agrave chacune des classes 1 C permet drsquoaffirmer que It+1 ⩽ J t+1 Par conseacutequentla suite (It)t⩾0 est deacutecroissante et minoreacutee par 0 elle est donc convergenteLrsquoalgorithme des centres mobiles cherche agrave attribuer agrave chaque point de lrsquoensemble une classe parmi les C disponiblesLa solution trouveacutee deacutepend de lrsquoinitialisation et nrsquoest pas forceacutement celle qui minimise lrsquoinertie intra-classe lrsquoinertiefinale est un minimum local Neacuteanmoins elle assure que la partition est formeacutee de classes convexes soit c1 et c2deux classes diffeacuterentes on note C1 et C2 les enveloppes convexes des points qui constituent ces deux classes alorso

C1 capo

C2 = empty La figure suivante preacutesente un exemple drsquoutilisation de lrsquoalgorithme des centres mobiles Des pointssont geacuteneacutereacutes aleacuteatoirement dans le plan et reacutepartis en quatre groupes

11 k-means 3

Machine Learning Statistiques et Programmation Version 035930

Crsquoest une application des centres mobiles avec une classification en quatre classes drsquoun ensemble aleacuteatoire de pointsplus dense sur la partie droite du graphe Les quatre classes ainsi formeacutees sont convexes

Homogeacuteneacuteiteacute des dimensions

Les coordonneacutees des points (Xi) isin RN sont geacuteneacuteralement non homogegravenes les ordres de grandeurs de chaquedimension sont diffeacuterents Crsquoest pourquoi il est conseilleacute de centrer et normaliser chaque dimension On note foralli isin 1 middot middot middot P Xi = (Xi1 XiN )

gk = (EX)k =1

P

Psumi=1

Xik

vkk =(E (X minus EX)

2)kk

=(EX2

)kkminus g2k

Les points centreacutes et normaliseacutes sont

foralli isin 1 middot middot middot P X primei =

(xi1 minus g1radic

v11

xiN minus gNradicvNN

)

4 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

Lrsquoalgorithme des centres mobiles est appliqueacute sur lrsquoensemble (X primei)1⩽i⩽P Il est possible ensuite de deacutecorreacuteler les

variables ou drsquoutiliser une distance dite de Malahanobis1 deacutefinie par dM (XY ) = XM Y prime ougrave Y prime deacutesigne la transposeacuteede Y et M est une matrice symeacutetrique deacutefinie positive Dans le cas de variables correacuteleacutees la matrice M = Σminus1 ougraveΣminus1 est la matrice de variance-covariance des variables aleacuteatoires (Xi)i

112 Ameacuteliorations de lrsquoinitialisation

K-means++

Lrsquoarticle [Arthur2007] montre que lrsquoinitialisation aleacuteatoire nrsquoest pas efficace et est sensible aux outliers ou pointsaberrants Lrsquoeacutetape drsquoinitialisation est remplaceacutee par la suivante

Algorithme A2 initialisation k-means++Cette eacutetape drsquoinitialisation viendra remplacer celle deacutefinie dans lrsquoalgorithme k-means (page 2) On considegravere unensemble de points

X = (Xi)1⩽i⩽P isin(RN)P

A chaque point est associeacutee une classe (ci)1⩽i⩽P isin 1 CP

Pour k centres on choisit C1 au hasard dans lrsquoensemble X Pour les suivants 1 k larr 2

2 On choisit aleacuteatoirement Gk isin X avec la probabiliteacute P (x) = Dkminus1(x)2sum

xisinX Dkminus1(x)2

3 k larr k + 1

4 On revient agrave lrsquoeacutetape 2 jusqursquoagrave ce que k = CLa fonction Dk est deacutefinie par la distance du point x au centre Gl choisi parmi les k premiers centres Dk(x) =min1⩽l⩽k d(xminusGl)La suite de lrsquoalgorithme k-means++ reprend les mecircmes eacutetapes que k-means (page 2)

Cette initilisation eacuteloigne le prochain centre le plus possibles des centres deacutejagrave choisis Lrsquoarticle montre que

Theacuteoregraveme T2 Borne supeacuterieure de lrsquoerreur produite par k-means++On deacutefinit lrsquoinertie par J(X) =

sumPi=1 minG d2(Xi G) Si JOPT deacutefinit lrsquoinertie optimale alors EJ(X) ⩽ 8(lnC +

2)JOPT (X)

La deacutemonstration est disponible dans lrsquoarticle [Arthur2007]

K-means||

Lrsquoarticle [Bahmani2012] propose une autre initialisation que K-means++ (page 5) mais plus rapide et paralleacutelisable

Algorithme A3 initialisation k-means||Cette eacutetape drsquoinitialisation viendra remplacer celle deacutefinie dans lrsquoalgorithme k-means (page 2) On considegravere unensemble de points

X = (Xi)1⩽i⩽P isin(RN)P

A chaque point est associeacutee une classe (ci)1⩽i⩽P isin 1 CP

Pour k centres on choisit G = G1 au hasard dans lrsquoensemble X 1 httpsfrwikipediaorgwikiDistance_de_Mahalanobis

11 k-means 5

Machine Learning Statistiques et Programmation Version 035930

on reacutepegravete O(lnD(GX)) fois Gprime larr eacutechantillon aleacuteatoire issue de X de probabiliteacute p(x) = l D(Gx)2sum

x D(Gx)2

Glarr G cupGprime

La fonction D(G x) est deacutefinie par la distance du point x au plus proche centre g isin G D(g x) = mingisinG d(xminus g)Cette eacutetape ajoute agrave lrsquoensemble des centres G un nombre aleacuteatoire de centres agrave chaque eacutetape Lrsquoensemble G contiendraplus de C centres

1 Pour tout g isin G on assigne le poids wg = card y|d(x y) lt minhisinG d(x h)2 On clusterise lrsquoensemble des points G en C clusters (avec un k-means classique par exemple)

Au lieu drsquoajouter les centres un par un comme dans lrsquoalgorithme k-means++ (page 5) plusieurs sont ajouteacutes agrave chaquefois plus l est grand plus ce nombre est grand Le tirage drsquoun eacutechantillon aleacuteatoire consiste agrave inclure chaque point xavec la probabiliteacute p(x) = l D(Gx)2sum

x D(Gx)2

113 Estimation de probabiliteacutes

A partir de cette classification en C classes on construit un vecteur de probabiliteacutes pour chaque point (Xi)1⩽i⩽P ensupposant que la loi de X sachant sa classe cX est une loi normale multidimensionnelle La classe de Xi est noteacutee ciOn peut alors eacutecrire

foralli isin 1 middot middot middot C

Gi = E(X11cX=i

)=

sumPk=1 Xk11ck=isumPk=1 11ck=i

Vi = E(XX prime11cX=i

)=

sumPk=1 XkX

primek11ck=isumP

k=1 11ck=i

P (cX = i) =

Psumk=1

11ck=i

f (X|cX = i) =1

(2π)N2radic

det (Vi)eminus

12 (XminusGi)

prime V minus1i (XminusGi)

f (X) =

Psumk=1

f (X|cX = i)P (cX = i)

On en deacuteduit que

P (cX = i|X) =f (X|cX = i)P (cX = i)

f (X)

La densiteacute des obervations est alors modeacuteliseacutee par une meacutelange de lois normales chacune centreacutee au barycentrede chaque classe Ces probabiliteacutes peuvent eacutegalement ecirctre apprises par un reacuteseau de neurones classifieur ougrave servirdrsquoinitialisation agrave un algorithme EM2

2 httpsfrwikipediaorgwikiAlgorithme_espC3A9rance-maximisation

6 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

114 Seacutelection du nombre de classes

Critegravere de qualiteacute

Lrsquoalgorithme des centres mobiles effectue une classification non superviseacutee agrave condition de connaicirctre au preacutealable lenombre de classes et cette information est rarement disponible Une alternative consiste agrave estimer la pertinence desclassifications obtenues pour diffeacuterents nombres de classes le nombre de classes optimal est celui qui correspond agrave laclassification la plus pertinente Cette pertinence ne peut ecirctre estimeacutee de maniegravere unique elle deacutepend des hypothegravesesfaites sur les eacuteleacutements agrave classer notamment sur la forme des classes qui peuvent ecirctre convexes ou pas ecirctre modeacuteliseacuteespar des lois normales multidimensionnelles agrave matrice de covariances diagonales Les deux critegraveres qui suivent sontadapteacutes agrave lrsquoalgorithme des centres mobiles Le critegravere de Davies-Bouldin3 (voir [Davies1979]) est minimum lorsquele nombre de classes est optimal

DB =1

C

Csumi=1

maxi =j

σi + σj

d (Ci Cj)(16)

Avec

C nombre de classesσi eacutecart-type des distances des observations de la classe iCi centre de la classe i

Le critegravere de Goodman-Kruskal4 (voir [Goodman1954]) est quant agrave lui maximum lorsque le nombre de classes estoptimal Il est toutefois plus coucircteux agrave calculer

GK =S+ minus Sminus

S+ + Sminus (17)

Avec

S+ = (q r s t) |d (q r) lt d (s t)Sminus = (q r s t) |d (q r) lt d (s t)

Ougrave (q r) sont dans la mecircme classe et (s t) sont dans des classes diffeacuterentes3 httpsenwikipediaorgwikiDaviesE28093Bouldin_index4 httpsenwikipediaorgwikiGoodman_and_Kruskal27s_gamma

11 k-means 7

Machine Learning Statistiques et Programmation Version 035930

Classification en quatre classes nombre de classes seacutelectionneacutees par le critegravere de Davies-Bouldin dont les valeurs sontillustreacutees par le graphe apposeacute agrave droite

Maxima de la fonction densiteacute

Lrsquoarticle [Herbin2001] propose une meacutethode diffeacuterente pour estimer le nombre de classes il srsquoagit tout drsquoaborddrsquoestimer la fonction densiteacute du nuage de points qui est une fonction de Rn minusrarr R Cette estimation est effectueacutee aumoyen drsquoune meacutethode non paramegravetrique telle que les estimateurs agrave noyau (voir [Silverman1986]) Soit (X1 XN )un nuage de points inclus dans une image on cherche agrave estimer la densiteacute fH (x) au pixel x

fH (x) =1

N

Nsumi=1

1

detHK(Hminus1 (xminusXi)

)Ougrave

K (x) =1

(2π)d2

eminus∥x∥2

2

H est un paramegravetre estimeacutee avec la regravegle de Silverman Lrsquoexemple utiliseacute dans cet article est un problegraveme desegmentation drsquoimage qui ne peut pas ecirctre reacutesolu par la meacutethode des nueacutees dynamiques puisque la forme des classesnrsquoest pas convexe ainsi que le montre la figure suivante La fonction de densiteacute f est seuilleacutee de maniegravere agrave obtenir unefonction g Rn minusrarr 0 1 deacutefinie par

g (x) = 11f(x)⩾s

Lrsquoensemble gminus1 (1) sub Rn est composeacutee de N composantes connexes noteacutees (C1 CN ) la classe drsquoun point xest alors lrsquoindice de la composante connexe agrave la laquelle il appartient ou la plus proche le cas eacutecheacuteant

8 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

Exemple de classification non superviseacutee appliqueacutee agrave un problegraveme de segmentation drsquoimage la premiegravere figure montrela densiteacute obtenue la seconde figure illustre la classification obtenue figure extraite de [Herbin2001] Cette meacutethodeparaicirct neacuteanmoins difficilement applicable lorsque la dimension de lrsquoespace vectoriel atteint de grande valeur Lrsquoexemplede lrsquoimage est pratique elle est deacutejagrave deacutecoupeacutee en reacutegion repreacutesenteacutees par les pixels lrsquoensemble gminus1 (1) correspondagrave lrsquoensemble des pixels x pour lesquels f (x) ⩾ s

Deacutecroissance du nombre de classes

Lrsquoarticle [Kothari1999] propose une meacutethode permettant de faire deacutecroicirctre le nombre de classes afin de choisir le nombreapproprieacute Lrsquoalgorithme des centres mobiles proposent de faire deacutecroicirctre lrsquoinertie noteacutee I deacutefinie pour un ensemble depoints noteacute X = (x1 xN ) et K classes La classe drsquoun eacuteleacutement x est noteacutee C (x) Les centres des classes sontnoteacutes Y = (y1 yK) Lrsquoinertie de ce nuage de points est deacutefinie par

I =sumxisinX

∥∥xminus yC(x)

∥∥2On deacutefinit tout drsquoabord une distance α isin R+ puis lrsquoensemble V (y α) = z isin Y |d (y z) ⩽ α V (y α) est donclrsquoensemble des voisins des centres dont la distance avec y est infeacuterieur agrave α Lrsquoarticle [Kothari1999] propose deminimiser le coucirct J (α) suivant

J (α) =sumxisinX

∥∥xminus yC(x)

∥∥2 + sumxisinX

sumyisinV (yC(x)α)

λ (y)∥∥y minus yC(x)

∥∥2Lorsque α est nul ce facteur est eacutegal agrave lrsquoinertie I = J (0) et ce terme est minimal lorsqursquoil y a autant de classes quedrsquoeacuteleacutements dans X Lorsque α tend vers lrsquoinfini J (α)rarr J (infin) ougrave

J (infin) =sumxisinX

∥∥xminus yC(x)

∥∥2 + sumxisinX

sumyisinY

λ (y)∥∥y minus yC(x)

∥∥2Ici encore il est possible de montrer que ce terme J (infin) est minimal lorsqursquoil nrsquoexiste plus qursquoune seule classe Leprincipe de cette meacutethode consiste agrave faire varier le paramegravetre α plus le paramegravetre α augmente plus le nombre declasses devra ecirctre reacuteduit Neacuteanmoins il existe des intervalles pour lequel ce nombre de classes est stable le veacuteritablenombre de classes de lrsquoensemble X sera consideacutereacute comme celui correspondant au plus grand intervalle stable

11 k-means 9

Machine Learning Statistiques et Programmation Version 035930

(a) (b)

Evolutation du nombre de classes en fonction du paramegravetre α lors de la minimisation du critegravere J (α) figure extraitede [Kothari1999] La premiegravere image repreacutesente le nuage de points illustrant quatre classes sans recouvrement Laseconde image montre que quatre classes est lrsquoeacutetat le plus longtemps stable lorsque α croicirctLe coucirct J (α) est une somme de coucirct dont lrsquoimportance de lrsquoun par rapport agrave lrsquoautre est controcircle par les paramegravetresλ (y) Le problegraveme de minimisation de J (α) est reacutesolu par lrsquoalgorithme qui suit Il srsquoappuie sur la meacutethode desmultiplicateurs de Lagrange

Algorithme A4 seacutelection du nombre de classes(voir [Kothari1999]) Les notations sont celles utiliseacutes dans les paragraphes preacuteceacutedents On suppose que le paramegravetre αeacutevolue dans lrsquointervalle [α1 α2] agrave intervalle reacutegulier αt Le nombre initial de classes est noteacute K et il est supposeacutesurestimer le veacuteritable nombre de classes Soit η isin ]0 1[ ce paramegravetre doit ecirctre choisi de telle sorte que danslrsquoalgorithme qui suit lrsquoeacutevolution des centres yk soit autant assureacutee par le premier de la fonction de coucirct que par lesecondinitialisation

αlarrminus α1

On tire aleacuteatoirement les centres des K classes (y1 yK)preacuteparationOn deacutefinit les deux suites entiegraveres

(c11 c

1K

)(c21 c

2K

) et les deux suites de vecteur

(z11 z

1K

)(z21 z

2K

)

forallk c1k = 0forallk c2k = 0forallk z1k = 0forallk z2k = 0

calcul des mises agrave jour

for i in 1N

Mise agrave jour drsquoapregraves le premier terme de la fonction de coucirct J (α)w larrminus argmin

1⩽l⩽K∥xi minus yl∥2

z1w larrminus z1w + η (xi minus yw)

c1w larrminus c1w + 1

10 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

Mise agrave jour drsquoapregraves le second terme de la fonction de coucirct J (α)

for v in 1k

if ∥yv minus yw∥ lt α

z2v larrminus z2v minus (yv minus yw)

c2v larrminus c2v + 1

for v in 1k

λv larrminusc2v∥z1

v∥c1v∥z2

v∥

yv larrminus yv + z1v + λvz2v

convergenceTant que lrsquoeacutetape preacuteceacutedente nrsquoa pas convergeacute vers une version stable des centres yk retour agrave lrsquoeacutetape preacuteceacutedente Sinontous les couples de classes (i j) veacuterifiant ∥yi minus yj∥ gt α sont fusionneacutes α larrminus α + αt Si α ⩽ α2 retour agrave lrsquoeacutetapede preacuteparationterminaisonLe nombre de classes est celui ayant preacutevalu pour le plus grand nombre de valeur de α

115 Extension des nueacutees dynamiques

Classes elliptiques

La version de lrsquoalgorithme des nueacutees dynamique proposeacutee dans lrsquoarticle [Cheung2003] suppose que les classes ne sontplus de forme circulaire mais suivent une loi normale quelconque La loi de lrsquoeacutechantillon constituant le nuage de pointsest de la forme

f (x) =

Nsumi=1

pi1

(2π)d2radicdetΣi

exp

(minus1

2(xminus microi)

primeΣminus1

i (xminus microi)

)Avec sumN

i=1 pi = 1 On deacutefinit

G (x microΣ) =1

(2π)d2radicdetΣ

exp

(minus1

2(xminus micro)

primeΣminus1 (xminus micro)

)Lrsquoalgorithme qui suit a pour objectif de minimiser la quantiteacute pour un eacutechantillon (X1 XK)

I =

Nsumi=1

Ksumk=1

11i=argmax

1⩽j⩽NG(Xkmicroj Σj)

ln [piG (Xk microiΣi)]

Algorithme A5 nueacutees dynamiques geacuteneacuteraliseacuteesLes notations sont celles utiliseacutees dans ce paragraphe Soient η ηs deux reacuteels tels que η gt ηs La regravegle preacuteconiseacutee parlrsquoarticle [Cheung2003] est ηs sim η

10 initialisationtlarrminus 0 Les paramegravetres

p0i micro

0i Σ

0i |1 ⩽ i ⩽ N

sont initialiseacutes gracircce agrave un algorithme des k-means (page 2) ou FSCL

(page 16) foralli p0i = 1N et β0

i = 0

11 k-means 11

Machine Learning Statistiques et Programmation Version 035930

reacutecurrenceSoit Xk choisi aleacuteatoirement dans (X1 XK)

i = argmin1⩽i⩽N

G(Xk micro

tiΣ

ti

)

for i in 1N

microt+1i = microt

i + η (Σti)

minus1(Xk minus microt

i)

βt+1i = βt

i + η (1minus αti)

Σt+1i = (1minus ηs) Σ

ti + ηs (Xk minus microt

i) (Xk minus microti)

prime

for i in 1N

pt+1i = eβ

t+1isumN

j=1 eβt+1j

tlarrminus t+ 1

terminaisonTant que argmin

1⩽i⩽NG (Xk micro

tiΣ

ti) change pour au moins un des points Xk

Lors de la mise agrave jour de Σminus1 lrsquoalgorithme preacuteceacutedent propose la mise agrave jour de Σi alors que le calcul de G ( microiΣi)implique Σminus1

i par conseacutequent il est preacutefeacuterable de mettre agrave jour directement la matrice Σminus1

(Σt+1

i

)minus1=

(Σti)

minus1

1minus ηs

[I minus ηs (Xk minus microt

i) (Xk minus microti)

prime(Σt

i)minus1

1minus ηs + ηs (Xk minus microti)

prime(Σt

i)minus1

(Xk minus microti)

]

Rival Penalized Competitive Learning (RPCL)

Lrsquoalgorithme suivant deacuteveloppeacute dans [Xu1993] est une variante de celui des centres mobiles Il entreprend agrave la foisla classification et la seacutelection du nombre optimal de classes agrave condition qursquoil soit infeacuterieur agrave une valeur maximale agravedeacuteterminer au deacutepart de lrsquoalgorithme Un meacutecanisme permet drsquoeacuteloigner les centres des classes peu pertinentes de sorteqursquoaucun point ne leur sera affecteacute

Algorithme A6 RPCLSoient (X1 XN ) N vecteurs agrave classer en au plus T classes de centres (C1 CT ) Soient deux reacuteels αr et αc

tels que 0 lt αr ≪ αc lt 1initialisationTirer aleacuteatoirement les centres (C1 CT )

for j in 1C

n0j larrminus 1

calcul de poidsChoisir aleacuteatoirement un point Xi

for j in 1C

γj =njsumCk=1 nk

12 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

for j in 1C

uj =

1 si j isin argmink

[γk d (Xi Ck)]

-1 si j isin argminj =k

[γk d (Xi Ck)]

0 sinon

mise agrave jour

for j in 1C

Ct+1j larrminus Ct

j +

αc (Xi minus Cj) si uj = 1minusαr (Xi minus Cj) si uj = minus10 sinon

ntj +

1 si uj = 10 sinon

tlarrminus t+ 1

terminaisonSrsquoil existe un indice j pour lequel Ct+1

j = Ctj alors retourner agrave lrsquoeacutetape de calcul de poids ou que les centres des classes

jugeacutees inutiles ont eacuteteacute repousseacutes vers lrsquoinfini

Pour chaque point le centre de la classe la plus proche en est rapprocheacute tandis que le centre de la seconde classe laplus proche en est eacuteloigneacute mais drsquoune faccedilon moins importante (condition αr ≪ αc) Apregraves convergence les centresdes classes inutiles ou non pertinentes seront repousseacutes vers lrsquoinfini Par conseacutequent aucun point nrsquoy sera rattacheacuteLrsquoalgorithme doit ecirctre lanceacute plusieurs fois Lrsquoalgorithme RPCL peut terminer sur un reacutesultat comme celui de la figuresuivante ougrave un centre reste coinceacute entre plusieurs autres Ce problegraveme est moins important lorsque la dimension delrsquoespace est plus grande

11 k-means 13

Machine Learning Statistiques et Programmation Version 035930

Application de lrsquoalgorithme RPCL (page 12) la classe 0 est incrusteacute entre les quatre autres et son centre ne peut seńăfaufileră vers lrsquoinfini

RPCL-based local PCA

Lrsquoarticle [Liu2003] propose une extension de lrsquoalgorithme RPCL (page 12) et suppose que les classes ne sont plusde forme circulaire mais suivent une loi normale quelconque Cette meacutethode est utiliseacutee pour la deacutetection de ligneconsideacutereacutees ici comme des lois normales deacutegeacuteneacutereacutees en deux dimensions la matrice de covariance deacutefinit une ellipsedont le grand axe est tregraves supeacuterieur au petit axe ce que montre la figure suivante Cette meacutethode est aussi preacutesenteacuteecomme un possible algorithme de squelettisation

14 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

Figure extraite de [Liu2003] lrsquoalgorithme est utiliseacute pour la deacutetection de lignes consideacutereacutees ici comme des lois normalesdont la matrice de covariance deacutefinit une ellipse deacutegeacuteneacutereacutee dont le petit axe est tregraves infeacuterieur au grand axe Les traitsfin griseacutes correspondent aux classes isoleacutees par lrsquoalgorithme RPCL-based local PCAOn modeacutelise le nuage de points par une meacutelange de lois normales

f (x) =

Nsumi=1

pi1

(2π)d2radicdetΣi

exp

(minus1

2(xminus microi)

primeΣminus1

i (xminus microi)

)

AvecsumN

i=1 pi = 1On suppose que le nombre de classes initiales N surestime le veacuteritable nombre de classes Lrsquoarticle [Liu2003]srsquointeacuteresse au cas particulier ougrave les matrices de covariances veacuterifient Σi = ζi I+σi ϕiϕ

primei avec ζi gt 0 σi gt 0 ϕprime

iϕi =1On deacutefinit eacutegalement

G (x microΣ) =1

(2π)d2radicdetΣ

exp

(minus1

2(xminus micro)

primeΣminus1 (xminus micro)

)Lrsquoalgorithme utiliseacute est similaire agrave lrsquoalgortihme RPCL (page 12) La distance d utiliseacutee lors de lrsquoeacutetape de calcul despoids afin de trouver la classe la plus probable pour un point donneacute Xk est remplaceacutee par lrsquoexpression

d (Xk classe i) = minus ln pti G(Xk micro

ti Σ

ti

)Lrsquoeacutetape de mise agrave jour des coefficients est remplaceacutee par

xt+1 larrminus xt +

αcnablaxt si uj = 1minusαrnablaxt si uj = minus10 sinon

Ougrave xt joue le rocircle drsquoun paramegravetre et est remplaceacute successivement par pti microti ζti σt

i ϕti

nablapti = minus 1pti

nablamicroti = minus (Xk minus microt

i)

nablaζti = 12 tr

[(Σt

i)minus1(I minus (Xk minus microt

i) (Xk minus microti)

prime(Σt

i)minus1)]

nablaσti = 1

2 (ϕti)

prime(Σt

i)minus1(I minus (Xk minus microt

i) (Xk minus microti)

prime(Σt

i)minus1)ϕti

nablaϕti = σt

i (Σti)

minus1(I minus (Xk minus microt

i) (Xk minus microti)

prime(Σt

i)minus1)ϕti

11 k-means 15

Machine Learning Statistiques et Programmation Version 035930

Frequency Sensitive Competitive Learning (FSCL)

Lrsquoalgorithme Frequency Sensitive Competitive Learning est preacutesenteacute dans [Balakrishnan1996] Par rapport agravelrsquoalgorithme des centres mobiles classique lors de lrsquoestimation des centres des classes lrsquoalgorithme eacutevite la formationde classes sous-repreacutesenteacutees

Algorithme A7 FSCLSoit un nuage de points (X1 XN ) soit C vecteurs (ω1 ωC) initialiseacutes de maniegravere aleacuteatoires Soit F (u t) isinR2 minusrarr R+ croissante par rapport agrave u Soit une suite de reacuteels (u1 uC) soit une suite ϵ (t) isin [0 1] deacutecroissanteougrave t repreacutesente le nombre drsquoiteacuterations Au deacutebut tlarr 0meilleur candidatPour un vecteur Xk choisi aleacuteatoirement dans lrsquoensemble (X1 XN ) on deacutetermine

ilowast isin argmin Di = F (ui t) d (Xk ωi)

mise agrave jour

ωilowast (t+ 1)larrminus ωilowast (t) + ϵ (t) (Xk minus ωilowast (t))

tlarrminus t+ 1

uilowast larrminus uilowast + 1

Retour agrave lrsquoeacutetape preacuteceacutedente jusqursquoagrave ce que les nombres uisumi ui

convergent

Exemple de fonctions pour F ϵ (voir [Balakrishnan1996])

F (u t) = uβeminustT avec β = 0 06 et 1T = 0 00005

ϵ (t) = β eminusγt avec γ = 0 05

Cet algorithme ressemble agrave celui des cartes topographiques de Kohonen sans toutefois utiliser un maillage entre lesneurones (ici les vecteurs ωi) Contrairement agrave lrsquoalgorithme RPCL les neurones ne sont pas repousseacutes srsquoils ne sontpas choisis mais la fonction croissante F (u t) par rapport agrave u assure que plus un neurone est seacutelectionneacute moins il ade chance de lrsquoecirctre bien que cet avantage disparaisse au fur et agrave mesure des iteacuterations

116 k-means norme L1

Lrsquoalgorithme dans sa version la plus courante optimise lrsquoinertie deacutefinie parsumP

i=1 d2(Xi G

tcti

) qui est en quelque

sorte une inertie L2 Que devriendrait lrsquoalgorithme si la norme choisie eacutetait une norme L1 il faudrait alors choisir agravechaque iteacuteration t des points qui minimise la quantiteacute

sumPi=1 d1

(Xi G

tcti

)ougrave d1 est la norme L1 entre deux points

XY d1(XY ) =sum

i |Xi minus Yi| Avant de continuer on rappelle un theacuteoregraveme

proprieacuteteacute P1 Meacutediane et valeur absolueSoit A = (x1 xn) un ensembl de n reacuteels quelconque On note m = med(x1 xn) la meacutediane de lrsquoensemble depoints A Alors la meacutediane m minimise la quantiteacute

sumni=1 |mminus xi|

Crsquoest cette proprieacuteteacute qui est utiliseacutee pour deacutefinir ce qursquoest la reacutegression quantile (page 121) et sa deacutemonstration estpreacutesenteacutee agrave la page Meacutediane et valeur absolue (page 122) Il ne reste plus qursquoagrave se servir de ce reacutesultat pour mettre agravejour lrsquoalgorithme centre mobile k-means (page 2) Lrsquoeacutetape qui consiste agrave affecter un point agrave un cluster repreacutesenteacute par unpoint ne pose pas de problegraveme si on utilise cette nouvelle norme Il ne reste plus qursquoagrave deacuteterminer le point qui repreacutesente

16 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

un cluster sachant les points qui le constituent Autrement dit il faut deacuteterminer le point qui minimiser la pseudo-inertiedeacutefinie comme suit pour un ensemble de points (X1 Xn) appartenant agrave un espace vectoriel de dimension k

I(GX1 Xn) = ∥GminusXi∥1 =nsum

i=1

dsumk=1

|Gk minusXik|

On cherche le point G qui minimise la quantiteacute I(GX1 Xn) Commesumn

i=1

sumdk=1 |Gk minusXik| =sumd

k=1

sumni=1 |Gk minusXik| on en deacuteduit qursquoon peut chercher la coordonneacutee Gk indeacutependemment les unes des autres

On en deacuteduit que le barycentre de norme L1 drsquoun ensemble de points dans un espace vectoriel de dimension d apour coordonneacutees les d meacutedianes extraites sur chacune des dimensions Lrsquoalgorithme est impleacutementeacute dans le modulemlinsights5 en srsquoinspirant du code KMeans6

117 Bibliographie

12 Meacutelange de lois normales

bull Algorithme EM (page 17)bull Competitive EM algorithm (page 18)bull Bibliographie (page 20)

121 Algorithme EM

Deacutefinition D1 meacutelange de lois normalesSoitX une variable aleacuteatoire drsquoun espace vectoriel de dimension d X suit un la loi drsquoun meacutelange de N lois gaussiennesde paramegravetres (microiΣi)1⩽i⩽N alors la densiteacute f de X est de la forme

f (x) =

Nsumi=1

pi1

(2π)d2radicdetΣi

exp

(minus1

2(xminus microi)

primeΣminus1

i (xminus microi)

)(18)

(19)

Avec sumN

i=1 pi = 1

Dans le cas drsquoune loi normale agrave valeur reacuteelle Σ = σ2 lrsquoalgorithme permet drsquoestimer la loi de lrsquoeacutechantillon(X1 XT ) il srsquoeffectue en plusieurs iteacuterations les paramegravetres pi (0) microi (0) σ2 (0) sont choisis de maniegravere aleacuteatoire

5 httpwwwxavierduprefrappmlinsightshelpsphinxindexhtml6 httpsscikit-learnorgstablemodulesgeneratedsklearnclusterKMeanshtml

12 Meacutelange de lois normales 17

Machine Learning Statistiques et Programmation Version 035930

agrave lrsquoiteacuteration t+ 1 la mise agrave jour des coefficients est faite comme suit

fki (t) = pi (t)1

(2π)d2radicdetΣi (t)

exp

(minus1

2(Xk minus microi (t))

primeΣminus1

i (t) (Xk minus microi (t))

)(110)

fki (t) =fki (t)sumi fki (t)

(111)

pi (t+ 1) =1

T

Tsumk=1

fki (t) (112)

microi (t+ 1) =

[Tsum

k=1

fki (t)

]minus1 Tsumk=1

fki (t)Xk (113)

Σ2i (t+ 1) =

[Tsum

k=1

fki (t)

]minus1 Tsumk=1

fki (t) (Xk minus microi (t+ 1)) (Xk minus microi (t+ 1))prime (114)

Lrsquoestimation drsquoune telle densiteacute srsquoeffectue par lrsquointermeacutediaire drsquoun algorithme de type Expectation Maximization(EM)10 (voir [Dempster1977]) ou de ses variantes SEM11 SAEM12 (voir [Celeux1995] [Celeux1985b]) Laseacutelection du nombre de lois dans le meacutelange reste un problegraveme ouvert abordeacute par lrsquoarticle [Biernacki2001]

122 Competitive EM algorithm

Lrsquoalgorithme deacuteveloppeacute dans lrsquoarticle [ZhangB2004] tente de corriger les deacutefauts de lrsquoalgorithme EM Cette nouvelleversion appeleacutee ńăCompetitive EMă ou CEM srsquoapplique agrave un meacutelange de lois - normales en particulier - il deacuteterminele nombre de classes optimal en supprimant ou en ajoutant des classes

Figures extraites de [ZhangB2004] la premiegravere image montre deux classes incluant deux autres classes qui devraitdonc ecirctre supprimeacutees La seconde image montre une classe aberrante tandis que la troisiegraveme image montre des classesse recouvrant partiellementOn considegravere un eacutechantillon de variables aleacuteatoires indeacutependantes et identiquement distribueacutees agrave valeur dans un espacevectoriel de dimension d Soit X une telle variable on suppose que X suit la loi du meacutelange suivant

f (X|θ) =ksum

i=1

αi f (X|θi)

Avec θ = (αi θi)1⩽i⩽k foralli αi ⩾ 0 etsumk

i=1 αi = 110 httpsfrwikipediaorgwikiAlgorithme_espC3A9rance-maximisation11 httpsfrwikipediaorgwikiAlgorithme_espC3A9rance-maximisationAlgorithme_SEM12 httpwikiwebpopixorgindexphpThe_SAEM_algorithm_for_estimating_population_parameters

18 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

On deacutefinit pour une classe m la probabiliteacute Psplit(m θ) qursquoelle doive ecirctre diviseacutee et celle qursquoelle doive ecirctre associeacutee agraveune autre Pmerge(m l θ) Celles ci sont deacutefinies comme suit

Psplit(m θ) =J (m θ)

Z (θ)(115)

Pmerge(m l θ) =β

J (m θ)Z (θ)(116)

β est une constante deacutefinie par expeacuteriences J (m θ) est deacutefini pour lrsquoeacutechantillon (x1 xn) par

J (m θ) =

intfm (x θ) log

fm (x θ)

pm (x θm)dx

Ougrave fm (x θ) =

sumni=1 11x=xi P(m|xiθ)sumn

i=1 P(m|xiθ)

La constante Z (θ) est choisie de telle sorte que les probabiliteacutes Psplit(m θ) et Pmerge(m l θ) veacuterifient

ksumm=1

Psplit(m θ) +

ksumm=1

ksuml=m+1

Pmerge(m l θ) = 1

Lrsquoalgorithme EM permet de construire une suite θt maximisant la vraisemblance agrave partir de poids θ0 LrsquoalgorithmeCEM13 est deacuteriveacute de lrsquoalgorithme EM

Algorithme A1 CEMLes notations sont celles utiliseacutees dans les paragraphes preacuteceacutedents On suppose que la variable aleacuteatoire Z = (XY )ougrave X est la variable observeacutee et Y la variable cacheacutee T deacutesigne le nombre maximal drsquoiteacuterationsinitialisationChoix arbitraire de k et θ0Expectation

Q(θ θt

)= E

(log [f (XY |θ)] |X θt

)Maximization

θt+1 = argmaxθ

Q(θ θt

)convergencetlarrminus t+ 1 si θt nrsquoa pas convergeacute vers un maximum local alors on retourne agrave lrsquoeacutetape Expectationdivision ou regroupementDans le cas contraire on estime les probabiliteacutes Psplit(m θ) et Pmerge(m l θ) deacutefinie par les expressionseq_split_merge On choisit aleacuteatoirement une division ou un regroupement (les choix les plus probables ayant le plusde chance drsquoecirctre seacutelectionneacutes) Ceci megravene au paramegravetre θprimet dont la partie modifieacutee par rapport agrave θt est deacutetermineacutee demaniegravere aleacuteatoire Lrsquoalgorithme EM est alors appliqueacute aux paramegravetres θprimet jusqursquoagrave convergence aux paramegravetres θprimeprimet acceptationOn calcule le facteur suivant

Pa = min

exp

[L (θprimeprimet X)minus L (θt X)

γ

] 1

On geacuteneacutere aleacuteatoirement une variable u sim U [0 1] si u ⩽ Pa alors les paramegravetres θprimeprimet sont valideacutes θt larrminus θprimeprimet et retouragrave lrsquoeacutetape drsquoexpectation Dans le cas contraire les paramegravetres θprimeprimet sont refuseacutes et retour agrave lrsquoeacutetape preacuteceacutedente

13 httpsfrwikipediaorgwikiAlgorithme_espC3A9rance-maximisationAlgorithme_CEM

12 Meacutelange de lois normales 19

Machine Learning Statistiques et Programmation Version 035930

terminaisonSi t lt T on retoure agrave lrsquoeacutetape drsquoexpectation Sinon on choisit les paramegravetres θlowast = θtlowast qui maximisent lrsquoexpression

L (θlowast|X) = log f (X|θ)minus Nlowast

2

klowastsumi=1

lognαlowast

i

12minus klowast

2log

n

12minus klowast(Nlowast + 1)

2(117)

Avec n le nombre drsquoexemples et N est le nombre de paramegravetres speacutecifiant chaque composant

Lrsquoarticle [ZhangB2004] prend γ = 10 mais ne preacutecise pas de valeur pour β qui deacutepend du problegraveme Toutefois ilexiste un cas suppleacutementaire ougrave la classe m doit ecirctre supprimeacutee afin drsquoeacuteviter sa convergence vers les extrecircmes du nuagede points agrave modeacuteliser Si nαm lt N le nombre moyen de points inclus dans une classe est infeacuterieur au nombre deparamegravetres attribueacutes agrave cette classe qui est alors supprimeacutee Cette condition comme lrsquoensemble de lrsquoarticle srsquoinspire delrsquoarticle [Figueiredo2002] dont est tireacute le critegravere deacutecrit en (refclassif_cem_cirtere)

123 Bibliographie

13 Carte de Kohonen

bull Principe (page 20)bull Carte de Kohonen et classification (page 21)bull Autres utilisation des cartes de Kohenen (page 23)bull Bibliographie (page 23)

131 Principe

Les cartes de Kohonen ou Self Organizing Map (SOM) est le terme anglais pour les cartes de Kohonen14 (voir[Kohonen1997]) sont assimileacutees agrave des meacutethodes neuronales Ces cartes sont constitueacutees drsquoun ensemble de neurones(micro1 microN ) lesquels sont relieacutes par une forme reacutecurrente de voisinage Les neurones sont initialement reacutepartis selonce systegraveme de voisinage Le reacuteseau eacutevolue ensuite puisque chaque point de lrsquoespace parmi lrsquoensemble (X1 XK)attire le neurone le plus proche vers lui ce neurone attirant agrave son tour ses voisins Cette proceacutedure est reacuteiteacutereacutee jusqursquoagraveconvergence du reacuteseau en faisant deacutecroicirctre lrsquoattirance des neurones vers les points du nuage

Trois types de voisinages couramment utiliseacutes pour les cartes de Kohonen voisinages lineacuteaire rectangulairetriangulaire

Algorithme A1 cartes de Kohonen (SOM)14 httpsfrwikipediaorgwikiCarte_auto_adaptative

20 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

Soient (microt1 micro

tN ) isin (Rn)

N des neurones de lrsquoespace vectoriel Rn On deacutesigne par V (microj) lrsquoensemble des neuronesvoisins de microj pour cette carte de Kohonen Par deacutefinition on a microj isin V (microj) Soit (X1 XK) isin (Rn)

K un nuagede points On utilise une suite de reacuteels positifs (αt) veacuterifiant

sumt⩾0 α

2t ltinfin et

sumt⩾0 αt =infin

initialisationLes neurones

(micro01 micro

0N

)sont reacutepartis dans lrsquoespace Rn de maniegravere reacuteguliegravere selon la forme de leur voisinage

tlarrminus 0neurone le plus procheOn choisi aleacuteatoirement un points du nuage Xi puis on deacutefinit le neurone microt

klowast de telle sorte que ∥microtklowast minusXi∥ =

min1⩽j⩽N

∥∥microtj minusXi

∥∥

mise agrave jour

foreach microtj in V (microt

klowast)

microt+1j larrminus microt

j + αt

(Xi minus microt+1

j

)tlarrminus t+ 1

Tant que lrsquoalgorithme nrsquoa pas convergeacute retour agrave lrsquoeacutetape du neurone le plus proche

Lrsquoeacutetape de mise agrave jour peut ecirctre modifieacutee de maniegravere agrave ameacuteliorer la vitesse de convergence (voir [Lo1991])

microt+1j larrminus microt

j + αt h(microtj micro

tklowast

)microk

(Xi minus microt+1

j

)Ougrave h est une fonction agrave valeur dans lrsquointervalle [0 1] qui vaut 1 lorsque microt

j = microtklowast et qui deacutecroicirct lorsque la distance

entre ces deux neurones augmente Une fonction typique est h (x y) = h0 exp(minus∥xminusy∥2

2σ2t

)

Les cartes de Kohonen sont utiliseacutees en analyse des donneacutees afin de projeter un nuage de points dans un espace agrave deuxdimensions drsquoune maniegravere non lineacuteaire en utilisant un voisinage rectangulaire Elles permettent eacutegalement drsquoeffectuerune classification non superviseacutee en regroupant les neurones lagrave ougrave les points sont concentreacutes Les arecirctes reliant lesneurones ou sommets de la cartes de Kohonen sont soit reacutetreacutecies pour signifier que deux neurones sont voisins soitdistendues pour indiquer une seacuteparation entre classes

132 Carte de Kohonen et classification

Lrsquoarticle [Wu2004] aborde le problegraveme drsquoune classification agrave partir du reacutesultat obtenu depuis une carte de Kohonen(page 20) Plutocirct que de classer les points ce sont les neurones qui seront classeacutes en C classes Apregraves avoir appliqueacuteliquestalgorithme de Kohonen (page 20) la meacutethode proposeacutee dans [Wu2004] consiste agrave classer de maniegravere non superviseacuteeles A neurones obtenus (micro1 microA) Toutefois ceux-ci ne sont pas tous pris en compte afin drsquoeacuteviter les pointsaberrants On suppose que αil = 1 si le neurone l est le plus proche du point Xi 0 dans le cas contraire Puis onconstruit les quantiteacutes suivantes

νk =

Nsumi=1

αik

Tk =1

νk

Nsumi=1

αikXi

θ(Tk) =

radicradicradicradic 1

νk

Nsumi=1

αik ∥Xi minus Tk∥2

13 Carte de Kohonen 21

Machine Learning Statistiques et Programmation Version 035930

De plus

θ =1

A

Asumk=1

θ(Tk)

σ(θ) =

radicradicradicradic 1

A

Asumk=1

(θ(Tk)minus θ

)2Si νk = 0 ou ∥microk minus Tk∥ gt θ + σ(θ) le neurone microk nrsquoest pas prise en compte lors de la classification non superviseacuteeUne fois celle-ci termineacutee chaque eacuteleacutement Xi est classeacute selon la classe du neurone le plus procheLrsquoarticle [Wu2004] propose eacutegalement un critegravere permettant de deacuteterminer le nombre de classes ideacuteale On noteaik = 1 si Xi appartient agrave la classe k dans le cas contraire aik = 0 On deacutefinit nk le nombre drsquoeacuteleacutements de la classek le vecteur moyenne Mk associeacute agrave la classe k

nk =

Nsumi=1

aik

Mk =1

nk

Nsumi=1

aikXi

σ2(Mk) =1

nk

Nsumi=1

aik ∥Xi minusMk∥2

On note au preacutealable σ =radic

1C

sumCk=1 σ2(Mk) Lrsquoarticle deacutefinit ensuite la densiteacute interne pour C classes

Dint(C) =1

C

Csumk=1

Nsumi=1

Nsumj=1

aikajk11∥XiminusXj∥⩽σ

On deacutefinit la distance dlowastkl pour (k l) isin 1 C2 cette distance est eacutegale agrave la distance minimale pour un couple depoints le premier appartenant agrave la classe i le second agrave la classe j

dlowastkl = min ∥Xi minusXj∥ |aikajl = 1 =∥∥Xkl

ilowast minusXkljlowast

∥∥La densiteacute externe est alors deacutefinie en fonction du nombre de classes C par

Dext(C) =

Csumk=1

Csuml=1

dklσ (k)σ (l)

Nsumi=1

11aik+ailgt011∥∥∥∥∥XiminusXkl

ilowast+Xkljlowast

2

∥∥∥∥∥⩽σ(k)+σ(l)2

Lrsquoarticle deacutefinit ensuite la seacuteparabiliteacute en fonction du nombre de classes C

Sep(C) =1

Dext(C)

Csumk=1

Csuml=1

dlowastkl

Enfin le critegravere Composing Density Between and With clusters noteacute CDBw(C) est deacutefini par

CDBw(C) = Dint(C) lowast Sep(C)

Ce critegravere est maximal pour un nombre de classes optimal Outre les reacutesultats de lrsquoarticle [Wu2004] sommairementreacutesumeacutes ici ce dernier revient sur lrsquohistoire des cartes de Kohonen depuis leur creacuteation [Kohonen1982] jusqursquoauxderniers deacuteveloppements reacutecents

22 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

133 Autres utilisation des cartes de Kohenen

On peut les utiliser pour deacuteterminer le plus court chemin passant par tous les noeuds drsquoun graphe crsquoest agrave dire appliquerKohonen au problegraveme du voyageur de commerce15

134 Bibliographie

15 httpwwwxavierduprefrappensae_teaching_cshelpsphinxspecialstsp_kohonenhtml

13 Carte de Kohonen 23

Machine Learning Statistiques et Programmation Version 035930

24 Chapter 1 Clustering

CHAPTER 2

Non lineacuteaire

Les paragraphes suivant abordent de faccedilon plutocirct theacuteorique des modegraveles de machine learning

21 Reacuteseaux de neurones

Ce chapitre aborde les reacuteseaux de neurones au travers de deux utilisations courantes la reacutegression (page 28) et laclassification (page 32) et une qui lrsquoest moins liquestanalyse en composantes principales17 ou ACP (page 66) sans oublier lesmeacutethodes drsquoestimation des paramegravetres qui les composent agrave savoir optimisations du premier et second ordre (Meacutethodesdu premier ordre (page 48) et Meacutethodes du second ordre (page 48)) ainsi qursquoune meacutethode permettant de supprimer descoefficients inutiles Seacutelection de connexions (page 63)

211 Deacutefinition des reacuteseaux de neurones multi-couches

Les reacuteseaux de neurones multi-couches (ou perceptrons) deacutefinissent une classe de fonctions dont lrsquointeacuterecirct est de pouvoirapprocher nrsquoimporte quelle fonction continue agrave support compact (voir theacuteoregraveme sur la densiteacute (page 35)) Aucun autretype de reacuteseau de neurones ne sera eacutetudieacute et par la suite tout reacuteseau de neurones sera consideacutereacute comme multi-couches(donc pas les reacuteseau de Kohonen18)

Un neurone

Deacutefinition D1 neuroneUn neurone agrave p entreacutees est une fonction f Rp+1 times Rp minusrarr R deacutefinie par

bull g R minusrarr Rbull W isin Rp+1 W = (w1 wp+1)

bull forallx isin Rp f (Wx) = g (sump

i=1 wixi + wp+1) avec x = (x1 xp)

17 httpsfrwikipediaorgwikiAnalyse_en_composantes_principales18 httpsfrwikipediaorgwikiCarte_auto_adaptative

25

Machine Learning Statistiques et Programmation Version 035930

Cette deacutefinition est inspireacutee du neurone biologique les poids jouant le rocircle de synapses le vecteur x celui des entreacuteeset W celui des coefficients ou poids Le coefficient wp+1 est appeleacute le biais et souvent noteacute b La fonction g est appeleacuteefonction de transfert ou fonction de seuil

Figure F1 neurone graphique x1

xi

xp

yfrarr z

wp

wi

w1

sum

1

b Le vecteur (x1 xp) isin Rp joue le rocircle des entreacutees y estappeleacute parfois le potentiel y =

sumpi=1 wixi+b z est appeleacutee la sortie du neurone f est appeleacutee la fonction de transfert

ou de seuil z = f (y) = f (sump

i=1 wixi + b)

La reacutepreacutesentation graphique (page 26) est plus souvent celle qursquoon retient Ce scheacutema est eacutegalement plus proche de sadeacutefinition biologique et dissocie mieux les rocircles non symeacutetriques des entreacutees et des poids Des exemples de fonctionsde transfert sont donneacutes par la table qui suit Les plus couramment utiliseacutees sont les fonctions lineacuteaire et sigmoiumlde

exemples de fonction de transfert ou de seuil expressionescalier 1[0+infin[

lineacuteaire x

sigmoiumlde entre [0 1]1

1 + eminusx

sigmoiumlde entre [minus1 1] 1minus 2

1 + ex

normale eminusx2

2

exponentielle ex

relu x11x⩾0

La plupart des fonctions utiliseacutees sont deacuterivables et cette proprieacuteteacute srsquoeacutetend agrave tout assemblage de neurones ce qui permetdrsquoutiliser lrsquoalgorithme de reacutetropropagation deacutecouvert par [Rumelhart1986] Ce dernier permet le calcul de la deacuteriveacuteeouvre ainsi les portes des meacutethodes drsquooptimisation baseacutees sur cette proprieacuteteacute La fonction relu19 a progressivementremplaceacute la fonction sigmoiumlde sur les couches cacheacutees car elle est non lineacuteaire et beaucoup plus rapide agrave calculer

Une couche de neurones

Deacutefinition D2 couche de neuronesSoit p et n deux entiers naturels on note W isin Rn(p+1) = (W1 Wn) avec foralli isin 1 middot middot middot n Wi isin Rp+1 Unecouche de n neurones et p entreacutees est une fonction

F Rn(p+1) times Rp minusrarr Rn

veacuterfifiant bull foralli isin 1 middot middot middot n fi est un neuronebull forallW isin Rn(p+1) times Rp F (Wx) = (f1 (W1 x) fn (Wn x))

Une couche de neurones repreacutesente la juxtaposition de plusieurs neurones partageant les mecircmes entreacutees mais ayantchacun leur propre vecteur de coefficients et leur propre sortie

19 httpsenwikipediaorgwikiRectifier_(neural_networks)

26 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Un reacuteseau de neurones le perceptron

Deacutefinition D3 reacuteseau de neurones multi-couches ou perceptronUn reacuteseau de neurones multi-couches agrave n sorties p entreacutees et C couches est une liste de couches (C1 CC)connecteacutees les unes aux autres de telle sorte que

bull foralli isin 1 middot middot middot C chaque couche Ci possegravede ni neurones et pi entreacuteesbull foralli isin 1 middot middot middot C minus 1 ni = pi+1 de plus p1 = p et nC = n

Les coefficients de la coucheCi sont noteacutes(W i

1 Wini

) cette couche deacutefinit une fonctionFi Soit la suite (Zi)0⩽i⩽C

deacutefinie par

Z0 isin Rp

foralli isin 1 middot middot middot C Zi = Fi

(W i

1 Wini Ziminus1

)On pose M = M =

sumCi=1 ni (pi + 1) le reacuteseau de neurones ainsi deacutefini est une fonction F telle que

F RM times Rp minusrarr Rn

(WZ0) minusrarr ZC

Figure F2 Modegravele du perceptron multi-couche (multi-layer perceptron MLP)

bull (x1 xp) entreacuteesbull Ci nombre de neurones sur la couche i C0 = p

bull zci sortie du neurone i de la couche c par extension z0i = xi

bull yci potentiel du neurone i de la couche cbull wcij coefficient associeacute agrave lrsquoentreacutee j du neurone i de la couche cbull bci biais du neurone i de la couche cbull fci fonction de seuil du neurone i de la couche c

On note Wc la matrice des poids associeacutee agrave la couche c De la mecircme maniegravere Bc est le vecteur des biais associeacutee agravela couche c Zc Yc sont les objets vectoriels correspondant On considegravere que les entreacutees forment la couche C0 demaniegravere agrave simplifier les eacutecritures Ainsi chaque couche Ci du perceptron a pour entreacutees les sorties de la couche Ciminus1Cette deacutefinition est plus facile agrave illustrer qursquoagrave eacutenoncer (voir Modegravele du perceptron (page 27)) et rappelle le rocircle nonsymeacutetrique des entreacutees et des poids Le meacutecanisme qui permet de calculer les sorties drsquoun reacuteseau de neurones sachantses poids est appeleacute propagation

21 Reacuteseaux de neurones 27

Machine Learning Statistiques et Programmation Version 035930

Algorithme A1 PropagationCet algorithme srsquoapplique agrave un reacuteseau de neurones veacuterifiant la deacutefinition du perceptron (page 27) Il srsquoagit de calculerles sorties de ce reacuteseau connaissant ses poids (wcij) et ses entreacutees (xj)

Zc larrminus X

Vient ensuite le calcul iteacuteratif de la suite (Zc)1⩽c⩽C

for c in 1C Yc larrminusWcZcminus1 +Bc

Zc larrminus F (Yc)

Le nombre de couches drsquoun reacuteseau de neurones nrsquoest pas limiteacute Les reacuteseaux de deux couches (une couche pour lesentreacutees une couche de sortie) sont rarement utiliseacutes Trois couches sont neacutecessaires (une couche pour les entreacuteesune couche dite cacheacutee une couche de sortie) pour construire des modegraveles avec une proprieacuteteacute inteacuteressante de densiteacute(page 35)

212 La reacutegression

Le bruit blanc est une variable aleacuteatoire couramment utiliseacute pour deacutesigner le hasard ou la part qui ne peut ecirctre modeacuteliseacuteedans une reacutegression ou tout autre problegraveme drsquoapprentissage On suppose parfois que ce bruit suive une loi normale

Deacutefinition D1 bruit blancUne suite de variables aleacuteatoires reacuteelles (ϵi)1⩽i⩽N est un bruit blanc

bull existσ gt 0 foralli isin 1 middot middot middot N ϵi sim N (0 σ)

bull forall (i j) isin 1 middot middot middot N2 i = j =rArr ϵi perpperp ϵj

Une reacutegression consiste agrave reacutesoudre le problegraveme suivant

Problegraveme P1 ReacutegressionSoient deux variables aleacuteatoires X et Y lrsquoobjectif est drsquoapproximer la fonction E (Y |X) = f (X) Les donneacutees duproblegraveme sont un eacutechantillon de points (Xi Yi) |1 ⩽ i ⩽ N et un modegravele parameacutetreacute avec maththeta`

foralli isin 1 middot middot middot N Yi = f (θXi) + ϵi

avec n isin N (ϵi)1⩽i⩽N bruit blanc (page 28) f est une fonction de paramegravetre θ

La fonction f peut ecirctre une fonction lineacuteaire un polynocircme un reacuteseau de neurones Lorsque le bruit blanc est normal latheacuteorie de lrsquoestimateur de vraisemblance (voir [Saporta1990]) permet drsquoaffirmer que le meilleur paramegravetre θ minimisantlrsquoerreur de preacutediction est

θ = argminθisinRp

E (θ) = argminθisinRp

[Nsumi=1

[Yi minus f (θXi)]2

]

28 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Le lien entre les variables X et Y deacutepend des hypothegraveses faites sur f Geacuteneacuteralement cette fonction nrsquoest supposeacuteenon lineacuteaire que lorsqursquoune reacutegression lineacuteaire20 donne de mauvais reacutesultats Cette hypothegravese est toujours testeacutee carla reacutesolution du problegraveme dans ce cas-lagrave est deacuteterministe et aboutit agrave la reacutesolution drsquoun systegraveme lineacuteaire avec autantdrsquoeacutequations que drsquoinconnues Voici ce que ce la donne avec un nuage de points (Xi Yi) deacutefini par Yi =

32X

2i minusXi +

14 + ϵi

Une fonction non lineacuteaire permet de srsquoapprocher un peu plus de la veacuteritable fonction Premier cas f est un reacuteseauavec un neurone sur la couche cacheacutee

20 httpsfrwikipediaorgwikiRC3A9gression_linC3A9aire

21 Reacuteseaux de neurones 29

Machine Learning Statistiques et Programmation Version 035930

Second cas f est un reacuteseau avec deux neurones sur la couche cacheacutee

30 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Troisiegraveme cas f est un reacuteseau avec 100 neurones sur la couche cacheacutee

Lrsquoerreur de preacutediction de ce reacuteseau de neurones est tregraves infeacuterieure agrave celle des modegraveles preacuteceacutedent ce modegravele a apprispar coe ur le nuage de points (Xi Yi) sans vraiment ńăcomprendreă ce qursquoil apprenait Dans le cas drsquoune reacutegressionagrave cent neurones le nombre de coefficients du reacuteseau de neurones (301) est largement supeacuterieur au nombre de points(50) Il en reacutesulte que contrairement aux trois preacuteceacutedents cas la ńărichesseă du modegravele choisi lui permet drsquoapprendrele ńăhasardă Lorsque ce cas de figure se preacutesente on dit que le reacuteseau de neurones a appris coeur son pouvoir de

21 Reacuteseaux de neurones 31

Machine Learning Statistiques et Programmation Version 035930

geacuteneacuteralisation est mauvais ou il fait de liquestoverfitting21 (voir aussi Generalization Error22) Lrsquoerreur minime estimeacutee surce nuage de points (ou base drsquoapprentissage) sera consideacuterablement accrue sur un autre nuage de points ou base de testsuivant la mecircme loi Cet exemple montre que le choix du reacuteseau de neurones le mieux adapteacute au problegraveme nrsquoest paseacutevident Il existe des meacutethodes permettant drsquoapprocher lrsquoarchitecture optimale mais elles sont geacuteneacuteralement coucircteusesen calcul

213 La classification

Comme la reacutegression la classification consiste aussi agrave trouver le lien entre une variable X et une variable aleacuteatoirediscregravete suivant une loi multinomiale23 Y

Problegraveme P1 ClassificationSoit une variable aleacuteatoire X et une variable aleacuteatoire discregravete Y isin N lrsquoobjectif est drsquoapproximer la fonctionE (Y |X) = f (X) Les donneacutees du problegraveme sont un eacutechantillon de points (Xi Yi) |1 ⩽ i ⩽ N avec foralli isin1 N Yi isin 1 C et un modegravele parameacutetreacute avec θ

foralli isin 1 middot middot middot N forallc isin 1 middot middot middot C P (Yi = c|Xi θ) = h (θXi c)

avec n isin N h est une fonction de paramegravetre θ agrave valeur dans [0 1] et veacuterifiant la contrainte sumC

c=1 h(θX c) = 1

Le premier exemple est une classification en deux classes elle consiste agrave deacutecouvrir le lien qui unit une variable aleacuteatoirereacuteelle X et une variable aleacuteatoire discregravete et Y isin 0 1 on dispose pour cela drsquoune liste

(Xi Yi) isin Rtimes 0 1 |1 ⩽ i ⩽ N

21 httpsfrwikipediaorgwikiSurapprentissage22 httpsenwikipediaorgwikiGeneralization_error23 httpsfrwikipediaorgwikiLoi_multinomiale

32 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Il nrsquoest pas facile de deacuteterminer directement une fonction h qui approxime Y |X car h et Y sont toutes deux discregravetesCrsquoest pourquoi plutocirct que de reacutesoudre directement ce problegraveme il est preacutefeacuterable de deacuteterminer la loi marginaleP (Y = c|X) = f (X θ c) f est alors une fonction dont les sorties sont continues et peut ecirctre choisie deacuterivablePar exemple f peut ecirctre un reacuteseau de neurones dont les sorties veacuterifient

f (X 0) + f (X 1) = P (0|X) + P (1|X) = 1

Le reacuteseau de neurones utiliseacute pour cette tacircche est leacutegegraverement diffeacuterent du preacuteceacutedent il sera preacutesenteacute ulteacuterieurementUn plan a eacuteteacute diviseacute en deux demi-plan par une droite deacutelimitant deux classes le reacuteseau de neurones dont la couchecacheacutee contient deux neurones lineacuteaires a retrouveacute cette seacuteparation malgreacute les quelques exemples mal classeacutes

En revanche un reacuteseau de neurones comportant trop de coefficients aura tendance agrave apprendre par coeur la classificationet les quelques erreurs de classification comme le montre la figure suivante La seacuteparation produite par le reacuteseau deneurones est de maniegravere eacutevidente non lineacuteaire puisqursquoaucune droite ne peut seacuteparer les deux classes deacutetermineacutees parcette fonction Cette classe de modegraveles permet donc de reacutesoudre des problegravemes complexes en gardant toutefois agravelrsquoesprit comme dans le cas de la reacutegression qursquoil nrsquoest pas moins de facile de deacutenicher le bon modegravele que dans le caslineacuteaire

214 Deacutemonstration du theacuteoregraveme de la densiteacute des reacuteseaux de neurones

bull Formulation du problegraveme de la reacutegression (page 34)bull Densiteacute des reacuteseaux de neurones (page 34)

21 Reacuteseaux de neurones 33

Machine Learning Statistiques et Programmation Version 035930

Formulation du problegraveme de la reacutegression

Soient deux variables aleacuteatoires continues (XY ) isin RptimesRq sim L quelconque la reacutesolution du problegraveme de reacutegression(page 28) est lrsquoestimation de la fonction E(Y |X) = F (X) Pour cela on dispose drsquoun ensemble de points A =(Xi Yi) sim L|1 ⩽ i ⩽ N

Soit f RM times Rp minusrarr Rq une fonction on deacutefinit foralli isin 1 middot middot middot N Y Wi = f (WXi) On appelle aussi Y W

i lavaleur preacutedite pour Xi On pose alors ϵWi = Yi minus Y W

i = Yi minus f (WXi)Les reacutesidus sont supposeacutes iid (identiquement et indeacutependemment distribueacutes)24 et suivant une loi normale foralli isin1 middot middot middot N ϵWi sim N (microW σW ) La vraisemblance drsquoun eacutechantillon (Zi)1⩽i⩽N ougrave les Zi sont indeacutependantes entreelles et suivent la loi de densiteacute f (z|θ) est la densiteacute du vecteur (Z1 ZN ) qursquoon exprime comme suit

L (θ Z1 ZN ) =prodN

n=1 f (Zi|θ)=rArr lnL (θ Z1 ZN ) =

sumNn=1 ln f (Zi|θ)

La log-vraisemblance de lrsquoeacutechantillon srsquoeacutecrit LW = minus 12σ2

W

sumNi=1

(Yi minus Y W

i minus microW

)2+ N ln

(σW

radic2π) Les

estimateurs du maximum de vraisemblance pour microW et σW sont (voir [Saporta1990])

microW = 1N

sumNi=1 Yi minus Y W

i

σW =

radicsumNi=1

(YiminusY W

i minusmicroW

)2

N

Lrsquoestimateur de Y = f (WX) deacutesireacutee est de preacutefeacuterence sans biais (microW = 0) et de variance minimum par conseacutequent

les paramegravetreslowastW qui maximisent la vraisemblance LW sont

lowastW = argmin

WisinRM

sumNi=1

(Yi minus Y W

i

)2= argmin

WisinRM

sumNi=1 (Yi minus f (WXi))

2(21)

Reacuteciproquement on veacuterifie que si W lowast veacuterifie lrsquoeacutequation (21) alors lrsquoestimateur deacutefini par f est sans biais Il suffitpour srsquoen convaincre de poser g = f + α avec α isin R et de veacuterifier que la valeur optimale pour α est α =minus 1

N

sumNi=1 Yi minus f (WXi) Lrsquoestimateur minimise la vraisemblance LW Cette formule peut ecirctre geacuteneacuteraliseacutee en

faisant une autre hypothegravese que celle de la normaliteacute des reacutesidus (lrsquoindeacutependance eacutetant conserveacutee) lrsquoeacutequation (21)peut geacuteneacuteraliseacutee par (22)

lowastW = argmin

WisinRM

sumNi=1 e

(Yi minus Y W

i

)= argmin

WisinRM

sumNi=1 e (Yi minus f (WXi))

(22)

Ougrave la fonction e Rq isin R est appeleacutee fonction drsquoerreur

Densiteacute des reacuteseaux de neurones

Lrsquoutilisation de reacuteseaux de neurones srsquoest consideacuterablement deacuteveloppeacutee depuis que lrsquoalgorithme de reacutetropropagationa eacuteteacute trouveacute ([LeCun1985] [Rumelhart1986] [Bishop1995]) Ce dernier permet drsquoestimer la deacuteriveacutee drsquoun reacuteseaude neurones en un point donneacute et a ouvert la voie agrave des meacutethodes classiques de reacutesolution pour des problegravemesdrsquooptimisation tels que la reacutegression non lineacuteaireComme lrsquoensemble des fonctions polynocircmiales lrsquoensemble des fonctions engendreacutees par des reacuteseaux de neuronesmulti-couches possegravede des proprieacuteteacutes de densiteacute (page 35) et sont infiniment deacuterivables Les reacuteseaux de neuronescomme les polynocircmes sont utiliseacutes pour modeacuteliser la fonction f de lrsquoeacutequation (22) Ils diffegraverent neacuteanmoins sur certainspoints

24 httpsfrwikipediaorgwikiVariables_indC3A9pendantes_et_identiquement_distribuC3A9es

34 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Si une couche ne contient que des fonctions de transfert borneacutees comme la fonction sigmoiumlde tout reacuteseau de neuronesincluant cette couche sera aussi borneacute Drsquoun point de vue informatique il est preacutefeacuterable drsquoeffectuer des calculs avec desvaleurs du mecircme ordre de grandeur Pour un polynocircme les valeurs des termes de degreacute eacuteleveacute peuvent ecirctre largementsupeacuterieurs agrave leur sommeUn autre attrait est la symeacutetrie dans lrsquoarchitecture drsquoun reacuteseau de neurones les neurones qui le composent jouent desrocircles symeacutetriques (corollaire familles libres (page 39) Pour ameacuteliorer lrsquoapproximation drsquoune fonction dans un casil suffit drsquoajouter un neurone au reacuteseau dans lrsquoautre il faut inclure des polynocircmes de degreacute plus eacuteleveacute que ceux deacutejagraveemployeacutes

Theacuteoregraveme T1 densiteacute des reacuteseaux de neurones (Cybenko1989)[Cybenko1989] Soit Eq

p lrsquoespace des reacuteseaux de neurones agrave p entreacutees et q sorties posseacutedant une couche cacheacutee dont lafonction de seuil est une fonction sigmoiumlde

(xrarr 1minus 2

1+ex

) une couche de sortie dont la fonction de seuil est lineacuteaire

Soit F qp lrsquoensemble des fonctions continues de C sub Rp minusrarr Rq avec C compact muni de la norme ∥f∥ = sup

xisinC∥f (x)∥

Alors Eqp est dense dans F q

p

La deacutemonstration de ce theacuteoregraveme neacutecessite deux lemmes Ceux-ci utilisent la deacutefinition usuelle du produit scalairesur Rp deacutefini par (x y) = (x1 xp y1 yp) isin R2p minusrarr ⟨x y⟩ =

sumpi=1 xiyi et la norme infinie x =

(x1 xp) isin Rp minusrarr ∥x∥ = maxiisin1middotmiddotmiddot p

xi Toutes les normes sont eacutequivalentes25 sur Rp

Corollaire C1 approximation drsquoune fonction creacuteneauSoit C sub Rp C = (y1 yp) isin Rp |foralli isin 1 middot middot middot p 0 ⩽ yi ⩽ 1 alors

forallε gt 0 forallα gt 0 existn isin Nlowast exist (x1 xn) isin (Rp)n exist (γ1 γn) isin Rn tels que forallx isin Rp∣∣∣∣ nsum

i=1

γi1 + e⟨xix⟩+bi

minus 11xisinC

∣∣∣∣ ⩽ 1

et infyisinFr(C)

∥xminus y∥ gt αrArr∣∣∣∣ nsumi=1

γi1 + e⟨xix⟩+bi

minus 11xisinC

∣∣∣∣ ⩽ ε

Deacutemonstration du corollairePartie 1

Soit h la fonction deacutefinie par h (x) =(

1

1 + eminuskx

)p

avec p gt 0 et 0 lt ϵ lt 1 A α ϵ fixeacute 0 lt ϵ lt 1 on cherche k

tel que

ϵ = h (α) =

(1

1 + eminuskα

)p

=rArr ϵminus1p = 1 + eminuskα

=rArr ϵminus1p minus 1 = eminuskα

=rArr ln(ϵminus

1p minus 1

)= minuskα

=rArr k = minusln(ϵminus

1p minus 1

= k0 (ϵ α p)

Partie 2Soit α gt 0 et 1 ⩾ ε gt 0 k gt 0

25 httpsfrwikipediaorgwikiNorme_C3A9quivalente

21 Reacuteseaux de neurones 35

Machine Learning Statistiques et Programmation Version 035930

On pose f (y1 yp) =pprod

i=1

1

1 + eminuskyi

pprodi=1

1

1 + eminusk(1minusyi)drsquoapregraves sa deacutefinition 0 ⩽ f (y1 yp) ⩽ 1

Pour k ⩾ k0 (ϵ α 2p) obtenu dans la partie preacuteceacutedente

infiisin1p

[min |yi| |1minus yi|] gt α =rArr∥∥f (y1 yp)minus 11xisinC

∥∥ ⩽ ε

Partie 3Soit g la fonction deacutefinie par

g (x) =

(1

1 + eminuskx

)(1

1 + eminusk(1minusx)

)=

1

1 + eminuskx + eminusk(1minusx) + eminusk

=1

1 + eminuskx + eminuskekx + eminusk=

ekx

ekx (1 + eminusk) + 1 + eminuske2kx

La fonction x minusrarr ekx(1 + eminusk

)+1+eminuske2kx est un polynocircme en ekx dont le discriminant est positif Par conseacutequent

la fraction rationnelle g (x) admet une deacutecomposition en eacuteleacutements simples du premier ordre et il existe quatre reacuteels η1η2 δ1 δ2 tels que

g (x) =η1

1 + ekx+δ1+

η21 + ekx+δ2

Par conseacutequent

f (y1 yp) =

pprodi=1

g (yi) =

pprodi=1

[ηi1

1 + ekyi+δi1+

ηi21 + ekyi+δi2

]Il existe n isin N tel qursquoil soit possible drsquoeacutecrire f sous la forme

f (y) =

nsumi=1

γi1 + eltxiygt+bi

Corollaire C2 approximation drsquoune fonction indicatriceSoit C sub Rp compact alors

forallε gt 0 forallα gt 0 exist (x1 xn) isin (Rp)n exist (b1 bn) isin Rn tels que forallx isin Rp∣∣∣∣sumn

i=1

γi1 + e⟨xix⟩+bi

minus 11xisinC

∣∣∣∣ ⩽ 1 + 2ε2

et infyisinFr(C)

∥xminus y∥ gt αrArr∣∣∣∣sumn

i=1

γi1 + e⟨xix⟩+bi

minus 11xisinC

∣∣∣∣ ⩽ ε

Deacutemonstration du corollairePartie 1Soit C1 = y = (y1 yp) isin Rp | foralli isin 1 n 0 ⩽ yi ⩽ 1 et Cj

2 =y = (y1 yp) isin Rp | foralli = j 0 ⩽ yi ⩽ 1 et 1 ⩽ yj ⩽ 2

36 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Le premier lemme suggegravere que la fonction chercheacutee pour ce lemme dans le cas particulier C1 cup Cj2 est

f (y1 yp) =prodp

i=1

1

1 + eminuskyi

prodpi=1

1

1 + eminusk(1minusyi)+(prod

i =j

1

1 + eminuskyi

)(prodi =j

1

1 + eminusk(1minusyi)

)1

1 + ek(1minusyj)

1

1 + eminusk(2minusyj)

=

(prodi =j

1

1 + eminuskyi

)(prodi=j

1

1 + eminusk(1minusyi)

)(

1

1 + eminuskyj

1

1 + eminusk(1minusyj)+

1

1 + ek(1minusyj)

1

1 + eminusk(2minusyj)

)=

(prodi =j

1

1 + eminuskyi

)(prodi=j

1

1 + eminusk(1minusyi)

)[

1

1 + eminuskyj

(1

1 + eminusk(1minusyj)+ 1minus 1

)+

(1minus 1

1 + eminusk(1minusyj)

)1

1 + eminusk(2minusyj)

]Pour k ⩾ k0 (ϵ α 2p) on a

f (y1 yp) =

(prodi=j

1

1 + eminuskyi

)(prodi =j

1

1 + eminusk(1minusyi)

) 1

1 + eminuskyj+

1

1 + eminusk(2minusyj)+

1

1 + ek(1minusyj)

1

1 + eminuskyj︸ ︷︷ ︸⩽ε2

minus 1

1 + eminusk(1minusyj)

1

1 + eminusk(2minusyj)︸ ︷︷ ︸⩽ε2

Par conseacutequent il est facile de construire la fonction chercheacutee pour tout compact connexe par arcPartie 2Si un compact C nrsquoest pas connexe par arc on peut le recouvrir par une somme finie de compacts connexes par arcs etdisjoints (Ck)1⩽k⩽K de telle sorte que

forally isinKcup

k=1Ck inf ∥xminus y∥ x isin C ⩽ α

2

Deacutemontration du theacuteoregraveme de densiteacute des reacuteseaux de neurones (page 35)Partie 1On deacutemontre le theacuteoregraveme dans le cas ougrave q = 1 Soit f une fonction continue du compact C sub Rp rarr R et soit ε gt 0On suppose eacutegalement que f est positive dans le cas contraire on pose f = f minus inf f︸ ︷︷ ︸

fonction positive

+ inf f

Si f est nulle alors crsquoest fini sinon on pose M = supxisinC

f (x) M existe car f est continue et C est compact (de mecircme

inf f existe eacutegalement)On pose Ck = fminus1 ([kεM ]) Ck est compact car il est lrsquoimage reacuteciproque drsquoun compact par une fonction continue etCk sub C compact

21 Reacuteseaux de neurones 37

Machine Learning Statistiques et Programmation Version 035930

Par construction Ck+1 sub Ck et C =

Mε⋃

k=0

Ck = C0 on deacutefinit~

forallx isin C gε (x) = ε

Mεsum

k=0

11xisinCk

Drsquoougrave~

f (x)minus gε (x) = f (x)minus ε

Mεsum

k=0

11xisinCk = f (x)minus ε

Mεsum

k=0

11f(x)⩾kε

= f (x)minus ε

[f (x)

ε

](partie entiegravere)

drsquoougrave 0 ⩽ f (x)minus gε (x) ⩽ε

4(23)

Comme f est continue sur un compact elle est uniformeacutement continue sur ce compact

existα gt 0 tel que forall (x y) isin C2 ∥xminus y∥ ⩽ α =rArr |f (x)minus f (y)| ⩽ ε2

drsquoougrave |f (x)minus f (y)| ⩾ ε =rArr ∥xminus y∥ gt α

Par conseacutequent

inf ∥xminus y∥ |x isin Fr (Ck) y isin Fr (Ck+1) gt α

38 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Drsquoapregraves le second lemme on peut construire des fonctions hk (x) =sumn

i=1

1

1 + e⟨xki x⟩+bki

telles que

(∥∥hk (x)minus 11xisinCk∥∥ ⩽ 1

)et(

infyisinFr(C)

∥xminus y∥ gt α

2rArr∥∥hk (x)minus 11xisinCk

∥∥ ⩽ ε2)

On en deacuteduit que ∣∣∣∣∣f (x)minus ε

Mεsumk=0hk (x)

∣∣∣∣∣ ⩽ |f (x)minus gε (x)|+

∣∣∣∣∣gε (x)minus ε

Mεsumk=0hk (x)

∣∣∣∣∣⩽ ε+ ε2

[M

ε

]+ 2ε2

⩽ ε (M + 3)

Comme εMεsumk=1hk (x) est de la forme deacutesireacutee le theacuteoregraveme est deacutemontreacute dans le cas q = 1

Partie 2Dans le cas q gt 1 on utilise la meacutethode preacuteceacutedente pour chacune des projections de f dans un repegravere orthonormeacute deRq Il suffit de sommer sur chacune des dimensionsCe theacuteoregraveme montre qursquoil est judicieux de modeacuteliser la fonction f dans lrsquoeacutequation (22) par un reacuteseau de neuronespuisqursquoil possible de srsquoapprocher drsquoaussi pregraves qursquoon veut de la fonction E (Y |X) il suffit drsquoajouter des neurones sur lacouche cacheacutee du reacuteseau Ce theacuteoregraveme permet de deacuteduire le corollaire suivant

Corollaire C3 famille libre de fonctionsSoit Fp lrsquoensemble des fonctions continues de C sub Rp minusrarr R avec C compact muni de la norme ∥f∥ = sup

xisinC∥f (x)∥

Alors lrsquoensemble Ep des fonctions sigmoiumldes

Ep =

x minusrarr 1minus 2

1 + eltyxgt+b|y isin Rp et b isin R

est une base de Fp

Deacutemonstration du corollaireLe theacuteoregraveme de densiteacute (page 35) montre que la famille Ep est une famille geacuteneacuteratrice Il reste agrave montrer que crsquoestune famille libre Soient (yi)1⩽i⩽N isin (Rp)

N et (bi)1⩽i⩽N isin RN veacuterifiant i = j =rArr yi = yj ou bi = bj Soit(λi)1⩽i⩽N isin RN il faut montrer que

forallx isin Rp

Nsumi=1

λi

(1minus 2

1 + eltyixgt+bi

)= 0 =rArr foralli λi = 0 (24)

Crsquoest eacutevidemment vrai pourN = 1 La deacutemonstration est baseacutee sur un raisonnement par reacutecurrence on suppose qursquoelleest vraie pour N minus 1 deacutemontrons qursquoelle est vraie pour N On suppose donc N ⩾ 2 Srsquoil existe i isin 1 N tel

que yi = 0 la fonction x minusrarr 1 minus 2

1 + eltyixgt+biest une constante par conseacutequent dans ce cas le corollaire est est

vrai pour N Dans le cas contraire foralli isin 1 N yi = 0 On deacutefinit les vecteurs Xi = (xi 1) et Yi = (yj bj)On cherche agrave reacutesoude le systegraveme de N eacutequations agrave N inconnues

sumNj=1 λj

(1minus 2

1 + eltYj X1gt

)= 0

sumNj=1 λj

(1minus 2

1 + eltYj Xigt

)= 0

sumNj=1 λj

(1minus 2

1 + eltYj XNgt

)= 0

(25)

21 Reacuteseaux de neurones 39

Machine Learning Statistiques et Programmation Version 035930

On note le vecteur Λ = (λi)1⩽i⩽N et M la matrice

M = (mij)1⩽ij⩽N =

(1minus 2

1 + eltYj Xigt

)1⩽ij⩽N

Lrsquoeacutequation (214) est eacutequivalente agrave lrsquoeacutequation matricielle MΛ = 0 On effectue une iteacuteration du pivot de Gauss(214) eacutequivaut agrave

lArrrArr

λ1m11 + λ2 m12 + + λN m1N = 0

0 + λ2 (m22m11 minusm12m21) + + λN (m2Nm11 minusm1Nm21) = 0 0 + λ2 (mN2m11 minusm12mN1) + + λN (mNNm11 minusm1NmN1) = 0

On note Λlowast = (λi)2⩽i⩽N et ∆lowast Mlowast les matrices

Mlowast = (mij)2⩽ij⩽N

∆lowast = (m1j mi1)2⩽ij⩽N

Donc (214) est eacutequivalent agrave

lArrrArr

λ1m11 + λ2m12 + + λNm1N = 00 + (m11Mlowast minus∆lowast) Λlowast = 0

(26)

Il est possible de choisir X1 (α) = (αx1 1) de telle sorte qursquoil existe une suite (sl)1⩽l⩽N isin minus1 1N avec s1 = 1 et

veacuterifiant

forallj isin (1 N) limαminusrarr+infin

[1minus 2

1 + eltYj X1(α)gt

]= lim

αminusrarr+infinm1j (α) = sj

On deacutefinit

Ulowast = (m21 mN1)prime

Vlowast = (s2 m21 sN mN1)prime

et la matrice Llowast = (Vlowast)2⩽i⩽N dont les N minus 1 colonnes sont identiques

On veacuterifie que

limαminusrarr+infin

∆(α) = Vlowast

On obtient toujours pour (214)

lArrrArr

λ1m11 (α) + λ2m12 (α) + + λNm1N (α) = 00 + [m11 (α)Mlowast minus (Llowast + (∆lowast (α)minus Llowast))] Λlowast = 0

(27)

lArrrArr

λ1m11 (α) + λ2m12 (α) + + λNm1N (α) = 00 + (m11 (α)Mlowast minus Llowast) Λlowast + (∆lowast (α)minus Llowast) Λlowast = 0

On eacutetudie la limite lorsque α minusrarr +infin

(∆lowast (α)minus Llowast) minusrarrαrarr+infin

0

=rArr (m11 (α)Mlowast minus Llowast) Λlowast minusrarrαrarr+infin

0

=rArr (Mlowast minus Llowast) Λlowast = 0

=rArr MlowastΛlowast minus(sumN

j=2 λj

)Vlowast = 0

40 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Donc

MlowastΛlowast minus

Nsumj=2

λj

Vlowast = 0

Drsquoapregraves lrsquohypothegravese de reacutecurrence (214) implique que foralli isin 2 N λi = 0 Il reste agrave montrer que λ1 estneacutecessairement nul ce qui est le cas losque α minusrarr +infin alors λ1m11 (α) minusrarr λ1 = 0 La reacutecurrence est deacutemontreacuteeA chaque fonction sigmoiumlde du corollaire famille libre (page 39) correspond un neurone de la couche cacheacutee Tous ontdes rocircles symeacutetriques les uns par rapport aux autres ce qui ne serait pas le cas si les fonctions de transfert eacutetaient despolynocircmes Crsquoest une des raisons pour lesquelles les reacuteseaux de neurones ont du succegraves Le theacuteoregraveme densiteacute (page 35)et le corollaire famille libre (page 39) sont aussi vraies pour des fonctions du type exponentielle (y b) isin RptimesR minusrarreminus(ltyxgt+b)2 Maintenant qursquoil est prouveacute que les reacuteseaux de neurones conviennent pour modeacuteliser f dans lrsquoeacutequation(22) il reste agrave eacutetudier les meacutethodes qui permettent de trouver les paramegravetres W lowast optimaux de cette fonction

215 Descente de gradient

bull Algorithme et convergence (page 42)bull Calcul du gradient ou reacutetropropagation (page 44)

Lorsqursquoun problegraveme drsquooptimisation nrsquoest pas soluble de maniegravere deacuteterministe il existe des algorithmes permettant detrouver une solution approcheacutee agrave condition toutefois que la fonction agrave maximiser ou minimiser soit deacuterivable ce qui estle cas des reacuteseaux de neurones Plusieurs variantes seront proposeacutees regroupeacutees sous le terme de descente de gradientQuelques lectures

bull An overview of gradient descent optimization algorithms26

bull Implementing a Neural Network from Scratch in Python ndash An Introduction27

26 httpsebastianrudercomoptimizing-gradient-descent27 httpwwwwildmlcom201509implementing-a-neural-network-from-scratch

21 Reacuteseaux de neurones 41

Machine Learning Statistiques et Programmation Version 035930

Algorithme et convergence

Soit g Rrarr R une fonction deacuterivable dont il faut trouver lowastx = argmin

xisinRg (x) le scheacutema suivant illustre la meacutethode de

descente de gradient dans le cas ougrave g (x) = x2

On note xt lrsquoabscisse agrave lrsquoiteacuteration t On notepartg (xt)

partxle gradient de g (x) = x2 Lrsquoabscisse agrave lrsquoiteacuteration t + 1 sera

xt+1 = xt minus εt

[partg (xt)

partx

] εt est le pas de gradient agrave lrsquoiteacuteration t

On suppose maintenant que g est une fonction deacuterivable g Rq rarr R dont il faut trouver le minimum le theacuteoregravemesuivant deacutemontre la convergence de lrsquoalgorithme de descente de gradient agrave condition que certaines hypothegraveses soientveacuterifieacutees Une geacuteneacuteralisation de ce theacuteoregraveme est preacutesenteacutee dans [Driancourt1996]

Theacuteoregraveme T1 convergence de la meacutethode de Newton[Bottou1991]Soit une fonction continue g W isin RM rarr R de classe C1 On suppose les hypothegraveses suivantes veacuterifieacutees

bull H1 argminWisinRq

g (W ) = W lowast est un singleton

bull H2 forallε gt 0 inf|WminusWlowast|gtε

[(W minusW lowast)

primenablag (W )

]gt 0

bull H3 exist (AB) isin R2 tels que forallW isin Rp ∥nablag (W )∥2 ⩽ A2 +B2 ∥W minusW lowast∥2

bull H4 la suite (εt)t⩾0 veacuterifie forallt gt 0 εt isin Rlowast+ et

sumt⩾0 εt = +infin

sumt⩾0 ε

2t lt +infin

Alors la suite (Wt)t⩾0 construite de la maniegravere suivante W0 isin RM forallt ⩾ 0 Wt+1 = Wt minus εtnablag (Wt) veacuterifielimtrarr+infin Wt = W lowast

Lrsquohypothegravese H1 implique que le minimum de la fonction g est unique et lrsquohypothegravese H2 implique que le demi-espacedeacutefini par lrsquoopposeacute du gradient contienne toujours le minimum de la fonction g Lrsquohypothegravese H3 est veacuterifieacutee pour une

42 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

fonction sigmoiumlde elle lrsquoest donc aussi pour toute somme finie de fonctions sigmoiumldes que sont les reacuteseaux de neuronesagrave une couche cacheacuteeDeacutemonstration du theacuteoregravemePartie 1Soit la suite ut = ln

(1 + ε2tx

2)

avec x isin R commesum

t⩾0 ε2t lt +infin ut sim ε2tx

2 on asum

t⩾0 ut lt +infin

Par conseacutequent si vt = eut alorsprodT

t=1 vtTrarrinfinminusrarr D isin R

Partie 2On pose ht = ∥Wt minusW lowast∥2 Donc

ht+1 minus ht = ∥Wt minus εtnablag (Wt)minusW lowast∥2 minus ∥Wt minusW lowast∥2 (28)

Par conseacutequent

ht+1 minus ht = minus2εt(Wt minusW lowast)prime nablag (Wt)︸ ︷︷ ︸

gt0

+ ε2t ∥nablaC (Wt)∥2 ⩽ ε2t ∥nablag (Wt)∥2 ⩽ ε2t(A2 +B2ht

)Drsquoougrave

ht+1 minus ht

(1 + ε2tB

2)⩽ ε2t A

2

On pose πt =prodt

k=1

(1 + ε2kB

2)minus1 alors en multipliant des deux cocircteacutes par πt+1 on obtient

πt+1ht+1 minus πtht ⩽ ε2t A2πt+1

drsquoougrave πq+1hq+1 minus πphp ⩽sumq

t=p ε2t A

2πt+1 ⩽sumq

t=p ε2t A

2Π ⩽sumq

t=p ε2t A

2Π minusrarrtminusrarrinfin

0

Comme la seacuteriesum

t (πt+1ht+1 minus πtht) veacuterifie le critegravere de Cauchy elle est convergente Par conseacutequent

limqrarrinfin

πq+1hq+1 = 0 = limqrarrinfin

Πhq+1

Drsquoougrave limqrarrinfin

hq = 0

Partie 3La seacuterie

sumt (ht+1 minus ht) est convergente car Πht sim πtht

sumt⩾0 ε

2t ∥nablag (Wt)∥2 lrsquoest aussi (drsquoapregraves H3)

Drsquoapregraves (215) la seacuteriesum

t⩾0 εt (Wt minusW lowast)prime nablag (Wt) est donc convergente Or drsquoapregraves les hypothegraveses H2 H4 elle

ne peut lrsquoecirctre que si

limtrarrinfin

Wt = W lowast (29)

Si ce theacuteoregraveme prouve la convergence de la meacutethode de Newton il ne preacutecise pas agrave quelle vitesse cette convergencesrsquoeffectue et celle-ci peut parfois ecirctre tregraves lente Plusieurs variantes ont eacuteteacute deacuteveloppeacutees regroupeacutees sous le terme demeacutethodes de quasi-Newton dans le but drsquoameacuteliorer la vitesse de convergenceCe theacuteoregraveme peut ecirctre eacutetendu dans le cas ougrave la fonction g nrsquoa plus un seul minimum global mais plusieurs minima locaux([Bottou1991]) dans ce cas la suite (Wt) converge vers un mimimum local Dans le cas des reacuteseaux de neurones lafonction agrave optimiser est

G (W ) =

Nsumi=1

e(Yi Y W

i

)=

Nsumi=1

e (Yi f (WXi))

Degraves que les fonctions de transfert ne sont pas lineacuteaires il existe une multitude de minima locaux ce nombre croissantavec celui des coefficients

21 Reacuteseaux de neurones 43

Machine Learning Statistiques et Programmation Version 035930

Calcul du gradient ou reacutetropropagation

Afin de minimiser la fonctionG deacutecrite en (215) lrsquoalgorithme de descente du gradient neacutecessite de calculer le gradientde cette fonction G qui est la somme des gradients parte

partW pour chaque couple (Xi Yi)

partG

partW(W ) =

Nsumi=1

parte (Yi f (WXi))

partW

=

Nsumi=1

CCsumk=1

parte (Yi f (WXi))

partzCk

partzCk

partW

Les notations utiliseacutees sont celles de la figure du perceptron (page 27) Les reacutesultats qui suivent sont pour Xi = Xdonneacute appartenant agrave la suite (Xi) On remarque tout drsquoabord que

parte

partwcij(WX) = zcminus1j

parte

partyci(WX)

parte

partbci(WX) =

parte

partyci(WX)

La reacutetropropagation du gradient consiste donc agrave calculer les termes parteparty

(WX) puisque le gradient srsquoen deacuteduitfacilement La derniegravere couche du reacuteseau de neurones nous permet drsquoobtenir

parte

partyCi(WX) =

CCsumk=1

parte

partzCk(WX)

partzCk

partyCi(WX)

=parte

partzCi(WX) f prime

ci (yCi)

Pour les autres couches c telles que 1 ⩽ c ⩽ C minus 1 on a

parte

partyci=

Cc+1suml=1

parte

partyc+1l

partyc+1l

partyci

=

Cc+1suml=1

parte

partyc+1l

Ccsuml=1

partyc+1l

partzcl

partzclpartyci︸ ︷︷ ︸

=0 si l =i

=

Cc+1suml=1

parte

partyc+1l

partyc+1l

partzci

partzcipartyci

Par conseacutequent

parte

partyci=

Cc+1suml=1

parte

partyc+1lwc+1li

f primeci (yci)

Cette derniegravere formule permet drsquoobtenir par reacutecurrence les deacuteriveacutees parteparty

de la derniegravere couche C agrave la premiegravere et cequel que soit le nombre de couches Cette reacutecurrence inverse de la propagation est appeleacutee reacutetropropagation Cetalgorithme se deacuteduit des eacutequations (215) (215) (215) et (215)

Theacuteoregraveme T2 reacutetropropagationCet algorithme srsquoapplique agrave un reacuteseau de neurones veacuterifiant la deacutefinition du perceptron (page 27) Il srsquoagit de calculersa deacuteriveacutee par rapport aux poids Il se deacuteduit des formules (215) (215) (215) et (215) et suppose que lrsquoalgorithmede propagation (page 28) a eacuteteacute preacutealablement exeacutecuteacute On note yprimeci =

partepartyci

wprimecij =

partepartwcij

et bprimeci = partepartbci

Initialisation

44 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

for i in 1CC

yprimeCi larrminus partepartzCi

(WX) f primeci (yCi)

Reacutecurrence

for c in 1C minus 1

for i in 1Cc

yprimeci larrminus 0

for j in 1Cc+1

yprimeci larrminus yprimeci + yprimec+1j wc+1ji

yprimeci larrminus yprimeci fprimeci

(yprimeci)

Terminaison

for c in 1C

for i in 1Cc

for j in 1Ccminus1

wprimecij larrminus zcminus1j y

primeci

bprimecij larrminus yprimeci

Ces formules sont assez indigestes pour comprendre comment la reacutetropropagation fonctionne La figure suivanteillustre comme le gradient se propage drsquoun neurone au preacuteceacutedente de faccedilon reacutecursive Je la trouve plus simple agraveexploiter lorsqursquoon deacutevie du perceptron classique pour faire des choses hors des clous Je la laisse comme ccedila sans tropdrsquoexplications

21 Reacuteseaux de neurones 45

Machine Learning Statistiques et Programmation Version 035930

Lrsquoideacutee de la reacutetropropagation en supposant connu le gradient de lrsquoerreur par rapport agrave la sortie comment en deacuteduirle gradient par rapport aux coefficients du reacuteseau puis comment le propager agrave chaque entreacutee de sorte qursquoil puisse ecirctretransmis aux neurones de la couche infeacuterieure

46 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

216 Apprentissage drsquoun reacuteseau de neurones

bull Apprentissage avec gradient global (page 48)ndash Meacutethodes du premier ordre (page 48)ndash Meacutethodes du second ordre (page 48)

bull Apprentissage avec gradient stochastique (page 52)

Le terme apprentissage est encore inspireacute de la biologie et se traduit par la minimisation de la fonction (215) ougrave f estun reacuteseau de neurone deacutefini par un perceptron (page 27) Il existe plusieurs meacutethodes pour effectuer celle-ci Chacunedrsquoelles vise agrave minimiser la fonction drsquoerreur

E (W ) = G (W ) =

Nsumi=1

e(Yi minus Y W

i

)=

Nsumi=1

e (Yi minus f (WXi))

Dans tous les cas les diffeacuterents apprentissages utilisent la suite suivante (ϵt) veacuterifiant (210) et proposent uneconvergence vers un minimum local

forallt gt 0 εt isin Rlowast+ et

sumt⩾0

εt = +infinsumt⩾0

ε2t lt +infin (210)

Il est souhaitable drsquoapprendre plusieurs fois la mecircme fonction en modifiant les conditions initiales de ces meacutethodes demaniegravere agrave ameacuteliorer la robustesse de la solution

21 Reacuteseaux de neurones 47

Machine Learning Statistiques et Programmation Version 035930

Apprentissage avec gradient global

Lrsquoalgorithme de reacutetropropagation (page 44) permet drsquoobtenir la deacuteriveacutee de lrsquoerreur e pour un vecteur drsquoentreacutee X Orlrsquoerreur E (W ) agrave minimiser est la somme des erreurs pour chaque exemple Xi le gradient global partE(W )

partW de cette erreurglobale est la somme des gradients pour chaque exemple (voir eacutequation (215)) Parmi les meacutethodes drsquooptimisationbaseacutees sur le gradient global on distingue deux cateacutegories

bull Les meacutethodes du premier ordre elles sont calqueacutees sur la meacutethode de Newton28 et nrsquoutilisent que le gradientbull Les meacutethodes du second ordre ou meacutethodes utilisant un gradient conjugueacute29 elles sont plus coucircteuses en calcul

mais plus performantes puisque elles utilisent la deacuteriveacutee seconde ou une valeur approcheacutee

Meacutethodes du premier ordre

Les meacutethodes du premier ordre sont rarement utiliseacutees Elles sont toutes baseacutees sur le principe de la descente degradient de Newton preacutesenteacutee dans la section Algorithme et convergence (page 42)

Algorithme A1 optimisation du premier ordreInitialiationLe premier jeu de coefficients W0 du reacuteseau de neurones est choisi aleacuteatoirement

t larrminus 0

E0 larrminussumN

i=1 e (Yi minus f (W0 Xi))

Calcul du gradientgt larrminus partEt

partW (Wt) =sumN

i=1 eprime (Yi minus f (Wt Xi))

Mise agrave jour

Wt+1 larrminus Wt minus ϵtgtEt+1 larrminus

sumNi=1 e (Yi minus f (Wt+1 Xi))

t larrminus t+ 1

TerminaisonSi Et

Etminus1asymp 1 (ou ∥gt∥ asymp 0) alors lrsquoapprentissage a convergeacute sinon retour au calcul du gradient

La condition drsquoarrecirct peut-ecirctre plus ou moins stricte selon les besoins du problegraveme Cet algorithme converge vers unminimum local de la fonction drsquoerreur (drsquoapregraves le theacuteoregraveme de convergence (page 42) mais la vitesse de convergenceest inconnue

Meacutethodes du second ordre

Lrsquoalgorithme apprentissage global (page 48) fournit le canevas des meacutethodes drsquooptimisation du second ordre La miseagrave jour des coefficients est diffeacuterente car elle prend en compte les derniegraveres valeurs des coefficients ainsi que les derniersgradients calculeacutes Ce passeacute va ecirctre utiliseacute pour estimer une direction de recherche pour le minimum diffeacuterente de celledu gradient cette direction est appeleacutee gradient conjugueacute (voir [Moreacute1977])Ces techniques sont baseacutees sur une approximation du second degreacute de la fonction agrave minimiser On note M le nombrede coefficients du reacuteseau de neurones (biais compris) Soit h RM rarr R la fonction drsquoerreur associeacutee au reacuteseau deneurones h (W ) =

sumi e (Yi f (WXi)) Au voisinage de W0 un deacuteveloppement limiteacute donne

h (W ) = h (W0) +parth (W0)

partW(W minusW0) + (W minusW0)

prime part2h (W0)

partW 2(W minusW0) + o ∥W minusW0∥2

28 httpsfrwikipediaorgwikiMC3A9thode_de_Newton29 httpsfrwikipediaorgwikiMC3A9thode_du_gradient_conjuguC3A9

48 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Par conseacutequent sur un voisinage de W0 la fonction h (W ) admet un minimum local si part2h(W0)partW 2 est deacutefinie positive

strictement

Rappel part2h (W0)

partW 2est deacutefinie positive strictementlArrrArr forallZ isin RN Z = 0 =rArr Z prime part

2h (W0)

partW 2Z gt 0

Une matrice symeacutetrique deacutefinie strictement positive est inversible et le minimum est atteint pour la valeur

Wmin = W0 +1

2

[part2h (W0)

partW 2

]minus1 [parth (W0)

partW

]Neacuteanmoins pour un reacuteseau de neurones le calcul de la deacuteriveacutee seconde est coucircteux son inversion eacutegalement Crsquoestpourquoi les derniegraveres valeurs des coefficients et du gradient sont utiliseacutees afin drsquoapprocher cette deacuteriveacutee seconde oudirectement son inverse Deux meacutethodes drsquoapproximation sont preacutesenteacutees

bull Lrsquoalgorithme BFGS (Broyden-Fletcher-Goldfarb-Shano)30 ([Broyden1967] [Fletcher1993]) voir aussi lesversions L-BFGS31

bull Lrsquoalgoritmhe DFP (Davidon-Fletcher-Powell)32 ([Davidon1959] [Fletcher1963])La figure du gradient conjugueacute (page 49) est couramment employeacutee pour illustrer lrsquointeacuterecirct des meacutethodes de gradientconjugueacute Le problegraveme consiste agrave trouver le minimum drsquoune fonction quadratique par exemple G (x y) = 3x2 + y2Tandis que le gradient est orthogonal aux lignes de niveaux de la fonction G le gradient conjugueacute se dirige plussucircrement vers le minimum global

Figure F1 Gradient conjugueacute

30 httpsenwikipediaorgwikiBroydenE28093FletcherE28093GoldfarbE28093Shanno_algorithm31 httpsenwikipediaorgwikiLimited-memory_BFGS32 httpsenwikipediaorgwikiDavidonE28093FletcherE28093Powell_formula

21 Reacuteseaux de neurones 49

Machine Learning Statistiques et Programmation Version 035930

Gradient et gradient conjugueacute sur une ligne de niveau de la fonction G (x y) = 3x2+y2 le gradient est orthogonal auxlignes de niveaux de la fonction G mais cette direction est rarement la bonne agrave moins que le point (x y) se situe surun des axes des ellipses le gradient conjugueacute agregravege les derniers deacuteplacements et propose une direction de rechercheplus plausible pour le minimum de la fonction Voir Conjugate Gradient Method33

Ces meacutethodes proposent une estimation de la deacuteriveacutee seconde (ou de son inverse) utiliseacutee en (216) Dans les meacutethodesdu premier ordre une iteacuteration permet de calculer les poidsWt+1 agrave partir des poidsWt et du gradientGt Si ce gradientest petit on peut supposer que Gt+1 est presque eacutegal au produit de la deacuteriveacutee seconde par Gt Cette relation est mise agraveprofit pour construire une estimation de la deacuteriveacutee seconde Cette matrice noteacutee Bt dans lrsquoalgorithme BFGS (page 50)est drsquoabord supposeacutee eacutegale agrave lrsquoidentiteacute puis actualiseacutee agrave chaque iteacuteration en tenant de lrsquoinformation apporteacutee par chaquedeacuteplacement

Algorithme A2 BFGSLe nombre de paramegravetres de la fonction f est M InitialisationLe premier jeu de coefficients W0 du reacuteseau de neurones est choisi aleacuteatoirement

t larrminus 0

E0 larrminussumN

i=1 e (Yi minus f (W0 Xi))B0 larrminus IMi larrminus 0

Calcul du gradient

gt larrminus partEt

partW (Wt) =sumN

i=1 eprime (Yi minus f (Wt Xi))

ct larrminus Btgt

Mise agrave jour des coefficients

ϵlowast larrminus arg infϵ

sumNi=1 e (Yi minus f (Wt minus ϵct Xi))

Wt+1 larrminus Wt minus ϵlowastctEt+1 larrminus

sumNi=1 e (Yi minus f (Wt+1 Xi))

t larrminus t+ 1

Mise agrave jour de la marice math`B_t`

si tminus i ⩾ M ou gprimetminus1Btminus1gtminus1 ⩽ 0 ou gprimetminus1Btminus1 (gt minus gtminus1) ⩽ 0

Bt larrminus IMilarrminus t

sinonst larrminusWt minusWtminus1

dt larrminus gt minus gtminus1

Bt larrminus Btminus1 +

(1 +

dprimetBtminus1dtdprimetst

)sts

primet

sprimetdtminus std

primetBtminus1 +Btminus1dts

primet

dprimetst

TerminaisonSi Et

Etminus1asymp 1 alors lrsquoapprentissage a convergeacute sinon retour au calcul du gradient

33 httpsenwikipediaorgwikiConjugate_gradient_method

50 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Lorsque la matrice Bt est eacutegale agrave lrsquoidentiteacute le gradient conjugueacute est eacutegal au gradient Au fur et agrave mesure des iteacuterationscette matrice toujours symeacutetrique eacutevolue en ameacuteliorant la convergence de lrsquooptimisation Neacuteanmoins la matrice Bt

doit ecirctre ńănettoyeacuteeă (eacutegale agrave lrsquoidentiteacute) freacutequemment afin drsquoeacuteviter qursquoelle nrsquoagregravege un passeacute trop lointain Elle estaussi nettoyeacutee lorsque le gradient conjugueacute semble trop srsquoeacuteloigner du veacuteritable gradient et devient plus proche drsquounedirection perpendiculaireLa convergence de cet algorithme dans le cas des reacuteseaux de neurones est plus rapide qursquoun algorithme du premierordre une preuve en est donneacutee dans [Driancourt1996]En pratique la recherche de ϵlowast est reacuteduite car le calcul de lrsquoerreur est souvent coucircteux il peut ecirctre effectueacute sur un grandnombre drsquoexemples Crsquoest pourquoi on remplace lrsquoeacutetape de mise agrave jour de lrsquoalgorithme BFGS (page 50) par celle-ci

Algorithme A3 BFGSiquestLe nombre de paramegravetre de la fonction f est M Initialisation calcul du gradientVoir BFGS (page 50)Recherche de math`epsilon^`

ϵlowast larrminus ϵ0while Et+1 ⩾ Et et ϵlowast ≫ 0

ϵlowast larrminus ϵlowast

2

Wt+1 larrminusWt minus ϵlowastct

Et+1 larrminussumN

i=1 e (Yi minus f (Wt+1 Xi))

if ϵlowast asymp 0 et Bt = IMBt larrminus IMilarrminus t

Retour au calcul du gradient

Mise agrave jour des coefficients

Wt+1 larrminus Wt minus ϵlowastctEt+1 larrminus

sumNi=1 e (Yi minus f (Wt+1 Xi))

t larrminus t+ 1

Mise agrave jour de la matrice math`B_t` temrinaisonVoir BFGS (page 50)

Lrsquoalgorithme DFP est aussi un algorithme de gradient conjugueacute qui propose une approximation diffeacuterente de lrsquoinversede la deacuteriveacutee seconde

Algorithme A4 DFPLe nombre de paramegravetre de la fonction f est M InitialisationLe premier jeu de coefficients W0 du reacuteseau de neurones est choisi aleacuteatoirement

t larrminus 0

E0 larrminussumN

i=1 e (Yi minus f (W0 Xi))B0 larrminus IMi larrminus 0

21 Reacuteseaux de neurones 51

Machine Learning Statistiques et Programmation Version 035930

Calcul du gradient

gt larrminus partEt

partW (Wt) =sumN

i=1 eprime (Yi minus f (Wt Xi))

ct larrminus Btgt

Mise agrave jour des coefficients

ϵlowast larrminus arg infϵ

sumNi=1 e (Yi minus f (Wt minus ϵct Xi))

Wt+1 larrminus Wt minus ϵlowastctEt+1 larrminus

sumNi=1 e (Yi minus f (Wt+1 Xi))

t larrminus t+ 1

Mise agrave jour de la matrice math`B_t`

si tminus i ⩾ M ou gprimetminus1Btminus1gtminus1 ⩽ 0 ou gprimetminus1Btminus1 (gt minus gtminus1) ⩽ 0

Bt larrminus IMilarrminus t

sinondt larrminusWt minusWtminus1

st larrminus gt minus gtminus1

Bt larrminus B_t-1 + dfracd_t drsquo_t drsquo_t s_t - dfracB_t-1 s_t srsquo_t B_t-1 srsquo_t B_t-1 s_t `

TerminaisonSi Et

Etminus1asymp 1 alors lrsquoapprentissage a convergeacute sinon retour agrave du calcul du gradient

Seule lrsquoeacutetape de mise agrave jour Bt diffegravere dans les algorithmes BFGS (page 50) et DFP (page 51) Comme lrsquoalgorithmeBFGS (page 50) on peut construire une version DFP (page 51)iquestinspireacutee de lrsquoalgorithme BFGSiquest (page 51)

Apprentissage avec gradient stochastique

Compte tenu des courbes drsquoerreurs tregraves accidenteacutees (page 52) dessineacutees par les reacuteseaux de neurones il existe unemultitude de minima locaux De ce fait lrsquoapprentissage global converge rarement vers le minimum global de la fonctiondrsquoerreur lorsqursquoon applique les algorithmes baseacutes sur le gradient global Lrsquoapprentissage avec gradient stochastiqueest une solution permettant de mieux explorer ces courbes drsquoerreurs De plus les meacutethodes de gradient conjugueacuteneacutecessite le stockage drsquoune matrice trop grande parfois pour des fonctions ayant quelques milliers de paramegravetres Crsquoestpourquoi lrsquoapprentissage avec gradient stochastique est souvent preacutefeacutereacute agrave lrsquoapprentissage global pour de grands reacuteseauxde neurones alors que les meacutethodes du second ordre trop coucircteuses en calcul sont cantonneacutees agrave de petits reacuteseaux Encontrepartie la convergence est plus lente La deacutemonstration de cette convergence neacutecessite lrsquoutilisation de quasi-martingales et est une convergence presque sucircre [Bottou1991]

Figure F2 Exemple de minimal locaux

52 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Algprithme A1 apprentissage stochastiqueInitialisationLe premier jeu de coefficients W0 du reacuteseau de neurones est choisi aleacuteatoirement

t larrminus 0

E0 larrminussumN

i=1 e (Yi minus f (W0 Xi))

Reacutecurrence

Wt0 larrminusW0

for tprime in 0N minus 1

ilarrminus nombre aleacuteatoire dans 1 Ng larrminus partE

partW (Wttprime) = eprime (Yi minus f (Wttprime Xi))

Wttprime+1 larrminusWttprime minus ϵtg

Wt+1 larrminusWtN

Et+1 larrminussumN

i=1 e (Yi minus f (Wt+1 Xi))

tlarrminus t+ 1

TerminaisonSi Et

Etminus1asymp 1 alors lrsquoapprentissage a convergeacute sinon retour au calcul du gradient

En pratique il est utile de converser le meilleur jeu de coefficients W lowast = argminu⩾0

Eu car la suite (Eu)u⩾0 nrsquoest pas

une suite deacutecroissante

21 Reacuteseaux de neurones 53

Machine Learning Statistiques et Programmation Version 035930

217 Classification

bull Vraisemblance drsquoun eacutechantillon de variable suivant une loi multinomiale (page 54)bull Problegraveme de classification pour les reacuteseaux de neurones (page 55)bull Reacuteseau de neurones adeacutequat (page 56)

Vraisemblance drsquoun eacutechantillon de variable suivant une loi multinomiale

Soit (Yi)1⩽i⩽N un eacutechantillon de variables aleacuteatoires iid suivant la loi multinomialeM (p1 pC) On deacutefinitforallk isin 1 middot middot middot C dk = 1

N

sumNi=1 11Yi=k La vraisemblance de lrsquoeacutechantillon est

L (Y1 YN p1 pC) =

nprodi=1

pYi

lnL (Y1 YN p1 pC) =

nsumi=1

ln pYi

lnL (Y1 YN p1 pC) =

Csumk=1

[(ln pk)

Nsumi=1

11Yi=k

]

lnL (Y1 YN p1 pC) = N

Csumk=1

dk ln pk

Cette fonction est aussi appeleacutee distance de Kullback-Leiber34 ([Kullback1951]) elle mesure la distance entre deuxdistributions de variables aleacuteatoires discregravetes Liquestestimateur de maximum de vraisemblance35 (emv) est la solution duproblegraveme suivant

Problegraveme P1 estimateur du maximum de vraisemblanceSoit un vecteur (d1 dN ) tel que sumN

k=1 dk = 1forallk isin 1 N dk ⩾ 0

On cherche le vecteur (plowast1 plowastN ) veacuterifiant

(plowast1 plowastN ) = argmax

(p1pC)isinRC

sumCk=1 dk ln pk

avecforallk isin 1 middot middot middot C pk ⩾ 0

etsumC

k=1 pk = 1

Theacuteoregraveme T1 reacutesolution du problegraveme du maximum de vraisemblanceLa solution du problegraveme du maximum de vraisemblance (page 54) est le vecteur

(plowast1 plowastN ) = (d1 dN )

34 httpsfrwikipediaorgwikiDivergence_de_Kullback-Leibler35 httpsfrwikipediaorgwikiMaximum_de_vraisemblance

54 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

DeacutemonstrationSoit un vecteur (p1 pN ) veacuterifiant les conditions sumN

k=1 pk = 1forallk isin 1 N pk ⩾ 0

La fonction x minusrarr lnx est concave drsquoougrave

∆ =

Csumk=1

dk ln pk minusCsum

k=1

dk ln dk

=

Csumk=1

dk (ln pk minus ln dk) =

Csumk=1

dk lnpkdk

⩽ ln

(Csum

k=1

dkpkdk

)= ln

(Csum

k=1

pk

)= ln 1 = 0

⩽ 0

La distance de KullBack-Leiber compare deux distributions de probabiliteacutes entre elles Crsquoest elle qui va faire le lienentre le problegraveme de classification discret (page 32) et les reacuteseaux de neurones pour lesquels il faut impeacuterativementune fonction drsquoerreur deacuterivable

Problegraveme de classification pour les reacuteseaux de neurones

Le problegraveme de classification (page 32) est un cas particulier de celui qui suit pour lequel il nrsquoest pas neacutecessaire deconnaicirctre la classe drsquoappartenance de chaque exemple mais seulement les probabiliteacutes drsquoappartenance de cet exempleagrave chacune des classesSoient une variable aleacuteatoire continue X isin Rp et une variable aleacuteatoire discregravete multinomiale Y isin 1 middot middot middot C onveut estimer la loi de

Y |X simM (p1 (WX) pC (WX)) avec W isin RM

Le vecteur (p1 (WX) pC (WX)) est une fonction f de (WX) ougrave W est lrsquoensemble des M paramegravetres dumodegravele Cette fonction possegravede p entreacutees et C sorties Comme pour le problegraveme de la reacutegression on cherche les poidsW qui correspondent le mieux agrave lrsquoeacutechantillon

A =

(Xi yi =

(ηki)1⩽k⩽C

)isin Rp times [0 1]

C tel quecsum

k=1

yki = 1

∣∣∣∣∣ 1 ⩽ i ⩽ N

On suppose que les variables (Yi|Xi)1⩽i⩽N suivent les lois respectives (M (yi))1⩽i⩽N et sont indeacutependantes entreelles la vraisemblance du modegravele veacuterifie drsquoapregraves lrsquoeacutequation (217)

LW propNprodi=1

Cprodk=1

[pk (WXi)]P(Yi=k)

lnLW propNsumi=1

Csumk=1

ηki ln [pk (WXi)]

La solution du problegravemelowastW = argmax

WisinRl

LW est celle drsquoun problegraveme drsquooptimisation sous contrainte Afin de contourner

ce problegraveme on deacutefinit la fonction f

f RM times Rp minusrarr RC

forall (Wx) isin RM times Rp f (Wx) = (f1 (Wx)) fC (Wx)

et foralli isin 1 middot middot middot N forallk isin 1 middot middot middot C pk (WXi) =efk(WXi)sumCl=1 e

fl(WXi)

21 Reacuteseaux de neurones 55

Machine Learning Statistiques et Programmation Version 035930

Les contraintes sur(pk (WXi)

)sont bien veacuterifieacutees

foralli isin 1 middot middot middot N forallk isin 1 middot middot middot C pk (WXi) ⩾ 0

foralli isin 1 middot middot middot N sumC

k=1 pk (WXi) = 1

On en deacuteduit que

lnLW propNsumi=1

Csumk=1

ηki

[fk (WXi)minus ln

[Csuml=1

efl(WXi)

]]

lnLW propNsumi=1

Csumk=1

ηki fk (WXi)minusNsumi=1

ln

[Csuml=1

efl(WXi)

]Csum

k=1

ηki︸ ︷︷ ︸=1

Drsquoougrave

lnLW propsumN

i=1

sumCk=1 η

ki fk (WXi)minus

sumNi=1 ln

[sumCl=1 e

fl(WXi)]

Ceci megravene agrave la deacutefinition du problegraveme de classification suivant

Problegraveme P2 classificationSoit A lrsquoeacutechantillon suivant

A =

(Xi yi =

(ηki)1⩽k⩽C

)isin Rp times RC tel que

csumk=1

ηki = 1

∣∣∣∣∣ 1 ⩽ i ⩽ N

yki repreacutesente la probabiliteacute que lrsquoeacuteleacutement Xi appartiennent agrave la classe k ηki = P (Yi = k|Xi)

Le classifieur chercheacute est une fonction f deacutefinie par

f RM times Rp minusrarr RC

(WX) minusrarr (f1 (WX) fp (WX))

Dont le vecteur de poids W lowast est eacutegal agrave

W lowast = argmaxW

Nsumi=1

Csumk=1

ηki fk (WXi)minusNsumi=1

ln

[Csuml=1

efl(WXi)

]

Reacuteseau de neurones adeacutequat

Dans le problegraveme preacuteceacutedent la maximisation delowastW = argmax

WisinRM

LW aboutit au choix drsquoune fonction

X isin Rp minusrarr f(lowastWX) isin RC

Le reacuteseau de neurones suivant (page 56) g (WX) isin RM times Rp minusrarr RC choisi pour modeacuteliser f aura pour sorties

X isin Rp minusrarr g(lowastWX) isin RC

forallk isin 1 middot middot middot C gk (WX) = efk(WX)

Figure F1 Reacuteseau de neurones adeacutequat pour la classification

56 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

On en deacuteduit que la fonction de transert des neurones de la couche de sortie est x minusrarr ex La probabiliteacute pour le

vecteur x isin Rp drsquoappartenir agrave la classe k isin 1 middot middot middot C est pk(lowastWx) = P (Y = k|x) = gk(

lowastWx)sumC

l=1 gl(lowastWx)

La fonction

drsquoerreur agrave minimiser est lrsquoopposeacute de la log-vraisemblance du modegravele

lowastW = argmin

WisinRM

[Nsumi=1

(minus

Csumk=1

ηki ln (gk (WXi)) + ln

[Csuml=1

gl (WXi)

])]

= argminWisinRM

[Nsumi=1

h(WXi η

ki

)]

On note Crn le nombre de couches du reacuteseau de neurones zkCrnest la sortie k avec k isin 1 middot middot middot C gk (Wx) =

zkCrn= ey

kCrn ougrave ykCrn

est le potentiel du neurone k de la couche de sortieOn calcule

parth(WXi y

ki

)partykCrn

= minusηki +ziCrnsumC

m=1 zmCrn

= pk(lowastWx)minus ηki

Cette eacutequation permet drsquoadapter lrsquoalgorithme de la reacutetropropagation (page 44) deacutecrivant reacutetropropagation pour leproblegraveme de la classification et pour un exemple

(X y =

(ηk)1⩽k⩽C

) Seule la couche de sortie change

Algorithme A1 reacutetropropagation

21 Reacuteseaux de neurones 57

Machine Learning Statistiques et Programmation Version 035930

Cet algorithme de reacutetropropagation est lrsquoadaptation de reacutetropropagation (page 44) pour le problegraveme de la classificationIl suppose que lrsquoalgorithme de propagation (page 28) a eacuteteacute preacutealablement exeacutecuteacute On note yprimeci = parte

partyci wprime

cij =parte

partwcijet bprimeci = parte

partbci

Initialiasation

for i in 1CC

yprimeCi larrminuszCisumCl=1 zCl

minus ηi

Reacutecurrence TerminaisonVoir reacutetropropagation (page 44)

On veacuterifie que le gradient srsquoannule lorsque le reacuteseau de neurones retourne pour lrsquoexemple (Xi yi) la distribution deY |Xi sim M (yi) Cet algorithme de reacutetropropagation utilise un vecteur deacutesireacute de probabiliteacutes (η1 ηCC

) veacuterifiantsumCC

i=1 ηi = 1 Lrsquoexpeacuterience montre qursquoil est preacutefeacuterable drsquoutiliser un vecteur veacuterifiant la contrainte

foralli isin 1 CC min ηi 1minus ηi gt α

avec α gt 0

Geacuteneacuteralement α est de lrsquoordre de 0 1 ou 0 01 Cette contrainte facilite le calcul de la vraisemblance et eacutevitelrsquoobtention de gradients quasi-nuls qui freinent lrsquoapprentissage lorsque les fonctions exponnetielles sont satureacutees (voir[Bishop1995])

218 Prolongements

bull Base drsquoapprentissage et base de test (page 58)bull Fonction de transfert agrave base radiale (page 60)bull Poids partageacutes (page 61)bull Deacuteriveacutee par rapport aux entreacutees (page 61)bull Reacutegularisation ou Decay (page 61)bull Problegravemes de gradients (page 62)bull Seacutelection de connexions (page 63)

Base drsquoapprentissage et base de test

Les deux exemples de reacutegression et de classification La reacutegression (page 28) et Problegraveme de classification pour lesreacuteseaux de neurones (page 55) ont montreacute que la structure du reacuteseau de neurones la mieux adapteacutee a une grandeimportance Dans ces deux cas une rapide veacuterification visuelle permet de juger de la qualiteacute du modegravele obtenu apregravesapprentissage mais bien souvent cette ńăvisionă est inaccessible pour des dimensions supeacuterieures agrave deux Le meilleurmoyen de jauger le modegravele appris est de veacuterifier si lrsquoerreur obtenue sur une base ayant servi agrave lrsquoapprentissage (ou basedrsquoapprentissage) est conserveacutee sur une autre base (ou base de test) que le modegravele deacutecouvre pour la premiegravere foisSoit B = (Xi Yi) |1 ⩽ i ⩽ N lrsquoensemble des observations disponibles Cet ensemble est aleacuteatoirement scindeacute endeux sous-ensembles Ba et Bt de telle sorte que

Ba = empty et Bt = emptyBa cupBt = B et Ba capBt = empty

Ba

BacupBt= p isin]0 1[ en regravegle geacuteneacuterale p isin

[12

34

]58 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Ce deacutecoupage est valide si tous les exemples de la base B obeacuteissent agrave la mecircme loi les deux bases Ba et Bt sont diteshomogegravenes Le reacuteseau de neurones sera donc appris sur la base drsquoapprentissage Ba et ńătesteacuteă sur la base de test BtLe test consiste agrave veacuterifier que lrsquoerreur sur Bt est sensiblement eacutegale agrave celle sur Ba auquel cas on dit que le modegravele(ou reacuteseau de neurones) geacuteneacuteralise bien Le modegravele trouveacute nrsquoest pas pour autant le bon modegravele mais il est robuste Lacourbe figure suivante illustre une deacutefinition du modegravele optimal comme eacutetant celui qui minimise lrsquoerreur sur la base detest Lorsque le modegravele choisi nrsquoest pas celui-lagrave deux cas sont possibles

bull Le nombre de coefficients est trop petit le modegravele geacuteneacuteralise bien mais il existe drsquoautres modegraveles meilleurs pourlesquels lrsquoerreur drsquoapprentissage et de test est moindre

bull Le nombre de coefficients est trop grand le modegravele geacuteneacuteralise mal lrsquoerreur drsquoapprentissage est faible et lrsquoerreurde test eacuteleveacutee le reacuteseau a appris la base drsquoapprentissage par coeur

Figure F1 Modegravele optimal pour la base de test

Ce deacutecoupage des donneacutees en deux bases drsquoapprentissage et de test est freacutequemment utiliseacute pour toute estimation demodegraveles reacutesultant drsquoune optimisation reacutealiseacutee au moyen drsquoun algorithme iteacuteratif Crsquoest le cas par exemple des modegravelesde Markov cacheacutes Elle permet de srsquoassurer qursquoun modegravele srsquoadapte bien agrave de nouvelles donneacutees

21 Reacuteseaux de neurones 59

Machine Learning Statistiques et Programmation Version 035930

Fonction de transfert agrave base radiale

La fonction de transfert est dans ce cas agrave base radiale (souvent abreacutegeacutee par RBF pour radial basis function36 Elle nesrsquoapplique pas au produit scalaire entre le vecteur des poids et celui des entreacutees mais agrave la distance euclidienne entre cesvecteurs

Deacutefinition D1 neurone distanceUn neurone distance agrave p entreacutees est une fonction f Rp+1 times Rp minusrarr R deacutefinie par

bull g Rrarr Rbull W isin Rp+1 W = (w1 wp+1) = (W prime wp+1)

bull forallx isin Rp f (Wx) = eminus∥Wprimeminusx∥2+wp+1 avec x = (x1 xp)

Ce neurone est un cas particulier du suivant qui pondegravere chaque dimension par un coefficient Toutefois ce neuronepossegravede 2p+ 1 coefficients ougrave p est le nombre drsquoentreacutee

Deacutefinition D2 neurone distance pondeacutereacuteePour un vecteur donneacute W isin Rp = (w1 wp) on note W j

i = (wi wj) Un neurone distance pondeacutereacutee agrave pentreacutees est une fonction f R2p+1 times Rp minusrarr R deacutefinie par

bull g Rrarr Rbull W isin R2p+1 W = (w1 w2p+1) = (w1 w2p+1)

bull forallx isin Rp f (Wx) = exp[minus[sump

i=1 wp+i (wi minus xi)2]+ wp+1

]avec x = (x1 xp)

La fonction de transfert est x minusrarr ex est le potentiel de ce neurone donc y = minus[sump

i=1 wp+i (wi minus xi)2]+ wp+1

Lrsquoalgorithme de reacutetropropagation (page 44) est modifieacute par lrsquoinsertion drsquoun tel neurone dans un reacuteseau ainsi que lareacutetropropagation Le plus simple tout drsquoabord

1 ⩽ i ⩽ pparty

partwi= minus2wp+i (wi minus xi)

p+ 1 ⩽ i ⩽ 2pparty

partwi= minus (wi minus xi)

2

i = 2p+ 1party

partwi= minus1

Pour le neurone distance simple la ligne (218) est superflue tous les coefficients (wi)p+1⩽i⩽2p sont eacutegaux agrave 1 Larelation (215) reste vraie mais nrsquoaboutit plus agraveeqalgo_retro_5 celle-ci devient en supposant que la couche drsquoindicec+ 1 ne contient que des neurones deacutefinie par la deacutefinition preacuteceacutedente

parte

partyci=

Cc+1suml=1

parte

partyc+1l

partyc+1l

partzci

partzcipartyci

=

Cc+1suml=1

parte

partyc+1l(2wc+1lp+i (wc+1li minus zci))

partzcipartyci

36 httpsenwikipediaorgwikiRadial_basis_function

60 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Poids partageacutes

Les poids partageacutes sont simplement un ensemble de poids qui sont contraints agrave conserver la mecircme valeur Soit G ungroupe de poids partageacutes dont la valeur est wG Soit Xk et Yk un exemple de la base drsquoapprentissage (entreacutees et sortiesdeacutesireacutees) lrsquoerreur commise par le reacuteseau de neurones est e (WXk Yk)

parte (WXk Yk)

partwG=sumwisinG

parte (WXk Yk)

partwG

partwG

partw=sumwisinG

sumparte (WXk Yk)

partwG

Par conseacutequent si un poids w appartient agrave un groupe G de poids partageacutes sa valeur agrave lrsquoiteacuteration suivante sera

wt+1 = wt minus εt

(sumwisinG

parte (WXk Yk)

partw

)

Cette ideacutee est utiliseacutee dans les reacuteseaux neuronaux convolutifs37 (deep learning38 CS231n Convolutional NeuralNetworks for Visual Recognition39)

Deacuteriveacutee par rapport aux entreacutees

On note (Xk Yk) un exemple de la base drsquoapprentissage Le reacuteseau de neurones est composeacute de C couches Ci

est le nombre de neurones sur la iegraveme couche C0 est le nombre drsquoentreacutees Les entreacutees sont appeleacutees (z0i)1⩽i⩽C0

(y1i)1⩽i⩽C1sont les potentiels des neurones de la premiegravere couche on en deacuteduit que dans le cas drsquoun neurone classique

(non distance)

parte (WXk Yk)

partz0i=

C1sumj=1

parte (WXk Yk)

party1j

party1jpartz0i

=

C1sumj=1

parte (WXk Yk)

party1jw1ji

Comme le potentiel drsquoun neurone distance nrsquoest pas lineacuteaire par rapport aux entreacutees(y =

Nsumi=1

(wi minus z0i)2+ b

) la

formule devient dans ce cas

parte (WXk Yk)

partz0i=

C1sumj=1

parte (WXk Yk)

party1j

party1jpartz0i

= minus2C1sumj=1

parte (WXk Yk)

party1j(w1ji minus z0i)

Reacutegularisation ou Decay

Lors de lrsquoapprentissage comme les fonctions de seuil du reacuteseau de neurones sont borneacutees pour une grande variationdes coefficients la sortie varie peu De plus pour ces grandes valeurs la deacuteriveacutee est quasi nulle et lrsquoapprentissage srsquoentrouve ralenti Par conseacutequent il est preacutefeacuterable drsquoeacuteviter ce cas et crsquoest pourquoi un terme de reacutegularisation est ajouteacutelors de la mise agrave jour des coefficients (voir [Bishop1995]) Lrsquoideacutee consiste agrave ajouter agrave lrsquoerreur une peacutenaliteacute fonction descoefficients du reacuteseau de neurones Ereg = E + λ

sumi w2

i

Et lors de la mise agrave jour du poids wti agrave lrsquoiteacuteration t+ 1 wt+1

i = wti minus ϵt

[partEpartwiminus 2λwt

i

]

Le coefficient λ peut deacutecroicirctre avec le nombre drsquoiteacuterations et est en geacuteneacuteral de lrsquoordre de 0 01 pour un apprentissageavec gradient global plus faible pour un apprentissage avec gradient stochastique

37 httpsfrwikipediaorgwikiRC3A9seau_neuronal_convolutif38 httpsfrwikipediaorgwikiApprentissage_profond39 httpcs231ngithubioneural-networks-1layers

21 Reacuteseaux de neurones 61

Machine Learning Statistiques et Programmation Version 035930

Problegravemes de gradients

La descente du gradient repose sur lrsquoalgorithme de reacutetropropagation (page 44) qui propoge lrsquoerreur depuis la derniegraverecouche jusqursquoagrave la premiegravere Pour peu qursquoune fonction de seuil soit satureacutee Hors la zone rouge le gradient est tregravesatteacutenueacute

import matplotlibpyplot as pltimport numpydef softmax(x)

return 10 (1 + numpyexp(-x))def dsoftmax(x)

t = numpyexp(-x)return t (1 + t)2

x = numpyarange(-1010 01)y = softmax(x)dy = dsoftmax(x)fig ax = pltsubplots(11)axplot(xy label=softmax)axplot(xdy label=deacuteriveacutee)axset_ylim([-01 11])axplot([-5 -5] [-01 11] r)axplot([5 5] [-01 11] r)axlegend(loc=2)pltshow()

62 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Apregraves deux couches de fonctions de transferts le gradient est souvent diminueacute On appelle ce pheacutenomegravene le Vanishinggradient problem40 Crsquoest drsquoautant plus probable que le reacuteseau est gros Quelques pistes pour y remeacutedier RecurrentNeural Networks Tutorial Part 3 ndash Backpropagation Through Time and Vanishing Gradients41 Why are deep neuralnetworks hard to train42 Lrsquoarticle Deep Residual Learning for Image Recognition43 preacutesente une structure de reacuteseauqui va dnas le mecircme sens De la mecircme maniegravere la norme du gradient peut exploser plus particuliegraverement dans le casdes reacuteseaux de neurones reacutecurrents44 Understanding the exploding gradient problem45

Seacutelection de connexions

Ce paragraphe preacutesente un algorithme de seacutelection de lrsquoarchitecture drsquoun reacuteseau de neurones proposeacute par Cottrel et Aldans [Cottrel1995] La meacutethode est applicable agrave tout reacuteseau de neurones mais nrsquoa eacuteteacute deacutemontreacutee que pour la classe dereacuteseau de neurones utiliseacutee pour la reacutegression (page 28) Les proprieacuteteacutes qui suivent ne sont vraies que des reacuteseaux agrave unecouche cacheacutee et dont les sorties sont lineacuteaires Soit (Xk Yk) un exemple de la base drsquoapprentissage les reacutesidus de lareacutegression sont supposeacutes normaux et iid Lrsquoerreur est donc (voir Formulation du problegraveme de la reacutegression (page 34)) e (WXk Yk) = (f (WXk)minus Yk)

2On peut estimer la loi asymptotique des coefficients du reacuteseau de neurones Des connexions ayant un rocircle peu importantpeuvent alors ecirctre supprimeacutees sans nuire agrave lrsquoapprentissage en testant la nulliteacute du coefficient associeacute On note W lespoids trouveacutes par apprentissage et

lowastW les poids optimaux On deacutefinit

la suite εk = f(W Xk

)minus Yk σ

2N =

1

N

Nsumk=1

εk2

la matrice ΣN =1

N

[nabla

We (WXk Yk)

] [nabla

We (WXk Yk)

]prime

Theacuteoregraveme T1 loi asymptotique des coefficientsSoit f un reacuteseau de neurone deacutefini par perceptron (page 27) composeacute de

bull une couche drsquoentreacuteesbull une couche cacheacutee dont les fonctions de transfert sont sigmoiumldesbull une couche de sortie dont les fonctions de transfert sont lineacuteaires

Ce reacuteseau sert de modegravele pour la fonction f dans le problegraveme de reacutegression (page 28) avec un eacutechantillon((X1 Y1) (XN YN )) les reacutesidus sont supposeacutes normaux La suite (ϵk) deacutefinie par (218) veacuterifie

1

N

Nsumi=1

ϵk = 0 = E[f(W X

)minus Y

]Et le vecteur aleacuteatoire W minusW lowast veacuterifie

radicN[W minusW lowast

]Trarr+infinminusrarr N

(0 σN

2ΣN

)Ougrave la matrice ΣN est deacutefinie par (218)endxtheorem

40 httpsenwikipediaorgwikiVanishing_gradient_problem41 httpwwwwildmlcom201510recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients42 httpneuralnetworksanddeeplearningcomchap5html43 httparxivorgpdf151203385v1pdf44 httpsenwikipediaorgwikiRecurrent_neural_network45 httparxivorgpdf12115063v1pdf

21 Reacuteseaux de neurones 63

Machine Learning Statistiques et Programmation Version 035930

Figure F2 Reacuteseau de neurones pour lequel la seacutelection de connexions srsquoapplique

La deacutemonstration de ce theacuteoregraveme est donneacutee par lrsquoarticle [Cottrel1995] Ce theacuteoregraveme megravene au corollaire suivant

Corollaire C1 nulliteacute drsquoun coefficientLes notations utiliseacutees sont celles du theacuteoregraveme sur loi asymptotique des coefficients (page 63) Soit wk un poids dureacuteseau de neurones drsquoindice quelconque k Sa valeur estimeacutee est wk sa valeur optimale wlowast

k Drsquoapregraves le theacuteoregraveme

N(wk minus wlowast

k)2

σN2(ΣN

minus1)kk

Trarr+infinminusrarr χ21

Ce reacutesultat permet agrave partir drsquoun reacuteseau de neurones de supprimer les connexions pour lesquelles lrsquohypothegravese denulliteacute nrsquoest pas reacutefuteacutee Afin drsquoaboutir agrave lrsquoarchitecture minimale adapteacutee au problegraveme Cottrel et Al proposent dans[Cottrel1995] lrsquoalgorithme suivant

Theacuteoregraveme T2 seacutelection drsquoarchitectureLes notations utiliseacutees sont celles du theacuteoregraveme loi asymptotique des coefficients (page 63) f est un reacuteseau de neuronesde paramegravetres W On deacutefinit la constante τ en geacuteneacuteral τ = 3 84 puisque P (X lt τ) = 0 95 si X sim χ2

1

64 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

InitialisationUne architecture est choisie pour le reacuteseau de neurones f incluant un nombre M de paramegravetresApprentissage

Le reacuteseau de neurones f est appris On calcule les nombre et matrice σN2 et ΣN La base drsquoapprentissage contient N

exemplesTest

for k in 1M

tk larrminus Nwk

2

σN2(ΣN

minus1)kk

Seacutelection

kprime larrminus argmink

tk

si tkprime lt τ

Le modegravele obtenu est supposeacute ecirctre le modegravele optimal Lrsquoalgorithme srsquoarrecirctesinon

La connexion kprime est supprimeacutee ou le poids wkprime est maintenue agrave zeacuteroM larrminusM minus 1

Retour agrave lrsquoapprentissage

Cet algorithme est sensible au minimum local trouveacute lors de lrsquoapprentissage il est preacutefeacuterable drsquoutiliser des meacutethodesdu second ordre afin drsquoassurer une meilleure convergence du reacuteseau de neuronesLrsquoeacutetape de seacutelection ne supprime qursquoune seule connexion Comme lrsquoapprentissage est coucircteux en calcul il peut ecirctreinteacuteressant de supprimer toutes les connexions k qui veacuterifient tk lt τ Il est toutefois conseilleacute de ne pas enlever trop deconnexions simultaneacutement puisque la suppression drsquoune connexion nulle peut reacutehausser le test drsquoune autre connexionnulle agrave cette mecircme iteacuteration mais non nulle agrave lrsquoiteacuteration suivante Dans lrsquoarticle [Cottrel1995] les auteurs validentleur algorithme dans le cas drsquoune reacutegression gracircce agrave lrsquoalgorithme suivant

Algorithme A1 validation de lrsquoalgorithme de seacutelection des coefficientsChoix aleacuteatoire drsquoun modegraveleUn reacuteseau de neurones est choisi aleacuteatoirement soit f Rp rarr R la fonction qursquoil repreacutesente Une base drsquoapprentissageA (ou eacutechantillon) de N observations est geacuteneacutereacutee aleacuteatoirement agrave partir de ce modegravele

soit (ϵi)1⩽i⩽N un bruit blancA =

(Xi Yi)1⩽i⩽N

∣∣∣ foralli isin 1 middot middot middot N Yi = f (Xi) + ϵi

Choix aleacuteatoire drsquoun modegraveleLrsquoalgorithme de seacutelection (page 64) agrave un reacuteseau de neurones plus riche que le modegravele choisi dans lrsquoeacutetape drsquoinitilisationLe modegravele seacutelectionneacute est noteacute g

ValidationSi ∥f minus g∥ asymp 0

lrsquoalgorithme de seacutelection (page 64) est valideacute

21 Reacuteseaux de neurones 65

Machine Learning Statistiques et Programmation Version 035930

219 Analyse en composantes principales (ACP) et Auto Encoders

bull Problegraveme de lrsquoanalyse en composantes principales (page 67)bull Reacutesolution drsquoune ACP avec un reacuteseau de neurones diabolo (page 67)bull Calcul de valeurs propres et de vecteurs propres (page 70)bull Analyse en Composantes Principales (ACP) (page 71)

Cet algorithme est proposeacute dans [Song1997] Autrefois reacuteseau diabolo le terme auto-encoder46 est plus utiliseacute depuislrsquoaveacutenement du deep learning Il srsquoagit de compresser avec perte un ensemble de points LiquestACP47 est une forme decompression lineacuteaire puisqursquoon cherche agrave preacuteserver lrsquoinformation en projetant un nuage de points de faccedilon agrave maximiserlrsquoinertie du nuage Les auto-encoders fonctionnent sur le mecircme principe avec des modegraveles non lineacuteairessubsectionPrincipeLrsquoalgorithme impleacutementant lrsquoanalyse en composantes principales est baseacute sur un reacuteseau lineacuteaire dit ńădiaboloă cereacuteseau possegravede une couche drsquoentreacutees agrave N entreacutees une couche cacheacutee et une couche de sortie agrave N sorties Lrsquoobjectif estdrsquoapprendre la fonction identiteacute sur lrsquoespace RN Ce ne sont plus les sorties qui nous inteacuteressent mais la couche cacheacuteeintermeacutediaire qui effectue une compression ou projection des vecteurs drsquoentreacutees puisque les entreacutees et les sorties dureacuteseau auront pour but drsquoecirctre identiques

Figure F1 Principe de la compression par un reacuteseau diabolo

vecteurX isin RN

vecteurY isin RM

et M lt N

vecteurZ asymp X

premiegravere couche du reacuteseaudiabolo projection (oucompression)

seconde couche du reacuteseaudiabolo reconstitution(ou deacutecompression)

R R

La figure suivante illustre un exemple de compression de vecteur de R3 dans R2

Figure F2 Reacuteseau diabolo reacuteduction drsquoune dimensionx1

x2

x3

z11

z12

z21

z22

z23

Ce reacuteseau possegravede 3 entreacuteeset 3 sorties Minimiser lrsquoerreur

sumNk=1 E (Xk Xk) revient agrave compresser un vecteur de dimension 3 en un vecteur de

dimension 2 Les coefficients de la premiegravere couche du reacuteseau de neurones permettent de compresser les donneacutees Lescoefficients de la seconde couche permettent de les deacutecompresser

La compression et deacutecompression ne sont pas inverses lrsquoune de lrsquoautre agrave moins que lrsquoerreur (219) soit nulle Ladeacutecompression srsquoeffectue donc avec des pertes drsquoinformation Lrsquoenjeu de lrsquoACP est de trouver un bon compromis entrele nombre de coefficients et la perte drsquoinformation tocircleacutereacutee Dans le cas de lrsquoACP la compression est ńălineacuteaireă crsquoestune projection

46 httpsenwikipediaorgwikiAutoencoder47 httpsfrwikipediaorgwikiAnalyse_en_composantes_principales

66 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Problegraveme de lrsquoanalyse en composantes principales

Lrsquoanalyse en composantes principales ou ACP est deacutefinie de la maniegravere suivante

Problegraveme P1 analyse en composantes principales (ACP)Soit (Xi)1⩽i⩽N avec foralli isin 1 N Xi isin Rp Soit W isinMpd (R) W = (C1 Cd) ougrave les vecteurs (Ci) sontles colonnes de W et d lt p On suppose eacutegalement que les (Ci) forment une base othonormeacutee Par conseacutequent

W primeW = Id

(W primeXi)1⩽i⩽N est lrsquoensemble des vecteurs (Xi) projeteacutes sur le sous-espace vectoriel engendreacute par les vecteurs (Ci)Reacutealiser une analyse en composantes principales crsquoest trouver le meilleur plan de projection pour les vecteurs (Xi)celui qui maximise lrsquoinertie de ce nuage de points crsquoest donc trouver W lowast tel que

W lowast = argmaxWisinMpd(R)W primeW=Id

E (W ) = argmaxWisinMpd(R)W primeW=Id

[Nsumi=1

∥W primeXi∥2

]

Le termeE (W ) est lrsquoinertie du nuage de points (Xi) projeteacute sur le sous-espace vectoriel deacutefini par les vecteurs colonnesde la matrice W

Reacutesolution drsquoune ACP avec un reacuteseau de neurones diabolo

Un theacuteoregraveme est neacutecessaire avant de construire le reacuteseau de neurones menant agrave la reacutesolution du problegraveme de liquestACP(page 67) afin de passer drsquoune optimisation sous contrainte agrave une optimisation sans contrainte

Theacuteoregraveme T1 reacutesolution de lrsquoACPLes notations utiliseacutees sont celles du problegraveme de liquestACP (page 67) Dans ce cas

S = argmaxWisinMpd(R)W primeW=Id

[Nsumi=1

∥W primeXi∥2

]= argmin

WisinMpd(R)

[Nsumi=1

∥WW primeXi minusXi∥2

]

De plus S est lrsquoespace vectoriel engendreacute par les d vecteurs propres de la matrice XX prime =sumN

i=1 XiXprimei associeacutees aux

d valeurs propres de plus grand module

DeacutemonstrationPartie 1Lrsquoobjectif de cette partie est de chercher la valeur de

maxWisinMpd(R)W primeW=Id

E (W )

Soit X = (X1 XN ) isin (Rp)N alors

E (W ) =

Nsumi=1

∥W primeXi∥2= tr (X primeWW primeX) = tr (XX primeWW prime)

La matrice XX prime est symeacutetrique elle est donc diagonalisable et il existe une matrice P isinMp (R) math telle qu

P primeXX primeP = DX avec DX diagonaleP primeP = Ip

(211)

21 Reacuteseaux de neurones 67

Machine Learning Statistiques et Programmation Version 035930

Soit P = (P1 Pp) les vecteurs propres de la matrice XX prime associeacutes aux valeurs propres (λ1 λp) telles que|λ1| ⩾ ⩾ |λp| Pour meacutemoire W = (C1 Cd) et on a

foralli isin 1 p XX primePi = λiPi

foralli isin 1 d Ci = Pi =rArr XX primeWW prime = DXd =

λ1 0 00 00 0 λd

Drsquoougrave

E (W ) = tr (XX primeWW prime) = tr (PDXP primeWW prime) = tr (DXP primeWW primeP )

Donc

maxWisinMpd(R)W primeW=Id

E (W ) = maxWisinMpd(R)W primeW=Id

tr (DXP primeWW primeP ) = maxY isinMpd(R)Y primeY=Id

tr (DXY Y prime) =sumi=1

dλi

Partie 2Soit Y isin max

WisinMpd(R)W primeW=Id

tr (X primeWW primeX) Y = (Y1 Yd) =(yki)1⩽i⩽d1⩽k⩽p

Chaque vecteur Yi est eacutecrit dans la base (P1 Pp) deacutefinie en (211)

foralli isin 1 d Yi =

psumk=1

yki Pp

Comme Y primeY = Id les vecteurs (Y1 Yd) sont orthogonaux deux agrave deux et normeacutes ils veacuterifient donc foralli isin 1 d

sumpk=1

(yki)2

= 1

forall (i j) isin 1 d2 sump

k=1 yki y

kj = 0

De plus

XX primeY Y prime = XX prime

(dsum

i=1

YiYprimei

)=

dsumi=1

XX primeYiYprimei

On en deacuteduit que

foralli isin 1 d XX primeYiYprimei = XX prime

(psum

k=1

yki Pk

)(psum

k=1

yki Pk

)prime

=

(psum

k=1

λkyki Pk

)(psum

k=1

yki Pk

)prime

Drsquoougrave

foralli isin 1 d tr (XX primeYiYprimei ) =

psumk=1

λk

(yki)2

Et

tr (XX primeY Y prime) =

dsumi=1

psumk=1

λk

(yki)2

tr (XX primeY Y prime) =

psumk=1

λk

(dsum

i=1

(yki)2)

=

psumk=1

λk

68 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Ceci permet drsquoaffirmer que

Y isin maxWisinMpd(R)W primeW=Id

tr (X primeWW primeX) =rArr vect (Y1 Yd) = vect (P1 Pd)

Les eacutequations (219) et (219) deacutemontrent la seconde partie du theacuteoregravemePartie 3

nsumi=1

∥WW primeXi minusXi∥2

=

nsumi=1

∥(WW prime minus IN )Xi∥2

= tr(X prime (WW prime minus Ip)

2X)

= tr(XX prime

((WW prime)

2 minus 2WW prime + Ip

))= tr (XX prime (WW primeWW prime minus 2WW prime + Ip))

= tr (XX prime (minusWW prime + Ip))

= minustr (XX primeWW prime) + tr (XX prime)

Drsquoougrave

maxWisinMpd(R)W primeW=Id

(Nsumi=1

∥W primeXi∥2

)= min

WisinMpd(R)W primeW=Id

(Nsumi=1

∥WW primeXi minusXi∥2

)

Partie 4XX prime est une matrice symeacutetrique elle est donc diagonalisable

existP isin GLN (R) telle que P primeXX primeP = Dp ougrave Dp est diagonale

On en deacuteduit que

Nsumi=1

∥WW primeXi minusXi∥2

= tr(XX prime (WW prime minus Ip)

2)

= tr(PP primeXX primePP prime (WW prime minus Ip)

2)

= tr(PDpP

prime (WW prime minus Ip)2)

= tr(Dp (P

primeWW primeP minus Ip)2)

= tr(Dp (Y Y prime minus Ip)

2)

avec Y = P primeW

Drsquoougrave

argminY

tr(Dp (Y Y prime minus Ip)

2)

= Y isinMNd (R) |Y Y prime = Id

Finalement lrsquoeacutequation (219) permet de deacutemontrer la premiegravere partie du theacuteoregraveme agrave savoir (219)

S = argmaxWisinMpd(R)W primeW=Id

[Nsumi=1

∥W primeXi∥2

]= argmin

WisinMpd(R)

[Nsumi=1

∥WW primeXi minusXi∥2

]

21 Reacuteseaux de neurones 69

Machine Learning Statistiques et Programmation Version 035930

Calcul de valeurs propres et de vecteurs propres

Le calcul des valeurs propres et des vecteurs propres drsquoune matrice fait intervenir un reacuteseau diabolo composeacute drsquouneseule couche cacheacutee et drsquoune couche de sortie avec des fonctions de transfert lineacuteaires On note sous forme de matrice(W ) les coefficients de la seconde couche du reacuteseau dont les biais sont nuls On note d le nombre de neurones sur lacouche cacheacutee et p le nombre drsquoentreacutees

foralli isin 1 d y1i =psum

j=1

wjixj

Soit X isin Rp les entreacutees Y = (y11 y1d) isin Rd on obtient que Y = W primeX Les poids de la seconde couche sont deacutefinis comme suit

forall (i j) isin 1 p times 1 d w2ji = w1ij

Par conseacutequent le vecteur des sorties Z isin Rp du reacuteseau ainsi construit est Z = WW primeX On veut minimiser lrsquoerreurpour (Xi)1⩽i⩽N

E =

Nsumi=1

∥WW primeXi minusXi∥2

Il suffit drsquoapprendre le reacuteseau de neurones pour obtenir

W lowastd = argmax

WisinMpd(R)

Nsumi=1

∥WW primeXi minusXi∥2

Drsquoapregraves ce qui preacutecegravede lrsquoespace engendreacute par les vecteurs colonnes de W est lrsquoespace engendreacute par les k premiersvecteurs propres de la matrice XX prime = (X1 XP ) (X1 XP )

prime associeacutes aux k premiegraveres valeurs propres classeacuteespar ordre deacutecroissant de moduleOn en deacuteduit que W lowast

1 est le vecteur propre de la matrice M associeacutee agrave la valeur propre de plus grand module W lowast2

est lrsquoespace engendreacute par les deux premiers vecteurs Gracircce agrave une orthonormalisation de Schmidt48 On en deacuteduit agravepartir de W lowast

1 et W lowast2 les deux premiers vecteurs propres Par reacutecurrence on trouve lrsquoensemble des vecteurs propres de

la matrice XX prime

Deacutefinition D1 orthonormalisation de SchmidtLrsquoorthonormalisation de Shmidt Soit (ei)1⩽i⩽N une base de Rp

On deacutefinit la famille (εi)1⩽i⩽p par

ε1 =e1∥e1∥

foralli isin 1 middot middot middot p εi =

ei minusiminus1sumj=1

lt ei εj gt εj∥∥∥∥∥ei minus iminus1sumj=1

lt ei εj gt εj

∥∥∥∥∥On veacuterifie que le deacutenominateur nrsquoest jamais nul ei minus

iminus1sumj=1

lt ei εj gt εj = 0 car forallk isin 1 N vect (e1 ek) =

vect (ε1 εk)

48 httpsfrwikipediaorgwikiAlgorithme_de_Gram-Schmidt

70 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Proprieacuteteacute P1 base orthonormeacuteeLa famille (εi)1⩽i⩽p est une base orthonormeacutee de Rp

Lrsquoalgorithme qui permet de deacuteterminer les vecteurs propres de la matrice XX prime deacutefinie par le theacuteoregraveme de liquestACP(page 67) est le suivant

Algorithme A1 vecteurs propresLes notations utiliseacutees sont celles du theacuteoregraveme de liquestACP (page 67) On note V lowast

d la matrice des d vecteurs propres dela matrice XX prime associeacutes aux d valeurs propres de plus grands module

for d pUn reacuteseau diabolo est construit avec les poids Wd isinMpd (R) puis apprisLe reacutesultat de cet apprentissage sont les poids W lowast

d if d gt 1

Lrsquoorthonormalisation de Schmit permet de deacuteduire V lowastd de V lowast

dminus1 et W lowastd

elseV lowastd = W lowast

d

Analyse en Composantes Principales (ACP)

Lrsquoanalyse en composantes principales permet drsquoanalyser une liste drsquoindividus deacutecrits par des variables Commeexemple il suffit de prendre les informations extraites du recensement de la population franccedilaise qui permet de deacutecrirechaque habitant par des variables telles que la cateacutegorie socio-professionnelle la salaire ou le niveau drsquoeacutetude Soit(X1 XN ) un ensemble de N individus deacutecrits par p variables

foralli isin 1 N Xi isin Rp

LrsquoACP consiste agrave projeter ce nuage de point sur un plan qui conserve le maximum drsquoinformation Par conseacutequent ilsrsquoagit de reacutesoudre le problegraveme

W lowast = argminWisinMpd(R)W primeW=Id

(Nsumi=1

∥W primeXi∥2

)avec d lt N

Ce problegraveme a eacuteteacute reacutesolu dans les paragraphes Problegraveme de lrsquoanalyse en composantes principales (page 67) et Calculde valeurs propres et de vecteurs propres (page 70) il suffit drsquoappliquer lrsquoalgorithme vecteurs propres (page 71)Soit (Xi)1⩽i⩽N avec foralli isin 1 N Xi isin Rp Soit (P1 Pp) lrsquoensemble des vecteurs propres normeacutes de lamatrice XX prime associeacutes aux valeurs propres (λ1 λp) classeacutees par ordre deacutecroissant de modules On deacutefinit foralld isin1 middot middot middot p Wd = (P1 Pd) isinMpd On deacutefinit alors lrsquoinertie Id du nuage de points projeteacute sur lrsquoespace vectorieldeacutefini par Pd On suppose que le nuage de points est centreacute alors

foralld isin 1 middot middot middot p Id =

Nsumk=1

(P primedXk)

2= tr (X primePdP

primedX) = tr (XX primePdP

primed) = λd

Comme (P1 Pp) est une base orthonormeacutee de Rp on en deacuteduit que

I =

Psumk=1

X primekXk =

Nsumd=1

Id =

psumd=1

λd

21 Reacuteseaux de neurones 71

Machine Learning Statistiques et Programmation Version 035930

De maniegravere empirique on observe freacutequemment que la courbe (d Id)1⩽d⩽p montre un point drsquoinflexion (voir figureci-dessous) Dans cet exemple le point drsquoinflexion correspond agrave d = 4 En analyse des donneacutees on considegravereempiriquement que seuls les quatres premiegraveres dimensions contiennent de lrsquoinformation

Figure F3 Courbe drsquoinertie pour lrsquoACP

Courbe drsquoinertie point drsquoinflexion pour d = 4 lrsquoexpeacuterience montre que geacuteneacuteralement seules les projections sur unou plusieurs des quatre premiers vecteurs propres reflegravetera lrsquoinformation contenue par le nuage de points

2110 Bibliographie

22 Classification agrave lrsquoaide des plus proches voisins

La figure suivante repreacutesente un problegraveme de classification classique On dispose drsquoun nuage de points reacuteparti en deuxclasses Un nouveau point semblable aux preacuteceacutedents se preacutesente sa classe est inconnue Lrsquoobjectif est de lui attribuerune classe en utilisant le fait qursquoon connaicirct la classe drsquoappartenance des autres points

72 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

A partir drsquoun nuage de points pour lesquels la classe drsquoappartenance est connue comment classer un nouveau pointpour lequel cette classe est inconnue Une meacutethode simple consiste agrave attribuer agrave ce nouveau point la mecircme classe que leplus proche des points appartenant au nuage initial Crsquoest la meacutethode des plus proches voisins (ou nearest neighbours49)Elle est facile agrave impleacutementer mais peu utiliseacutee car souvent tregraves gourmande en temps de calcul lorsque le nuage de pointsest conseacutequent Le premier paragraphe deacutecrit cette meacutethode les suivants cherchent agrave acceacuteleacuterer lrsquoalgorithme selon quele nuage de points appartient agrave un espace vectoriel ou non La derniegravere partie preacutesente lrsquoalgorithme LAESA pour le casougrave le nuage de points appartient agrave un espace meacutetrique quelconque

221 Principe

Cette meacutethode est la plus simple puisqursquoelle consiste agrave associer agrave x lrsquoeacuteleacutement agrave classer le label c (xilowast) de lrsquoeacuteleacutement leplus proche xilowast dans lrsquoensemble (x1 xN ) Ceci megravene agrave lrsquoalgorithme de classification suivant

Algorithme A1 1-PPV ou plus proche voisinSoit X = (x1 xN ) sub E un ensemble drsquoeacuteleacutements drsquoun espace meacutetrique quelconque soit (c (x1) c (xN )) lesclasses associeacutees agrave chacun des eacuteleacutements de X On note d la distance deacutefinie sur lrsquoespace meacutetrique E Soit x un eacuteleacutementagrave classer on cherche agrave deacuteterminer la classe c(x) associeacutee agrave x On deacutefinit xilowast comme eacutetant

xilowast = argminiisin1middotmiddotmiddot N

d (xi x)

Alors c(x) = c (xlowasti )

Cet algorithme est souvent appeleacute 1-PPV (ou 1-NN pour Nearest Neighbors) Il existe une version ameacutelioreacutee k-PPVqui consiste agrave attribuer agrave x la classe la plus repreacutesenteacutee parmi ses k plus proches voisins

Algorithme A2 k-PPV ou k-plus proches voisinsSoit X = (x1 xN ) sub E un ensemble drsquoeacuteleacutements drsquoun espace meacutetrique quelconque soit (c (x1) c (xN ))les classes associeacutees agrave chacun des eacuteleacutements de X On note d la distance deacutefinie sur lrsquoespace meacutetrique E ω (x y)est une fonction strictement positive mesurant la ressemblance entre x et y Soit x un eacuteleacutement agrave classer on cherche agravedeacuteterminer la classe c(x) associeacutee agrave x On deacutefinit lrsquoensemble Slowast

k incluant les k-plus proches voisins de x cet ensembleveacuterifie

cardSlowastk = 0 et max

yisinSlowastk

d (y x) ⩽ minyisinXminusSlowast

k

d (y x)

49 httpsenwikipediaorgwikiK-nearest_neighbors_algorithm

22 Classification agrave lrsquoaide des plus proches voisins 73

Machine Learning Statistiques et Programmation Version 035930

On calcule les occurrences f(i) de chaque classe i dans lrsquoensemble Slowastk

f(i) =sumyisinSlowast

k

ω (x y) 11c(y)=i (212)

On assigne alors agrave x la classe math`c(x)$ choisie dans lrsquoensemble

c(x) isin argmaxiisinN

f(i)

Dans sa version la plus simple la fonction ω (x y) utiliseacutee lors du calcul de la contribution f (212) est constante Maisil est possible de lui affecter une valeur tenant compte de la proximiteacute entre x et y La table suivante donne quelquesexemples de contributions possiblesExemple de contribution w (x y) pour lrsquoalgorithme des k-ppv (page 73) Ces fonctions sont toutes deacutecroissantes(strictement ou non) par rapport agrave la distance d Lrsquoinconveacutenient majeur de la meacutethode des plus proches voisins estsa longueur puisqursquoelle implique le calcul des distances entre x et chacun des eacuteleacutements de lrsquoensemble (x1 xN )Crsquoest pourquoi de nombreuses meacutethodes drsquooptimisation ont eacuteteacute deacuteveloppeacutees afin drsquoacceacuteleacuterer ce processus Les deuxpremiers paragraphes traitent le cas ougrave les points xi appartiennent agrave un espace vectoriel et ont donc des coordonneacuteesLes suivant traitent le cas ougrave les points xi nrsquoont pas de coordonneacutees et appartiennent agrave un espace meacutetrique quelconque

222 B+ tree

Ce premier algorithme B+ tree50 srsquoapplique dans le cas reacuteel afin drsquoordonner des nombres dans un arbre de sorte quechaque noeud ait un pegravere et pas plus de n fils

Deacutefinition D1 B+ treeSoit Bn un B+ tree51 soit N un noeud de Bn il contient un vecteur V (N) = (x1 xt) avec 0 ⩽ t ⩽ n etx1 lt lt xt Ce noeud contient aussi exactement t minus 1 noeuds fils noteacutes (N1 Ntminus1) On deacutesigne par D (Nt)

50 httpsenwikipediaorgwikiB2B_tree51 httpsenwikipediaorgwikiB2B_tree

74 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

lrsquoensemble des descendants du noeud Nt et G (Nt) = V (M) |M isin D (Nt) Le noeud N veacuterifie

forallx isin G (Nt) xt ⩽ x lt xt+1

avec par convention x0 = minusinfin et xt+1 = +infin

Cet arbre permet de trier une liste de nombres crsquoest une geacuteneacuteralisation du tri quicksort52 pour lequel n = 2 Commepour le tri quicksort lrsquoarbre est construit agrave partir drsquoune seacuterie drsquoinsertions et de cet ordre deacutepend la rapiditeacute du triLrsquoespeacuterance du coucirct (moyenne sur tous les permutations possibles de k eacuteleacutements) le coucirct de lrsquoalgorithme est enO (k logn k)

223 R-tree ou Rectangular Tree

Lrsquoarbre R-tree53 est lrsquoadaptation du meacutecanisme du B+ tree54 au cas multidimensionnel (voir [Guttman1984]) Laconstruction de cet arbre peut se faire de maniegravere globale - construction de lrsquoarbre sachant lrsquoensemble de points agraveclasser - ou de maniegravere progressive - insertion des points dans lrsquoarbre les uns agrave la suite des autres - Toutefois cesmeacutethodes sont resteintes agrave des espaces vectorielsIl nrsquoexiste pas une seule maniegravere de construire un R-tree55 les noeuds de ces arbres suivent toujours la contrainte desB+ tree56 qui est drsquoavoir un pegravere et au plus n fils Les R-tree57 ont la mecircme structure que les B+ tree58 ocircteacutee de leurscontraintes drsquoordonnancement des fils De plus ces arbres organisent spatialement des rectangles ou boicirctes en plusieursdimensions comme le suggegravere la figure preacuteceacutedente Les boicirctes agrave organiser seront nommeacutes les objets ces objets sontensuite regroupeacutes dans des boicirctes englobantes Un noeud n drsquoun R-tree59 est donc soit une feuille auquel cas la boicircteqursquoil deacutesigne est un objet dans ce cas il nrsquoa aucun fils soit le noeud deacutesigne une boicircte englobante B (n) On deacutesignepar B lrsquoensemble des boicirctes drsquoun espace vectoriel quelconque et v (b) deacutesigne son volume Pour un noeud n non feuilleA (n) deacutesigne lrsquoensemble des descendants de ce noeud B (n) est deacutefini par

B (n) = argmin v (b) |b isin B et forallnprime isin A (nprime) B (nprime) sub B (n)

La recherche dans un R-tree60 consiste agrave trouver tous les objets ayant une intersection avec une autre boicircte ou fenecirctreW soit lrsquoensemble L

L = B (n) |B (n) est un objet et B (n) capW = empty

Cet ensemble est construit gracircce agrave lrsquoalgorithme suivant

Algorithme A3 recherche dans un R-treeLes notations sont celles utiliseacutees dans ce paragraphe On deacutesigne par r le noeud racine drsquoun R-tree61 Soit n un noeudon deacutesigne par F (n) lrsquoensemble des fils de ce noeud

initialisation

Llarrminus 0 | N larrminus r

iteacuteration52 httpsfrwikipediaorgwikiTri_rapide53 httpsenwikipediaorgwikiR-tree54 httpsenwikipediaorgwikiB2B_tree55 httpsenwikipediaorgwikiR-tree56 httpsenwikipediaorgwikiB2B_tree57 httpsenwikipediaorgwikiR-tree58 httpsenwikipediaorgwikiB2B_tree59 httpsenwikipediaorgwikiR-tree60 httpsenwikipediaorgwikiR-tree61 httpsenwikipediaorgwikiR-tree

22 Classification agrave lrsquoaide des plus proches voisins 75

Machine Learning Statistiques et Programmation Version 035930

while N = empty

for n in 1N

if W capB (n) = emptyN larrminus N cup F (n)

if B (n) est un objetLlarrminus B (n)

L est lrsquoensemble chercheacute

Il reste agrave construire le R-tree62 opeacuteration effectueacutee par la reacutepeacutetition successive de lrsquoalgorithme suivant permettantdrsquoinseacuterer un objet dans un R-tree63

Algorithme A4 insertion drsquoun objet dans un R-treeLes notations utiliseacutees sont les mecircmes que celles de lrsquoalgorithme de recherche (page 75) On cherche agrave inseacuterer lrsquoobjectE deacutesigneacute par son noeud feuille e On suppose que lrsquoarbre contient au moins un noeud sa racine r On deacutesigneeacutegalement par p (n) le pegravere du noeud n Chaque noeud ne peut contenir plus de s fils On deacutesigne par vlowast (G) =min P |P isin B et cupgisinG B (g) sub Pseacutelection du noeud drsquoinsertion

nlowast larrminus r

tant que nlowast nrsquoest pas un noeud feuilleOn choisit le fils f de nlowast

qui minimise lrsquoaccroissement vf minus v (B (f))

du volume avec vf deacutefini par vf = min v (P ) |P isin B et B (f) cupB (e) sub Pnlowast larrminus f

ajout du noeudSi p (nlowast) a moins de s fils alors le noeud e devient le fils de p (nlowast) etB (p (nlowast)) est mis agrave jour drsquoapregraves lrsquoeacutetape preacuteceacutedenteLrsquoinsertion est termineacutee Dans le cas contraire on seacutepare deacutecoupe le noeud p (nlowast) en deux gracircce agrave lrsquoeacutetape suivantedeacutecoupage des noeudsLrsquoobjectif est de diviser le groupe G composeacute de s+ 1 noeuds en deux groupes G1 et G1 Tout drsquoabord on cherche lecouple (n1 n2) qui minimise le critegravere d = vlowast (n1 n2) minus v (B (n1)) minus v (B (n2)) alors G1 larrminus n1 G2 larrminus n2

et Glarrminus GminusG1 cupG2

tant que G = emptyOn choisit un noeud n isin G on deacutetermine ilowast

tel que math`vpaaccn cup G_i - vpaG_i$ soit minimalGlarrminus Gminus nGilowast larrminus Gilowast cup n

62 httpsenwikipediaorgwikiR-tree63 httpsenwikipediaorgwikiR-tree

76 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Si la recherche est identique quel que soit lrsquoarbre construit chaque variante de la construction de lrsquoarbre tente deminimiser les intersections des boicirctes et leur couverture Plus preacuteciseacutement lrsquoeacutetape qui permet de deacutecouper lesnoeuds est conccedilue de maniegravere agrave obtenir des boicirctes englobantes de volume minimale etou drsquointersection minimaleavec drsquoautres boicirctes englobantes Lrsquoalgorithme R+~Tree (voir [Sellis1987]) essaye de minimiser les intersectionsentre boicirctes et les objets agrave organiser sont supposeacutes nrsquoavoir aucune intersection commune La variante R tree64 (voir[Beckmann1990]) effectue un compromis entre lrsquointersection et la couverture des boicirctes englobantes LrsquoalgorithmeX-tree65 (voir [Berchtold1996]) conserve lrsquohistorique de la construction de lrsquoarbre ce qui lui permet de mieux eacuteviterles intersections communes entre boicirctes Ces techniques appartiennent agrave une classe plus larges drsquoalgorithmes de typeBranch and Bound66

224 LAESA

Cet algorithme permet de chercher les plus proches voisins dans un ensemble inclus dans un espace meacutetriquequelconque Il srsquoappuie sur lrsquoineacutegaliteacute triangulaire Lrsquoalgorithme LAESA67 ou Linear Approximating EliminatingSearch Algorithm (voir [Rico-Juan2003]) consiste agrave eacuteviter un trop grand nombre de calculs de distances en se servantde distances deacutejagrave calculeacutees entre les eacuteleacutements de E et un sous-ensemble B inclus dans E contenant des pivots Laseacutelection des pivots peut ecirctre aleacuteatoire ou plus eacutelaboreacutee comme celle effectueacutee par lrsquoalgorithme qui suit deacutecrit danslrsquoarticle [Moreno2003]

Algorithme A5 LAESA seacutelection des pivotsSoit E = y1 yN un ensemble de points on cherche agrave deacuteterminer un sous-ensemble de pivots B =p1 pP sub Einitialisation

B larrminus y isin E choisi arbitrairement

calcul de la fonction g

for y in E minusB

g (y)larrminus 0

for p in B

g (y)larrminus g (y) + d (y p)

mise agrave jour de B

Trouver plowast isin argmax g (p) |p isin E minusBB larrminus B cup plowastSi cardB lt P retour agrave lrsquoeacutetape preacuteceacutedente sinon fin

Lrsquoalgorithme LAESA68 utilise les pivots pour diminuer le nombre de calculs en utilisant lrsquoineacutegaliteacute triangulaire Parexemple soit x un eacuteleacutement agrave classer pj un pivot yi un point du nuage On suppose qursquoon connaicirct d (x pj) d (pj yi)et dlowast la distance du point x agrave un autre point du nuage Lrsquoineacutegaliteacute triangulaire permet drsquoaffirmer que si d (x yi) ⩾

64 httpsenwikipediaorgwikiR_tree65 httpsenwikipediaorgwikiX-tree66 httpsenwikipediaorgwikiBranch_and_bound67 httpstavianatorcomaesa68 httpstavianatorcomaesa

22 Classification agrave lrsquoaide des plus proches voisins 77

Machine Learning Statistiques et Programmation Version 035930

|d (x pj)minus d (pj yi)| gt dlowast alors il nrsquoest pas neacutecessaire de calculer la distance d (x yi) pour affirmer que d (x yi) gtdlowast Lrsquoeacuteleacutement yi ne peut ecirctre lrsquoeacuteleacutement le plus proche

Algorithme A6 LAESASoit E = y1 yN un ensemble de points B = p1 pP sub E un ensemble de pivots inclus dans E Oncherche agrave deacuteterminer le voisinage V (x) de x inclus dans E veacuterifiant

forally isin V (x) d (x y) ⩽ ρ

On suppose que la matrice M = (mij)⩽i⩽P1⩽j⩽N

a eacuteteacute calculeacutee preacutealablement comme suit

forall (i j) mij = d (pi yj)

initialisation

for i in 1P

di larrminus d (x pi)

dlowast larrminus min di|1 ⩽ i ⩽ Pdlowast est la distance du point x au pivot le plus proche

recherche du plus proche eacuteleacutement

S larrminus emptyfor i in 1N

dprime larrminus max |dj minusmji|if dprime lt dlowast

dlarrminus d (x yi)

if dprime ⩽ dlowast

dlowast larrminus dprime

S larrminus yi

225 Reacutesultats theacuteoriques

Lrsquoarticle [Farago1993] deacutemontre eacutegalement qursquoil existe une majoration du nombre moyen de calcul de distances pourpeu que la mesure de lrsquoespace contenant lrsquoensemble E et lrsquoeacuteleacutement x soit connue et que lrsquoensemble B = p1 pP des pivots veacuterifie

exist (α β) isin R+lowast tels que

forall (x y) isin E2 foralli α d (x y) ⩾ |d (x pi)minus d (pi y)|forall (x y) isin E2 max

i|d (x pi)minus d (pi y)| ⩾ β d (x y)

Lrsquoalgorithme deacuteveloppeacute dans [Farago1993] permet de trouver le point de plus proche drsquoun eacuteleacutement x dans un ensemblemath`E = ensemblex_1x_N`selon lrsquoalgorithme suivant

Algorithme A7 plus proche voisin drsquoapregraves [Farago1993]_

78 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Soit E = x1 xN et B = p1 pP sub E sub X Soit x isin X un eacuteleacutement quelconque On suppose que lesvaleurs mij = d (xi pj) ont eacuteteacute preacutealablement calculeacuteesinitialisationOn calcule preacutealablement les coefficients γ (xi)

foralli isin 1 N γ (xi)larrminus maxjisin1P

|mij minus d (x pj)|

eacutelaguageOn deacutefinit t0 larrminus min

iγ (xi) Puis on construit lrsquoensemble F (x) = xi isin E|γ (xi) ⩽ α

β t0

plus proche voisinLe plus proche xlowast voisin est deacutefini par xlowast isin argmin d (x y) |y isin F (x)

Et un petit theacuteoregraveme

Theacuteoregraveme T1 [Farago1993]_ 1Les notations sont celles de lrsquoalgorithme preacuteceacutedent Il retourne le plus proche voisin xlowast de x inclus dans E Autrementdit forallx isin X xlowast isin F (x)

Theacuteoregraveme T2 [Farago1993]_ 2Les notations sont celles du mecircme algorithme On deacutefinit une mesure sur lrsquoensemble X B (x r) deacutesigne la boule decentre x et de rayon r Z isin X une variable aleacuteatoire de plus

p (x r) = PX (B (x r)) = P (Z isin B (x r))

On suppose qursquoil existe d gt 0 et une fonction f X minusrarr R tels que

limrrarr0

p (x r)

rd= f (x) gt 0

La convergence doit ecirctre uniforme et presque sucircre On note eacutegalement FN le nombre de calculs de dissimilariteacuteeffectueacutes par lrsquoalgorithme ougrave N est le nombre drsquoeacuteleacutement de E P deacutesigne toujours le nombre de pivots alors

lim supnrarrinfin

EFN ⩽ k +

β

)2d

226 Impleacutementation

La classe NuagePoints impleacutemente les nuages de points sans optimisation Il utilise la mecircme interface quesklearnneighborsNearestNeighbors69 La second classe NuagePointsLeasaltltlt

import numpyfrom mlstatpymlkppv_laesa import NuagePointsLaesa

X = numpyarray([[0 0] [3 3] [1 1]])nuage = NuagePointsLaesa(2)

(suite sur la page suivante)

69 httpsscikit-learnorgstablemodulesgeneratedneighborsNearestNeighborshtml

22 Classification agrave lrsquoaide des plus proches voisins 79

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

nuagefit(X)dist indices = nuagekneighbors(X)print(distance dist)print(indices indices)

gtgtgt

usrlocallibpython39site-packagesscipyspatialdistancepy307rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(distance [0 0 0]indices [0 1 2]

80 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

227 Bilbiographie

23 Liens entre factorisation de matrices ACP k-means

La factorisation de matrice non neacutegative70 Cette meacutethode est utiliseacutee dans le cadre de la recommandation de produitsagrave des utilisateurs Lire eacutegalement [Acara2011] [Gupta2010]

bull Factorisation de matrices et rang (page 81)bull Quelques cas simples (page 82)bull Intuition geacuteomeacutetrique (page 83)bull k-means (page 85)bull Quelques reacutesultats (page 85)bull Prolongements (page 85)

ndash Factorisation non-neacutegative (page 85)ndash Preacutediction (page 85)ndash Norme (page 86)ndash Sparsiteacute (page 86)ndash Valeurs manquantes (page 86)ndash Interpreacutetation (page 86)ndash NTF (page 86)

bull Bibliographie (page 87)

231 Factorisation de matrices et rang

La factorisation drsquoune matrice71 est un problegraveme drsquooptimisation qui consiste agrave trouver pour une matrice M isin Mpq agravecoefficients positifs ou nuls

M = WH

Ougrave W et H sont de rang k et de dimension W isin Mpk et H isin Mkq On srsquointeacuteresse ici au cas ougrave les coefficients nesont pas neacutecessairement positifs Si k lt rang(M) le produit WH ne peut ecirctre eacutegal agrave M Dans ce cas on chercherales matrices qui minimise

Problegraveme P1 Factorisation de matrices positifsSoit M isinMpq on cherche les matrices agrave coefficients positifs W isinMpk et H isinMkq qui sont solution du problegravemedrsquooptimisation

minWH

∥M minusWH∥2

= min

WH

sumij

(mij minussumk

wikhkj)2

70 httpsenwikipediaorgwikiNon-negative_matrix_factorization71 httpsenwikipediaorgwikiNon-negative_matrix_factorization

23 Liens entre factorisation de matrices ACP k-means 81

Machine Learning Statistiques et Programmation Version 035930

232 Quelques cas simples

Le notebook Valeurs manquantes et factorisation de matrices (page 346) montre la deacutecroissante de lrsquoerreur en fonctiondu rang et lrsquoimpact de la correacutelation sur cette mecircme erreur Le dernier paragraphe montre qursquoil nrsquoexiste pas de solutionunique agrave un problegraveme donneacute Lrsquoexemple suivant srsquointeacuteresse agrave une matrice 3x3 Les trois points forment un triangledans un plan

import matplotlibpyplot as pltfrom mpl_toolkitsmplot3d import Axes3Dfrom numpy import identity array

M = identity(3)W = array([[05 05 0] [0 0 1]])TH = array([[1 1 0] [00 00 10]])wh = W H

fig = pltfigure()ax = figadd_subplot(111 projection=3d)

axscatter(M[0] M[1] M[2] c=b marker=o s=600 alpha=05)axscatter(wh[0] wh[1] wh[2] c=r marker=^)pltshow()

On peut voir la matrice M comme un ensemble de n = 3 points dans un espace vectoriel La matrice W est un

82 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

ensemble de k lt n points dans le mecircme espace La matrice WH de rang k est une approximation de cet ensembledans le mecircme espace crsquoest aussi n combinaisons lineacuteaires de k points de faccedilon agrave former n points les plus prochesproches de n points de la matrice M

233 Intuition geacuteomeacutetrique

Lrsquoexemple preacuteceacutedente suggegravere une interpreacutetation geacuteomeacutetrique drsquoune factorisation de matrice Sans valeur manquantece problegraveme est eacutequivalent agrave une Analyse en Composantes Principales (ACP)72 (voir aussi [Boutsidis2008](deacutecomposition en valeurs singuliegraveres comme algorithme drsquoinitialisation) Nous allons le montrer gracircce agrave quelqueslemmes et theacuteoregravemes

Lemme L1 Rang kOn note M = (mij) W k = (wk

il) Hk = (hklj) avec 1 ⩽ i ⩽ p 1 ⩽ j ⩽ q et 1 ⩽ l ⩽ k avec k lt min(p q)

On suppose que les matrices sont solution du problegraveme drsquooptimisation minWH ∥M minusWH∥2 On suppose querang(M) ⩾ k Alors les les matrices W k et Hk sont de rang k

On procegravede par reacutecurrence Ce lemme est neacutecessairement vrai pour k = 1 car la matrice M nrsquoest pas nulle Demaniegravere eacutevidente

∥∥M minusW kminus1Hkminus1∥∥2 ⩾

∥∥M minusW kHk∥∥2 Comme rang(M) ⩾ k il existe un vecteur colonne V

de la matrice M qui ne fait pas partie de lrsquoespace vectoriel engendreacute par les k minus 1 vecteurs de la matrice W kminus1 Onconstruit la matrice Y k = [W kminus1 V ] Par construction rang(Y ) = k De mecircme on construit Gk agrave partir de Hkminus1

en remplaccedilant la derniegravere colonne et en ajoutant une ligne

Gk =

[Hkminus1[1pminus 1] 0

0 1

]Par construction le dernier vecteur est de la matrice produit est identique agrave celui de la matrice M ∥∥M minus Y kminus1Gkminus1

∥∥2 =∥∥M minusW kminus1Hkminus1

∥∥2 minussumi

(miq minus wkminus1ik hkminus1

kq )2

Nous avons fabriqueacute une matrice de rang k qui fait deacutecroicirctre lrsquoerreur du problegraveme drsquooptimisation On procegravede parlrsquoabsurde pour dire que si rang(W ) = kminus 1 on peut construire une matrice de rang k qui fait deacutecroicirctre lrsquoerreur ce quiest impossible Le lemme est donc vraiCe lemme fait eacutegalement apparaicirctre la construction de q points dans un espace vectoriel engendreacute par les k vecteurscolonnes de la matrice Wk Il est donc possible de choisir nrsquoimporte quel base W prime

k de cet espace et drsquoexprimer lesq points de WkHk avec cette nouvelle base Cela signifie qursquoon peut eacutecrire la matrice Wk dans une base Bk commeWk = BkCk et WkHk = BkCkC

minus1k Gk

Lemme L2 ProjectionOn note M = (mij) W k = (wk

il) Hk = (hklj) avec 1 ⩽ i ⩽ p 1 ⩽ j ⩽ q et 1 ⩽ l ⩽ k avec k lt min(p q)

On suppose que les matrices sont solution du problegraveme drsquooptimisation minWH ∥M minusWH∥2 On considegravere que lamatrice M est un ensemble de q points dans dans un espace vectoriel de dimension p La matrice WH repreacutesente desprojections de ces points dans lrsquoespace vectoriel engendreacute par les k vecteurs colonnes de la matrice W

La figure suivante illustre ce lemme ∥M minusWH∥2 srsquoeacutecrit comme la somme des distances entre q points

∥M minusWH∥2 =

qsumj=1

∥M [j]minusWkHk[j]∥2

72 httpsfrwikipediaorgwikiAnalyse_en_composantes_principales

23 Liens entre factorisation de matrices ACP k-means 83

Machine Learning Statistiques et Programmation Version 035930

Or on sait que si Wk est fixeacute les q points de la matrice WkHk eacutevolue sur un hyperplan de dimension k Le point de ceplan le plus du vecteur M [j] est sa projection sur ce plan

Theacuteoregraveme T1 La factorisation de matrice est eacutequivalente agrave une analyse en composantes principalesOn note M = (mij) W k = (wk

il) Hk = (hklj) avec 1 ⩽ i ⩽ p 1 ⩽ j ⩽ q et 1 ⩽ l ⩽ k avec k lt min(p q)

On suppose que les matrices sont solution du problegraveme drsquooptimisation minWH ∥M minusWH∥2 On considegravere que lamatrice M est un ensemble de q points dans dans un espace vectoriel de dimension p On suppose p lt q La matriceWk deacutefinit un hyperplan identique agrave celui deacutefini par les k vecteurs propres associeacutes aux k plus grande valeurs propresde la matrice MM prime ougrave M prime est la transposeacutee de M

Une analyse en composante principale consiste agrave trouver lrsquohyperplan qui maximise lrsquoinertie de la projection drsquoun nuagesur ce plan Le theacuteoregraveme reacutesolution de lrsquoACP (page 67) a montreacute que

S = argmaxWisinMpd(R)W primeW=Id

[Nsumi=1

∥W primeXi∥2

]= argmin

WisinMpd(R)

[Nsumi=1

∥WW primeXi minusXi∥2

]

Dans notre cas chaque ligne de la matrice M est un vecteur Xi La matrice Wk est identique agrave celle chercheacutee lorsdu problegraveme de factorisation de matrices Les colonnes de la matrice Hk sont eacutegales agrave W primeXi Il reste agrave montrer quele minimum trouveacute dans les deux problegravemes est le mecircme Le notebook Factorisation et matrice et ACP (page 342)montre que cela fonctionne sur un exemple La deacutemonstration du theacuteoregraveme montre eacutegalement que W primeW = Id et dansce cas preacutecis WW primeXi repreacutesente les coordonneacutees de la projection du point Xi sur le plan deacutefini par les vecteurs W Crsquoest aussi ce que montre second lemmme (page 83) Srsquoil srsquoagit du mecircme plan cela signifie que les deux formulationsACP et factorisation de matrices aboutissent au mecircme minimum Comme lrsquoalgorithme de lrsquoACP deacutetermine le meilleurplan projecteur neacutecessairement il correspond agrave celui trouveacute par la factorisation de matrice

84 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

234 k-means

On peut construire deux matrices W et H agrave partir des reacutesultats drsquoun k-means (page 1) Celui-ci deacutetermine k centresauxquels on effecte les points du nuage de deacutepart Dans ce cas-ci la matrice W est constitueacutee des coordonneacutees de cescentres On note Cl le cluster l la matrice Hk = (hk

lj) est deacutefinie comme suit

hklj = 11XjisinCl

Les coefficients sont soit 0 ou 1 On peut alors essayer de forcer la factorisation de matrice vers une matrice H avecpas de un 1 sur chaque colonne et des zeacuteros partout ailleurs Le reacutesultat sera assez proche drsquoun clustering

235 Quelques reacutesultats

Le notebook Factorisation et matrice et ACP (page 342) illustre le lien entre ACP et factorisation de matrice en deuxdimensions

236 Prolongements

Tous les reacutesultats montreacutes ici ne sont valables que si la norme L2 est utiliseacutee Cela permet de mieux comprendre lesreacutefeacuterences proposeacutees dans la documentation de Non-negative matrix factorization (NMF or NNMF)73 Si lrsquoACP et lafactorisation de matrices sont eacutequivalentes les algorithmes pour trouver le minimum diffegraverent et sont plus ou moinsapproprieacutes dans certaines configurations Lire [Gilles2014]

Factorisation non-neacutegative

Le problegraveme le plus souvent eacutevoqueacute est celui de la factorisation non-neacutegative NMF74 Ce problegraveme est uneoptimisation avec contrainte les coefficients doivent tous ecirctre positifs ou nuls Il nrsquoest bien sucircr plus eacutequivalent agraveune ACP En revanche la factorisation de matrice est un problegraveme eacutequivalent agrave celui reacutesolu par la Deacutecomposition enValeur Singuliegravere (SVD)75 qui cherche agrave deacutecomposer une matriceM = UΣV lowast La matriceΣ est une matrice diagonaleet la matrice initiale M nrsquoest pas neacutecessairement carreacutee contrairement au cas drsquoune ACP mais SVD et ACP sont tregravessimilaires

Preacutediction

Preacutedire revient agrave supposer que la matrice M est composeacutee de vecteurs lignes X1 Xq La matrice H reste inchangeacuteeet la preacutediction revient agrave deacuteterminer les coordonneacutees de la projection drsquoun nouveau point Xq+1 dans le plan deacutefinipar les vecteurs de la matrice H Pour de nouvelles observations M2 = Xq+1 la fonction transform76 de la classesklearndecompositionNMF77 reacuteestime une matrice W2 qui projette les vecteurs lignes de M2 sur les vecteurs de H enconservant des coefficients de projection positifs

Problegraveme P2 PreacutedictionSoit M isinMpq et H isinMkq on cherche les matrices agrave coefficients positifs W isinMpk qui sont solution du problegravemedrsquooptimisation

minW

∥M minusWH∥2

= min

WH

sumij

(mij minussumk

wikhkj)2

73 httpscikit-learnorgstablemodulesdecompositionhtmlnmf74 httpswwwmathuniv-toulousefr~besseWikistatpdfst-m-explo-nmfpdf75 httpsfrwikipediaorgwikiDC3A9composition_en_valeurs_singuliC3A8res76 httpsscikit-learnorgstablemodulesgeneratedsklearndecompositionNMFhtmlsklearndecompositionNMFtransform77 httpsscikit-learnorgstablemodulesgenerateddecompositionNMFhtml

23 Liens entre factorisation de matrices ACP k-means 85

Machine Learning Statistiques et Programmation Version 035930

Les recommandations srsquoobtiennent en multipliant W2 par Xq+1 Ce produit peut ecirctre approcheacutee en relacircchant lacontrainte des poids positifs pour la matrice W Crsquoest la piste proposeacutee par le modegravele ApproximateNMFPredictor78

qui utilise une transformation SVD pour projeter sur lrsquoespace vectoriel formeacute par les vecteurs de H

Norme

LrsquoACP avec une norme L1 revient agrave trouver le plan qui minimise la somme des distances agrave la projection et non lasomme des distances au carreacutes Cela reacuteduit lrsquoimpact des points aberrants mais le problegraveme nrsquoest plus eacutequivalent agrave lafactorisation de matrices avec une norme L1

Sparsiteacute

Une ACP suppose que le calcul de valeurs propres drsquoune matrice et crsquoest fastidieux lorsque la dimension du problegravemeest tregraves grande On lui preacutefegravere alors un algorithme tel que Sparse PCA79 La factorisation de matrice est plus efficaceqursquoune ACP sur les problegravemes sparses et de grande dimension Lire Non-negative Matrix Factorization with SparsenessConstraints80

Valeurs manquantes

Contourner le problegraveme des valeurs manquantes veut souvent dire soit supprimer les enregistrements contenant desvaleurs manquantes soit choisir un modegravele capable de faire avec ou soit trouver un moyen de les remplacer On peutgeacuterer plus facilement le problegraveme des valeurs manquantes avec une factorisation de matrices On peut eacutegalement seserver de la meacutethode pour calculer une ACP avec des valeurs manquantes

bull Imputation de donneacutees manquantes81

bull Principal component analysis with missing values a comparative survey of methods82

Interpreacutetation

La factorisation de matrice peut ecirctre utiliseacutee comme outil de segmentation et drsquointerpreacutetation pour des images desvideacuteos Lire A tutorial on Non-Negative Matrix Factorisation with Applications to Audiovisual Content Analysis83

bull Gesture recognition using a NMF-based representation of motion-traces extracted from depth silhouettes84

NTF

Le problegraveme de Non-Negative Matrix Factorisation (NMF)85 est un cas particulier de Non-Negative TensorFactorisation (NTF)86 Lire aussi PARAFAC Tutorial and applications87

78 httpwwwxavierduprefrappmlinsightshelpsphinxmlinsightsmlmodelanmf_predictorhtml79 httpscikit-learnorgstablemodulesdecompositionhtmlsparsepca80 httpwwwjmlrorgpapersvolume5hoyer04ahoyer04apdf81 httpswwwmathuniv-toulousefr~besseWikistatpdfst-m-app-idmpdf82 httppbiluniv-lyon1frmembersdrayfilesarticlesdray2015apdf83 httppersotelecom-paristechfr~essidteachNMF_tutorial_ICME-2014pdf84 httpshalarchives-ouvertesfrhal-00990252document85 httpsenwikipediaorgwikiNon-negative_matrix_factorization86 httpwwwcshujiacil~shashuapapersNTF-icmlpdf87 httpswwwcscmuedu~pmuthukumlsp_pagelecturesParafacpdf

86 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

237 Bibliographie

24 Un arbre de deacutecision en reacuteseaux de neurones

Lrsquoideacutee est de convertir sous la forme drsquoun reacuteseaux de neurones un arbre de deacutecision puis de continuer lrsquoapprentissagede faccedilon agrave obtenir un assemblage de reacutegression logistique plutocirct que de deacutecision binaire

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Un exemple sur Iris (page 87)bull Mecircme exemple en reacuteseau de neurones (page 88)bull Intermegravede de simples neurones de reacutegression (page 90)bull Intermegravede de simples neurones de classification (page 94)bull Apprentissage du reacuteseau de neurones (page 98)bull Autre architecture (page 104)

matplotlib inlinefrom jyquickhelper import RenderJsDotimport numpyimport matplotlibpyplot as pltfrom matplotlibcolors import ListedColormapfrom tqdm import tqdm

241 Un exemple sur Iris

La meacutethode ne marche que sur un problegraveme de classification binaire

from sklearndatasets import load_irisdata = load_iris()X y = datadata[ 2] datatargety = y 2

from sklearnmodel_selection import train_test_splitX_train X_test y_train y_test = train_test_split(X y random_state=11)

from sklearntree import DecisionTreeClassifierdec = DecisionTreeClassifier(max_depth=2 random_state=11)decfit(X_train y_train)decscore(X_test y_test)

06052631578947368

from sklearntree import export_graphvizdot = export_graphviz(dec filled=True)dot = dotreplace(shape=box shape=box fontsize=10 )RenderJsDot(dot)print(dot)

24 Un arbre de deacutecision en reacuteseaux de neurones 87

Machine Learning Statistiques et Programmation Version 035930

digraph Tree node [shape=box fontsize=10 style=filled color=black fontname=helvetica] edge [fontname=helvetica] 0 [label=X[1] lt= 295ngini = 0454nsamples = 112nvalue = [73 39] fillcolor=rarrf3c4a3] 1 [label=X[0] lt= 705ngini = 0429nsamples = 45nvalue = [14 31] fillcolor=92c9f1]rarr0 -gt 1 [labeldistance=25 labelangle=45 headlabel=True] 2 [label=gini = 0402nsamples = 43nvalue = [12 31] fillcolor=86c3ef] 1 -gt 2 3 [label=gini = 00nsamples = 2nvalue = [2 0] fillcolor=e58139] 1 -gt 3 4 [label=X[1] lt= 325ngini = 021nsamples = 67nvalue = [59 8] fillcolor=e99254] 0 -gt 4 [labeldistance=25 labelangle=-45 headlabel=False] 5 [label=gini = 0375nsamples = 32nvalue = [24 8] fillcolor=eeab7b] 4 -gt 5 6 [label=gini = 00nsamples = 35nvalue = [35 0] fillcolor=e58139] 4 -gt 6

Lrsquoarbre de deacutecision est petit donc visuellement reacuteduit et il est perfectible aussi

242 Mecircme exemple en reacuteseau de neurones

Chaque noeud de lrsquoarbre de deacutecision est converti en deux neurones un qui le relie agrave lrsquoentreacutee et qui eacutevalue la deacutecisionil produit la valeur o1 un autre qui associe le reacutesultat du premier noeud avec celui le preacutecegravede dans la structure de lrsquoarbrede deacutecision il produit la valeur o2 La deacutecision finale est quelque chose comme sigmoid(o1 + o2 minus 1) Un neuroneagregravege le reacutesultat de toutes les feuilles

from mlstatpymlneural_tree import NeuralTreeNetnet = NeuralTreeNetcreate_from_tree(dec)RenderJsDot(netto_dot())

On considegravere une entreacutee en particulier

n = 60decpredict_proba(X[n n+1])

array([[027906977 072093023]])

Les sorties du reacuteseau de neurones

netpredict(X[n n+1])[ -2]

array([[012536069 087463931]])

Et on trace les valeurs intermeacutediaires

RenderJsDot(netto_dot(X=X[n]))

On poursuit la comparaison

decpredict_proba(X_test)[5]

88 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

array([[075 025 ][075 025 ][027906977 072093023][1 0 ][027906977 072093023]])

netpredict(X_test)[5 -2]

array([[079156817 020843183][073646978 026353022][029946111 070053889][094070094 005929906][024924737 075075263]])

decpredict_proba(X_test)[-5]

array([[1 0 ][075 025][1 0 ][075 025][075 025]])

netpredict(X_test)[-5 -2]

array([[093247891 006752109][086338585 013661415][098219036 001780964][098352807 001647193][073646978 026353022]])

numpyargmax(netpredict(X_test)[-5 -2] axis=1)

array([0 0 0 0 0] dtype=int64)

On compare visuellement les deux frontiegraveres de classification

def plot_grid(X y fct title ax=None)

cmap_light = ListedColormap([orange cyan cornflowerblue])cmap_bold = ListedColormap([darkorange c darkblue])

h = 05x_min x_max = X[ 0]min() - 1 X[ 0]max() + 1y_min y_max = X[ 1]min() - 1 X[ 1]max() + 1xx yy = numpymeshgrid(numpyarange(x_min x_max h)

numpyarange(y_min y_max h))Z = fct(numpyc_[xxravel() yyravel()])

Z = Zreshape(xxshape)if ax is None

_ ax = pltsubplots(1 1)(suite sur la page suivante)

24 Un arbre de deacutecision en reacuteseaux de neurones 89

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

axpcolormesh(xx yy Z cmap=cmap_light)

axscatter(X[ 0] X[ 1] c=y cmap=cmap_boldedgecolor=k s=20)

axset_xlim(xxmin() xxmax())axset_ylim(yymin() yymax())axset_title(title)

fig ax = pltsubplots(1 2 figsize=(12 4))plot_grid(X y decpredict dec__class____name__ ax=ax[0])plot_grid(X y

lambda x numpyargmax(netpredict(x)[ -2] axis=1)net__class____name__ ax=ax[1])

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

Le code qui produit les preacutedictions du reacuteseau de neurones est assez long agrave exeacutecuter mais il produit agrave peu pregraves les mecircmesfrontiegraveres excepteacute qursquoelles sont plus arrondies

243 Intermegravede de simples neurones de reacutegression

Avant drsquoapprendre ou plutocirct de continuer lrsquoapprentissage des coefficients du reacuteseaux de neurones voyons comment unneurone se deacutebrouille sur un problegraveme de reacutegression Le neurone nrsquoest pas converti il est appris

regX = numpyempty((150 1) dtype=numpyfloat64)regX[50 0] = numpyrandomrandn(50) - 4regX[50100 0] = numpyrandomrandn(50)regX[100 0] = numpyrandomrandn(50) + 4noise = numpyrandomrandn(regXshape[0]) 10regY = regX[ 0] -05 02 + noise

(suite sur la page suivante)

90 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

regY[regX[ 0] gt 03] = noise[regX[ 0] gt 03]

fig ax = pltsubplots(1 1 figsize=(8 4))axscatter(regX[ 0] regY)axset_title(Nuage de points lineacuteaire par morceaux)

On cale une reacutegression avec scikit-learn

from sklearnlinear_model import LinearRegressionlr = LinearRegression()lrfit(regX regY)

fig ax = pltsubplots(1 1 figsize=(8 4))axscatter(regX[ 0] regY)axscatter(regX[ 0] lrpredict(regX))axset_title(Reacutegression scikit-learn)

24 Un arbre de deacutecision en reacuteseaux de neurones 91

Machine Learning Statistiques et Programmation Version 035930

Et maintenant un neurone avec une fonction drsquoactivation iquestidentityiquest

from mlstatpymlneural_tree import NeuralTreeNodeneu = NeuralTreeNode(1 activation=identity)neu

NeuralTreeNode(weights=array([024515488]) bias=010874563175403863 activation=rarridentity)

neufit(regX regY verbose=True max_iter=20)

020 loss 1508 lr=0002 max(coef) 025 l1=0035 l2=00072120 loss 2872 lr=0000163 max(coef) 019 l1=18025 l2=210039220 loss 2774 lr=0000115 max(coef) 019 l1=03025 l2=00660041320 loss 2621 lr=942e-05 max(coef) 018 l1=016023 l2=00150036420 loss 2658 lr=816e-05 max(coef) 017 l1=19023 l2=250033520 loss 258 lr=73e-05 max(coef) 017 l1=044021 l2=013003620 loss 2611 lr=666e-05 max(coef) 016 l1=01102 l2=000960028720 loss 2542 lr=617e-05 max(coef) 016 l1=017021 l2=00180029820 loss 252 lr=577e-05 max(coef) 016 l1=041021 l2=0120029920 loss 2516 lr=544e-05 max(coef) 016 l1=01021 l2=000600281020 loss 2516 lr=516e-05 max(coef) 016 l1=024021 l2=003900281120 loss 2514 lr=492e-05 max(coef) 016 l1=048021 l2=01600281220 loss 2526 lr=471e-05 max(coef) 016 l1=002702 l2=00004100271320 loss 252 lr=453e-05 max(coef) 016 l1=032021 l2=005800281420 loss 2513 lr=436e-05 max(coef) 016 l1=02602 l2=004500271520 loss 2514 lr=422e-05 max(coef) 016 l1=0045021 l2=0001400281620 loss 2516 lr=408e-05 max(coef) 016 l1=28021 l2=600271720 loss 2513 lr=396e-05 max(coef) 016 l1=02102 l2=002700271820 loss 2516 lr=385e-05 max(coef) 016 l1=01402 l2=001300271920 loss 2517 lr=375e-05 max(coef) 016 l1=0046021 l2=000120028

(suite sur la page suivante)

92 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

2020 loss 253 lr=365e-05 max(coef) 016 l1=01202 l2=00110027

NeuralTreeNode(weights=array([-004747787]) bias=015725388033694113 activation=rarridentity)

fig ax = pltsubplots(1 1 figsize=(8 4))axscatter(regX[ 0] regY)axscatter(regX[ 0] lrpredict(regX) label=sklearn)axscatter(regX[ 0] neupredict(regX) label=NeuralTreeNode)axlegend()axset_title(Reacutegression et neurones)

Ca marche Et avec drsquoautres fonctions drsquoactivation

neus = identity neufor act in tqdm([relu leakyrelu sigmoid])

nact = NeuralTreeNode(1 activation=act)nactfit(regX regY)neus[act] = nact

100|iquest iquest iquest iquest iquest iquest iquest iquest iquest iquest | 33 [0001lt0000 173its]

neus[relu] neus[leakyrelu]

(NeuralTreeNode(weights=array([-056717432]) bias=-20796272519664116 activation=relurarr)NeuralTreeNode(weights=array([-011951102]) bias=-008125009545262747 activation=

rarrleakyrelu))

24 Un arbre de deacutecision en reacuteseaux de neurones 93

Machine Learning Statistiques et Programmation Version 035930

fig ax = pltsubplots(1 1 figsize=(8 4))axscatter(regX[ 0] regY)axscatter(regX[ 0] lrpredict(regX) label=sklearn)for k v in neusitems()

axscatter(regX[ 0] vpredict(regX) label=k)axlegend()axset_title(Reacutegression neuronenactivation)

Rien de surprenant La fonction sigmoiumlde prend ses valeurs entre 0 et 1 La fonction relu est parfois nulle sur unedemi-droite degraves que la fonction est nulle sur lrsquoensemble du nuage de points le gradient est nul partout (voir Rectifier(neural networks)91) La fonction leaky relu est deacutefinie comme suit

f(x) =

x si x gt 0x

100 sinon

Le gradient nrsquoest pas nul sur la partie la plus plate

244 Intermegravede de simples neurones de classification

Avant drsquoapprendre ou plutocirct de continuer lrsquoapprentissage des coefficients du reacuteseaux de neurones voyons comment unneurone se deacutebrouille sur un problegraveme de classification Le neurone nrsquoest pas converti mais appris

from sklearnlinear_model import LogisticRegression

clsX = numpyempty((100 2) dtype=numpyfloat64)clsX[50] = numpyrandomrandn(50 2)clsX[50] = numpyrandomrandn(50 2) + 2clsy = numpyzeros(100 dtype=numpyint64)

(suite sur la page suivante)

91 httpsenwikipediaorgwikiRectifier_(neural_networks)

94 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

clsy[50] = 1

logr = LogisticRegression()logrfit(clsX clsy)pred1 = logrpredict(clsX)

def line_cls(x0 x1 coef bias)y0 = -(coef[00] x0 + bias) coef[01]y1 = -(coef[00] x1 + bias) coef[01]return x0 y0 x1 y1

x0 y0 x1 y1 = line_cls(-5 5 logrcoef_ logrintercept_)

h = 01fig ax = pltsubplots(1 1 figsize=(8 4))axscatter(clsX[clsy == 0 0] clsX[clsy == 0 1] label=cl0)axscatter(clsX[clsy == 1 0] clsX[clsy == 1 1] label=cl1)axscatter(clsX[pred1 == 0 0] + h clsX[pred1 == 0 1] + h label=LR0)axscatter(clsX[pred1 == 1 0] + h clsX[pred1 == 1 1] + h label=LR1)axplot([x0 x1] [y0 y1] y-- lw=4 label=frontiegravere LR)axset_ylim([-3 3])axlegend()axset_title(Classification et neurones)

Un neurone de classification binaire produit deux sorties une pour chaque classe et sont normaliseacutees agrave 1 La fonctiondrsquoactivation est la fonction softmax92

clsY = numpyempty((clsyshape[0] 2) dtype=numpyfloat64)(suite sur la page suivante)

92 httpsenwikipediaorgwikiSoftmax_function

24 Un arbre de deacutecision en reacuteseaux de neurones 95

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

clsY[ 1] = clsyclsY[ 0] = 1 - clsy

softneu = NeuralTreeNode(2 activation=softmax)softneu

NeuralTreeNode(weights=array([[-208861923 018763489][ 035500659 -039231456]]) bias=array([-003589328 0383808 ]) activation=

rarrsoftmax)

softneufit(clsX clsY verbose=True max_iter=20 lr=0001)

020 loss 5106 lr=0001 max(coef) 21 l1=034 l2=048120 loss 2978 lr=995e-05 max(coef) 45 l1=3718 l2=25e+0267220 loss 2914 lr=705e-05 max(coef) 52 l1=9721 l2=2089320 loss 2807 lr=576e-05 max(coef) 54 l1=3023 l2=18e+0298420 loss 2734 lr=499e-05 max(coef) 57 l1=1523 l2=9911e+02520 loss 2654 lr=447e-05 max(coef) 59 l1=1924 l2=1e+0211e+02620 loss 2608 lr=408e-05 max(coef) 61 l1=2625 l2=16e+0212e+02720 loss 2578 lr=378e-05 max(coef) 63 l1=2826 l2=16e+0213e+02820 loss 2515 lr=353e-05 max(coef) 65 l1=3526 l2=23e+0213e+02920 loss 2478 lr=333e-05 max(coef) 66 l1=3327 l2=23e+0214e+021020 loss 2446 lr=316e-05 max(coef) 68 l1=3627 l2=26e+0214e+021120 loss 2412 lr=301e-05 max(coef) 69 l1=4328 l2=34e+0215e+021220 loss 2369 lr=289e-05 max(coef) 7 l1=3128 l2=2e+0215e+021320 loss 2332 lr=277e-05 max(coef) 72 l1=1829 l2=12e+0216e+021420 loss 2321 lr=267e-05 max(coef) 73 l1=3629 l2=27e+0216e+021520 loss 2297 lr=258e-05 max(coef) 74 l1=3430 l2=35e+0217e+021620 loss 2285 lr=25e-05 max(coef) 75 l1=2130 l2=12e+0217e+021720 loss 2245 lr=242e-05 max(coef) 76 l1=1631 l2=1e+0218e+021820 loss 2206 lr=236e-05 max(coef) 77 l1=8931 l2=1618e+021920 loss 2202 lr=229e-05 max(coef) 78 l1=3431 l2=21e+0218e+022020 loss 2176 lr=224e-05 max(coef) 79 l1=2632 l2=13e+0219e+02

NeuralTreeNode(weights=array([[239484139 403623835][541545461 701868202]]) bias=array([794607355 495768881]) activation=

rarrsoftmax)

pred = softneupredict(clsX)pred[5]

array([[989410479e-01 105895211e-02][996986932e-02 900301307e-01][997104404e-01 289559597e-03][999839780e-01 160220367e-04][962522709e-01 374772912e-02]])

pred2 = (pred[ 1] gt 05)astype(numpyint64)

96 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

x00 y00 x01 y01 = line_cls(-4 4 softneucoef[1 1] softneubias[0])x10 y10 x11 y11 = line_cls(-4 4 softneucoef[1 1] softneubias[1])xa ya xb yb = line_cls(

-5 5 softneucoef[1 1] - softneucoef[1 1]softneubias[1] - softneubias[0])

fig ax = pltsubplots(1 2 figsize=(14 6))for i in [0 1]

ax[i]scatter(clsX[clsy == 0 0] clsX[clsy == 0 1] label=cl0)ax[i]scatter(clsX[clsy == 1 0] clsX[clsy == 1 1] label=cl1)ax[i]scatter(clsX[pred1 == 0 0] + h clsX[pred1 == 0 1] + h label=LR0)ax[i]scatter(clsX[pred1 == 1 0] + h clsX[pred1 == 1 1] + h label=LR1)ax[i]scatter(clsX[pred2 == 0 0] + h clsX[pred2 == 0 1] - h label=NN0)ax[i]scatter(clsX[pred2 == 1 0] + h clsX[pred2 == 1 1] - h label=NN1)

ax[0]plot([x0 x1] [y0 y1] y-- lw=4 label=frontiegravere LR)ax[1]plot([x00 x01] [y00 y01] r-- lw=4 label=droite neurone 0)ax[1]plot([x10 x11] [y10 y11] b-- lw=4 label=droite neurone 1)ax[0]plot([xa xb] [ya yb] c-- lw=4 label=frontiegravere neurone)ax[0]set_ylim([max(-6 min([-3 y10 y11 y11 y01]))

min(6 max([3 y10 y11 y11 y01]))])ax[1]set_ylim([max(-6 min([-3 y10 y11 y11 y01]))

min(6 max([3 y10 y11 y11 y01]))])ax[0]legend()ax[1]legend()ax[0]set_title(Frontiegravere de classification)ax[1]set_title(Neurones)

Ca marche On veacuterifie en calculant le score Le neurone a deux sorties La frontiegravere est deacutefinie par lrsquoensemble despoints pour lesquels les deux sorties sont eacutegales Par conseacutequent la distance entre les deux droites deacutefinies par lescoefficients du neurone doivent ecirctre eacutegales Il existe une infiniteacute de solutions menant agrave la mecircme frontiegravere On pourraitpeacutenaliser les coefficients pour converger toujours vers la mecircme solution

from sklearnmetrics import roc_auc_scoreroc_auc_score(clsy logrpredict_proba(clsX)[ 1])

24 Un arbre de deacutecision en reacuteseaux de neurones 97

Machine Learning Statistiques et Programmation Version 035930

09924

roc_auc_score(clsy softneupredict(clsX)[ 1])

0986

La performance est quasiment identique Que ce soit la reacutegression ou la classification lrsquoapprentissage drsquoun neuronefonctionne En sera-t-il de mecircme pour un assemblage de neurones

245 Apprentissage du reacuteseau de neurones

Maintenant qursquoon a vu les diffeacuterentes fonctions drsquoactivations et leur application sur des problegravemes simples onrevient aux arbres convertis sous la forme drsquoun reacuteseau de neurones La prochaine eacutetape est de pouvoir ameacuteliorer lesperformances du modegravele issu de la conversion drsquoun arbre de classification avec un algorithme du gradient On construitpour cela un nuage de points un peu traficoteacute

clsX = numpyempty((150 2) dtype=numpyfloat64)clsX[100] = numpyrandomrandn(100 2)clsX[20 0] -= 1clsX[2040 0] -= 08clsX[100 1] = 2clsX[100 1] += clsX[100 0] 2clsX[100] = numpyrandomrandn(50 2)clsX[100 0] = 2clsX[100 1] += 25clsy = numpyzeros(Xshape[0] dtype=numpyint64)clsy[100] = 1

logr = LogisticRegression()logrfit(clsX clsy)pred1 = logrpredict(clsX)logrscore(clsX clsy)

068

x0 y0 x1 y1 = line_cls(-3 3 logrcoef_ logrintercept_)

fig ax = pltsubplots(1 1 figsize=(4 4))plot_grid(clsX clsy logrpredict logr__class____name__ ax=ax)axplot([x0 x1] [y0 y1] y-- lw=4 label=frontiegravere LR)

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

98 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Mecircme chose avec un arbre de deacutecision et le reacuteseau de neurones converti

dec = DecisionTreeClassifier(max_depth=2)decfit(clsX clsy)pred2 = decpredict(clsX)decscore(clsX clsy)

09066666666666666

On convertit de reacuteseau de neurones Le second argument deacutefinit la pente dans la fonction drsquoactivation

net = NeuralTreeNetcreate_from_tree(dec 05)net15 = NeuralTreeNetcreate_from_tree(dec 15)

from sklearnmetrics import accuracy_score

(roc_auc_score(clsy decpredict_proba(clsX)[ 1])accuracy_score(clsy decpredict(clsX)))

(09354999999999999 09066666666666666)

(roc_auc_score(clsy netpredict(clsX)[ -1])accuracy_score(clsy numpyargmax(netpredict(clsX)[ -2] axis=1)))

(09456 08333333333333334)

(roc_auc_score(clsy net15predict(clsX)[ -1])accuracy_score(clsy numpyargmax(net15predict(clsX)[ -2] axis=1)))

24 Un arbre de deacutecision en reacuteseaux de neurones 99

Machine Learning Statistiques et Programmation Version 035930

(09071 09)

Le reacuteseau de neurones est plus ou moins performant selon la pente dans la fonction drsquoactivation

fig ax = pltsubplots(1 3 figsize=(15 4))plot_grid(clsX clsy decpredict dec__class____name__ ax=ax[0])plot_grid(clsX clsy

lambda x numpyargmax(netpredict(x)[ -2] axis=1)net__class____name__ ax=ax[1])

plot_grid(clsX clsylambda x numpyargmax(net15predict(x)[ -2] axis=1)net15__class____name__ + 15 ax=ax[2])

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

Et on apprend le reacuteseau de neurones en partant de lrsquoarbre de deacutepart On choisit celui qui a la pente drsquoactivation la plusfaible

from mlstatpymlneural_tree import label_class_to_softmax_outputclsY = label_class_to_softmax_output(clsy)clsY[3]

array([[1 0][1 0][1 0]])

net2 = netcopy()net2fit(clsX clsY verbose=True max_iter=25 lr=3e-6)

025 loss 7283 lr=3e-06 max(coef) 1 l1=014 l2=095125 loss 7064 lr=244e-07 max(coef) 1 l1=24e+0214 l2=33e+0393225 loss 7048 lr=173e-07 max(coef) 1 l1=24e+0214 l2=33e+0393325 loss 7046 lr=141e-07 max(coef) 1 l1=29e+0214 l2=4e+0393425 loss 7038 lr=122e-07 max(coef) 1 l1=44e+0214 l2=14e+0493525 loss 7035 lr=109e-07 max(coef) 11 l1=25e+0214 l2=35e+0393

(suite sur la page suivante)

100 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

625 loss 7032 lr=999e-08 max(coef) 11 l1=18e+0214 l2=32e+0393725 loss 703 lr=925e-08 max(coef) 11 l1=2e+0214 l2=27e+0393825 loss 7029 lr=866e-08 max(coef) 11 l1=3e+0214 l2=41e+0393925 loss 7029 lr=816e-08 max(coef) 11 l1=19e+0214 l2=29e+03931025 loss 7028 lr=774e-08 max(coef) 11 l1=3e+0214 l2=4e+03931125 loss 7027 lr=738e-08 max(coef) 11 l1=27e+0214 l2=41e+03931225 loss 7027 lr=707e-08 max(coef) 11 l1=25e+0214 l2=35e+03931325 loss 7025 lr=679e-08 max(coef) 11 l1=19e+0214 l2=32e+03931425 loss 7025 lr=654e-08 max(coef) 11 l1=33e+0214 l2=51e+03931525 loss 7024 lr=632e-08 max(coef) 11 l1=28e+0214 l2=42e+03931625 loss 7024 lr=612e-08 max(coef) 11 l1=2e+0214 l2=28e+03931725 loss 7024 lr=594e-08 max(coef) 11 l1=19e+0214 l2=35e+03931825 loss 7024 lr=577e-08 max(coef) 11 l1=22e+0214 l2=31e+03931925 loss 7025 lr=562e-08 max(coef) 11 l1=28e+0214 l2=57e+03932025 loss 7025 lr=548e-08 max(coef) 11 l1=34e+0214 l2=54e+03932125 loss 7025 lr=534e-08 max(coef) 11 l1=27e+0214 l2=43e+03932225 loss 7025 lr=522e-08 max(coef) 11 l1=37e+0214 l2=66e+03932325 loss 7025 lr=511e-08 max(coef) 11 l1=33e+0214 l2=51e+03932425 loss 7026 lr=5e-08 max(coef) 11 l1=29e+0214 l2=44e+03932525 loss 7026 lr=49e-08 max(coef) 11 l1=3e+0214 l2=54e+0393

NeuralTreeNet(2)

fig ax = pltsubplots(1 2 figsize=(12 4))plot_grid(clsX clsy

lambda x numpyargmax(netpredict(x)[ -2] axis=1)Avant apprentissage ax=ax[0])

plot_grid(clsX clsylambda x numpyargmax(net2predict(x)[ -2] axis=1)Apregraves apprentissage ax=ax[1])

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

24 Un arbre de deacutecision en reacuteseaux de neurones 101

Machine Learning Statistiques et Programmation Version 035930

Ca ne marche pas ou pas tregraves bien Il faudrait veacuterifier que la configuration actuelle ne se trouve pas dans un minimumlocal auquel cas lrsquoapprentissage par gradient ne donnera quasiment rien

(roc_auc_score(clsy net2predict(clsX)[ -1])accuracy_score(clsy numpyargmax(net2predict(clsX)[ -2] axis=1)))

(09394 06666666666666666)

net2predict(clsX)[-5 -2]

array([[059760975 040239025][069897705 030102295][0616117 0383883 ][066792189 033207811][078813475 021186525]])

netpredict(clsX)[-5 -2]

array([[048111758 051888242][058040964 041959036][050511128 049488872][054010078 045989922][069670643 030329357]])

On peut essayer de repartir agrave zeacutero Des fois ccedila peut marcher mais il faudrait beaucoup plus drsquoessai

net3 = netcopy()dim = net3training_weightsshapenet3update_training_weights(numpyrandomrandn(dim[0]))net3fit(clsX clsY verbose=True max_iter=25 lr=3e-6)

025 loss 7964 lr=3e-06 max(coef) 26 l1=029 l2=043125 loss 7964 lr=244e-07 max(coef) 25 l1=56e+0229 l2=15e+0442225 loss 7964 lr=173e-07 max(coef) 26 l1=5e+0229 l2=14e+0442325 loss 7965 lr=141e-07 max(coef) 26 l1=58e+0229 l2=16e+0442425 loss 7965 lr=122e-07 max(coef) 26 l1=76e+0229 l2=25e+0442525 loss 7965 lr=109e-07 max(coef) 26 l1=51e+0229 l2=14e+0442

(suite sur la page suivante)

102 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

625 loss 7966 lr=999e-08 max(coef) 26 l1=62e+0229 l2=19e+0442725 loss 7966 lr=925e-08 max(coef) 26 l1=62e+0229 l2=19e+0442825 loss 7966 lr=866e-08 max(coef) 26 l1=6e+0229 l2=17e+0442925 loss 7966 lr=816e-08 max(coef) 26 l1=59e+0229 l2=16e+04421025 loss 7966 lr=774e-08 max(coef) 26 l1=56e+0229 l2=15e+04421125 loss 7966 lr=738e-08 max(coef) 26 l1=73e+0229 l2=23e+04421225 loss 7966 lr=707e-08 max(coef) 26 l1=74e+0230 l2=24e+04421325 loss 7966 lr=679e-08 max(coef) 26 l1=68e+0230 l2=21e+04421425 loss 7966 lr=654e-08 max(coef) 26 l1=61e+0230 l2=18e+04421525 loss 7967 lr=632e-08 max(coef) 26 l1=6e+0230 l2=16e+04421625 loss 7967 lr=612e-08 max(coef) 26 l1=59e+0230 l2=16e+04421725 loss 7967 lr=594e-08 max(coef) 26 l1=48e+0230 l2=13e+04421825 loss 7967 lr=577e-08 max(coef) 26 l1=56e+0230 l2=16e+04421925 loss 7967 lr=562e-08 max(coef) 26 l1=58e+0230 l2=16e+04422025 loss 7967 lr=548e-08 max(coef) 26 l1=59e+0230 l2=16e+04422125 loss 7967 lr=534e-08 max(coef) 26 l1=66e+0230 l2=19e+04422225 loss 7967 lr=522e-08 max(coef) 26 l1=59e+0230 l2=18e+04422325 loss 7967 lr=511e-08 max(coef) 26 l1=62e+0230 l2=19e+04422425 loss 7967 lr=5e-08 max(coef) 26 l1=66e+0230 l2=19e+04422525 loss 7967 lr=49e-08 max(coef) 26 l1=48e+0230 l2=12e+0442

NeuralTreeNet(2)

(roc_auc_score(clsy net3predict(clsX)[ -1])accuracy_score(clsy numpyargmax(net3predict(clsX)[ -2] axis=1)))

(06426000000000001 06666666666666666)

fig ax = pltsubplots(1 2 figsize=(12 4))plot_grid(clsX clsy

lambda x numpyargmax(netpredict(x)[ -2] axis=1)Avant apprentissage ax=ax[0])

plot_grid(clsX clsylambda x numpyargmax(net3predict(x)[ -2] axis=1)Apregraves apprentissage ax=ax[1])

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

24 Un arbre de deacutecision en reacuteseaux de neurones 103

Machine Learning Statistiques et Programmation Version 035930

246 Autre architecture

Cette fois-ci on reacuteduit le nombre de neurones Au lieu drsquoavoir deux neurones par noeud du graphe on assemble tousles neurones en deux un pour les entreacutees un autre pour le calcul des sorties

netc = NeuralTreeNetcreate_from_tree(dec 1 arch=compact)RenderJsDot(netcto_dot())

(roc_auc_score(clsy netcpredict(clsX)[ -1])accuracy_score(clsy numpyargmax(netcpredict(clsX)[ -2] axis=1)))

(09468 062)

fig ax = pltsubplots(1 2 figsize=(12 4))plot_grid(clsX clsy

lambda x numpyargmax(decpredict_proba(x) axis=1)Avant conversion ax=ax[0])

plot_grid(clsX clsylambda x numpyargmax(netcpredict(x)[ -2] axis=1)Apregraves comversion ax=ax[1])

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

104 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

On reacuteapprend

netc4 = netccopy()netc4fit(clsX clsY verbose=True max_iter=25 lr=1e-6)

025 loss 7911 lr=1e-06 max(coef) 11 l1=025 l2=025125 loss 4829 lr=814e-08 max(coef) 11 l1=31e+0225 l2=49e+0325225 loss 459 lr=576e-08 max(coef) 11 l1=27e+0225 l2=43e+0325325 loss 4529 lr=471e-08 max(coef) 11 l1=9e+0225 l2=58e+0425425 loss 4476 lr=408e-08 max(coef) 11 l1=54e+0225 l2=17e+0425525 loss 4429 lr=365e-08 max(coef) 11 l1=82e+0225 l2=45e+0425625 loss 4396 lr=333e-08 max(coef) 11 l1=39e+0225 l2=61e+0325725 loss 4364 lr=308e-08 max(coef) 11 l1=38e+0225 l2=62e+0325825 loss 4332 lr=289e-08 max(coef) 11 l1=86e+0225 l2=53e+0425925 loss 4295 lr=272e-08 max(coef) 11 l1=32e+0225 l2=55e+03251025 loss 4269 lr=258e-08 max(coef) 11 l1=76e+0225 l2=35e+04251125 loss 4242 lr=246e-08 max(coef) 11 l1=37e+0225 l2=64e+03251225 loss 4219 lr=236e-08 max(coef) 11 l1=8e+0225 l2=42e+04251325 loss 4205 lr=226e-08 max(coef) 11 l1=43e+0225 l2=86e+03251425 loss 4182 lr=218e-08 max(coef) 12 l1=34e+0225 l2=63e+03251525 loss 4166 lr=211e-08 max(coef) 12 l1=12e+0325 l2=11e+05251625 loss 415 lr=204e-08 max(coef) 12 l1=12e+0325 l2=18e+05251725 loss 4136 lr=198e-08 max(coef) 12 l1=44e+0225 l2=11e+04251825 loss 412 lr=192e-08 max(coef) 12 l1=3e+0225 l2=85e+03251925 loss 4104 lr=187e-08 max(coef) 12 l1=25e+0225 l2=53e+03252025 loss 4085 lr=183e-08 max(coef) 12 l1=42e+0225 l2=88e+03252125 loss 4073 lr=178e-08 max(coef) 12 l1=39e+0225 l2=82e+03252225 loss 4059 lr=174e-08 max(coef) 12 l1=74e+0225 l2=31e+04252325 loss 4041 lr=17e-08 max(coef) 12 l1=32e+0225 l2=53e+03252425 loss 4027 lr=167e-08 max(coef) 12 l1=41e+0225 l2=12e+04252525 loss 4017 lr=163e-08 max(coef) 12 l1=57e+0225 l2=2e+0425

NeuralTreeNet(2)

(roc_auc_score(clsy netc4predict(clsX)[ -1])accuracy_score(clsy numpyargmax(netc4predict(clsX)[ -2] axis=1)))

24 Un arbre de deacutecision en reacuteseaux de neurones 105

Machine Learning Statistiques et Programmation Version 035930

(09338000000000001 08866666666666667)

fig ax = pltsubplots(1 2 figsize=(12 4))plot_grid(clsX clsy

lambda x numpyargmax(netcpredict(x)[ -2] axis=1)Avant apprentissage ax=ax[0])

plot_grid(clsX clsylambda x numpyargmax(netc4predict(x)[ -2] axis=1)Apregraves apprentissage ax=ax[1])

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

Crsquoest mieux

106 Chapter 2 Non lineacuteaire

CHAPTER 3

Reacutegression lineacuteaire

La reacutegression lineacuteaire93 est le modegravele preacutedictif le plus simple et celui qursquoon preacutefegravere quand il marche car il est facilementinterpreacutetable agrave lrsquoinverse des modegraveles non lineacuteaires qui gardent leurs secrets si on srsquoen tient seulement agrave leurs coefficientsConcregravetement on dispose drsquoun nuage de point (Xi yi) ougrave Xi isin Rd est un vecteur de dimension d et yi isin R un reacuteelLa reacutegression lineacuteaire consiste agrave construire une fonction preacutedictive yi = f(Xi) =lt Xi β gt= Xiβ ougrave β est un vecteurde dimension d Dans le cas le plus courant on modeacutelise les donneacutees de telle sorte que yi = Xiβ + ϵi ougrave ϵi suit uneloi normale de moyenne nulle et de variance σ Sous cette hypothegravese il iquestagit de trouver le vecteur β qui minimise lavraisemblance du modegravele ce qui revient agrave reacutesoudre le problegraveme drsquooptimisation

minβ

sumi

(yi minusXiβ)2

En deacuterivant on sait exprimer explicitement la solution On note X = (X1 Xi ) la matrice ougrave chaque ligne estune observation Xi et y = (y1 yi ) X prime est la transposeacutee de X Alors

βlowast = (X primeX)minus1X primey

Les chapitres suivants explorent drsquoautres aspects de ce problegravemes comme la reacutegression quantile la reacutegression lineacuteairepar morceaux ou encore lrsquoexpression de β sans calculer de matrice inverse ni de valeurs propres

31 Reacutegression lineacuteaire

Ce notebook srsquointeacuteresse agrave la faccedilon drsquointerpreacuteter les reacutesultats drsquoune reacutegression lineacuteaire lorsque les variables sont correacuteleacuteespuis il explore une faccedilon drsquoassocier arbre de deacutecision et reacutegression lineacuteaire pour construire une reacutegression lineacuteaire parmorceaux

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Un cas simple (page 108)

93 httpsfrwikipediaorgwikiRC3A9gression_linC3A9aire

107

Machine Learning Statistiques et Programmation Version 035930

bull Evolution de R2 (page 109)bull Deux variables correacuteleacutees (page 110)bull Indicatrices (page 113)bull Reacutegression lineacuteaire par morceaux (page 115)

matplotlib inline

311 Un cas simple

Une faccedilon drsquointerpreacuteter des reacutesultats statistiques est de les calculer dans un cas ougrave la reacuteponse chercheacutee est connue Onsimule un modegravele simple Y = αX1 + 0X2 + ϵ et on cale une reacutegression lineacuteaire On suppose que X1 X2 ϵ sont desvariables aleacuteatoires gaussiennes de mecircme variance et moyenne

import numpyrandom as npreps = nprnormal(1000)X = nprnormal(size=(1000 3))alpha = 2Y = alpha X[0] + X[ 2]Xshape Yshape

((1000 3) (1000))

from numpy import corrcoefcorrcoef(XT)

array([[ 1 -00312982 005188551][-00312982 1 -000356494][ 005188551 -000356494 1 ]])

from statsmodelsregressionlinear_model import OLS

model = OLS(YX[ 2])results = modelfit()su = resultssummary()su

resultsrsquared resultsrsquared_adj

(08153831029946165 08150131292531227)

On veacuterifie que le coefficient devant X1 est non nul (P-value nulle 0 nrsquoest pas lrsquointervalle de confiance) Le coefficientdevant X2 nrsquoest pas nul mais presque la P-value est eacuteleveacutee le coefficient R2 est eacuteleveacute Dessinons

import matplotlibpyplot as pltimport seabornfig ax = pltsubplots(1 2 figsize=(104))ax[0]plot(X[ 0] Y )seabornkdeplot(X[ 0] Y cmap=Reds shade=True shade_lowest=False ax=ax[1])

(suite sur la page suivante)

108 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

ax[0]set_title(nuage de points)ax[1]set_title(estimation de la densiteacute)

cpython370_x64libsite-packagesscipystatsstatspy1713 FutureWarning Using a non-tuplerarrsequence for multidimensional indexing is deprecated use arr[tuple(seq)] instead ofrarrarr[seq] In the future this will be interpreted as an array index arr[nparray(seq)]rarr which will result either in an error or a different resultreturn npaddreduce(sorted[indexer] weights axis=axis) sumval

312 Evolution de R2

Dans la reacutegression preacuteceacutedente le coefficient R2 transcrit en quelque sorte la part du bruit ϵ par rapport au terme αX1Faisons varier α

alphas = []r2s = []for a in [01 i for i in range(0 50)]

Y = aX[0] + X[ 2]model = OLS(YX[ 2])results = modelfit()alphasappend(a)r2sappend(resultsrsquared)

fig ax = pltsubplots(1 1)axplot(alphas r2s label=observed)axplot(alphas [a2(1+a2) for a in alphas] label=theoretical)axset_xlabel(alpha)axset_ylabel(r2)axlegend()

31 Reacutegression lineacuteaire 109

Machine Learning Statistiques et Programmation Version 035930

Dans ce cas de reacutegression simple la valeur agrave preacutedire est yi la valeur preacutedite est yi = αX1i et la moyenne y = αX1+ϵ =0

R2 = 1minussumn

i=1(yi minus y)2sumni=1(yi minus y)2

= 1minus Vϵα2VX1 + Vϵ

= 1minus 1

1 + α2=

α2

1 + α2

313 Deux variables correacuteleacutees

On ne change pas le modegravele mais on fait en sorte que X2 = X1 Les deux variables sont correacuteleacutees

X[ 1] = X[ 0]Y = 2X[0] + X[ 2]model = OLS(YX[ 2])results = modelfit()resultssummary()

modelrank

1

Les variables correacuteleacutees nrsquoont pas lrsquoair de deacuteranger lrsquoalgorithme de reacutesolution car il utilise la meacutethode SVD94 pourreacutesoudre le mecircme problegraveme dans un espace de moindre dimension Le problegraveme survient que les deux variables nesont pas compleacutetement correacuteleacutees On eacutetudie le modegravele Y sim X1 +X prime

2 avec X prime2 = αX1 + (1 minus α)X2 et on reacuteduit la

variance du bruit pour en diminuer les effets

X_ = nprnormal(size=(1000 3))

94 httpsenwikipediaorgwikiSingular-value_decomposition

110 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

alphas = [09 + i 001 for i in range(011)]res = []for a in alphas

X = X_copy()X[ 1] = a X[ 0] + (1-a) X[ 1]Y = X[ 0] + X[ 1] + 01 X[ 2]model = OLS(YX[ 2])results = modelfit()resappend(dict(alpha=a r2=resultsrsquared rank=modelrank c1=resultsparams[0]

rarrc2=resultsparams[1]))

import pandasdf = pandasDataFrame(res)df = dfset_index(alpha)df

fig ax = pltsubplots(12 figsize=(104))df[[r2]]plot(ax=ax[0])df[[c1 c2]]plot(ax=ax[1])ax[0]set_title(R2)ax[1]set_title(coefficients)

Le r2 augmente quand la correacutelation augmente mais les coefficients sont moins fiables Les reacutesultats devraient ecirctresensiblement identiques en theacuteorie mais en pratique plus le deacuteterminant devient proche de zeacutero plus lrsquoordinateur estlimiteacute par sa preacutecision numeacuterique Pour en savoir plus vous pouvez lire un examen eacutecrit que jrsquoai reacutedigeacute en pythonbien sucircr Examen Programmation ENSAE premiegravere anneacutee 200695 Cette preacutecision est aux alentours de 10minus15 ce quicorrespond agrave la preacutecision numeacuterique des double96

alphas = [1 - 10(-i) for i in range(1018)]res = []for a in alphas

X = X_copy()X[ 1] = a X[ 0] + (1-a) X[ 1]

(suite sur la page suivante)

95 httpwwwxavierduprefrsite2013enseignementstdnoteecrit_2006pdf96 httpsenwikipediaorgwikiDouble-precision_floating-point_format

31 Reacutegression lineacuteaire 111

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

Y = X[ 0] + X[ 1] + X[ 2]model = OLS(YX[ 2])results = modelfit()resappend(dict(alpha_1=a-1 r2=resultsrsquared rank=modelrank c1=results

rarrparams[0] c2=resultsparams[1]))

import pandasdf = pandasDataFrame(res)df = dfset_index(alpha_1)df

On fait un dernier test avec scikit-learn97 pour veacuterifier que lrsquoalgorithme de reacutesolution donne des reacutesultats similairespour un cas ougrave le deacuteterminant est quasi-nul

from sklearnlinear_model import LinearRegressionfrom sklearnmetrics import r2_score

alphas = [09 + i 001 for i in range(011)]res = []for a in alphas

X = X_copy()X[ 1] = a X[ 0] + (1-a) X[ 1]Y = X[ 0] + X[ 1] + X[ 2]model = LinearRegression()modelfit(X[ 2] Y)r2 = r2_score(Y modelpredict(X[ 2]))resappend(dict(alpha=a c1=modelcoef_[0] c2=modelcoef_[1] r2=r2))

import pandasdf = pandasDataFrame(res)df = dfset_index(alpha)df

fig ax = pltsubplots(13 figsize=(124))df[[c1 c2]]plot(ax=ax[1])df[[c1 c2]]plot(ax=ax[2])df[[r2]]plot(ax=ax[0])ax[0]set_title(R2)ax[1]set_title(coefficients)ax[2]set_ylim([-5 5])ax[2]set_title(coefficients eacutechelle tronqueacutee)

97 httpscikit-learnorgstable

112 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Le second graphe est trompeur mais il ne faut pas oublier de regarder lrsquoeacutechelle de lrsquoaxe des ordonneacutees

314 Indicatrices

X1 est une variable aleacuteatoire gaussienne On teste maintenant un modegravele Y = X prime1 +X prime

2 + ϵ avec X prime1 = X111X1lt0 et

X prime2 = X111X1⩾0

X = nprnormal(size=(1000 3))X[ 1] = X[ 0]X[X[ 0] gt= 0 0] = 0X[X[ 1] lt 0 1] = 0Y = X[ 0] + X[ 1] + X[ 2]corrcoef(XT)

array([[ 1 047358312 -003083914][ 047358312 1 -001293737][-003083914 -001293737 1 ]])

from pandas import DataFramenames = [Xd i for i in range(Xshape[1]-1)]ax = DataFrame(X[502] columns=names)sort_values(names)reset_index(drop=True)plot()axset_title(Repreacutesentation des features tronqueacutees)

31 Reacutegression lineacuteaire 113

Machine Learning Statistiques et Programmation Version 035930

model = OLS(YX[ 3])results = modelfit()resultssummary()

On deacutecoupe en trois

import numpyX = nprnormal(size=(1000 4))for i in range(0 3)

X[ i] = X_[ 0]X[ 3] = X_[ 2]X[X_[ 0] gt -1 0] = 0X[(X_[ 0] lt -1) | (X_[ 0] gt 1) 1] = 0X[X_[ 0] lt 1 2] = 0Y = X[ 0] + X[ 1] + X[ 2] + X[ 3]corrcoef(XT)

array([[ 1 -000347584 016846101 006722762][-000347584 1 000326437 -004707208][ 016846101 000326437 1 008754832][ 006722762 -004707208 008754832 1 ]])

from pandas import DataFramenames = [Xd i for i in range(Xshape[1]-1)]ax = DataFrame(X[503] columns=names)sort_values(names)reset_index(drop=True)plot()axset_title(Repreacutesentation des features tronqueacutees)

114 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

model = OLS(YX[ 4])results = modelfit()resultssummary()

315 Reacutegression lineacuteaire par morceaux

On se place dans un cas particulier ougrave le problegraveme est lineacuteaire par morceaux

Y = minus2X111X1+ϵ1lt0 + 4X111X+ϵ1gt0 + ϵ2

La reacutegression donne de tregraves mauvais reacutesultat sur ce type de problegravemes mais on cherche une faccedilon systeacutematique dedeacutecouper le problegraveme en segments lineacuteaires

X = nprnormal(size=(10004))alpha = [4 -2]t = (X[ 0] + X[ 3] 05) gt 0switch = numpyzeros(Xshape[0])switch[t] = 1Y = alpha[0] X[ 0] t + alpha[1] X[ 0] (1-t) + X[ 2]

fig ax = pltsubplots(1 1)axplot(X[ 0] Y )axset_title(Nuage de points lineacuteaire par morceaux)

31 Reacutegression lineacuteaire 115

Machine Learning Statistiques et Programmation Version 035930

model = OLS(YX[ 1])results = modelfit()resultssummary()

yp = resultspredict(X[ 1])

fig ax = pltsubplots(1 1)axplot(X[ 0] Y label=expected)axplot(X[ 0] yp label=predicted)axlegend()axset_title(Reacutegression lineacuteaire sur un nuage lineacuteaire par morceaux)

116 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Passons agrave un arbre de deacutecision qui nrsquoest pas le meilleur modegravele mais on va deacutetourner ses reacutesultats pour revenir agrave unproblegraveme de reacutegression par morceaux

from sklearntree import DecisionTreeRegressormodel = DecisionTreeRegressor(min_samples_leaf=10 max_depth=3)modelfit(X[ 1] Y)yp = modelpredict(X[ 1])

fig ax = pltsubplots(1 1)axplot(X[ 0] Y label=expected)axplot(X[ 0] yp label=predicted)axlegend()r2 = r2_score(Y modelpredict(X[ 1]))axset_title(Arbre de deacutecision sur un nuage lineacuteaire par morceauxnR2=f r2)

31 Reacutegression lineacuteaire 117

Machine Learning Statistiques et Programmation Version 035930

from sklearntree import export_graphvizexport_graphviz(model out_file=arbredot)from pyensaegraphhelper import run_dotrun_dot(arbredot arbrepng)from IPythondisplay import ImageImage(arbrepng)

On extrait tous les seuils de lrsquoarbre et on ajoute les milieux de segments

th = list(sorted(set(modeltree_threshold)))th += [(th[i] + th[i-1])2 for i in range(1len(th))]th = list(sorted(th))th

118 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

[-20-18018612563610077-16037225127220154-1323736995458603-10437514781951904-031099767237901690421756133437156706781253740191460934494614601135310011553764343262106781613826751712776717841625214148752743005752561714784592390060419420417547225952]

On fait une reacutegression sur les variables Wigt0 = X111X1gtti W0 = X1 ougrave les (ti) sont les seuils

W = numpyzeros((Xshape[0] len(th)+1))x = X[ 0]W[ 0] = xfor i in range(len(th))

W[x gt th[i] i+1] = x[x gt th[i]]

model = OLS(YW)results = modelfit()resultssummary()

Dessinons les reacutesultats de la preacutedictions

yp = resultspredict(W)fig ax = pltsubplots(1 1)axplot(X[ 0] Y label=expected)axplot(X[ 0] yp label=predicted)axlegend()axset_title(Reacutegression lineacuteaire par morceauxnsur un nuage lineacuteaire par morceauxnR2=frarr resultsrsquared)

31 Reacutegression lineacuteaire 119

Machine Learning Statistiques et Programmation Version 035930

Le modegravele nous suggegravere de ne garder que quelques seuils En srsquoappuyant sur les p-values

keep = numpyarange(len(resultspvalues))[resultspvalues lt 005]keep

array([ 0 5 6 7 13])

W2 = W[ keep]

model = OLS(YW2)results = modelfit()resultssummary()

yp = resultspredict(W2)fig ax = pltsubplots(1 1)axplot(X[ 0] Y label=expected)axplot(X[ 0] yp label=predicted)axlegend()axset_title(Reacutegression lineacuteaire par morceauxnsur un nuage lineacuteaire par morceauxn +

reacuteduction du nombre de segmentsnR2=f resultsrsquared)

120 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Le coefficient R2 est quasiment identique pour un nombre de segments moindre Je me suis amuseacute agrave rendre ce codeplus geacuteneacuterique pour comparer la premiegravere eacutetape le deacutecoupage en morceaux via deux modegraveles un arbre de deacutecisionet le nouvel objet KBinsDiscretizer98 qui segmente une variable sans tenir compte de la cible La reacutegression nrsquoestplus neacutecessaire lineacuteaire Piecewise linear regression99 Je me suis eacutegalement amuseacute agrave faire de mecircme pour uneclassification par morceaux PiecewiseClassifier100 Celle-ci pose quelques soucis pratiques car toutes les classes nesont pas forceacutement repreacutesenteacutees dans chaque compartiment

32 Reacutegression quantile

La reacutegression quantile est moins sensible aux points aberrants Elle peut ecirctre deacutefinie comme une reacutegression avec unenorme L1 (une valeur absolue)

bull Meacutediane et valeur absolue (page 122)bull Reacutegression quantile (page 122)bull Reacutesolution drsquoune reacutegression quantile (page 123)bull Quantile et optimisation (page 123)bull Reacutegression quantile pour un quantile p quelconque (page 124)bull Reacutesolution drsquoune reacutegression quantile pour un quantile p quelconque (page 124)bull Notebook (page 125)

98 httpsscikit-learnorgstablemodulesgeneratedsklearnpreprocessingKBinsDiscretizerhtml99 httpwwwxavierduprefrappmlinsightshelpsphinxnotebookspiecewise_linear_regressionhtml

100 httpwwwxavierduprefrappmlinsightshelpsphinxmlinsightsmlmodelpiecewise_estimatorhtmlmlinsightsmlmodelpiecewise_estimatorPiecewiseClassifier

32 Reacutegression quantile 121

Machine Learning Statistiques et Programmation Version 035930

bull Bilbiographie (page 128)

321 Meacutediane et valeur absolue

On considegravere un ensemble de nombre reacuteels X1 Xn La meacutediane est le nombre M qui veacuterifie sumi

11XiltM =sumi

11XigtM

Plus simplement la meacutediane est obtenue en triant les eacuteleacutements X1 Xn par ordre croissant La meacutediane est alorsle nombre au milieu X[n2 ]

proprieacuteteacute P1 Meacutediane et valeur absolueLa meacutediane M de lrsquoensemble X1 Xn minimise la quantiteacute E =

sumi |Xi minusM |

Avant de deacutemontrer la proprieacuteteacute voyons ce qursquoil se passe entre deux reacuteels La meacutediane de AB peut ecirctre nrsquoimporteougrave sur le segment

De maniegravere eacutevidente les distances des deux cocircteacutes du point M sont eacutegales a+ b = c+ d Mais si M nrsquoest pas sur lesegment on voit de maniegravere eacutevidente que la somme des distances sera plus grande

Nrsquoimporte quel point sur le segment M minimise |AminusM |+ |B minusM | On revient aux n reacuteels trieacutes par ordre croissantX1 Xn et on considegravere les paires (X1 Xn) (X2 Xnminus1)

(X[n2 ]

X[n2 +1]

) Lrsquointersection de tous ces

intervalles est(X[n2 ]

X[n2 +1]

)et on sait drsquoapregraves la petit exemple avec deux points que nrsquoimporte quel point dans

cet intervalle minimise |X1 minusM |+ |Xn minusM |+ |X2 minusM |+ |Xnminus1 minusM |+ = E La proprieacuteteacute est deacutemontreacutee

322 Reacutegression quantile

Maintenant que la meacutediane est deacutefinie par un problegraveme de minimisation il est possible de lrsquoappliquer agrave un problegravemede reacutegression

Deacutefinition D1 Reacutegression quantileOn dispose drsquoun ensemble de n couples (Xi Yi) avec Xi isin Rd et Yi isin R La reacutegression quantile consiste agrave trouverα β tels que la somme

sumi |α+ βXi minus Yi| est minimale

122 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

323 Reacutesolution drsquoune reacutegression quantile

La premiegravere option consiste agrave utiliser une meacutethode de descente de gradient puisque la fonction E =sum

i |Xi minusM |est presque partout deacuterivable Une autre option consiste agrave utiliser lrsquoalgorithme Iteratively reweighted least squares101Lrsquoimpleacutementation est faite par la classe QuantileLinearRegression102 Lrsquoalgorithme est tireacute de [Chen2014]

Algorithme A1 Iteratively reweighted least squaresOn souhaite trouver les paramegravetres Ω qui minimise

E =sumi

|Yi minus f(XiΩ)|

Etape 1On pose foralli wt

i = 1Etape 2On calcule Ωt = argminE(Ω) avec Et(Ω) =

sumi w

ti (Yi minus f(XiΩ))

2Etape 3On met agrave jour les poids wt+1

i = 1maxδ|Yiminusf(XiΩt)| Puis on retourne agrave lrsquoeacutetape 2

Le paramegravetre δ gegravere le cas ougrave la preacutediction est identique agrave la valeur attendue pour un point Xi donneacute Il y a plusieurschoses agrave deacutemontrer On suppose que lrsquoalgorithme converge ce qursquoon nrsquoa pas encore deacutemontreacute Dans ce cas Ωt = Ωt+1

et les coefficients Ωt optimise la quantiteacute

sumi

wti (Yi minus f(XiΩ))

2=sumi

(Yi minus f(XiΩ))2

max δ |Yi minus f(XiΩt)|minusrarrδrarr0

sumi

|Yi minus f(XiΩ)|

On remarque eacutegalement que Et(Ωt) est lrsquoerreur L1 pour les paramegravetres Ω Donc si lrsquoalgorithme converge celui-cioptimise bien lrsquoerreur de la reacutegression quantile Dans le cas drsquoune reacutegression lineacuteaire on sait exprimer la solution

Ωt+1 = (X primeWtX)minus1X primeWty = g(Ωt)avec Wt = diag( 1

maxδ|yiminusΩtXi| )

Drsquoapregraves le theacuteoregraveme du point fixe103 on sait que la suite converge si la fonction g est contractante104

forallx y |f(x)minus f(y)| ⩽ k ∥xminus y∥ avec k lt 1

324 Quantile et optimisation

De la mecircme maniegravere que nous avons deacutefini la meacutediane comme la solution drsquoun problegraveme drsquooptimisation nous pouvonsdeacutefinir nrsquoimporte quel quantile comme tel

proprieacuteteacute P2 Quantile et optimisationLe quantile Qp de lrsquoensemble X1 Xn est le nombre qui veacuterifie

nsumi=1

11XiltQp = np

101 httpsenwikipediaorgwikiIteratively_reweighted_least_squares102 httpwwwxavierduprefrappmlinsightshelpsphinxmlinsightsmlmodelquantile_regressionhtmlmlinsightsmlmodelquantile_

regressionQuantileLinearRegression103 httpsfrwikipediaorgwikiPoint_fixe104 httpsfrwikipediaorgwikiApplication_contractante

32 Reacutegression quantile 123

Machine Learning Statistiques et Programmation Version 035930

Ce nombre minimise la quantiteacute

E =sumi

p |Xi minusQp|+ + (1minus p) |Xi minusQp|minus

Ougrave |a|+ = max a 0 et |a|minus = max minusa 0

On veacuterifie qursquoon retrouve bien ce qui eacutetait eacutenonceacute pour la meacutediane avec p = 12 Il faut deacutemontrer que la solution de ce

programme drsquooptimisation atterrit dans lrsquointervalle souhaiteacuteOn choisit un reacuteel P agrave lrsquointeacuterieur drsquoun intervale et on calcule E(P ) =

sumi p |Xi minus P |++(1minusp) |Xi minus P |minus On note

a(P ) =sumn

i=1 11XiltP et b(P ) =sumn

i=1 11XigtP Comme le point P est agrave lrsquointeacuterieur drsquoun intervalle a + b = nSoit dx un reacuteel tel que P + dx soit toujours dans lrsquointervalle

E(P + dx) =sum

i p |Xi minus P minus dx|+ + (1minus p) |Xi minus P minus dx|minus= minusb(P )pdx+ a(P )(1minus p)dx = (a(P )minus a(P )pminus b(P )p)dx = (a(P )minus pn)dx

On voit que si P est choisi de telle sorte que a(P ) = np la fonction E(P ) est constante sur cette intervalle et crsquoestpreacuteciseacutement le cas lorsque P = Qp Comme la fonction E est une somme positive de fonctions convexes elle lrsquoestaussi Si on a trouveacute un intervalle ougrave la fonction est constante alors celui-ci contient la solution Sinon il suffit justede trouver les intervalles (Ximinus1 Xi) et (Xi Xi+1) pour lesquelles la fonction E est respectivement deacutecroissante etcroissante On cherche donc le point P tel que a(P ) lt pn si P lt Xi et a(P ) gt pn si P gt Xi et ce point correspondau quantile Qp Ceci conclut la deacutemonstration

325 Reacutegression quantile pour un quantile p quelconque

Comme pour la meacutediane il est possible de deacutefinir la reacutegression quantile pour un quantile autre que la meacutediane

Deacutefinition D2 Reacutegression quantileOn dispose drsquoun ensemble de n couples (Xi Yi) avec Xi isin Rd et Yi isin R La reacutegression quantile consiste agrave trouverα β tels que la somme

sumi p |α+ βXi minus Yi|+ + (1minus p) |α+ βXi minus Yi|minus est minimale

326 Reacutesolution drsquoune reacutegression quantile pour un quantile p quelconque

La premiegravere option consiste encore agrave utiliser une meacutethode de descente de gradient puisque la fonction agrave minimiserest presque partout deacuterivable On peut aussi adapter lrsquoalgorithme Iteratively reweighted least squares (page 123)Lrsquoimpleacutementation est faite par la classe QuantileLinearRegression105 (voir [Koenker2017])

Algorithme A2 Iteratively reweighted least squaresOn souhaite trouver les paramegravetres Ω qui minimise

E =sumi

p |Yi minus f(XiΩ)|+ + (1minus p) |Yi minus f(XiΩ)|minus

Etape 1On pose foralli wt

i = 1Etape 2On calcule Ωt = argminE(Ω) avec Et(Ω) =

sumi w

ti (Yi minus f(XiΩ))

2105 httpwwwxavierduprefrappmlinsightshelpsphinxmlinsightsmlmodelquantile_regressionhtmlmlinsightsmlmodelquantile_

regressionQuantileLinearRegression

124 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Etape 3On met agrave jour les poids wt+1

i = 1

maxδ 1p |α+βXiminusYi|++ 11minusp |α+βXiminusYi|minus Puis on retourne agrave lrsquoeacutetape 2

On suppose que lrsquoalgorithme converge ce qursquoon nrsquoa pas encore deacutemontreacute Dans ce cas Ωt = Ωt+1 et les coefficientsΩt optimise la quantiteacute sum

i wti (Yi minus f(XiΩ))

2=

sumi

(Yiminusf(XiΩ))2

maxδ 1p |α+βXiminusYi|++ 11minusp |α+βXiminusYi|minus

minusrarrδrarr0

p |Yi minus f(XiΩ)|+ + (1minus p) |Yi minus f(XiΩ)|minus

327 Notebook

Reacutegression quantile illustreacutee

La reacutegression quantile est moins sensible aux points aberrants Elle peut ecirctre deacutefinie comme une reacutegression avec unenorme L1 (une valeur absolue) Ce notebook explore des reacutegressions avec des quantiles diffeacuterents

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Un jeu de donneacutees non symeacutetrique (page 125)bull Reacutegression lineacuteaire et reacutegression quantile (page 126)bull Diffeacuterents quantiles (page 127)

matplotlib inline

Un jeu de donneacutees non symeacutetrique

import numpyrandom as nprimport numpyn = 1000eps = nprnormal(n)X = nprrand(n 1) 5X1 = nprnormal(size=(n 1)) 1X2 = nprnormal(size=(n2 1)) 10X2 = numpyvstack([X2 numpyzeros((n2 1))])eps = - numpyabs(X1) + numpyabs(X2)Y = (05 X + eps)ravel()Xshape Yshape

((1000 1) (1000))

import matplotlibpyplot as pltfig ax = pltsubplots(1 1 figsize=(55))axplot(X Y c)

32 Reacutegression quantile 125

Machine Learning Statistiques et Programmation Version 035930

Reacutegression lineacuteaire et reacutegression quantile

from sklearnlinear_model import LinearRegressionclr = LinearRegression()clrfit(X Y)

LinearRegression(copy_X=True fit_intercept=True n_jobs=1 normalize=False)

from mlinsightsmlmodel import QuantileLinearRegressionclq = QuantileLinearRegression()clqfit(X Y)

QuantileLinearRegression(copy_X=True delta=00001 fit_intercept=Truemax_iter=10 n_jobs=1 normalize=False quantile=05verbose=False)

fig ax = pltsubplots(1 1 figsize=(55))axplot(X Y c)lin = clrpredict(X)axplot(X lin ro label=L2)qu = clqpredict(X)axplot(X qu bo label=L1)axlegend()axset_title(Reacutegression lineacuteaire et quantile)

126 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Diffeacuterents quantiles

clqs = for qu in [01 025 05 075 09]

clq = QuantileLinearRegression(quantile=qu)clqfit(X Y)clqs[q=12f qu] = clq

fig ax = pltsubplots(1 1 figsize=(55))axplot(X Y c)for k v in sorted(clqsitems())

p = vpredict(X)axplot(X p o label=k)

axlegend()axset_title(Reacutegressions quantiles)

32 Reacutegression quantile 127

Machine Learning Statistiques et Programmation Version 035930

328 Bilbiographie

Des reacutefeacuterences sont disponibles sur la page de statsmodels106 QuantReg107 ou lagrave Reacutegression quantile108

33 Reacutegression lineacuteaire par morceaux

Le paragraphe Reacutegression lineacuteaire (page 107) eacutetudie le lien entre le coefficient R2 et la correacutelation pour finalementillustrer une faccedilon de reacutealiser une reacutegression lineacuteaire par morceaux Lrsquoalgorithme srsquoappuie sur un arbre de reacutegressionpour deacutecouper en morceaux ce qui nrsquoest pas le plus satisfaisant car lrsquoarbre cherche agrave deacutecouper en segment enapproximant la variable agrave reacutegresser Y par une constante sur chaque morceaux et non une droite On peut se poserla question de comment faire pour construire un algorithme qui deacutecoupe en approximant Y par une droite et non uneconstante Le plus dur nrsquoest pas de le faire mais de le faire efficacement Et pour comprendre lagrave ougrave je veux vousemmener il faudra un peu de matheacutematiques

bull Exploration (page 129)ndash Problegraveme et regreacutession lineacuteaire dans un espace agrave une dimension (page 129)ndash Impleacutementation naiumlve drsquoune reacutegression lineacuteaire par morceaux (page 137)ndash Aparteacute sur la continuiteacute de la reacutegression lineacuteaire par morceaux (page 137)

106 httpwwwstatsmodelsorgstableindexhtml107 httpwwwstatsmodelsorgstablegeneratedstatsmodelsregressionquantile_regressionQuantReghtml108 httpswwwxavierduprefrappensae_teaching_cshelpsphinxml2atd2a_mlplus_regression_quantilehtml

128 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

ndash Reacutegression lineacuteaire et correacutelation (page 138)ndash Ideacutee de lrsquoalgorithme (page 138)ndash Un peu plus en deacutetail dans lrsquoalgorithme (page 139)

bull Synthegravese matheacutematique (page 141)bull Streaming (page 143)

ndash Streaming Gram-Schmidt (page 143)ndash Streaming Linear Regression (page 144)ndash Streaming Linear Regression version Gram-Schmidt (page 145)

bull Digressions (page 147)bull Notebooks (page 147)bull Impleacutementations (page 151)bull Bilbiographie (page 151)

Une impleacutementation de ce type de meacutethode est proposeacutee dans la pull request Model trees (M5P and co)111 qui reacutepondagrave au problegraveme poseacutee dans Model trees (M5P)112 et originellement impleacutementeacutee dans Building Model Trees113 Cettederniegravere impleacutementation reacuteestime les modegraveles comme lrsquoimpleacutementation deacutecrite au paragraphe Impleacutementation naiumlvedrsquoune reacutegression lineacuteaire par morceaux (page 137) mais eacutetendue agrave tout type de modegravele

331 Exploration

Problegraveme et regreacutession lineacuteaire dans un espace agrave une dimension

Tout drsquoabord une petite illustration du problegraveme avec la classe PiecewiseRegression114 impleacutementeacutee selon lrsquoAPI descikit-learn115

Reacutegression lineacuteaire par morceaux

La reacutegression lineacuteaire par morceaux a lrsquoavantage de produire un modegravele localement interpreacutetable Mais ce nrsquoest paseacutevident drsquoestimer un tel modegravele quand on ne connaicirct pas les morceaux par avance

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Des donneacutees artificielles (page 130)bull Quelques exemples avec un arbre de deacutecision (page 131)bull Quelques exemples avec un KBinsDiscretizer (page 132)bull Arbre de deacutecision optimiseacute pour la reacutegression lineacuteaire (page 133)

matplotlib inline

111 httpsgithubcomscikit-learnscikit-learnissues13106112 httpsgithubcomscikit-learnscikit-learnpull13732113 httpsgithubcomankonzoidLearningXtreemasteradvanced_MLmodel_tree114 httpwwwxavierduprefrappmlinsightshelpsphinxnotebookspiecewise_linear_regressionhtml115 httpsscikit-learnorg

33 Reacutegression lineacuteaire par morceaux 129

Machine Learning Statistiques et Programmation Version 035930

Des donneacutees artificielles

from numpyrandom import normalimport numpyimport matplotlibpyplot as plt

def nuage(n alpha noise=02)eps = normal(0 2 (n 2))X = eps[ 0] + 2X1 = eps[ 0]copy()X2 = eps[ 0]copy()th = 1X1[X1 lt= th] = 0X2[X2 gt th] = 0sel = numpyzeros((n))sel[X1 gt th] = 1Y = X1 alpha - X2 alpha + eps[ 1] noise - sel alpha th 2return X Y

fig ax = pltsubplots(1 2 figsize=(12 4))alpha noise = 05 02X Y = nuage(200 alpha)ax[0]plot(X Y )ax[0]set_title(alpha=12f noise=12f (alpha noise))alpha noise = 2 04X Y = nuage(200 alpha noise=04)ax[1]plot(X Y )ax[1]set_title(alpha=12f noise=12f (alpha noise))

130 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Quelques exemples avec un arbre de deacutecision

La segmentation est reacutealiseacutee drsquoabord avec un arbre de deacutecision dont on fixe la profondeur Chaque segment est choiside telle sorte agrave minimiser lrsquoapproximation de la fonction par une constante sur chaque segment

from mlinsightsmlmodel import PiecewiseRegressorfrom sklearntree import DecisionTreeRegressor

def nuage_piecewise(n alpha noise=02 max_depth=1)X Y = nuage(n alpha noise=noise)clr = PiecewiseRegressor(binner=DecisionTreeRegressor(max_depth=max_depth))Xm = Xreshape((len(X) 1))clrfit(Xm Y)mi ma = Xmin() Xmax()Xm = numpyarange(0 200) (ma - mi) 200 + miXm = Xmreshape((len(Xm) 1))return X Y Xm clrpredict(Xm)

def plot(i j alpha noise max_depth ax)X Y XX Z = nuage_piecewise(200 alpha max_depth=max_depth)ax[i j]plot(X Y )ax[i j]plot(XX Z )ax[i j]set_title(alpha=12f noise=12f max_depth=d (

alpha noise max_depth))

fig ax = pltsubplots(2 2 figsize=(12 6))

alpha noise max_depth = 05 02 1plot(0 0 alpha noise max_depth ax)

alpha noise max_depth = 2 04 1plot(0 1 alpha noise max_depth ax)

alpha noise max_depth = 05 02 2plot(1 0 alpha noise max_depth ax)

alpha noise max_depth = 2 04 2plot(1 1 alpha noise max_depth ax)

pltsuptitle(Reacutegression lineacuteaire avec DecisionTreeRegressor)

33 Reacutegression lineacuteaire par morceaux 131

Machine Learning Statistiques et Programmation Version 035930

Quelques exemples avec un KBinsDiscretizer

from mlinsightsmlmodel import PiecewiseRegressorfrom sklearnpreprocessing import KBinsDiscretizer

def nuage_piecewise2(n alpha noise=02 n_bins=2)X Y = nuage(n alpha noise=noise)clr = PiecewiseRegressor(binner=KBinsDiscretizer(n_bins=n_bins))Xm = Xreshape((len(X) 1))clrfit(Xm Y)mi ma = Xmin() Xmax()Xm = numpyarange(0 200) (ma - mi) 200 + miXm = Xmreshape((len(Xm) 1))return X Y Xm clrpredict(Xm)

def plot2(i j alpha noise n_bins ax)X Y XX Z = nuage_piecewise2(200 alpha n_bins=n_bins)ax[i j]plot(X Y )ax[i j]plot(XX Z )ax[i j]set_title(alpha=12f noise=12f n_bins=d (

alpha noise n_bins))

fig ax = pltsubplots(2 2 figsize=(12 6))

alpha noise n_bins = 05 02 2plot2(0 0 alpha noise n_bins ax)

alpha noise n_bins = 2 04 2(suite sur la page suivante)

132 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

plot2(0 1 alpha noise n_bins ax)

alpha noise n_bins = 05 02 4plot2(1 0 alpha noise n_bins ax)

alpha noise n_bins = 2 04 4plot2(1 1 alpha noise n_bins ax)

pltsuptitle(Reacutegression lineacuteaire avec KBinsDiscretizer)

Crsquoest mieux mais ce nrsquoest pas parfait La classe KBinsDiscretizer116 fonctionne simplement en segmentant les donneacuteesmais elle ne tient pas compte de la cible

Arbre de deacutecision optimiseacute pour la reacutegression lineacuteaire

Lrsquoarbre suivant reprend lrsquoalgorithme de lrsquoarbre de deacutecision agrave ceci pregraves qursquoil optimise un critegravere MSE117 en approximantle nuage de points (Xi yi) par une fonction lineacuteaire yi = Xiβ + ϵi Il faut neacuteanmoins augmenter le nombre de pointspar feuille pour eacuteviter quelques artefacts

from mlinsightsmlmodelpiecewise_tree_regression import PiecewiseTreeRegressorfrom sklearnpreprocessing import KBinsDiscretizer

def nuage_piecewise2(n alpha noise=02 min_samples_leaf=30)X Y = nuage(n alpha noise=noise)clr = PiecewiseTreeRegressor(criterion=mselin

min_samples_leaf=min_samples_leaf)(suite sur la page suivante)

116 httpsscikit-learnorgstablemodulesgeneratedsklearnpreprocessingKBinsDiscretizerhtml117 httpsscikit-learnorgstablemodulesgeneratedsklearnmetricsmean_squared_errorhtml

33 Reacutegression lineacuteaire par morceaux 133

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

Xm = Xreshape((len(X) 1))clrfit(Xm Y)mi ma = Xmin() Xmax()Xm = numpyarange(0 200) (ma - mi) 200 + miXm = Xmreshape((len(Xm) 1))return X Y Xm clrpredict(Xm)

def plot2(i j alpha noise min_samples_leaf ax)X Y XX Z = nuage_piecewise2(200 alpha

min_samples_leaf=min_samples_leaf)ax[i j]plot(X Y )ax[i j]plot(XX Z )ax[i j]set_title(alpha=12f noise=12f min_samples_leaf=d (

alpha noise min_samples_leaf))

fig ax = pltsubplots(2 2 figsize=(12 6))

alpha noise min_samples_leaf = 05 02 40plot2(0 0 alpha noise min_samples_leaf ax)

alpha noise min_samples_leaf = 2 04 40plot2(0 1 alpha noise min_samples_leaf ax)

alpha noise min_samples_leaf = 05 02 30plot2(1 0 alpha noise min_samples_leaf ax)

alpha noise min_samples_leaf = 2 04 30plot2(1 1 alpha noise min_samples_leaf ax)

pltsuptitle(Arbre de deacutecision optimiseacutenpour la reacutegression lineacuteaire par morceaux)

Cxavierdupre__home_github_forkscikit-learnsklearntree_classespy335 FutureWarningrarrThe parameter X_idx_sorted is deprecated and has no effect It will be removed in 1rarr1 (renaming of 026) You can suppress this warning by not passing any value to the X_rarridx_sorted parameterwarningswarn(

Cxavierdupre__home_github_forkscikit-learnsklearntree_classespy335 FutureWarningrarrThe parameter X_idx_sorted is deprecated and has no effect It will be removed in 1rarr1 (renaming of 026) You can suppress this warning by not passing any value to the X_rarridx_sorted parameterwarningswarn(

Cxavierdupre__home_github_forkscikit-learnsklearntree_classespy335 FutureWarningrarrThe parameter X_idx_sorted is deprecated and has no effect It will be removed in 1rarr1 (renaming of 026) You can suppress this warning by not passing any value to the X_rarridx_sorted parameterwarningswarn(

Cxavierdupre__home_github_forkscikit-learnsklearntree_classespy335 FutureWarningrarrThe parameter X_idx_sorted is deprecated and has no effect It will be removed in 1rarr1 (renaming of 026) You can suppress this warning by not passing any value to the X_rarridx_sorted parameterwarningswarn(

134 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Il faudrait ajouter des contraintes de continuiteacute

Cette reacutegression par morceaux est obtenue gracircce agrave un arbre de deacutecision Celui-ci trie le nuage de points (Xi Yi) parordre croissant selon les X soit Xi ⩽ Xi+1 Lrsquoarbre coupe en deux lorsque la diffeacuterence des erreurs quadratiques estmaximale erreur quadratique obtenue en approximant Y par sa moyenne sur lrsquointervalle consideacutereacute On note lrsquoerreurquadratique

C(i j) = 1jminusi+1

sumi⩽k⩽j Yi

D(i j) = 1jminusi+1

sumi⩽k⩽j Y

2i

E(i j) = 1jminusi+1

sumi⩽k⩽j(Yi minus C(i j))2 = 1

jminusi+1

sumi⩽k⩽j Y

2i minus C(i j)2 = D(i j)minus C(i j)2

La derniegravere ligne applique la formule VX = EX2 minus EX2 qui est facile agrave redeacutemontrer Lrsquoalgorithme de lrsquoarbre dedeacutecision coupe un intervalle en deux et deacutetermine lrsquoindice k qui minimise la diffeacuterence

∆k = E(1 n)minus (E(1 k) + E(k + 1 n))

Lrsquoarbre de deacutecision optimise la construction drsquoune fonction en escalier qui repreacutesente au mieux le nuage de points lestraits verts sur le graphe suivant alors qursquoil faudrait choisir une erreur quadratique qui corresponde aux traits oranges

33 Reacutegression lineacuteaire par morceaux 135

Machine Learning Statistiques et Programmation Version 035930

Il suffirait donc de remplacer lrsquoerreur E par celle obtenue par une reacutegression lineacuteaire Mais si crsquoeacutetait aussi simplelrsquoimpleacutementation de sklearntreeDecisionTreeRegressor118 la proposerait Alors pourquoi La raison principale estque cela coucircte trop cher en temps de calcul Pour trouver lrsquoindice k il faut calculer toutes les erreursE(1 k)E(k+1 n)ce qui coucircte tregraves cher lorsque cette erreur est celle drsquoune reacutegression lineacuteaire parce qursquoil est difficile de simplifier ladiffeacuterence

∆k minus∆kminus1 = minus(E(1 k) + E(k + 1 n)) + (E(1 k minus 1) + E(k n))= E(1 k minus 1)minus E(1 k) + E(k n)minus E(k + 1 n)

Arbre de reacutegression constanteOn srsquointeacuteresse au terme E(1 kminus1)minusE(1 k) dans le cas le nuage de points est repreacutesenteacute par une constante sur chaquesegment Crsquoest lrsquohypothegravese faite par lrsquoalgorithme classique de construction drsquoun arbre de reacutegression (segments vertssur le premier dessin)

C(1 k minus 1)minus C(1 k) = 1kminus1

sum1⩽i⩽kminus1 Yi minus 1

k

sum1⩽i⩽k Yi

= ( 1kminus1 minus

1k )sum

1⩽i⩽kminus1 Yi minus Yk

k

= 1k(kminus1)

sum1⩽i⩽kminus1 Yi minus Yk

k

= 1kC(1 k minus 1)minus Yk

k

On en deacuteduit que

E(1 k minus 1)minus E(1 k) = 1kD(1 k minus 1)minus Y 2

k

k + (C(1 k minus 1)minus C(1 k))(C(1 k minus 1) + C(1 k))

= 1kD(1 k minus 1)minus Y 2

k

k +(1kC(1 k minus 1)minus Yk

k

) (Yk

k minus1kC(1 k minus 1) + 2C(1 k minus 1)

)On voit que cette formule ne fait intervenir que C(1 kminus1) D(1 kminus1) Yk elle est donc tregraves rapide agrave calculer et crsquoestpour cela qursquoapprendre un arbre de deacutecision peut srsquoapprendre en un temps raisonnable Cela repose sur la possibiliteacute decalculer le critegravere optimiseacute par reacutecurrence On voit eacutegalement que ces formules ne font pas intervenir X elles sont doncgeacuteneacuteralisables au cas multidimensionnel Il suffira de trier les couples (Xi Yi) selon chaque dimension et deacuteterminerle meilleur seuil de coupure drsquoabord sur chacune des dimensions puis de prendre le meilleur de ces seuils sur toutes lesdimensions Le problegraveme est reacutesoluLe notebook Custom Criterion for DecisionTreeRegressor119 impleacutemente une version pas efficace du critegravere MSE120

et compare la vitesse drsquoexeacutecution avec lrsquoimpleacutementation de scikit-learn121 Il impleacutemente ensuite le calcul rapidede scikit-learn pour montrer qursquoon obtient un temps comparable Le reacutesultat est sans eacutequivoque La version rapidenrsquoimpleacutemente pas ∆k minus∆kminus1 mais plutocirct les sommes

sumk1 wiYi

sumk1 wiY

2i dans un sens et dans lrsquoautre En gros le

code stocke les seacuteries des numeacuterateurs et des deacutenominateurs pour les diviser au dernier momentArbre de reacutegression lineacuteaireLe cas drsquoune reacutegression est plus complexe Prenons drsquoabord le cas ougrave il nrsquoy a qursquoun seule dimension il faut drsquoabordoptimiser le problegraveme

E(1 n) = minab

=

nsumk=1

(aXk + bminus Yk)2

118 httpsscikit-learnorgstablemodulesgeneratedtreeDecisionTreeRegressorhtml119 httpwwwxavierduprefrappmlinsightshelpsphinxnotebookspiecewise_linear_regression_criterionhtml120 httpsscikit-learnorgstablemodulesgeneratedsklearnmetricsmean_squared_errorhtml121 httpsscikit-learnorg

136 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

On deacuterive pour aboutir au systegraveme drsquoeacutequations suivant

partE(1n)parta = 0 =

sumnk=1 Xk(aXk + bminus Yk)

partE(1n)partb = 0 =

sumnk=1 aXk + bminus Yk

Ce qui aboutit agrave

a(1 n) =sumn

k=1 XkYkminus(sumn

k=1 Xk)(sumn

k=1 Yk)sumnk=1 X2

kminus(sumn

k=1 Xk)2

b(1 n) =sumn

k=1 Yk minus a (sumn

k=1 Xk)

Pour construire un algorithme rapide pour apprendre un arbre de deacutecision avec cette fonction de coucirct il fautpouvoir calculer a(1 k) en fonction de a(1 k minus 1) b(1 k minus 1) Xk Yk ou drsquoautres quantiteacutes intermeacutediaires quine font pas intervenir les valeurs Xiltk lt Yiltk Drsquoapregraves ce qui preacutecegravede cela paraicirct tout-agrave-fait possible Maisdans le cas multidimensionnel122 il faut deacuteterminer le vecteur A qui minimise

sumnk=1 ∥Y minusXA∥2 ce qui donne

A = (X primeX)minus1X primeY Si on note M1k la matrice M tronqueacutee pour ne garder que ses k premiegraveres lignes il faudraitpouvoir calculer rapidement

Akminus1 minusAk = (X prime1kminus1X1kminus1)

minus1X prime1kminus1Y1kminus1 minus (X prime

1kX1k)minus1X prime

1kY1k

La documentation de sklearntreeDecisionTreeRegressor123 ne mentionne que deux critegraveres pour apprendreun arbre de deacutecision de reacutegression MSE pour sklearnmetricsmean_squared_error124 et MAE poursklearnmetricsmean_absolute_error125 Les autres critegraveres nrsquoont probablement pas eacuteteacute envisageacutes Lrsquoarticle[Acharya2016] eacutetudie la possibiliteacute de ne pas calculer la matrice Ak pour tous les k Le paragraphe Streaming LinearRegression (page 144) utilise le fait que la matrice A est la solution drsquoun problegraveme drsquooptimisation quadratique etpropose un algorithme de mise agrave jour de la matrice A (cas unidimensionnel) Cet exposeacute va un peu plus loin pourproposer une version qui ne calcule pas de matrices inverses

Impleacutementation naiumlve drsquoune reacutegression lineacuteaire par morceaux

On part du cas geacuteneacuteral qui eacutecrit la solution drsquoune reacutegression lineacuteaire comme eacutetant la matrice A = (X primeX)minus1X primeY et onadapte lrsquoimpleacutementation de scikit-learn126 pour optimiser lrsquoerreur quadratique obtenue Ce nrsquoest pas simple mais pasimpossible Il faut entrer dans du code cython127 et pour eacuteviter de reacuteeacutecrire une fonction qui multiplie et inverse unematrice on peut utiliser la librairie LAPACK128 Je ne vais pas plus loin ici car cela serait un peu hors sujet mais cenrsquoeacutetait pas une partie de plaisir Cela donne piecewise_tree_regression_criterion_linearpyx129 Crsquoest illustreacute toujourspar le notebook DecisionTreeRegressor optimized for Linear Regression130

Aparteacute sur la continuiteacute de la reacutegression lineacuteaire par morceaux

Approcher la fonction y = f(x) + ϵ quand x et y sont reacuteels est un problegraveme facile trop facile A voir le dessinpreacuteceacutedent il est naturel de vouloir recoller les morceaux lorsqursquoon passe drsquoun segment agrave lrsquoautre Il srsquoagit drsquouneoptimisation sous contrainte Il est possible eacutegalement drsquoajouter une contrainte de reacutegularisation qui tient comptede cela On exprime cela comme suit avec une reacutegression lineacuteaire agrave deux morceaux

E =sumXi⩽t

(a1Xi + b1 minus y)2 +sumXi⩾t

(a2Xi + b2 minus y)2 + λ(a1t+ b1 minus a2tminus b)2

122 httpsfrwikipediaorgwikiRC3A9gression_linC3A9aireEstimateur_des_moindres_carrC3A9s123 httpsscikit-learnorgstablemodulesgeneratedtreeDecisionTreeRegressorhtml124 httpsscikit-learnorgstablemodulesgeneratedmetricsmean_squared_errorhtml125 httpsscikit-learnorgstablemodulesgeneratedmetricsmean_absolute_errorhtml126 httpsscikit-learnorg127 httpscythonorg128 httpwwwnetliborglapack129 httpsgithubcomsdpythonmlinsightsblobmastermlinsightsmlmodelpiecewise_tree_regression_criterion_linearpyx130 httpwwwxavierduprefrappmlinsightshelpsphinxnotebookspiecewise_linear_regression_criterionhtml

33 Reacutegression lineacuteaire par morceaux 137

Machine Learning Statistiques et Programmation Version 035930

Le cas multidimensionnel est loin drsquoecirctre aussi simple Avec une dimension chaque zone a deux voisines En deuxdimensions chaque zone peut en avoir plus de deux La figure suivante montre une division de lrsquoespace dans laquellela zone centrale a cinq voisins

Peut-on facilement approcher une fonction z = f(x y) + ϵ par un plan en trois dimensions A moins que tous lessommets soient deacutejagrave dans le mecircme plan crsquoest impossible La zone en question nrsquoest peut-ecirctre mecircme pas convexe Unereacutegression lineacuteaire par morceaux et continue en plusieurs dimensions nrsquoest pas un problegraveme facile Cela nrsquoempecircchepas pour autant drsquoinfluencer la deacutetermination de chaque morceaux avec une contrainte du type de celle eacutevoqueacutee plushaut mais pour eacutecrire la contrainte lorsque les zones sont construites agrave partir des feuilles drsquoun arbre de deacutecision il fautdeacuteterminer quelles sont les feuilles voisines Et ccedila crsquoest un problegraveme inteacuteressant

Reacutegression lineacuteaire et correacutelation

On reprend le calcul multidimensionnel mais on srsquointeacuteresse au cas ougrave la matrice X primeX est diagonale quicorrespond au cas ougrave les variables X1 XC ne sont pas correacuteleacutees Si X primeX = diag(λ1 λC) =diag(

sumnk=1 X

2k1

sumnk=1 X

2kC) la matrice A srsquoexprime plus simplement A = Dminus1X primeY On en deacuteduit que

ac =

sumnk=1 XkcYksumnk=1 X

2kc

=

sumnk=1 XkcYk

λc

Cette expression donne un indice sur la reacutesolution drsquoune reacutegression lineacuteaire pour laquelle les variables sont correacuteleacutees Ilsuffit drsquoappliquer drsquoabord une ACP131 (Analyse en Composantes Principales) et de calculer les coefficients ac associeacutesagrave des valeurs propres non nulles On eacutecrit alors X primeX = P primeDP ougrave la matrice P veacuterifie P primeP = I

Ideacutee de lrsquoalgorithme

On srsquointeacuteresser drsquoabord agrave la recherche drsquoun meilleur point de coupure Pour ce faire les eacuteleacutements (Xi yi) sont trieacutesle plus souvent selon lrsquoordre deacutefini par une dimension On note E lrsquoerreur de preacutediction sur cette eacutechantillon E =minβ

sumk(Xkβ minus yk)

2 On deacutefinit ensuite E(i j) = minβsumj

k=i(Xkβ minus yk)2 Drsquoapregraves cette notation E = E(1 n)

La construction de lrsquoarbre de deacutecision passe par la deacutetermination de klowast qui veacuterifie

E(1 klowast) + E(klowast + 1 n) = mink E(1 k) + E(k + 1 n)

= mink

(minβ1

sumkl=1(Xlβ1 minus yl)

2 +minβ2

sumnl=k+1(Xlβ2 minus yl)

2)

Autrement dit on cherche le point de coupure qui maximise la diffeacuterence entre la preacutediction obtenue avec deuxreacutegressions lineacuteaires plutocirct qursquoune On sait qursquoil existe une matrice P qui veacuterifie

PP prime = 1 et (XP )prime(XP ) = P primeX primeXP = D = Z primeZ

131 httpsfrwikipediaorgwikiAnalyse_en_composantes_principales

138 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Ougrave D = diag(d1 dC) est une matrice diagonale On a poseacute Z = XP donc da =lt Za Za gt On peut reacuteeacutecrire leproblegraveme de reacutegression comme ceci

βlowast = argminβ

sumi

∥yi minusXiβ∥ = argminβ∥Y minusXβ∥

Comme X = ZP prime

∥Y minusXβ∥ = ∥Y minusXβ∥ = ∥Y minus ZP primeβ∥ = ∥Y minus Zγ∥

Avec γ = P primeβ Crsquoest la mecircme reacutegression apregraves un changement de repegravere et on la reacutesoud de la mecircme maniegravere

γlowast = (Z primeZ)minus1Z primeY = Dminus1Z primeY

La notation Mi deacutesigne la ligne i et M[k] deacutesigne la colonne On en deacuteduit que le coefficient de la reacutegression γk esteacutegal agrave

γk =lt Z[k] Y gt

lt Z[k] Z[k] gt=

lt (XP prime)[k] Y gt

lt (XP prime)[k] (XP prime)[k] gt

On en deacuteduit que

∥Y minusXβ∥ =

∥∥∥∥∥Y minusCsum

k=1

Z[k]

lt Z[k] Y gt

lt Z[k] Z[k] gt

∥∥∥∥∥ =

∥∥∥∥∥Y minusCsum

k=1

(XP prime)[k]lt (XP prime)[k] Y gt

lt (XP prime)[k] (XP prime)[k] gt

∥∥∥∥∥Algorithme A1 Arbre de deacutecision optimiseacute pour les reacutegressions lineacuteairesOn dipose qursquoun nuage de points (Xi yi) avec Xi isin Rd et yi isin R Les points sont trieacutes selon une dimension On noteX la matrice composeacutee des lignes X1 Xn et le vecteur colonne y = (y1 yn) Il existe une matrice P telle queP primeP = I et X primeX = P primeDP avec D une matrice diagonale On note Xab la matrice constitueacutee des lignes a agrave b Oncalcule

MSE(X y a b) =

∥∥∥∥∥Y minusCsum

k=1

(XabPprime)[k]

lt (XabPprime)[k] Y gt

lt (XabP prime)[k] (XabP prime)[k] gt

∥∥∥∥∥2

Un noeud de lrsquoarbre est construit en choisissant le point de coupure qui minimise

MSE(X y 1 t) +MSE(X y t+ 1 n)

Par la suite on verra que le fait que la matrice soit diagonale est lrsquoeacuteleacutement principal mais la matrice P ne doit pasneacutecessairement veacuterifier P primeP = I

Un peu plus en deacutetail dans lrsquoalgorithme

Jrsquoai penseacute agrave plein de choses pour aller plus loin car lrsquoideacutee est de quantifier agrave peu pregraves combien on pert en preacutecisionen utilisant des vecteurs propres estimeacutes avec lrsquoensemble des donneacutees sur une partie seulement Je me suis demandeacutesi les vecteurs propres drsquoune matrice pouvait ecirctre construit agrave partir drsquoune fonction continue de la matrice symeacutetriquede deacutepart A peu pregraves vrai mais je ne voyais pas une faccedilon de majorer cette continuiteacute Ensuite je me suis dit que lesvecteurs propres deX primeX ne devaient pas ecirctre loin de ceux deX prime

σXσ ougrave σ est un sous-eacutechantillon aleacuteatoire de lrsquoensemblede deacutepart Donc comme il faut juste avoir une base de vecteurs orthogonaux je suis passeacute agrave liquestorthonormalisation deGram-Schmidt132 Il nrsquoa pas non plus ce deacutefaut de permuter les dimensions ce qui rend lrsquoobservation de la continuiteacute a

132 httpsfrwikipediaorgwikiAlgorithme_de_Gram-Schmidt

33 Reacutegression lineacuteaire par morceaux 139

Machine Learning Statistiques et Programmation Version 035930

little bit more complicated comme le max dans liquestalgorithme de Jacobi133 Lrsquoideacutee est se servir cette orthonormalisationpour construire la matrice P de lrsquoalgortihmeLa matrice P isin MCC est constitueacutee de C vecteurs ortonormaux (P[1] P[C]) Avec les notations que jrsquoai utiliseacuteesjusqursquoagrave preacutesent X[k] = (X1k Xnk) On note la matrice identiteacute IC = I

T[1] =X[1]

∥X[1]∥P[1] =

I[1]

∥X[1]∥T[2] =

X[2]minusltX[2]T[1]gtT[1]

∥X[2]minusltX[2]T[1]gtT[1]∥P[2] =

I[2]minusltX[2]T[1]gtT[1]

∥X[2]minusltX[2]T[1]gtT[1]∥

T[k] =X[k]minus

sumkminus1i=1 ltX[k]T[i]gtT[i]

∥X[2]minussumkminus1

i=1 ltX[k]T[i]gtT[i]∥P[k] =

I[k]minussumkminus1

i=1 ltX[k]T[i]gtT[i]

∥X[2]minussumkminus1

i=1 ltX[k]T[i]gtT[i]∥

La matrice T veacuterifie T primeT = I puisque les vecteurs sont construits de faccedilon agrave ecirctre orthonormeacutes Et on veacuterifie queXP = T et donc PXX primeP prime = I Crsquoest impleacutementeacute par la fonction gram_schmidtltltlt

import numpyfrom mlstatpymlmatrices import gram_schmidt

X = numpyarray([[1 05 0] [0 04 2]] dtype=float)TU P = gram_schmidt(XT change=True)U P = UT PTm = X PD = mT mprint(D)

gtgtgt

[[1000e+00 2776e-17][2776e-17 1000e+00]]

Cela deacutebouche sur une autre formulation du calcul drsquoune reacutegression lineacuteaire agrave partir drsquoune orthornormalisation deGram-Schmidt qui est impleacutementeacutee dans la fonction linear_regressionltltlt

import numpyfrom mlstatpymlmatrices import linear_regression

X = numpyarray([[1 05 0] [0 04 2]] dtype=float)Ty = numpyarray([1 13 39])beta = linear_regression(X y algo=gram)print(beta)

gtgtgt

[1008 1952]

Lrsquoavantage est que cette formulation srsquoexprime uniquement agrave partir de produits scalaires Voir le notebook Reacutegressionsans inversion (page 147)

133 httpsenwikipediaorgwikiJacobi_eigenvalue_algorithm

140 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

332 Synthegravese matheacutematique

Algorithme A2 Orthonormalisation de Gram-SchmidtSoit une matrice X isin Mnd avec n ⩾ d Il existe deux matrices telles que XP = T ou P primeX prime = T prime P isin Mdd etT isin Mnd La matrice T est triangulaire supeacuterieure et veacuterifie T primeT = Id (Id est la matrice identiteacute) Lrsquoalgorithme sedeacutecrit comme suit

foralli isin range(1 d)xi = X[i] minus

sumjlti lt T[j] X[i] gt T[j]

pi = P[i] minussum

jlti lt T[j] X[i] gt P[j]

T[i] =xi

∥xi∥P[i] =

pi

∥pi∥

Theacuteoregraveme T1 Reacutegression lineacuteaire apregraves Gram-SchmidtSoit une matrice X isin Mnd avec n ⩾ d Et un vecteur y isin Rn Drsquoapregraves liquestalgorithme de Gram-Schmidt (page 141)il existe deux matrices telles que XP = T ou P primeX prime = T prime P isin Mdd et T isin Mnd La matrice T est triangulairesupeacuterieure et veacuterifie T primeT = Id (Id est la matrice identiteacute) Alors β = T primeyP prime = P primeX primeyP prime = (X primeX)minus1X primey β est lasolution du problegraveme drsquooptimisation minβ ∥y minusXβ∥2

La deacutemonstration est geacuteomeacutetrique et reprend lrsquoideacutee du paragraphe preacuteceacutedent La solution de la reacutegression peut ecirctrevu comme la projection du vecteur y sur lrsquoespace vectoriel engendreacute par les vecteurs X[1] X[d] Par constructioncet espace est le mecircme que celui engendreacute par T[1] T[d] Dans cette base la projection de y a pour coordooneacuteeslt y T[1] gt lt y T[d] gt= T primey On en deacuteduit que la projection de y srsquoexprimer comme

y =

dsumk=1

lt y T[k] gt T[k]

Il ne reste plus qursquoagrave expremier cette projection dans la base initial X On sait que T[k] = XP[k] On en deacuteduit que

y =sumd

k=1 lt y T[k] gt XP[k]

=sumd

k=1 lt y T[k] gtsumd

l=1 X[l]Plk

=sumd

l=1 X[l]

sumdk=1 lt y T[k] gt Plk

=sumd

l=1 X[l](TprimeyPl)

=sumd

l=1 X[l]βl

Drsquoougrave β = T primeyP prime Lrsquoimpleacutementation suit ltltlt

import numpyX = numpyarray([[1 2 3 4]

[5 6 6 6][5 6 7 8]])T

Xt = XTTt = numpyempty(Xtshape)Pt = numpyidentity(Xshape[1])for i in range(0 Xtshape[0])

Tt[i ] = Xt[i ]for j in range(0 i)

d = numpydot(Tt[j ] Xt[i ])(suite sur la page suivante)

33 Reacutegression lineacuteaire par morceaux 141

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

Tt[i ] -= Tt[j ] dPt[i ] -= Pt[j ] d

d = numpydot(Tt[i ] Tt[i ])if d gt 0

d = 05Tt[i ] = dPt[i ] = d

print(X)print(X)print(T)print(TtT)print(X P)print(X PtT)print(T T)print(Tt TtT)

y = numpyarray([01 02 019 029])beta1 = numpylinalginv(Xt X) Xt ybeta2 = Tt y Ptprint(beta1)print(beta1)print(beta2)print(beta2)

gtgtgt

X[[1 5 5][2 6 6][3 6 7][4 6 8]]

T[[ 0183 0736 0651][ 0365 0502 -067 ][ 0548 0024 -0181][ 073 -0453 0308]]

X P[[ 0183 0736 0651][ 0365 0502 -067 ][ 0548 0024 -0181][ 073 -0453 0308]]

T T[[ 1000e+00 3886e-16 9021e-16][ 3886e-16 1000e+00 -1110e-14][ 9021e-16 -1110e-14 1000e+00]]

beta1[ 0077 0037 -0032]beta2[ 0077 0037 -0032]

La librairie impleacutemente ces deux algorithmes de maniegravere un peu plus efficace dans les fonctions gram_schmidt etlinear_regression

142 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

333 Streaming

Streaming Gram-Schmidt

Je ne sais pas vraiment comment le dire en franccedilais peut-ecirctre reacutegression lineacuteaire mouvante Mecircme Google ou Binggarde le mot streaming dans leur traduction Crsquoest neacuteanmoins lrsquoideacutee qursquoil faut reacuteussir agrave mettre en place drsquoune faccedilonou drsquoune autre car pour choisir le bon point de coupure pour un arbre de deacutecision On note X1k la matrice composeacuteedes lignes X1 Xk et le vecteur colonne y1k = (y1 yk) Lrsquoapprentissage de lrsquoarbre de deacutecision faut calculer desreacutegressions pour les problegravemes (X1k y1k) (X1k+1 y1k+1) Lrsquoideacutee que je propose nrsquoest pas parfaite mais ellefonctionne pour lrsquoideacutee de lrsquoalgorithme avec Gram-Schmidt (page 139)Tout drsquoabord il faut imaginer un algorithme de Gram-Schmidt version streaming Pour la matriceX prime

1k celui-ci produitdeux matrices T1k et P1k telles que X prime

1kP1k = T1k On note d la dimension des observations Comment fairepour ajouter une observation (Xk+1 yk+1) Lrsquoideacutee drsquoun algorithme au format streaming est que le coucirct de la mise agravejour pour lrsquoiteacuteration k+1 ne deacutepend pas de kOn suppose donc que (Tk Pk) sont les deux matrices retourneacutees par lrsquoalgorithme de algo_gram_schmidt On construitla matrice Vk+1 = [Tk Xk+1Pk] on ajoute une ligne agrave la matrice Tk On applique une iteacuteration de algorithmede algo_gram_schmidt pour obtenir (Tk+1 P ) On en deacuteduit que (Tk+1 Pk+1) = (Tk+1 PkP ) Lrsquoexpression de lareacutegression ne change pas mais il reste agrave lrsquoexpression de telle sorte que les expressions ne deacutependent pas de k CommeTk = X[1k]Pk la seule matrice qui nous inteacuteresse veacuteritablement est PkMaintenant on considegravere la matrice T[1k] qui veacuterifie T prime

kTk = Id et on ajoute une ligne Xk+1Pk pour former[[Tk][Xk+1Pk]] = [[X[1k]Pk][Xk+1Pk]] La fonction streaming_gram_schmidt_update impleacutemente la mise agravejour Le coucirct de la fonction est en O(d2)ltltlt

import numpyfrom mlstatpymlmatrices import streaming_gram_schmidt_update gram_schmidt

X = numpyarray([[1 05 10 5 -2][0 04 20 4 2][0 07 20 4 2]] dtype=float)T

Xt = XT

Tk Pk = gram_schmidt(X[3]T change=True)print(k=format(3))print(Pk)Tk = X[3] PkTprint(TkT Tk)

k = 3while k lt Xshape[0]

streaming_gram_schmidt_update(Xt[ k] Pk)k += 1print(k=format(k))print(Pk)Tk = X[k] PkTprint(TkT Tk)

gtgtgt

k=3[[ 0099 0 0 ][-0953 0482 0 ]

(suite sur la page suivante)

33 Reacutegression lineacuteaire par morceaux 143

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

[-0287 -3338 3481]][[ 1000e+00 -1749e-15 -2234e-15][-1749e-15 1000e+00 1387e-14][-2234e-15 1387e-14 1000e+00]]

k=4[[ 0089 0 0 ][-0308 0177 0 ][-003 -3334 3348]]

[[ 1000e+00 -4441e-16 -1793e-15][-4441e-16 1000e+00 2377e-15][-1793e-15 2377e-15 1000e+00]]

k=5[[ 0088 0 0 ][-0212 0128 0 ][-0016 -3335 3342]]

[[ 1000e+00 -9714e-17 -6210e-15][-9714e-17 1000e+00 1978e-16][-6210e-15 1978e-16 1000e+00]]

Streaming Linear Regression

Je reprends lrsquoideacutee introduite dans lrsquoarticle Efficient online linear regression134 On cherche agrave minimiser L(β) =

∥y minusXβ∥2 et le vecteur solution annuler le gradient nabla(β) = minus2X prime(y minus Xβ) = 0 On note le vecteur βk quiveacuterifie nabla(βk) = minus2X prime

1k(y1k minusX1kβk) = 0 Qursquoen est-il de βk+1 On note βk+1 = βk + dβ

nabla(βk+1) = minus2X prime1k+1(y1k+1 minusX1k+1(βk + dβ))

= minus2[X prime1kX

primek+1]([y1kyk+1]minus [X1kXk+1]

prime(βk + dβ))= minus2X prime

1k(y1k minusX1k(βk + dβ))minus 2X primek+1(yk+1 minusXk+1(βk + dβ))

= 2X prime1kX1kdβ minus 2X prime

k+1(yk+1 minusXk+1(βk + dβ))= 2(X prime

1kX1k +X primek+1Xk+1)dβ minus 2X prime

k+1(yk+1 minusXk+1βk)

On en deacuteduit la valeur dβ qui annule le gradient On peut deacutecliner cette formule en version streaming Crsquoestce qursquoimpleacutemente la fonction streaming_linear_regression_update Le coucirct de lrsquoalgorithme est en O(d3)Lrsquoinconveacutenient de cet algorithme est qursquoil requiert des matrices inversibles Crsquoest souvent le cas et la probabiliteacute quecela ne le soit pas deacutecroicirct avec k Crsquoest un petit inconveacutenient compte tenu de la simpliciteacute de lrsquoimpleacutementation Onveacuterifie que tout fonction bien sur un exempleltltlt

import numpy

def linear_regression(X y)inv = numpylinalginv(XT X)return inv (XT y)

def streaming_linear_regression_update(Xk yk XkXk bk)Xk = Xkreshape((1 XkXkshape[0]))xxk = XkT XkXkXk += xxk

(suite sur la page suivante)

134 httpsstatsstackexchangecomquestions6920efficient-online-linear-regression

144 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

err = XkT (yk - Xk bk)bk[] += (numpylinalginv(XkXk) err)flatten()

def streaming_linear_regression(mat y start=None)if start is None

start = matshape[1]

Xk = mat[start]XkXk = XkT Xkbk = numpylinalginv(XkXk) (XkT y[start])yield bk

k = startwhile k lt matshape[0]

streaming_linear_regression_update(mat[k] y[kk + 1] XkXk bk)yield bkk += 1

X = numpyarray([[1 05 10 5 -2][0 04 20 4 2][0 07 20 4 3]] dtype=float)T

y = numpyarray([1 03 10 51 -3])

for i bk in enumerate(streaming_linear_regression(X y))bk0 = linear_regression(X[i + 3] y[i + 3])print(iteration i bk bk0)

gtgtgt

iteration 0 [ 1 0667 -0667] [ 1 0667 -0667]iteration 1 [ 103 0682 -0697] [ 103 0682 -0697]iteration 2 [ 1036 0857 -0875] [ 1036 0857 -0875]

Streaming Linear Regression version Gram-Schmidt

Lrsquoalgorithme reprend le theacuteoregraveme Reacutegression lineacuteaire apregraves Gram-Schmidt (page 141) et lrsquoalgorithme Streaming Gram-Schmidt (page 143) Tout tient dans cette formule βk = P prime

kXprime1ky1kP

primek qursquoon eacutecrit diffeacuteremment en consideacuterent

lrsquoassociativiteacute de la multiplication des matrices βk = P primek(X

prime1ky1k)P

primek La matrice centrale a pour dimension

d Lrsquoexemple suivant impleacutemente cette ideacutee Il srsquoappuie sur les fonctions streaming_gram_schmidt_update etgram_schmidtltltlt

import numpyfrom mlstatpymlmatrices import gram_schmidt streaming_gram_schmidt_update

def linear_regression(X y)inv = numpylinalginv(XT X)return inv (XT y)

(suite sur la page suivante)

33 Reacutegression lineacuteaire par morceaux 145

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

def streaming_linear_regression_gram_schmidt_update(Xk yk Xkyk Pk bk)Xk = XkTstreaming_gram_schmidt_update(Xk Pk)Xkyk += (Xk yk)reshape(Xkykshape)bk[] = Pk Xkyk Pk

def streaming_linear_regression_gram_schmidt(mat y start=None)if start is None

start = matshape[1]

Xk = mat[start]xyk = XkT y[start]_ Pk = gram_schmidt(XkT change=True)bk = Pk xyk Pkyield bk

k = startwhile k lt matshape[0]

streaming_linear_regression_gram_schmidt_update(mat[k] y[k] xyk Pk bk)

yield bkk += 1

X = numpyarray([[1 05 10 5 -2][0 04 20 4 2][0 07 20 4 3]] dtype=float)T

y = numpyarray([1 03 10 51 -3])

for i bk in enumerate(streaming_linear_regression_gram_schmidt(X y))bk0 = linear_regression(X[i + 3] y[i + 3])print(iteration i bk bk0)

gtgtgt

iteration 0 [ 1 0667 -0667] [ 1 0667 -0667]iteration 1 [ 103 0682 -0697] [ 103 0682 -0697]iteration 2 [ 1036 0857 -0875] [ 1036 0857 -0875]

Ces deux fonctions sont impleacutementeacutees dans le module par streaming_linear_regression_gram_schmidt_updateet streaming_linear_regression_gram_schmidt Le coucirct de lrsquoalgorithme est en O(d3) mais nrsquoinclut pasdrsquoinversion de matrices

146 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

334 Digressions

Lrsquoarticle An Efficient Two Step Algorithm for High DimensionalChange Point Regression Models Without GridSearch135 propose un cadre theacuteorique pour deacuteterminer une frontiegravere dans un nuage de donneacutees qui deacutelimite unchangement de modegravele lineacuteaire Le suivant eacutetudie des changements de paramegravetres Change Surfaces for ExpressiveMultidimensionalChangepoints and Counterfactual Prediction136 drsquoune faccedilon plus geacuteneacuterique

335 Notebooks

Reacutegression sans inversion

Ce notebook mesure le temps de calcul dans deux algorithmes pour reacutesoudre une reacutegression lineacuteaire le premierinverse un matrice le second le fait sans inverser une matrice le troisiegraveme reprend lrsquoideacutee du second mais utilise unedeacutecomposition QR137 puis inverse la matrice R

matplotlib inline

import numpyrandom as rndX = rndrandn(1000 7)eps = rndrandn(1000 1) 3y = Xsum(axis=1)reshape((Xshape[0] 1)) + epsy = yravel()Xshape yshape epsshape

((1000 7) (1000) (1000 1))

from mlstatpymlmatrices import linear_regression gram_schmidtbeta1 = linear_regression(X y algo=None)beta2 = linear_regression(X y algo=gram)beta1 beta2

(array([097915374 100078055 100537618 101021414 10003261 09944518 098742625])

array([097915374 100078055 100537618 101021414 10003261 09944518 098742625]))

timeit linear_regression(X y algo=None)

384 ţs plusmn 207 ţs per loop (mean plusmn std dev of 7 runs 10000 loops each)

timeit linear_regression(X y algo=gram)

310 ţs plusmn 136 ţs per loop (mean plusmn std dev of 7 runs 1000 loops each)

timeit linear_regression(X y algo=qr)

135 httpjmlrorgpapersvolume2018-46018-460pdf136 httpjmlrorgpapersvolume2017-35217-352pdf137 httpsfrwikipediaorgwikiDC3A9composition_QR

33 Reacutegression lineacuteaire par morceaux 147

Machine Learning Statistiques et Programmation Version 035930

139 ţs plusmn 829 ţs per loop (mean plusmn std dev of 7 runs 10000 loops each)

Xt = XTtimeit gram_schmidt(Xt)

210 ţs plusmn 591 ţs per loop (mean plusmn std dev of 7 runs 1000 loops each)

Un exemple avec scikit-learn138

from sklearnlinear_model import LinearRegressionclr = LinearRegression()timeit clrfit(X y)

443 ţs plusmn 483 ţs per loop (mean plusmn std dev of 7 runs 1000 loops each)

Qui utilise la fonction lstsq139

from numpylinalg import lstsqtimeit lstsq(X y rcond=None)

755 ţs plusmn 257 ţs per loop (mean plusmn std dev of 7 runs 10000 loops each)

Il serait sans doute possible drsquooptimiser les calculs en reacuteduisant le nombre de copie et de transposeacutees La versionutilisant une deacutecomposition QR140 est assez rapide Le code est lagrave matricespy141 Pour deacutepasser numpy142 il fautpasser au C++ scikit-learn ajoute des eacutetapes intermeacutediaires pour veacuterifier les donneacutees ce qui explique la longueur Onreacutesume le tout par un graphique

from cpyquickhelpernumbers import measure_time

stmts = [dict(name=lr_matrix fct=linear_regression(X y algo=None))dict(name=lr_gram fct=linear_regression(X y algo=gram))dict(name=lr_qr fct=linear_regression(X y algo=qr))dict(name=gram fct=gram_schmidt(Xt))dict(name=sklearn fct=clrfit(X y))dict(name=lstsq fct=lstsq(X y))]

memo = []for size dim in [(100 10) (1000 10) (10000 10)

(100 20) (1000 20) (10000 20)(100 50) (1000 50)]

print(size dim)X = rndrandn(size dim)eps = rndrandn(size 1) 3y = Xsum(axis=1)reshape((Xshape[0] 1)) + epsy = yravel()context = dict(linear_regression=linear_regression Xt=XT

X=X y=y gram_schmidt=gram_schmidt clr=clr(suite sur la page suivante)

138 httpsscikit-learnorgstablemodulesgeneratedsklearnlinear_modelLinearRegressionhtml139 httpsdocsscipyorgdocnumpyreferencegeneratednumpylinalglstsqhtmlhighlight=lstsq140 httpsfrwikipediaorgwikiDC3A9composition_QR141 httpsgithubcomsdpythonmlstatpyblobmastersrcmlstatpymlmatricespy142 httpswwwnumpyorg

148 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

lstsq=lambda X y lstsq(X y rcond=None))

for stmt in stmtsres = measure_time(stmt[fct] number=20 repeat=20 div_by_number=True

rarrcontext=context)resupdate(stmt)res[size] = sizeres[dim] = dimmemoappend(res)

import pandasdf = pandasDataFrame(memo)dfhead()

100 101000 1010000 10100 201000 2010000 20100 501000 50

piv = pandaspivot_table(df index=[size dim] columns=name values=average)piv

import matplotlibpyplot as pltfig ax = pltsubplots(1 2 figsize=(144))piv[6]plot(kind=bar ax=ax[0])piv[6]plot(kind=bar ax=ax[1])ax[0]set_title(Reacutegression Lineacuteaire size lt 10000)ax[1]set_title(Reacutegression Lineacuteaire size gt= 10000)

33 Reacutegression lineacuteaire par morceaux 149

Machine Learning Statistiques et Programmation Version 035930

Streaming versions

Lrsquoideacutee est diffeacuterente ici puisqursquoil srsquoagit de calculer toutes les reacutegressions lineacuteaires intermeacutediaires Les algorithmes sontdeacutecrits par lrsquoexposeacute Reacutegression lineacuteaire par morceaux143

from mlstatpymlmatrices import streaming_linear_regression streaming_linear_rarrregression_gram_schmidt

def all_linear_regression(X y)for i in range(Xshape[1] Xshape[0])

yield linear_regression(X[i] y[i])

stmts = [dict(name=lr_matrix fct=list(all_linear_regression(X y)))dict(name=lr_st_mat fct=list(streaming_linear_regression(X y)))dict(name=lr_st_gram fct=list(streaming_linear_regression_gram_schmidt(X

rarry)))]

memo = []for dim in (10 )

for size in range(100 3500 500)print(size dim)X = rndrandn(size dim)eps = rndrandn(size 1) 3y = Xsum(axis=1)reshape((Xshape[0] 1)) + epsy = yravel()context = dict(X=X y=y

all_linear_regression=all_linear_regressionstreaming_linear_regression=streaming_linear_regressionstreaming_linear_regression_gram_schmidt=streaming_linear_

rarrregression_gram_schmidt)

for stmt in stmtsif gram in stmt[name]

nn = 1if size gt= 1000

continueelse

nn = 5res = measure_time(stmt[fct] number=nn repeat=nn div_by_number=True

rarrcontext=context)resupdate(stmt)res[size] = sizeres[dim] = dimmemoappend(res)

import pandasdf = pandasDataFrame(memo)dfhead()

100 10600 10

(suite sur la page suivante)

143 httpwwwxavierduprefrappmlstatpyhelpsphinxc_mlpiecewisehtmlstreaming-linear-regression

150 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

1100 101600 102100 102600 103100 10

piv = pandaspivot_table(df index=[size] columns=name values=average)piv

fig ax = pltsubplots(1 2 figsize=(144))piv[[lr_matrix lr_st_mat]]plot(ax=ax[0])pivplot(ax=ax[1])ax[0]set_title(Reacutegression Lineacuteaire streaming (all)n10 features)ax[1]set_title(Reacutegression Lineacuteaire no Gram-Schmidtn10 features)

La version streaming devient plus inteacuteressante agrave partir de 1000 observations le coucirct en lineacuteaire en N contrairementagrave la version classique qui est en N2 La version Gram-Schmidt devrait ecirctre reacuteeacutecrite en C++ pour proposer des tempscomparables

336 Impleacutementations

bull PiecewiseTreeRegressor144

337 Bilbiographie

Voir aussi The NIPALS algorithm150144 httpwwwxavierduprefrappmlinsightshelpsphinxmlinsightsmlmodelpiecewise_tree_regressionhtmlmlinsightsmlmodelpiecewise_

tree_regressionPiecewiseTreeRegressor150 httpscranr-projectorgwebpackagesnipalsvignettesnipals_algorithmhtml

33 Reacutegression lineacuteaire par morceaux 151

Machine Learning Statistiques et Programmation Version 035930

34 Normalisation des coefficients

La reacutegression lineacuteaire est le modegravele le plus simple pour construire une fonction de preacutediction lorsque la variable agravepreacutedire est continue

f(X) =

dsumk=1

akxk

Les coefficients srsquoobtiennent en minimisant lrsquoerreur E(X a1 ad) =sum

i(sumd

k=1 akxik minus yi)2 = ∥XAminus y∥2 La

solution est explicite (a1 ad) = (X primeX)minus1X primey Lorsque le nombre de dimensions augmentent et deacutepasse lenombre drsquoobservations il existe plus drsquoune solution et la matrice (X primeX) nrsquoest plus = inversible Une des astucesconsiste agrave reacuteduire le nombre de dimension avant avec une ACP151 ou une SVD152 (Singular Value Decomposition)qui reviennent agrave trouver un espace de projection de dimension moindre et sans perte drsquoinformation La reacutegressionest effectueacutee dans cet espace puis transposeacutee dans lrsquoespace initial Une autre astuce consiste agrave imposer une contraintesuppleacutementaire sur le poids des coefficients de la reacutegression le plus souvent en les peacutenalisant

bull Reacuteduction de dimension (page 152)bull Peacutenalisation L1 et L2 (page 152)bull Bibliographie (page 153)

341 Reacuteduction de dimension

Lrsquoideacutee est abordeacutee dans le paragraphe Synthegravese matheacutematique (page 141) Une fois le problegraveme transporteacute dans une basede variables indeacutependantes chaque dimension peut ecirctre traiteacutee seacutepareacutement La reacutegression est restreinte aux vecteurspropres associeacutes agrave une valeur propre non nulle On en deacuteduit ensuite les coefficients dans la base initiale

342 Peacutenalisation L1 et L2

La peacutenalisation revient agrave minimiser une erreur de la forme

E(X a1 ad) =sumi

(dsum

k=1

akxik minus yi

)2

+ λ

dsumk=1

|ak|p = ∥XAminus y∥2 + λ

dsumk=1

|ak|p

Le paramegravetre p permet drsquoajuster le poids donneacute aux petits coefficients et celui donneacutee aux grands Lorsque p=2 crsquoestune peacutenalisation L2 lorsque p=1 crsquoest une peacutenalisation L1 Ces deux ont une incidence diffeacuterente sur la nulliteacute descoefficients La peacutenalisation L1 a tendance agrave annuler les coefficients la peacutenalisation L2 preacutefegravere des petits coefficientssur toutes les dimensions Le notebook ` ltgt`_ illustre ce fait sur un jeu de donneacutees artificiel et montre que le nombrede coefficients non nuls reste plus ou moins constant malgreacute un nombre de variables d en hausse Pour srsquoen convaincreimaginons un problegraveme agrave d variables pour lequel on connaicirct la solution (alowast1 a

lowastd) qui minimise le problegraveme

E(X alowast1 alowastd) = min

sumi

(dsum

k=1

alowastkxik minus yi

)2

+ λ

dsumk=1

|alowastk|p

Lorsqursquoon ajoute une variable cette erreur devient

E(X alowast1 alowastd ad+1) =

sumi

(dsum

k=1

akxik + ad+1xid+1 minus yi

)2

+ λ

dsumk=1

|ak|p + λ|ad+1|p

151 httpsfrwikipediaorgwikiAnalyse_en_composantes_principales152 httpsfrwikipediaorgwikiDC3A9composition_en_valeurs_singuliC3A8res

152 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Et sa deacuteriveacutee

dE(X alowast1 alowastd ad+1)

dad+1= 2

sumi

xid+1(

dsumk=1

alowastkxik + ad+1xid+1 minus yi) + λp|ad+1|pminus1sign(ad+1)

On srsquointeacuteresse au cas particulier ougrave les variables ne sont pas correacuteleacutees et centreacutees Cela implique quesum

i xid+1xik = 0si k = d+ 1 Et lorsque pgt1 le gradient est nul si on peut reacutesoudre lrsquoeacutequation

dE(X alowast1 alowastd ad+1)

dad+1= 2

sumi

ad+1x2id+1 minus yixid+1 + λsign(ad+1) = 0

La solution est simple

alowastd+1 =

sumi yixid+1 minus λsign(ad+1)

2sum

i x2id+1

Et en fait pour un λ assez grand on peut facilement montrer que la solution est impossible puisqursquoelle impliqueque le coefficient alowastd+1 soit de signe opposeacute agrave λsign(ad+1) Cela signifie que nrsquoimporte quelle valeur pour ad+1

augmente lrsquoerreur Sa valeur est donc nulle Ceci nrsquoest pas une deacutemonstration mais donne une intuition de pourquoiune peacutenalisation L1 annule la plupart des coefficients et est utiliseacutee comme moyen de seacutelectionner les variables Crsquoestune deacutemonstration dans le cas ougrave les variables sont indeacutependantes puisque les coefficients de la reacutegression peuvent ecirctrecalculeacutes seacutepareacutement dans ce cas (voir Reacutegression lineacuteaire et correacutelation (page 138)) La peacutenalisation L2 ne megravene pasagrave une eacutequation impossible Plus on ajoute de variables plus lrsquoerreur diminue Pour aller plus loin voir [Char] et voirson application agrave la seacuteelection drsquoarbres dans une forecirct aleacuteatoire Reacuteduction drsquoune forecirct aleacuteatoire153

343 Bibliographie

153 httpwwwxavierduprefrappensae_teaching_cshelpsphinxnotebookstd2a_tree_selection_correctionhtml

34 Normalisation des coefficients 153

Machine Learning Statistiques et Programmation Version 035930

154 Chapter 3 Reacutegression lineacuteaire

CHAPTER 4

Reacutegression logistique

La reacutegression logistique155 est le modegravele preacutedictif le plus simple et celui qursquoon preacutefegravere quand il marche car il estfacilement interpreacutetable agrave lrsquoinverse des modegraveles non lineacuteaires qui gardent leurs secrets si on srsquoen tient seulement agraveleurs coefficients Concregravetement on dispose drsquoun nuage de point (Xi yi) ougrave Xi isin Rd est un vecteur de dimensiond et yi isin 0 1 un entier binaire Le problegraveme de la reacutegression lineacuteaire consiste agrave construire une fonction preacutedictiveyi = f(Xi) =lt Xi β gt= Xiβ ougrave β est un vecteur de dimension d (voir classification156) Le signe de la fonctionf(Xi) indique la classe de lrsquoobservation Xi et la valeur 1

1+ef(X) la probabiliteacute drsquoecirctre dans la classe 1

41 Reacutegression logistique diagramme de Voronoiuml k-Means

Ce qui suit explore les liens entre une reacutegression logistique les diagrammes de Voronoiuml pour construire un classifieurqui allie la reacutegression logistique et les clustering type k-means (page 1) Le point de deacutepart est une conjecture lesreacutegions creacuteeacutees par une reacutegression logistique sont convexes

bull Diagramme de Voronoiuml (page 156)bull Reacutegression logistique (page 156)bull Diagramme de Voronoiuml et partition convexe (page 158)bull Reacutegression logistique et partition convexe (page 159)bull Voronoiuml et reacutegression logistique (page 160)bull Notebooks (page 161)

155 httpsfrwikipediaorgwikiRC3A9gression_logistique156 httpwwwxavierduprefrapppapierstathelpsphinxlecturesregclasshtmlclassification

155

Machine Learning Statistiques et Programmation Version 035930

411 Diagramme de Voronoiuml

Un diagramme de Voronoiuml157 est le diagramme issu des intersections des meacutediatrices entre n points

On deacutefinit un ensemble de points (X1 Xn) La zone drsquoinfluence de chaque point est deacutefini par V (Xi) =x|d(xXi) ⩽ d(xXj)forallj Si d est la distance euclidienne la frontiegravere entre deux points Xi Xj est un segmentsur la droite drsquoeacutequation d(xXi) = d(xXj)

∥xminusXi∥2 minus ∥xminusXj∥2 = 0

=rArr ∥x∥2 minus 2 ⟨xXi⟩+ ∥Xi∥2 minus (∥x∥2 minus 2 ⟨xXj⟩+ ∥Xj∥2) = 0

=rArr 2 ⟨xXj minusXi⟩+ ∥Xi∥2 minus ∥Xj∥2 = 0=rArr 2 ⟨xXj minusXi⟩+ 1

2 ⟨Xi +Xj Xi minusXj⟩ = 0

=rArrlangxminus Xi+Xj

2 Xi minusXj

rang= 0

Ce systegraveme constitue n(nminus1)2 droites ou hyperplans si lrsquoespace vectoriel est en dimension plus que deux Le diagramme

de Voronoiuml est formeacute par des segments de chacune de ces droites On peut retourner le problegraveme On suppose qursquoilexiste n(nminus1)

2 hyperplans existe-t-il n points de telle sorte que les hyperplans initiaux sont les frontiegraveres du diagrammede Voronoiuml formeacute par ces n points Les paragraphes qui suivent expliquent explorent cette hypothegravese

412 Reacutegression logistique

scikit-learn158 a rendu populaire le jeu de donneacutees Iris159 qui consiste agrave classer des fleurs en trois classes en fonctiondes dimensions de leurs peacutetales

ltltlt157 httpsfrwikipediaorgwikiDiagramme_de_VoronoC3AF158 httpsscikit-learnorg159 httpscikit-learnorgstableauto_exampleslinear_modelplot_iris_logistichtmlsphx-glr-auto-examples-linear-model-plot-iris-logistic-py

156 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

from sklearndatasets import load_irisdata = load_iris()X y = datadata[ 2] datatarget

from sklearnlinear_model import LogisticRegressionclr = LogisticRegression()clrfit(X y)

print(coef_ clrcoef_)print(intercept_ clrintercept_)

gtgtgt

coef_ [[-2709 2324][ 0613 -1571][ 2096 -0753]]

intercept_ [ 7913 1845 -9758]

La fonction de preacutediction est assez simple f(x) = Ax + B La classe drsquoappartenance du point x est deacutetermineacute parmaxi f(x)i La frontiegravere entre deux classes i j est deacutefinie par les deux conditions maxk f(x)k = f(x)i = f(x)j On retrouve bien n(nminus1)

2 hyperplans On deacutefinit la matrice A comme une matrice ligne (L1 Ln) ougrave n est le nombrede classes Lrsquoeacutequation de lrsquohyperplan entre deux classes devient

LiX +Bi = LjX +Bj

lArrrArr ⟨Li minus Lj X⟩+Bi minusBj = 0lArrrArr ⟨Li minus Lj X⟩+Bi minusBj = 0

lArrrArrlangLi minus Lj X minus Li+Lj

2

rang+langLi minus Lj

Li+Lj

2

rang+Bi minusBj = 0

lArrrArrlangLi minus Lj X minus Li+Lj

2

rang+ 1

2 ∥Li∥2 minus 12 ∥Lj∥2 +Bi minusBj = 0

lArrrArrlangLi minus Lj X minus Li+Lj

2

rang+ 1

2 ∥Li∥2 +Bi minus ( 12 ∥Lj∥2 +Bj) = 0

Il y a peu de chance que cela fonctionne comme cela Avant de continuer assurons-nous que les reacutegions associeacutees auxclasses sont convexes Crsquoest une condition neacutecessaire mais pas suffisante pour avoir un diagramme de VoronoiumlSoit X1 et X2 appartenant agrave la classe i On sait que forallk LiX1 +Bi ⩾ LkX1 +Bk et forallk LiX2 +Bi ⩾ LkX2 +BkOn considegravere un point X sur le segment [X1 X2] donc il existe α β ⩾ 0 tel que X = αX1 + βX2 et α+ β = 1 Onveacuterifie que

LiX +Bi = Li(αX1 + βX2) +Bi = α(LiX1 +Bi) + β(LiX2 +Bi)⩾ α(LkX1 +Bk) + β(LkX2 +Bk) = Lk(αX1 + βX2) +Bkforallk

Donc le point X appartient bien agrave classe i et celle-ci est convexe La reacutegression logistique forme une partition convexede lrsquoespace des features

Theacuteoregraveme T1 convexiteacute des classes formeacutees par une reacutegression logistiqueOn deacutefinit lrsquoapplication Rd rarr N qui associe la plus grande coordonneacutee f(X) = argmaxk(AX + B)k A est unematrice Mdc B est un vecteur de Rd c est le nombre de parties Lrsquoapplication f deacutefinit une partition convexe delrsquoespace vectoriel Rd

Revenons au cas de Voronoiuml La classe preacutedite deacutepend de maxk(Ax+B)k On veut trouver n points (P1 Pn) telsque chaque couple (Pi Pj) soit eacutequidistant de la frontiegravere qui seacutepare leurs classes Il faut eacutegalement les projections des

41 Reacutegression logistique diagramme de Voronoiuml k-Means 157

Machine Learning Statistiques et Programmation Version 035930

deux points sur la frontiegravere se confondent et donc que les vecteurs Pi minus Pj et Li minus Lj sont colineacuteaires⟨Li minus Lj Pi⟩+Bi minusBj = minus (⟨Li minus Lj Pj⟩+Bi minusBj)

Pi minus Pj minuslangPi minus Pj

LiminusLj

∥LiminusLj∥

rangLiminusLj

∥LiminusLj∥ = 0

lArrrArr

⟨Li minus Lj Pi + Pj⟩+ 2(Bi minusBj) = 0

Pi minus Pj minuslangPi minus Pj

LiminusLj

∥LiminusLj∥

rangLiminusLj

∥LiminusLj∥ = 0

La seconde eacutequation en cache en fait plusieurs puisqursquoelle est valable sur plusieurs dimensions mais elles sontredondantes Il suffit de choisir un vecteur uij non perpendiculaire agraveLiminusLj de sorte que qursquoil nrsquoest pas perpendiculaireau vecteur Li minus Lj et de consideacuterer la projection de cette eacutequation sur ce vecteur Crsquoest pourquoi on reacuteduit le systegravemeau suivant qui est eacutequivalent au preacuteceacutedent si le vecteur uij est bien choisi

=rArr

⟨Li minus Lj Pi + Pj⟩+ 2(Bi minusBj) = 0

⟨Pi minus Pj uij⟩ minuslangPi minus Pj

LiminusLj

∥LiminusLj∥

ranglangLiminusLj

∥LiminusLj∥ uij

rang= 0

413 Diagramme de Voronoiuml et partition convexe

Faisons un peu de geacuteomeacutetrie avant de reacutesoudre ce problegraveme car celui-ci a dans la plupart des cas plus drsquoeacutequations quedrsquoinconnues Chaque frontiegravere entre deux classes est la meacutediatrice drsquoun segment [Pi Pj ] Le dessin suivant trace undiagramme de Voronoiuml agrave trois points Lrsquointersection est le centre des meacutediatrices du triangle formeacute par les points deVoronoiuml Pour les trouver on trace un cercle nrsquoimporte lequel puis une droite perpendiculaire agrave lrsquoune des meacutediatriceOn obtient deux points Le troisiegraveme est obtenu en traccedilant une seconde perpendiculaire et par construsction la troisiegravemedroite est perpendiculaire agrave la troisiegraveme meacutediatrice Et on nomme les angles

158 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Les triangles formeacutes par les cocircteacutes jaunes sont isocegraveles On en deacuteduit que a+ b+ c = 2π = 2(x+ y+ z) On en deacuteduitaussi que

x+ y = ay + z = cx+ z = b

On en conclut que a+ b+ c = 2π = 2(x+ y+ z) = 2(x+ c) et x = πminus c Il existe une infiniteacute de triplets de 3 pointsqui aboutissent agrave ce diagramme de Voronoiuml Il suffit de changer la taille du cercle On montre aussi qursquoen dimension2 et 3 classes il existe toujours une solution au problegraveme poseacute Maintenant si on considegravere la configuration suivanteavec des points disposeacutes de telle sorte que le diagramme de Voronoiuml est un maillage hexagonal a = b = c = 2π

3 etx = y = z = π

3 Il nrsquoexiste qursquoun ensemble de points qui peut produire ce maillage comme diagramme de VoronoiumlMais si on ajoute une petite zone (dans le cercle vert ci-dessous) il est impossible que ce diagramme soit un diagrammede Voronoiuml bien que cela soit une partition convexe

On revient agrave la deacutetermination du diagramme de Voronoiuml associeacute agrave une reacutegression logistique On a montreacute qursquoil nrsquoexistepas tout le temps pour nrsquoimporte quelle partition convexe Mais cela ne veut pas dire que tel est le cas pour unereacutegression logistique

414 Reacutegression logistique et partition convexe

On a montreacute que la reacutegression logistique reacutealise une partition convexe de lrsquoespace vectoriel des variables On note L(n)lrsquoensemble des partitions agrave n classes Le diagramme de Voronoiuml correspondent eacutegalement agrave un sous-ensemble V(n)L(n) = V (n) that is the questionOn peut se poser la question de savoir si L(n) un sous-ensemble ou tout lrsquoensemble auquel cas la reacuteponse agrave la questionpreacuteceacutedente est triviale Consideacuterons drsquoabord deux parties voisines drsquoune partition convexe formeacutee par une fonctiontelle que celle deacutecrite par le theacuteoregraveme sur la convexiteacute des classes formeacutees par une reacutegression logistique (page 157)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 159

Machine Learning Statistiques et Programmation Version 035930

Lrsquoimage qui preacutecegravede montre une partition qui nrsquoest pas convexe La partie A lrsquoest mais pas la partie B En fait il estfacile de montrer que la seule frontiegravere admissible entre deux parties convexe est un hyperplan Si la partition contientn partie il y a au pire n(nminus1)

2 frontiegraveres ce qui correspond eacutegalement au nombre drsquohyperplans deacutefinis par la fonctionde preacutediction associeacutee agrave la reacutegression logistique

Lrsquoimage qui preacutecegravede preacutesente une classification en trois zones (droites noires) On a choisi une droite bleue au hasardEn prenant son symeacutetrique par rapport agrave une des droites noires (D) on a deux droites D1 D2 Lrsquoensemble des pointsx|d(xD1) = d(xD2) correspond agrave la droite noire Il doit ecirctre de mecircme pour les trois droites bleues autrementdit lrsquointersection des droites est le centre du cercle inscrit dans le triangle bleu ce qui nrsquoest visiblement pas le cas surlrsquoimage Il paraicirct vraisemblable de dire que les reacutegressions logisitiques ne permettent pas de former toutes les partitionsconvexes On pourrait le montrer mais cela ne permettrait pas de reacutepondre agrave la question initiale L(n) = V (n)

415 Voronoiuml et reacutegression logistique

On sait que L(2) = V (2) quelque soit la dimension que L(3) = V (3) en dimension 2 La matrice L deacutefinit unereacutegression logistique Le diagramme de Voronoiuml qui lui correspond est solution du systegraveme drsquoeacutequations qui suit

=rArr

lang

LiminusLj

∥LiminusLj∥ Pi + Pj

rang+ 2

BiminusBj

∥LiminusLj∥ = 0

⟨Pi minus Pj uij⟩ minuslangPi minus Pj

LiminusLj

∥LiminusLj∥

ranglangLiminusLj

∥LiminusLj∥ uij

rang= 0

(41)

Avec uij choisi de telle sorte que les vecteur Li minus Lj et uij ne soit pas colieacutenaires Ce systegraveme inclut des eacutequationsentre classes ou reacutegions qui ne sont pas voisines Il y a potentiellement n(nminus1)

2 eacutequations pour n inconnues Il nrsquoestpas eacutevident de dire si ce systegraveme agrave une solution Voyons plutocirct lrsquoensemble des droites formeacutees par un diagramme deVoronoiuml Un point appartient agrave un segment srsquoil est agrave eacutegale distance de deux points

foralli lt j d(XPi) = d(XPj)

lArrrArr foralli lt j ∥X minus Pi∥2 = ∥X minus Pj∥2lArrrArr foralli lt j ⟨(X minus Pi) + (X minus Pj) (X minus Pi)minus (X minus Pj)⟩lArrrArr foralli lt j

langX minus Pi+Pj

2 Pj minus Pi

rang= 0

lArrrArr foralli lt j ⟨XPj minus Pi⟩+ ∥Pi∥2

2 minus ∥Pj∥2

2 = 0

Pour une partition convexe formeacutee agrave partir de droite comme crsquoest le cas drsquoune reacutegression lineacuteaire un point appartientagrave un segment srsquoil est agrave eacutegale distance de deux droites Lrsquoensemble de ces points correspond agrave deux droites les deuxbissectrices

160 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Seule lrsquoune de ces droites est la bonne Lrsquoeacutequation drsquoune droite est donneacutee par ⟨XLi⟩+Bi = 0langX

Li

∥Li∥

rang+

Bi

∥Li∥=

langX

Lj

∥Lj∥

rang+

Bj

∥Lj∥oulangX

Li

∥Li∥

rang+

Bi

∥Li∥= minus

langX

Lj

∥Lj∥

rangminus Bj

∥Lj∥

On choisit lrsquoune de ces droites

foralli lt j

langX

Lj

∥Lj∥minus Li

∥Li∥

rang+

Bj

∥Lj∥minus Bi

∥Li∥= 0

On peut voir que si tous les points sont situeacutes sur la boule uniteacute agrave savoir ∥Pi∥ = 1 la reacutegression logistique srsquoeacutecritsimplement avec Li = Pi et Bi = minus 1

2 On revient au systegraveme drsquoeacutequations lineacuteaires (41) et on en cherche unesolution approcheacutee un peu agrave la faccedilon RANSAC160 avec une reacutegression lineacuteaire et la norme L1 Il nrsquoexiste pastoujours de diagramme de Voronoiuml eacutequivalent agrave la partition convexe reacutealiseacutee par une regreacutession logistique Il estfacile de trouver un contre-exemple en essayant de reacutesoudre le systegraveme preacuteceacutedent Crsquoest ce que fait la fonctionvoronoi_estimation_from_lr La fonction essaye avec quelques approximations et heuristiques de deacuteterminerles points du diagramme de Voronoiuml Si elle reacuteussit du premier coup crsquoest qursquoil y avait eacutequivalence ce qui arrivepeu souvent Il faudrait refaire les calculs agrave la main et non de faccedilon approcheacutee pour valider un contre exemple Uneprochaine fois peut-ecirctre Ce qursquoil faut retenir est que la reacutegression logistique reacutealise une partition convexe de lrsquoespacedes variables

416 Notebooks

Le notebook qui suit reprend les diffeacuterents eacuteleacutements theacuteoriques preacutesenteacutes ci-dessus Il continue lrsquoeacutetude drsquoune reacutegressionlogistique et donne une intuition de ce qui marche ou pas avec un tel modegravele Notamment le modegravele est plus performantsi les classes sont reacuteparties sur la boule uniteacute de lrsquoespace des features

Voronoiuml et reacutegression logistique

Le notebook eacutetudie la pertinence drsquoun modegravele de reacutegression logistique dans certaines configurations Il regarde aussi lediagramme de Voronoiuml associeacute agrave une reacutegression logistique agrave trois classes Il donne quelques intuitions sur les modegravelesque la reacutegression logistique peut reacutesoudre

from jyquickhelper import add_notebook_menuadd_notebook_menu()

matplotlib inline

160 httpscikit-learnorgstablemodulesgeneratedsklearnlinear_modelRANSACRegressorhtml

41 Reacutegression logistique diagramme de Voronoiuml k-Means 161

Machine Learning Statistiques et Programmation Version 035930

Reacutegression logistique

from sklearndatasets import load_irisdata = load_iris()X y = datadata[ 2] datatarget

from sklearnlinear_model import LogisticRegressionclr = LogisticRegression()clrfit(X y)

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovr n_jobs=1penalty=l2 random_state=None solver=liblinear tol=00001verbose=0 warm_start=False)

clrcoef_

array([[-249579289 401011301][ 049709451 -163380222][ 115921404 -177736568]])

clrintercept_

array([ 081713932 122543562 -222516119])

import numpyx = numpyarray([[1 2]])clrdecision_function(x)

array([[ 634157245 -154507432 -46206785 ]])

A = clrcoef_B = clrintercept_

On veacuterifie que la fonction de deacutecision correspond agrave la formule suivant

(AxT)Travel() + B

array([ 634157245 -154507432 -46206785 ])

import matplotlibpyplot as plt

def draw_border(clr X y fct=None incx=1 incy=1 figsize=None border=True ax=None)

voir httpssashatme20170111list-of-20-simple-distinct-colors httpsmatplotliborgexamplescolorcolormaps_referencehtml_unused_ = [Red Green Yellow Blue Orange Purple Cyan

Magenta Lime Pink Teal Lavender Brown BeigeMaroon Mint Olive Coral Navy Grey White Black]

(suite sur la page suivante)

162 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

h = 02 step size in the mesh Plot the decision boundary For that we will assign a color to each point in the mesh [x_min x_max]x[y_min y_max]x_min x_max = X[ 0]min() - incx X[ 0]max() + incxy_min y_max = X[ 1]min() - incy X[ 1]max() + incyxx yy = numpymeshgrid(numpyarange(x_min x_max h) numpyarange(y_min y_max h))if fct is None

Z = clrpredict(numpyc_[xxravel() yyravel()])else

Z = fct(clr numpyc_[xxravel() yyravel()])

Put the result into a color plotcmap = pltcmtab20Z = Zreshape(xxshape)if ax is None

fig ax = pltsubplots(1 1 figsize=figsize or (4 3))axpcolormesh(xx yy Z cmap=cmap)

Plot also the training pointsaxscatter(X[ 0] X[ 1] c=y edgecolors=k cmap=cmap)axset_xlabel(Sepal length)axset_ylabel(Sepal width)

axset_xlim(xxmin() xxmax())axset_ylim(yymin() yymax())

Draw linesx1 x2 = xxmin() xxmax()cl = 0if border

for i in range(0 clrcoef_shape[0])for j in range(i+1 clrcoef_shape[0])

delta = clrcoef_[i] - clrcoef_[j]db = clrintercept_[i] - clrintercept_[j]y1 = (-db - delta[0] x1) delta[1]y2 = (-db - delta[0] x2) delta[1]axplot([x1 x2] [y1 y2] -- color=white)cl += 1

elsefor i in range(0 clrcoef_shape[0])

delta = clrcoef_[i]db = clrintercept_[i]y1 = (-db - delta[0] x1) delta[1]y2 = (-db - delta[0] x2) delta[1]axplot([x1 x2] [y1 y2] -- color=yellow)cl += 1

return ax

fig ax = pltsubplots(1 2 figsize=(104))draw_border(clr X y ax=ax[0])draw_border(clr X y border=False ax=ax[1])

(suite sur la page suivante)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 163

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

ax[0]set_title(Frontiegravere entre 2 classes)ax[1]set_title(Frontiegravere entre 1 classe et les autres)

Quelques diagramme de Voronoiuml

points = numpyarray([[1 2] [3 4] [4 1]])

from scipyspatial import Voronoi voronoi_plot_2dvor = Voronoi(points)

fig ax = pltsubplots(figsize=(44))axishold = lambda True bug between scipy and matplotlib 30voronoi_plot_2d(vor ax=ax)axset_xlim([0 5])axset_ylim([0 5])axaxis(off)

164 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

vorpoint_region

array([3 1 2] dtype=int64)

vorvertices

array([[275 225]])

from matplotlibpatches import Circlefrom matplotlibcollections import PatchCollectionpoints = numpyarray([[1 1] [2 4] [4 1] [63]])vor = Voronoi(points)fig ax = pltsubplots(figsize=(44))cs = []for i in range(vorverticesshape[0])

v = vorvertices[i ]d = (v - points[2 ])r = (ddot(d) 05)circle = Circle((v[0] v[1]) r fill=False ls=-- edgecolor=g visible=True)axadd_artist(circle)

for i in range(pointsshape[0])for j in range(i+1 pointsshape[0])

if i == 0 and j == 3continue

axplot(points[[i j] 0] points[[i j] 1] g-)axishold = lambda True bug between scipy and matplotlib 30voronoi_plot_2d(vor ax=ax)axset_xlim([0 7])axset_ylim([0 7])axaxis(off)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 165

Machine Learning Statistiques et Programmation Version 035930

import mathn = 5a = mathpi 2 3points = []for i in range(n)

for j in range(n)pointsappend([i + j mathcos(a) j mathsin(a)])

points = numpyarray(points)

vor = Voronoi(points)

fig ax = pltsubplots(figsize=(44))axishold = lambda True bug between scipy and matplotlib 30voronoi_plot_2d(vor ax=ax)axset_xlim([-15 4])axset_ylim([-15 4])axaxis(off)

166 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Un diagramme de Voronoiuml proche

On applique la formule deacutefinie par Reacutegression logistique diagramme de Voronoiuml k-Means161 et on reacutesoud le systegravemelineacuteaire deacutefini par

⟨Li minus Lj Pi⟩+Bi minusBj = minus⟨Li minus Lj Pj⟩+Bi minusBjPi minus Pj minus

langPi minus Pj

LiminusLj

∥LiminusLj∥

rangLiminusLj

∥LiminusLj∥ = 0

lArrrArr

⟨Li minus Lj Pi + Pj⟩+ 2(Bi minusBj) = 0

Pi minus Pj minuslangPi minus Pj

LiminusLj

∥LiminusLj∥

rangLiminusLj

∥LiminusLj∥ = 0

=rArr

⟨Li minus Lj Pi + Pj⟩+ 2(Bi minusBj) = 0

⟨Pi minus Pj u⟩ minuslangPi minus Pj

LiminusLj

∥LiminusLj∥

ranglangLiminusLj

∥LiminusLj∥ urang= 0

Ougrave u est un vecteur uniteacute quelconque On cherche agrave reacutesoudre sous la forme drsquoun systegraveme lineacuteaire LP = B ougrave levecteur P est lrsquoensemble des coordonneacutees de tous les points chercheacutes Drsquoapregraves la page citeacute ci-dessus dans le cas drsquoundiagramme agrave trois classes ce systegraveme a une infiniteacute de solutions

import numpymatL = []matB = []L = clrcoef_B = clrintercept_for i in range(0 Lshape[0])

for j in range(i + 1 Lshape[0])li = L[i ]lj = L[j ]c = (li - lj)nc = (cT c) 05

(suite sur la page suivante)

161 httpwwwxavierduprefrappmlstatpyhelpsphinxc_mllr_voronoihtml

41 Reacutegression logistique diagramme de Voronoiuml k-Means 167

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

condition 1mat = numpyzeros((Lshape))mat[i] = cmat[j] = cd = -2(B[i] - B[j])matBappend(d)matLappend(matravel())

condition 2 - cache plusieurs eacutequations on ne prend que la premiegravere coordonneacuteec = ncc2 = c c[0]mat = numpyzeros((Lshape))mat[i] = -c2mat[j] = c2

mat[i0] += 1mat[j0] -= 1matBappend(0)matLappend(matravel())

matL = numpyarray(matL)matB = numpyarray(matB)matLshape matBshape numpylinalgdet(matL)

((6 6) (6) 20281820935727704e-16)

import pandaspandasDataFrame(matL)

Le deacuteterminant est tregraves faible suggeacuterant que la matrice est non inversible et on sait qursquoelle lrsquoest dans ce cas On remplacela derniegravere eacutequation en forccedilant la coordonneacutee drsquoun point

matL[-1] = 0matL[-10] = 1matB[-1] = 3numpylinalgdet(matL)

4207770646874508

On veacuterifie que le systegraveme lineacuteaire est celui attendu

import pandasdf = pandasDataFrame(matL)df[B] = matBdf

from numpylinalg import invpoints = (inv(matL) matB)reshape((32))points

168 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

array([[3 412377262][503684606 02827372 ][548745959 018503334]])

x = points[0 ]c1 = (LxT)Travel() + Bx = points[1 ]c2 = (LxT)Travel() + Bx = points[2 ]c3 = (LxT)Travel() + Bnumpyvstack([c1c2c3])

array([[ 986655487 -402070972 -607697098][-1061997713 326728747 31110941 ][-1213641872 365091377 380710713]])

ax = draw_border(clr X y incx=2 incy=2)axplot(points[ 0] points[ 1] ro)

Reacutegression logistique dans un quadrillage

On srsquointeacuteresse un problegraveme de reacutegression logistique ougrave le problegraveme est tregraves facile mais pas forceacutement eacutevident du pointde vue drsquoune reacutegression logistique

Xs = []Ys = []n = 20for i in range(0 4)

for j in range(0 3)x1 = numpyrandomrand(n) + i11x2 = numpyrandomrand(n) + j11Xsappend(numpyvstack([x1x2])T)Ysextend([i3+j] n)

(suite sur la page suivante)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 169

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

X = numpyvstack(Xs)Y = numpyarray(Ys)Xshape Yshape

((240 2) (240))

set(Y)

0 1 2 3 4 5 6 7 8 9 10 11

On veacuterifie que le nuage de points est tel qursquoindiqueacute

fig ax = pltsubplots(1 1 figsize=(64))for i in range(0 12)

axplot(X[Y==i0] X[Y==i1] o label=cldi color=pltcmtab20colors[i])axlegend()axset_title(Classification agrave neuf classesndans un quadrillage)

from sklearnlinear_model import LogisticRegressionclr = LogisticRegression()clrfit(X Y)

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovr n_jobs=1penalty=l2 random_state=None solver=liblinear tol=00001verbose=0 warm_start=False)

170 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

ax = draw_border(clr X Y incx=1 incy=1 figsize=(128) border=False)axset_title(Reacutegression logistique dans un quadrillage)

clrscore(X Y)

06958333333333333

On copie les features en les mettant au carreacute Le problegraveme est toujours aussi simple mais la reacutegression logistique a plusde variables non correacuteleacutees sur lesquelles srsquoappuyer

def create_feat(X)X2 = Xcopy()X2[ 0] = X2[ 0] X2[ 0]X2[ 1] = X2[ 1] X2[ 1]XX2 = numpyhstack([X X2])return XX2

clr2 = LogisticRegression()clr2fit(create_feat(X) Y)

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovr n_jobs=1penalty=l2 random_state=None solver=liblinear tol=00001verbose=0 warm_start=False)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 171

Machine Learning Statistiques et Programmation Version 035930

def fct_predict(clr X)return clrpredict(create_feat(X))

ax = draw_border(clr2 X Y fct=fct_predict incx=1 incy=1 figsize=(128)rarrborder=False)axset_title(Reacutegression logistique dans un quadrillage avec X2)

clr2score(create_feat(X) Y)

09583333333333334

Du fait que ce problegraveme de classification est eacutequivalent agrave un diagramme de Voronoiuml il a eacuteteacute construit comme tel lefait que la reacutegression logistique semble ecirctre provenir drsquoun problegraveme de convergence numeacuterique plutocirct que du modegraveletheacuteorique Pour veacuterfier on joue avec les paramegravetres drsquoapprentissage Tout drsquoabord lrsquoalgorithme de descente de gradient

clr_t = LogisticRegression(solver=lbfgs)clr_tfit(X Y)clr_tscore(X Y)

09

ax = draw_border(clr_t X Y incx=1 incy=1 figsize=(64) border=False)axset_title(Reacutegression logistique dans un quadrillage avec L-BFGS)

172 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Ensuite on change la faccedilon de reacutesoudre le problegraveme Plutocirct que de reacutesoudre n problegravemes de classifications binaireson reacutesoud un seul problegraveme avec une erreur de classification eacutegale agrave la Multinomial logistic regression162

clr_t = LogisticRegression(solver=lbfgs multi_class=multinomial)clr_tfit(X Y)clr_tscore(X Y)

09875

fig ax = pltsubplots(1 2 figsize=(12 4))draw_border(clr_t X Y incx=1 incy=1 figsize=(64) border=False ax=ax[0])draw_border(clr_t X Y incx=1 incy=1 figsize=(64) border=True ax=ax[1])ax[0]set_title(Reacutegression logistique dans un quadrillagenavec L-BFGS + multinomial)ax[1]set_title(Reacutegression logistique dans un quadrillagenavec L-BFGS + multinomial)

162 httpsenwikipediaorgwikiMultinomial_logistic_regression

41 Reacutegression logistique diagramme de Voronoiuml k-Means 173

Machine Learning Statistiques et Programmation Version 035930

Les frontiegraveres entre une classes et les autres nrsquoont plus lrsquoair drsquoavoir de signification geacuteomeacutetrique Lrsquoapproche une classecontre toutes les autres marchent bien si celles-ci ont des frontiegraveres convexes sans angles aigus et si elles ne sont pasborneacutees En gros cette approche rapide fonctionne bien si toutes les classes sont disposeacutees autour de la boule uniteacute oudrsquoune boule uniteacute composeacutee sur un sous-ensemble des dimensions

Reacutegression logistique autour drsquoun cercle

from math import cos sin piXs = []Ys = []n = 20for i in range(0 12)

x1 = numpyrandomrand(n) + 23cos(i 12 2 pi)x2 = numpyrandomrand(n) + 23sin(i 12 2 pi)Xsappend(numpyvstack([x1x2])T)Ysextend([i] n)

X = numpyvstack(Xs)Y = numpyarray(Ys)Xshape Yshape

((240 2) (240))

fig ax = pltsubplots(1 1 figsize=(64))for i in range(0 12)

axplot(X[Y==i0] X[Y==i1] o label=cldi color=pltcmtab20colors[i])axlegend()axset_title(Classification agrave neuf classesndans un quadrillage)

174 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

clr_c = LogisticRegression()clr_cfit(X Y)clr_cscore(X Y)

09833333333333333

ax = draw_border(clr_c X Y incx=1 incy=1 figsize=(64) border=False)axset_title(Reacutegression logistique autour dun cercle)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 175

Machine Learning Statistiques et Programmation Version 035930

Rien nrsquoest prouveacute ce ne sont que des observations On peut se poser la question si le problegraveme preacuteceacutedent nrsquoeacutetait pasjustement choisi pour montrer que dans un cas lrsquoapproche une classe contre les autres dans le cas drsquoun quadrillage estparticuliegraverement malvenue On accroicirct lrsquoespace entre les classes

Xs = []Ys = []n = 20for i in range(0 4)

for j in range(0 3)x1 = numpyrandomrand(n) + i3x2 = numpyrandomrand(n) + j3Xsappend(numpyvstack([x1x2])T)Ysextend([i3+j] n)

X = numpyvstack(Xs)Y = numpyarray(Ys)Xshape Yshape

((240 2) (240))

clr_q = LogisticRegression()clr_qfit(X Y)clr_qscore(X Y)

07875

ax = draw_border(clr_q X Y incx=1 incy=1 figsize=(64) border=False)axset_title(Reacutegression logistique autour dun cercle)

176 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

A priori non mais on preacutefegravere lrsquoapproche une classe contre les autres car elle est beaucoup plus rapide Lrsquoapprochemultinomiale requiert de changer drsquoalgorithme de descente de gradient

clr_q = LogisticRegression()timeit clr_qfit(X Y)

425 ms plusmn 148 ţs per loop (mean plusmn std dev of 7 runs 100 loops each)

clr_qmn = LogisticRegression(multi_class=multinomial solver=lbfgs)timeit clr_qmnfit(X Y)

554 ms plusmn 118 ms per loop (mean plusmn std dev of 7 runs 10 loops each)

Pousser les classes sur la boule uniteacute

Puisque le modegravele est plus facile agrave apprendre lorsque les classes sont reacuteparties sur la boule uniteacute lrsquoideacuteal serait drsquoavoirune transformation qui le fait comme drsquoajouter des dimensions La reacutegression logistique ne peut modeacuteliser que desclasses convexes Cela veut dire que le barycentre sous cette hypothegraveses appartient agrave la zone que le modegravele attribute agraveune classe donneacutee On calcule ce barycentre pour toutes les classes et on ajoute comme variables la distance agrave chacunde ces centres On reprend le problegraveme du quadrillage

Xs = []Ys = []n = 20for i in range(0 4)

for j in range(0 3)x1 = numpyrandomrand(n) + i11x2 = numpyrandomrand(n) + j11

(suite sur la page suivante)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 177

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

Xsappend(numpyvstack([x1x2])T)Ysextend([i3+j] n)

X = numpyvstack(Xs)Y = numpyarray(Ys)Xshape Yshape

((240 2) (240))

bary = []for i in range(12)

b = X[Y==i]mean(axis=0)baryappend(b)

barys = numpyvstack(bary)barysshape

(12 2)

from sklearnmetricspairwise import euclidean_distancesdist = euclidean_distances(X barys)distshape

(240 12)

Xext = numpyhstack([X dist])

clr_ext = LogisticRegression()clr_extfit(Xext Y)clr_extscore(Xext Y)

09916666666666667

def fct_predict(clr X)dist = euclidean_distances(X barys)Xext = numpyhstack([X dist])return clrpredict(Xext)

ax = draw_border(clr_ext X Y fct=fct_predict incx=1 incy=1 figsize=(64)rarrborder=False)axset_title(Reacutegression logistique dans un quadrillagenavec des distances auxrarrbarycentres)

178 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Cela reacutepond eacutegalement agrave une question Que faire lorsque les classes ne sont pas convexes Une ideacutee consiste agraveeffectuer un k-means163 par classe jusqursquoagrave ce que chaque classe soit agrave peu pregraves converte par un ensemble de clusterappris sur cette classe

Cas presque hexagonal

Pour tester quelques ideacutees et parce crsquoest joli Lrsquoideacuteal serait de se rapprocher drsquoun pavage de Penrose164

import mathn = 4a = mathpi 2 3points = []Ys = []for i in range(n)

for j in range(n)dil = ((i+1)2 + (j+1)2) 06for k in range(020)

x = i + j mathcos(a)y = j mathsin(a)pointsappend([x dil y dil])Ysappend(in+j)mi = 05for r in [01 03 mi]

nb = 6 if r == mi else 12for k in range(0 nb)

(suite sur la page suivante)

163 httpscikit-learnorgstablemodulesgeneratedsklearnclusterKMeanshtml164 httpsfrwikipediaorgwikiRoger_Penrose

41 Reacutegression logistique diagramme de Voronoiuml k-Means 179

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

x = i + j mathcos(a) + r mathcos(mathpi2nb k + mathpi6)y = j mathsin(a) + r mathsin(mathpi2nb k + mathpi6)pointsappend([x dil y dil])Ysappend(in+j)

X = numpyarray(points)Y = numpyarray(Ys)set(Y)

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

fig ax = pltsubplots(1 1 figsize=(64))for i in range(0 max(Y)+1)

axplot(X[Y==i0] X[Y==i1] o label=cldi color=pltcmtab20colors[i20])axset_title(Classification agrave 16 classesndans un quadrillage hexagonal)

clr_hex = LogisticRegression(multi_class=multinomial solver=lbfgs max_iter=200)clr_hexfit(X Y)clr_hexscore(X Y)

09919354838709677

ax = draw_border(clr_hex X Y incx=1 incy=1 figsize=(64) border=False)axset_title(Reacutegression logistique dansnun quadrillage hexagonal)

180 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Diagramme de Voronoiuml approcheacute

On pousse lrsquoideacutee impleacutementeacutee dans le cas de trois classes pour un nombre de classes quelconque Il nrsquoexiste pas defaccedilon geacuteneacuterique de diagramme de Voronoiuml eacutequivalent On reacutesoud le systegraveme lineacuteaire avec une reacutegression quantile etdrsquoautres astuces de calculs agrave deacutecouvrir dans le code de la fonction voronoi_estimation_from_lr165

Xs = []Ys = []n = 20for i in range(0 4)

for j in range(0 3)x1 = numpyrandomrand(n) + i11x2 = numpyrandomrand(n) + j11Xsappend(numpyvstack([x1x2])T)Ysextend([i3+j] n)

X = numpyvstack(Xs)Y = numpyarray(Ys)Xshape Yshape

((240 2) (240))

fig ax = pltsubplots(1 1 figsize=(64))for i in range(0 12)

axplot(X[Y==i0] X[Y==i1] o label=cldi color=pltcmtab20colors[i])(suite sur la page suivante)

165 httpwwwxavierduprefrappmlstatpyhelpsphinxmlstatpymlvoronoihtml

41 Reacutegression logistique diagramme de Voronoiuml k-Means 181

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

axlegend()axset_title(Classification agrave neuf classesndans un quadrillage)

from sklearnlinear_model import LogisticRegressionclr = LogisticRegression()clrfit(X Y)

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovr n_jobs=1penalty=l2 random_state=None solver=liblinear tol=00001verbose=0 warm_start=False)

from mlstatpyml import voronoi_estimation_from_lrpoints = voronoi_estimation_from_lr(clrcoef_ clrintercept_ max_iter=20 verbose=True)points

[voronoi_estimation_from_lr] iter=120 score=00953 tol=348e-10 del P29 d=319[voronoi_estimation_from_lr] iter=220 score=00939 tol=348e-10 del P19 d=272[voronoi_estimation_from_lr] iter=320 score=0089 tol=348e-10 del P26 d=25[voronoi_estimation_from_lr] iter=420 score=00892 tol=348e-10 del P011 d=246[voronoi_estimation_from_lr] iter=520 score=00894 tol=348e-10 del P210 d=242[voronoi_estimation_from_lr] iter=620 score=00882 tol=348e-10 del P110 d=244[voronoi_estimation_from_lr] iter=720 score=00889 tol=348e-10 del P010 d=23[voronoi_estimation_from_lr] iter=820 score=00877 tol=348e-10 del P59 d=229[voronoi_estimation_from_lr] iter=920 score=00869 tol=348e-10 del P111 d=218[voronoi_estimation_from_lr] iter=1020 score=0088 tol=348e-10 del P23 d=22[voronoi_estimation_from_lr] iter=1120 score=0089 tol=348e-10 del P08 d=214

(suite sur la page suivante)

182 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

[voronoi_estimation_from_lr] iter=1220 score=00884 tol=348e-10 del P16 d=22[voronoi_estimation_from_lr] iter=1320 score=00871 tol=348e-10 del P211 d=207[voronoi_estimation_from_lr] iter=1420 score=00874 tol=348e-10 del P05 d=21[voronoi_estimation_from_lr] iter=1520 score=00868 tol=348e-10 del P02 d=21[voronoi_estimation_from_lr] iter=1620 score=0087 tol=348e-10 del P09 d=206[voronoi_estimation_from_lr] iter=1720 score=00876 tol=348e-10 del P89 d=199[voronoi_estimation_from_lr] iter=1820 score=00878 tol=348e-10 del P27 d=193[voronoi_estimation_from_lr] iter=1920 score=00889 tol=348e-10 del P911 d=193[voronoi_estimation_from_lr] iter=2020 score=00875 tol=348e-10 del P17 d=197

array([[059042773 041675379][019276405 161586254][038750542 234848342][170510075 05341869 ][169940467 150388896][166571087 215827251][223834543 06114512 ][214600591 13636044 ][208762755 204091816][25732091 0170076 ][281087731 140217985][249984364 202978587]])

ax = draw_border(clr X Y incx=1 incy=1 figsize=(85) border=False)axplot(points[ 0] points[ 1] ro ms=10)axset_title(Diagramme de Voronoi approcheacute)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 183

Machine Learning Statistiques et Programmation Version 035930

42 Reacutegression logistique par morceaux arbres de deacutecision

Ce qui suit explore une faccedilon fantaisiste de construire des reacutegressions logistiques agrave mi-chemin entre les arbres dedeacutecisions et les reacuteseaux de neurones Dans un premier temps on srsquointeacuteresse uniquement agrave une classification binaire

bull Parallegravele entre un neurone et une reacutegression logistique (page 185)bull Principe drsquoun arbre de deacutecision (page 185)bull Construction drsquoun pseudo arbre (page 187)bull Aparteacute matheacutematique (page 188)bull Approche EM et reacutegression logistique (page 189)bull Lien vers les reacuteseaux de neurones (page 189)bull Plan orthogonal (page 192)bull Interpreacutetabiliteacute (page 192)bull Bibliographie (page 192)

184 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

421 Parallegravele entre un neurone et une reacutegression logistique

Les paragraphes Classification (page 54) et La classification (page 32) preacutesente le problegraveme de la classification quiconsiste agrave trouver une fonction f qui maximise la vraisemblance du nuage de points (Xi yi)i ougraveXi isin Rd et yi isin 0 1

lnL(Θ X y) =

nsumi=1

yi ln f(Θ Xi) + (1minus yi) ln(1minus f(Θ Xi))

Dans le cas de la reacutegression logistique la fonction f est deacutefinie comme suit

f(Θ Xi) =1

1 + eminussumd

k=1 θkxik

Cela ressemble beaucoup agrave la deacutefinition drsquoun neurone (page 25) ougrave la fonction drsquoactivation f(x) = 11+eminusx est une

fonction sigmoiumlde

422 Principe drsquoun arbre de deacutecision

Un arbre de deacutecision se construit peu agrave peu en reacutepeacutetant toujours la mecircme optimisation sur des sous-ensemble de plusen plus petit Il faut drsquoabord un critegravere qui permette drsquoeacutevaluer la pertinence de la division effectueacutee par un noeud delrsquoarbre Pour un ensemble (Xi yi)1⩽i⩽n on peut estimer la probabiliteacute p(y1 yn) = p(Y ) = 1

n

sumi = 1nyi Le

critegravere de Gini G qui eacutevalue la pertinence drsquoune classification est deacutefini par G(Y ) = p(Y )(1minus p(Y )) Un autre critegravereest le gain drsquoinformation ou entropie H H(Y ) = minusp(Y ) ln p(Y )minus (1minus p(Y )) ln(1minus p(Y ))On note YS lrsquoensemble des yi|i isin S ougrave S est un sous-ensemble SC est noteacute le compleacutementairePour le premier noeud de lrsquoarbre de deacutecision on calcule pour toutes les variables et toutes les observations la diminutiondu critegravere choisi

Sik = m|xmk ⩽ xik∆ik = H(Y )minus (H(YSik

) +H(YSCik)

On choisit alors la variable k et le seuil xik qui maximise le gain Dans le cas drsquoune reacutegression logistique lavraisemblance correspond agrave

lnL(Θ X y) =

nsumi=1

yi ln f(Θ Xi) + (1minus yi) ln(1minus f(Θ Xi))

Si on suppose que la fonction f retourne une constante c cette expression devient

lnL(Θ X y) =

nsumi=1

yi ln c+ (1minus yi) ln(1minus c) = p(Y ) ln c+ (1minus p(Y )) ln(1minus c)

Or cette expression admet un maximum pour c = p(Y ) puisque la deacuteriveacutee srsquoannule de faccedilon eacutevidente pour cette valeur

part lnL(Θ X y)

partc=

p(Y )

cminus 1minus p(Y )

1minus c

On remarque que lrsquooptimisation drsquoun noeud drsquoun arbre de deacutecision correspond agrave lrsquooptimisation de la vraisemblance parune fonction constante Une reacutegression logistique calculeacutee sur une seule variable est en quelque sorte une geacuteneacuteralisationde ce modegravele On apprend un arbre de deacutecision qursquoon exporte au format dot166ltltlt

166 httpsfrwikipediaorgwikiDOT_(langage)

42 Reacutegression logistique par morceaux arbres de deacutecision 185

Machine Learning Statistiques et Programmation Version 035930

from sklearndatasets import load_irisfrom sklearntree import DecisionTreeClassifier export_graphvizds = load_iris()X y = dsdata dstargety = y 2dt = DecisionTreeClassifier(max_depth=3 criterion=entropy)dtfit(X y)print(dt) export_graphviz(dt)

gtgtgt

DecisionTreeClassifier(criterion=entropy max_depth=3)

Ce qui donne

X[3] lt= 08entropy = 0918samples = 150

value = [100 50]

entropy = 00samples = 50

value = [50 0]

True

X[3] lt= 175entropy = 10samples = 100

value = [50 50]

False

X[2] lt= 495entropy = 0445

samples = 54value = [5 49]

X[2] lt= 485entropy = 0151

samples = 46value = [45 1]

entropy = 0146samples = 48

value = [1 47]

entropy = 0918samples = 6

value = [4 2]

entropy = 0918samples = 3

value = [2 1]

entropy = 00samples = 43

value = [43 0]

186 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

423 Construction drsquoun pseudo arbre

Et si on remplaccedilait chaque noeud par une reacutegression logistique appris sur les exemples passant par ce noeud Plutocirctque de prendre une deacutecision baseacutee sur une variable donneacutee et de retourner une probabiliteacute constante on estime unereacutegression logistique et on retourne la probabiliteacute retourneacutee par la reacutegressionSrsquoil nrsquoy a theacuteoriquement aucun obstacle en pratique certains cas posent quelques problegravemes comme le montrelrsquoexemple Arbre drsquoindeacutecision (page 323) et repris ci-dessous La fonction criteria calcule les diffeacuterents gains selonles points de coupure

import matplotlibpyplot as pltfrom mlstatpymllogreg import criteria random_set_1d plot_ds

X1 y1 = random_set_1d(1000 2)X2 y2 = random_set_1d(1000 3)X3 y3 = random_set_1d(1000 4)df1 = criteria(X1 y1)df2 = criteria(X2 y2)df3 = criteria(X3 y3)

fig ax = pltsubplots(1 3 figsize=(14 5) sharey=True)plot_ds(X1 y1 ax=ax[0] title=easy)plot_ds(X2 y2 ax=ax[1] title=difficult)plot_ds(X3 y3 ax=ax[2] title=more difficult)df1plot(x=X y=[Gini Gain p1 p2] ax=ax[0] lw=5)df2plot(x=X y=[Gini Gain p1 p2] ax=ax[1] lw=5)df3plot(x=X y=[Gini Gain p1 p2] ax=ax[2] lw=5)pltshow()

Le seuil de coupure est eacutevident dans le premier cas et quasiment impossible agrave trouver de faccedilon numeacuterique dans lesecond avec les algorithmes tels qursquoils sont impleacutementeacutes Les arbres de deacutecision contournent ce problegraveme en imposantque le seuil de coupure laisse au moins quelques exemples de chaque cocircteacute ce que la reacutegression logistique ne fait pasOn peut reacuteflechir agrave drsquoautres critegraveres Le suivant explore la log-vraisemblance

import matplotlibpyplot as pltfrom mlstatpymllogreg import criteria2 random_set_1d plot_ds

X1 y1 = random_set_1d(1000 2)X2 y2 = random_set_1d(1000 3)

(suite sur la page suivante)

42 Reacutegression logistique par morceaux arbres de deacutecision 187

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

X3 y3 = random_set_1d(1000 4)df1 = criteria2(X1 y1)df2 = criteria2(X2 y2)df3 = criteria2(X3 y3)print(df3)

fig ax = pltsubplots(1 3 figsize=(14 5) sharey=True)plot_ds(X1 y1 ax=ax[0] title=easy)plot_ds(X2 y2 ax=ax[1] title=difficult)plot_ds(X3 y3 ax=ax[2] title=more difficult)df1plot(x=X y=[LL LL-10 LL-100] ax=ax[0] lw=5)df2plot(x=X y=[LL LL-10 LL-100] ax=ax[1] lw=5)df3plot(x=X y=[LL LL-10 LL-100] ax=ax[2] lw=5)pltshow()

La log-vraisemblance dans ce problegraveme agrave une dimension est assez simple agrave eacutecrire Pour avoir une expression qui nechange pas en invertissant les classes on considegravere le maxiimum des vraisemblance en consideacuterant deux classifieursopposeacutes Le graphe preacuteceacutedent fait varier x0 avec diffeacuterents θ

LL(x0 θ) = max

1

1+exp ( xminusx0θ )

1

1+exp (minus xminusx0θ )

424 Aparteacute matheacutematique

La log-vraisemblance drsquoune reacutegression logistique pour un jeu de donneacutees (Xi yi) srsquoexprime comme suit pour unereacutegression logistique de paramegravetre β

L(βX y) =sumn

i=1 yi ln f(βXi) + (1minus yi) ln(1minus f(βXi))avec f(βXi) = 1

1+exp(minus(β0+sumd

k=1 xikβk))

On remarque que

f(x) = 11+eminusx

rArr f(minusx) = 11+ex = eminusx

1+eminusx

rArr f(x) + f(minusx) = 11+eminusx + eminusx

1+eminusx = 1

188 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Cela explique pour on utilise souvent cette fonction pour transformer une distance en probabiliteacute pour unclassifieur binaire Lrsquoapprentissage drsquoun arbre de deacutecision sklearntreeDecisionTreeClassifier167 propose le paramegravetremin_samples_leaf On se propose dans le cadre de la reacutegression logistique de chercher le paramegravetre β0 qui permet deveacuterifier la contrainte fixeacutee par min_samples_leaf Cela revient agrave trounver un classifieur lineacuteaire parallegravele au premierqui veacuterifie les contraintes

425 Approche EM et reacutegression logistique

Lrsquoarticle [Scott2013] explicite un algorithme drsquoapprentissage EM pour une reacutegression logistique

Il faudrait adapter cet agorithme pour apprendre deux reacutegressions logistiques dont la combinaison sur deux partiesdisjointes serait meilleure qursquoune seule reacutegression logistique sur la reacuteunion des deux parties Cet algorithme devraittrouver agrave la fois les modegraveles et la seacuteparation entre les deux parties

A faire(ideacutee) Arbre de reacutegressions logistiques et EMChaque noeud du graphe serait modeacuteliseacute comme eacutetant la reacuteunion de trois reacutegressions logistiques une pour diviserlrsquoespace en deux deux autres apprenant agrave classifier sur chacune des partiesissue168

426 Lien vers les reacuteseaux de neurones

En remplaccedilant chaque noeud par une reacutegression logistique lrsquoarbre de deacutecision deviendrait un reacuteseau de neurones avecune structure particuliegravere certes mais un reacuteseau de neurones tout de mecircme Chaque noeud du graphe serait transformeacuteen un neurone avec une reacutegression logistique impliquant toutes les variables Il ne resterait plus qursquoagrave continuerlrsquoapprentissage avec des algorithmes agrave base de gradient stochastique Cela reviendrait agrave changer lrsquoinitialisation dureacuteseau de neurones On considegravere le petit arbre deacutecision suivant trois features trois noeuds deux classes

167 httpsscikit-learnorgstablemodulesgeneratedtreeDecisionTreeClassifierhtml168 httpsgithubcomsdpythonmlstatpyissues28

42 Reacutegression logistique par morceaux arbres de deacutecision 189

Machine Learning Statistiques et Programmation Version 035930

X1 lt 5

X2 lt 3 X3 lt 2

0 1 0 1

On souhaite le transformer en reacuteseau de neurones avec une structure qui serait celle qui suit On note tout drsquoabordla fonction sigmoiumlde f(x s h) = 1

1+eminush(xminuss) Elle vaut 12 lorsque x vaut s vaut 1 lorsque x est tregraves grand et 0lorsque x est tregraves petit Crsquoest eacutequivalent agrave la fonction f(x s h) = g(XS v0 h)

11+eh(ltXV gt+v0) ougrave X = (x1 x2 x3)

V = (minus1 0 0) et v0 = s

y1=g(X (-1 0 0) 5 h)

y4=g((y1 y2) (-1 -1) 1 h) y5=g((y1 y3) (-1 -1) 1 h)

y2=g(X (0 -1 0) 3 h) y3=g(X (0 0 -1) 2 h)

y6=g((y4 y5) (-1 -1) 1 h)

ltc0gt 0|ltc1gt 1

Le problegraveme avec la structure proposeacutee est que chaque noeud final retourne toujours une classe alors que dans un arbrede deacutecision seule une feuille reacutepond Un noeud final fait la somme de toutes les feuilles deux dans cet exemple

190 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Lrsquoimpleacutementation de scikit-learn169 nrsquoest pas la plus facile agrave manipuler dans le sens ougrave chaque couche ne peut prendrecomme entreacutee que les sorties de la preacuteceacutedente et la fonction drsquoactivation est la mecircme pour tous les neurones On nepeut pas non plus geler certains coefficients lors de lrsquoapprentissage Crsquoest agrave ce moment-lagrave qursquoon se demande si ccedila vautle coup de se lancer dans une impleacutementation agrave la rigueur jolie mais sans doute pas porteuse drsquoune innovation majeureEt ce nrsquoest pas la premiegravere fois que quelqursquoun se lance dans la conversion drsquoun arbre en reacuteseaux de neuronesJrsquoai quand mecircme essayeacute avec le notebook Un arbre de deacutecision en reacuteseaux de neurones (page 87) et les classesNeuralTreeNode NeuralTreeNet Si lrsquoideacutee de deacutepart est seacuteduisante elle requiert une contrainte suppleacutementaire quiest de creacuteer un reacuteseau de neurones qui ne soit pas un minimum local de la fonction drsquoerreur auquel cas un apprentissageavec un algorithme agrave base de gradient ne pourra pas ameacuteliorer les performances du reacuteseau de neurones

La structure proposeacutee nrsquoest cependant pas la meilleure et elle pourrait ecirctre simplifieacutee Drsquoautres projets srsquoappuie deslibrairies existantes

bull Soft-Decision-Tree170

bull Neural-Decision-Forests171

bull hummingbird172

Ce dernier package convertit un reacuteseau de neurones en autant de couches que la profondeur de lrsquoarbre Lrsquoimage qui suitest tireacute de lrsquoarticle [Nakandalam2020] et qui reacutesume leur ideacutee

169 httpsscikit-learnorg170 httpsgithubcomkimhc6028soft-decision-tree171 httpsgithubcomjingxilNeural-Decision-Forests172 httpsgithubcommicrosofthummingbird

42 Reacutegression logistique par morceaux arbres de deacutecision 191

Machine Learning Statistiques et Programmation Version 035930

427 Plan orthogonal

Dans un espace agrave plusieurs dimensions la reacutegression logistique divise lrsquoespace agrave lrsquoaide drsquoun hyperplan La fonction dedeacutecision reste similaire puisque la probabiliteacute de classification deacutepend de la distance agrave cet hyperplan On suppose qursquoilexiste une reacutegression logistique binaire apprise sur un nuage de points (Xi yi) La probabiliteacute de bonne classificationest deacutefinie par

f(Θ Xi) =1

1 + eminusθ0+sumd

k=1 θkxik

Le vecteur Θ deacutefinit un hyperplan On choisit un vecteur Θprime de telle sorte que lt ΘΘprime gt= 0 Les deux vecteurs sontorthogonaux On deacutefinit maintenant deux autres vecteurs Θ1Θ2 pour deux autres reacutegressions logistiques Pour classerun point X on procegravede comme suit

bull si lt Θprime X gtlt 0 on classe le point en appliquant la reacutegression logistique deacutefinie par Theta1bull si lt Θprime X gt⩽ 0 on classe le point en appliquant la reacutegression logistique deacutefinie par Theta2

De maniegravere eacutevidente les performances en classification sont les mecircmes que la premiegravere reacutegression logistique On peutensuite reacuteestimer les vecteurs Θ1Θ2 pour maximiser la vraisemblance sur chacune des parties Il ne reste plus qursquoagravemontrer que la vraisemblance globale sera supeacuterieur agrave celle obtenue par la premiegravere reacutegression logistique

A faire(ideacutee) Arbre de reacutegressions logistiques en cascade orthogonaleImpleacutementer la lrsquoalgorithme suivant

bull Apprendre une reacutegression logistiquebull Choisir un hyperplan perpendiculaire en optimisation un critegravere Construction drsquoun pseudo arbre (page 187)bull Apprendre une reacutegression logistique sur chacune des partiesbull Continuer jusqursquoagrave ce lrsquoameacutelioration soit neacutegligeable

issue173

428 Interpreacutetabiliteacute

429 Bibliographie

[Scott2013] Expectation-maximization for logistic regression174 James G Scott Liang Sun[Nakandalam2020] A Tensor-based Approach for One-size-fits-all ML Prediction Serving Supun Nakandalam

Karla Saur Gyeong-In Yu Konstantinos Karanasos Carlo Curino Markus Weimer Matteo Interlandi To appearat OSDI 2020175

43 Reacuteseaux de neurones

Reacuteseaux de neurones avec scikit-learn

matplotlib inline

173 httpsgithubcomsdpythonmlstatpyissues29174 httpsarxivorgpdf13060040pdf175 httpswwwusenixorgconferenceosdi20

192 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

from sklearnlinear_model import PerceptronX = [[0 0] [1 1]]y = [0 1]clf = Perceptron()clffit(X y)

Perceptron(alpha=00001 class_weight=None eta0=10 fit_intercept=Truen_iter=5 n_jobs=1 penalty=None random_state=0 shuffle=Trueverbose=0 warm_start=False)

import matplotlibpyplot as pltimport numpydef softmax(x)

return 10 (1 + numpyexp(-x))def dsoftmax(x)

t = numpyexp(-x)return t (1 + t)2

x = numpyarange(-1010 01)y = softmax(x)dy = dsoftmax(x)fig ax = pltsubplots(11)axplot(xy label=softmax)axplot(xdy label=deacuteriveacutee)axset_ylim([-01 11])axplot([-5 -5] [-01 11] r)axplot([5 5] [-01 11] r)axlegend(loc=2)

ltmatplotliblegendLegend at 0x1b651aeacf8gt

43 Reacuteseaux de neurones 193

Machine Learning Statistiques et Programmation Version 035930

x

array([ -100000000e+01 -990000000e+00 -980000000e+00-970000000e+00 -960000000e+00 -950000000e+00-940000000e+00 -930000000e+00 -920000000e+00-910000000e+00 -900000000e+00 -890000000e+00-880000000e+00 -870000000e+00 -860000000e+00-850000000e+00 -840000000e+00 -830000000e+00-820000000e+00 -810000000e+00 -800000000e+00-790000000e+00 -780000000e+00 -770000000e+00-760000000e+00 -750000000e+00 -740000000e+00-730000000e+00 -720000000e+00 -710000000e+00-700000000e+00 -690000000e+00 -680000000e+00-670000000e+00 -660000000e+00 -650000000e+00-640000000e+00 -630000000e+00 -620000000e+00-610000000e+00 -600000000e+00 -590000000e+00-580000000e+00 -570000000e+00 -560000000e+00-550000000e+00 -540000000e+00 -530000000e+00-520000000e+00 -510000000e+00 -500000000e+00-490000000e+00 -480000000e+00 -470000000e+00-460000000e+00 -450000000e+00 -440000000e+00-430000000e+00 -420000000e+00 -410000000e+00-400000000e+00 -390000000e+00 -380000000e+00-370000000e+00 -360000000e+00 -350000000e+00-340000000e+00 -330000000e+00 -320000000e+00-310000000e+00 -300000000e+00 -290000000e+00-280000000e+00 -270000000e+00 -260000000e+00-250000000e+00 -240000000e+00 -230000000e+00-220000000e+00 -210000000e+00 -200000000e+00-190000000e+00 -180000000e+00 -170000000e+00-160000000e+00 -150000000e+00 -140000000e+00-130000000e+00 -120000000e+00 -110000000e+00-100000000e+00 -900000000e-01 -800000000e-01-700000000e-01 -600000000e-01 -500000000e-01-400000000e-01 -300000000e-01 -200000000e-01-100000000e-01 -355271368e-14 100000000e-01200000000e-01 300000000e-01 400000000e-01500000000e-01 600000000e-01 700000000e-01800000000e-01 900000000e-01 100000000e+00110000000e+00 120000000e+00 130000000e+00140000000e+00 150000000e+00 160000000e+00170000000e+00 180000000e+00 190000000e+00200000000e+00 210000000e+00 220000000e+00230000000e+00 240000000e+00 250000000e+00260000000e+00 270000000e+00 280000000e+00290000000e+00 300000000e+00 310000000e+00320000000e+00 330000000e+00 340000000e+00350000000e+00 360000000e+00 370000000e+00380000000e+00 390000000e+00 400000000e+00410000000e+00 420000000e+00 430000000e+00440000000e+00 450000000e+00 460000000e+00470000000e+00 480000000e+00 490000000e+00

(suite sur la page suivante)

194 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

500000000e+00 510000000e+00 520000000e+00530000000e+00 540000000e+00 550000000e+00560000000e+00 570000000e+00 580000000e+00590000000e+00 600000000e+00 610000000e+00620000000e+00 630000000e+00 640000000e+00650000000e+00 660000000e+00 670000000e+00680000000e+00 690000000e+00 700000000e+00710000000e+00 720000000e+00 730000000e+00740000000e+00 750000000e+00 760000000e+00770000000e+00 780000000e+00 790000000e+00800000000e+00 810000000e+00 820000000e+00830000000e+00 840000000e+00 850000000e+00860000000e+00 870000000e+00 880000000e+00890000000e+00 900000000e+00 910000000e+00920000000e+00 930000000e+00 940000000e+00950000000e+00 960000000e+00 970000000e+00980000000e+00 990000000e+00])

44 Analyse de survie

Liquestanalyse de survie176 est un sujet qursquoon commence agrave voir poindre en assurance et plus geacuteneacuteralement en assuranceCrsquoest domaine deacuteveloppeacute pour mesurer les effets drsquoune substance drsquoun meacutedicament sur un corps vivant une personne

bull Lien avec le machine learning (page 195)bull Courbe de Kaplan-Meier (page 196)bull Reacutegression de Cox (page 196)bull Notebooks (page 197)bull Liens articles (page 200)bull Modules (page 200)

441 Lien avec le machine learning

En assurance on cherche souvent agrave preacutedire si une personne aura un accident ou pas Pour cela il faut avoir des donneacuteesune base de donneacutees dans laquelle sont enregistreacutes des accidents Lrsquoaccident en question peut avoir lieu au deacutebut ducontrat quelques anneacutees plus tard ou jamais Lorsqursquoaucun accident nrsquoest associeacute agrave une personne il se peut qursquoil nese produise aucun accident ou que celui-ci ne srsquoest pas encore produit Modeacuteliser ce problegraveme de preacutediction permetdrsquointroduire le temps et prendre en compte le fait que les donneacutees sont tronqueacutees on ne sait pour une personne que siun accident srsquoest produit ou pas entre le deacutebut du contrat et aujourdrsquohui

176 httpsfrwikipediaorgwikiAnalyse_de_survie

44 Analyse de survie 195

Machine Learning Statistiques et Programmation Version 035930

442 Courbe de Kaplan-Meier

On reprend la mecircme terminologie A une date t0 on administre un traitement agrave une personne un animal une planteCet ecirctre vivant meurt agrave un temps t + d Le traitement a-t-il ameacutelioreacute sa survie On considegravere deux temps t1 et t2la probabiliteacute de deacutecegraves entre ces deux temps peut ecirctre estimeacute par nt2minusnt1

nt1ougrave nti est la population vivante au temps ti

(depuis le deacutebut du traitement)On en deacuteduit la probabiliteacute de rester vivant jusqursquoau temps ti qui est lrsquoestimateur de Kaplan-Meier177 S(ti)

S(ti) =prodi

i=1

(1minus ntiminus1

minusnti

ntiminus1

)=

prodii=1

nti

ntiminus1=prodi

i=1ni

niminus1

Par simplification on note ni = nti On suppose les ti des dates agrave intervalles plutocirct reacuteguliers et croissants La suite(ni) est deacutecroissantes (on ne rescuscite pas) Ces calculs rappellent les calculs lieacutes agrave lrsquoespeacuterance de vie (voir Evoluationdrsquoune population - eacutenonceacute178 Evoluation drsquoune population (correction)179) Lrsquoespeacuterance de vie est deacutefinie par

E(D) =

infinsumi=1

tiP (mort au temps ti) =infinsumi=1

tini minus ni+1

ni

iprodj=0

nj

njminus1=

infinsumi=1

tini minus ni+1

ni

ni

n0=

infinsumi=1

tini minus ni+1

n0

La courbe S(t) est aussi appeleacutee la fonction de survie Si T est la dureacutee de vie drsquoune personne S(t) = P (T gt t) Onappelle λ(t) le taux de deacutefaillance crsquoest la probabiliteacute que le deacutecegraves survienne au temps t

λ(t)dt = P (t ⩽ T lt t+ dt|T ⩾ T ) = minusSprime(t)

S(t)dt

443 Reacutegression de Cox

Le modegravele de Cox180 modeacutelise le risque de deacutecegraves instantaneacute au temps t selon le modegravele qui suit Une personne estdeacutecrite par les variables X1 Xk

λ(tX1 Xk) = λ0(t) exp

(ksum

i=1

βiXi

)= λ0(t) exp(βX)

La partie λ0(t) correspond agrave ce qursquoon observe sans autre informations que les deacutecegraves On lrsquoappelle aussi le risque debase Crsquoest la probabiliteacute moyenne de deacutecegraves instantaneacutee La seconde partie permet de faire varier cette quantiteacute selonce qursquoon sait de chaque personneOn dit que crsquoest un modegravele agrave risque proportionnel car si deux personnes sont quasiment identiques excepteacute sur unevariable Xi (comme la quantiteacute drsquoun poison ingeacutereacutee) alors le ratio de probabiliteacute est

λ(tX1 Xai Xk)

λ(tX1 Xbi Xk)

=exp(βiX

ai )

exp(βiXbi )

= exp(βi(X

ai minusXb

i ))

Lrsquohypothegravese des risques proportionnel est en quelque sorte intuitive Plus on ingegravere un poison plus on a de chancesdrsquoen subir les conseacutequences Mais ce nrsquoest pas toujours le cas le documentaire La fabrique de lrsquoignorance181 revientsur les effets du bispheacutenol A182 qui serait deacutejagrave pertubateur agrave tregraves petite dose Il ne prend pas en compte les effets croiseacutesnon plus (voir Les perturbateurs endocriniens Comprendre ougrave en est la recherche183)

177 httpsfrwikipediaorgwikiEstimateur_de_Kaplan-Meier178 httpwwwxavierduprefrappactuariat_pythonhelpsphinxnotebooksseance4_projection_population_enoncehtml179 httpwwwxavierduprefrappactuariat_pythonhelpsphinxnotebooksseance4_projection_population_correctionhtml180 httpsfrwikipediaorgwikiRC3A9gression_de_Cox181 httpswwwartetvfrvideos091148-000-Ala-fabrique-de-l-ignorance182 httpsfrwikipediaorgwikiBisphC3A9nol_A183 httpshal-ansesarchives-ouvertesfranses-02289024document

196 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

La fonction λ0(t) est en quelque sorte le taux de deacutefaillance moyen On peut le calculer agrave partir des formules introduitesau paragraphe preacuteceacutedent en lissant la courbe de Kaplan-Meier avec des splines On peut aussi le calculer aveclrsquoestimateur de Breslow (voir Analyse de survie Meacutethodes non parameacutetriques184 Introduction agrave lrsquoanalyse des dureacuteesde survie185) qui repose aussi la courbe de Kaplan-Meier

On sait que si g(t) = logSprime(t) alors gprime(t) = Sprime(t)S(t) On en deacuteduit que

λ0(t) = minusd(log(S(t)))

dt

Pour la suite on pose h(Xi β) = exp(βXi) et lrsquoindividu meurt au temps ti de lrsquoexpeacuterience Une expeacuterience estdeacutefinie par la liste des couples (Xi ti) On souhaite trouver les paramegravetres β qui repreacutesentent au mieux les donneacutees delrsquoexpeacuterience On deacutefinit donc

bull Rt lrsquoensemble des personnes en vie au temps tbull Dt lrsquoensemble qui deacutecegravedent au t

Par deacutefinition i isin Rti et i isin Dti On calcule le ratio

Pr(β tXi) =h(Xi β)λ0(t)sum

jisinRth(Xj β)λ0(t)

=h(Xi β)sum

jisinRth(Xj β)

Pour une personne qui deacutecegravede au temps t ce ratio devrait ecirctre proche de 1 car on souhaite que h(Xi β) soit grand ettous les autres nuls On deacutefinit la vraisemblance partielle du modegravele par

L(β) =prodi

Pr(β ti Xi) =prodi

h(Xi β)sumjisinRti

h(Xj β)

Une fois qursquoon a calculeacute les coefficients β optimaux on peut affiner la partie λ0(t) Lrsquoestimateur de Breslow est

B(t) =sumi|ti⩽t

1sumjisinRti

h(βXj)

Crsquoest un estimateur de la fonction de survie

S(t) = exp(minusB(t))

444 Notebooks

Analyse de survie

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Quelques donneacutees (page 198)bull Reacutegression de Cox (page 199)

184 httpheliosmiparisdescartesfr~obouazizKMSurvpdf185 httpwwwlstaupmcfrpspCours_Survie_1pdf

44 Analyse de survie 197

Machine Learning Statistiques et Programmation Version 035930

Quelques donneacutees

On reacutecupegravere les donneacutees disponibles sur opendatagouvfr Donneacutees hospitaliegraveres relatives agrave lrsquoeacutepideacutemie de COVID-19186 Ces donneacutees ne permettent pas de construire la courbe de Kaplan-Meier187 On sait combien de personnesrentrent et sortent chaque jour mais on ne sait pas quand une personne qui sort un 1er avril est entreacutee

import numpyrandom as rnd

import pandasdf = pandasread_csv(httpswwwdatagouvfrendatasetsr63352e38-d353-4b54-bfd1-rarrf1b3ee1cabd7 sep=)gr = df[[jour rad dc]]groupby([jour])sum()diff = grdiff()reset_index(drop=False)diffhead()

def donnees_artificielles(hosp mu=14 nu=21)dt = pandasto_datetime(hosp[jour])res = []for i in range(hospshape[0])

date = dt[i]dayofyearh = hospiloc[i 1]delay = rndexponential(mu int(h))for j in range(delayshape[0])

resappend([date - int(delay[j]) date 1])h = hospiloc[i 2]delay = rndexponential(nu int(h))for j in range(delayshape[0])

resappend([date - int(delay[j]) date 0])return pandasDataFrame(res columns=[entree sortie issue])

data = donnees_artificielles(diff[1]reset_index(drop=True))sort_values(entree)datahead()

Chaque ligne est une personne entree est le jour drsquoentreacutee agrave lrsquohocircpital sortie celui de la sortie issue 0 pour deacutecegraves1 pour en vie

datadescribe()

Il y a environ 80 de survie dans ces donneacutees

import numpyduree = datasortie - dataentreedeces = (dataissue == 0)astype(numpyint32)

import numpyimport matplotlibpyplot as pltfrom lifelines import KaplanMeierFitterfig ax = pltsubplots(1 1 figsize=(10 4))kmf = KaplanMeierFitter()kmffit(duree deces)

(suite sur la page suivante)

186 httpswwwdatagouvfrfrdatasetsdonnees-hospitalieres-relatives-a-lepidemie-de-covid-19187 httpsfrwikipediaorgwikiEstimateur_de_Kaplan-Meier

198 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

kmfplot(ax=ax)axlegend()

Reacutegression de Cox

On reprend les donneacutees artificiellement geacuteneacutereacutees et on ajoute une variable identique agrave la dureacutee plus un bruit mais quasinul

import pandasdata_simple = pandasDataFrame(duree duree deces deces

X1 duree 057 deces + numpyrandomrandn(dureerarrshape[0])

X2 duree (-057) deces + numpyrandomrandn(dureerarrshape[0]))data_simplehead()

from sklearnmodel_selection import train_test_splitdata_train data_test = train_test_split(data_simple test_size=08)

from lifelinesfitterscoxph_fitter import CoxPHFittercox = CoxPHFitter()coxfit(data_train[[duree deces X1]] duration_col=duree event_col=deces

show_progress=True)

Iteration 1 norm_delta = 013943 step_size = 09000 log_lik = -25065836250 newton_rarrdecrement = 88993933 seconds_since_start = 00Iteration 2 norm_delta = 000660 step_size = 09000 log_lik = -24986237270 newton_rarrdecrement = 281312 seconds_since_start = 00Iteration 3 norm_delta = 000073 step_size = 09000 log_lik = -24985957376 newton_rarrdecrement = 003357 seconds_since_start = 01Iteration 4 norm_delta = 000000 step_size = 10000 log_lik = -24985954017 newton_rarrdecrement = 000000 seconds_since_start = 01Convergence success after 4 iterations

44 Analyse de survie 199

Machine Learning Statistiques et Programmation Version 035930

ltlifelinesCoxPHFitter fitted with 124826 total observations 100754 right-censoredrarrobservationsgt

coxprint_summary()

cox2 = CoxPHFitter()cox2fit(data_train[[duree deces X2]] duration_col=duree event_col=deces

show_progress=True)cox2print_summary()

Iteration 1 norm_delta = 013946 step_size = 09000 log_lik = -25065836250 newton_rarrdecrement = 88892089 seconds_since_start = 00Iteration 2 norm_delta = 000667 step_size = 09000 log_lik = -24986361089 newton_rarrdecrement = 286434 seconds_since_start = 00Iteration 3 norm_delta = 000074 step_size = 09000 log_lik = -24986076079 newton_rarrdecrement = 003426 seconds_since_start = 01Iteration 4 norm_delta = 000000 step_size = 10000 log_lik = -24986072650 newton_rarrdecrement = 000000 seconds_since_start = 01Convergence success after 4 iterations

coxpredict_cumulative_hazard(data_test[5])

coxpredict_survival_function(data_test[5])

445 Liens articles

bull Notes de lectures188

bull On the Breslow estimator189

446 Modules

bull lifelines190

bull scikit-survival191

188 httpwwwstatsoxacuk~mlunnlecturenotes2pdf189 httpsdlinwebunceduwp-contentuploadssites1568201304Lin07pdf190 httpslifelinesreadthedocsioenlatest191 httpsscikit-survivalreadthedocsioenlatest

200 Chapter 4 Reacutegression logistique

CHAPTER 5

NLP

NLP ou Natural Language Processing u traitement du langage naturel192

51 Compleacutetion

La compleacutetion193 est un meacutechanisme qui permet agrave un utilisateur de saisir les mots de sa recherche avec moins decaractegraveres qursquoelle nrsquoen contient Lrsquoutilisateur saisit plus rapidement

Si ces outils sont appreacuteciables du point de vue utilisateurs ils le sont tout autant cocircteacute site web en reacuteduisant la variabiliteacutedans le texte saisie en particulier les fautes drsquoorthographes Lrsquoutilisateur a besoin de moins de requecirctes pour trouverson produits et cela diminue drsquoautant la charge du serveur qui lui fournit ses reacutesultats

192 httpsfrwikipediaorgwikiTraitement_automatique_du_langage_naturel193 httpsfrwikipediaorgwikiComplC3A8tement

201

Machine Learning Statistiques et Programmation Version 035930

Ce chapitre aborde diffeacuterentes probleacutematiques lieacutees agrave ce genre de systegravemes qui sont preacutesents partout sur Internetmoteurs de recherches sites de ventes en ligne journaux Il existe de nombreuses librairies qui les impleacutementent Laplus connue en Python est whoosh194Quelques eacuteleacutements de codes sont disponibles dans le module completion et le notebook Compleacutetion (page 370)Vous pouvez eacutegalement lire How to Write a Spelling Corrector195 de Peter Norvig196 et deacutecouvrir le sujet avec On UserInteractions with Query Auto-Completion197 de Bhaskar Mitra Milad Shokouhi Filip Radlinski Katja Hofmann

511 Formalisation

bull Problegraveme drsquooptimisation (page 202)bull Ensemble des compleacutetions (page 203)bull Gain (page 203)

Problegraveme drsquooptimisation

Je me reacutefegravere pour cela agrave lrsquoarticle [Sevenster2013] (voir aussi [Bampoulidis2017]) qui introduit diffeacuterentes faccedilons deconstruire un systegraveme drsquoautocompeacutetion et qui les compare agrave lrsquousage Et srsquoil existe plusieurs faccedilons de faire il fautdrsquoabord mettre au point une faccedilon de les comparer Je me place dans le cadre drsquoun moteur de recherche car crsquoestlrsquousage principal que celui-ci soit un moteur de recherche ou une recherche incluse sur un site de vente A la fin de lajourneacutee on sait quelles sont les requecirctes saisies par les utilisateurs et le nombre de fois qursquoelles ont eacuteteacute saisies (qi wi)pour i isin [[1 N ]]

Sans systegraveme de compleacutetion les utilisateurs saisissent doncK =sumN

i=1 l(qi)wi ougrave l(qi) est la longueur de la compleacutetionqi Avec le systegraveme de compleacutetion les utilisateurs saisissent moins de caractegraveres crsquoest ce chiffre lagrave qursquoon cherche agraveminimiser Lrsquouniteacute est le charactegravere saisi ou keystroke en anglaisMecircme avec le mecircme systegraveme de compleacutetion il nrsquoest pas dit que tous les utilisateurs saisissent la mecircme requecircte de lamecircme faccedilon Pour simplifier on va supposer que si malgreacute tout et ne consideacuterer que la faccedilon minimale de saisir unerequecircte

Lrsquoexemple preacuteceacutedent illustrent deux faccedilons de saisir le terme autocompleacutetion (sur Wikipeacutedia) autocom + 4 touchesvers le bas ou autocomp + 1 touche vers le bas soit 7+4=11 touches dans le premier cas ou 8+1=9 touches dans lesecond cas

194 httpswhooshreadthedocsioenlatest195 httpnorvigcomspell-correcthtml196 httpnorvigcom197 httpswwwsemanticscholarorgpaperOn-user-interactions-with-query-auto-completion-Mitra-Shokouhi71e953caa2542a61b52e684649b3569c00251021

pdf

202 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

Deacutefinition D1 Minimum KeystrokeOn deacutefinit la faccedilon optimale de saisir une requecircte sachant un systegraveme de compleacutetion S comme eacutetant le minimum obtenu

M(q S) = min0⩽k⩽l(q)

k +K(q k S) (51)

La quantiteacute K(q k S) repreacutesente le nombre de touche vers le bas qursquoil faut taper pour obtenir la chaicircne q avec lesystegraveme de compleacutetion S et les k premiegraveres lettres de q

De faccedilon eacutevidente K(q l(q) S) = 0 et M(q S) ⩽ l(q) et K(q k S) gt 0 si k lt l(q) On prend eacutegalement commeconvention forallq isin S K(q k S) = infin et forallq isin S M(q S) = l(q) Certains systegravemes proposent des requecirctes avantde saisir quoique ce soit crsquoest pourquoi on inclut la valeur M(q 0) qui repreacutesente ce cas Construire un systegraveme decompleacutetion revient agrave minimiser la quantiteacute

M(S) =

Nsumi=1

M(qi S)wi

Ensemble des compleacutetions

Il nrsquoy a pas de restriction sur la fonction K(q k S) mais on se limitera dans un premier temps agrave une fonction simpleOn suppose que le systegraveme drsquoautocompleacutetion dispose drsquoun ensemble de requecirctes ordonneacutees S = (si) et la fonction

K(q k S) = position(q S(q[1k]))

Ougrave S(q[1k]) est le sous-ensemble ordonneacute de S des compleacutetions qui commencent par les k premiegraveres lettres de q etde longueur supeacuterieure strictement agrave k position(q S(q[1k])) est la position de q dans cet ensemble ordonneacute ouinfin sielle nrsquoy est pas Cette position est strictement positive K(q k S) ⩾ 1 sauf si k = l(q) auquel cas elle est nulle Celasignifie que lrsquoutilisateur doit descendre drsquoau moins un cran pour seacutelectionner une compleacutetion On note σ(q) la positionde la compleacutetion q dans lrsquoensemble S Par construction s = s2 =rArr σ(s1) = σ(s2)

K(q k S) = i|si ≻ q[1k] si isin S σ(si) lt σ(q) (52)

deacutesigne le cardinal de lrsquoensemble Trouver le meilleur systegraveme de compleacutetion S revient agrave trouver la meilleurefonction K(q k S) et dans le cas restreint lrsquoordre sur S qui minimise cette fonction Le plus souvent on se contentede trier les compleacutetions par ordre deacutecroissant de populariteacute On consideacuterera par la suite qursquoon est dans ce cas

Gain

On deacutefinit le gain en keystroke comme eacutetant le nombre de caractegraveres saisis en moins

G(q S) = l(s)minusM(q S)

Minimier M(S) ou maximiser G(S) =sumN

i=1 G(qi S)wi revient au mecircme

G(S) =

Nsumi=1

wi(l(s)minusM(q S)) =

Nsumi=1

wil(s)minusNsumi=1

wiM(q S)) = K minusM(S)

Ougrave K =sumN

i=1 l(qi)wi lrsquoensemble des caractegraveres tapeacutes par les utilisateurs G(S)K est en quelque sorte le ratio de

caractegraveres eacuteconomiseacutes par le systegraveme de compleacutetion

51 Compleacutetion 203

Machine Learning Statistiques et Programmation Version 035930

512 Fausses ideacutees reccedilues

bull Il faut trier les compleacutetions par freacutequence deacutecroissante (page 204)bull Il faut placer les compleacutetions courtes avant (page 205)bull Il faut montrer toutes les compleacutetions (page 205)bull Et si le poids de chaque compleacutetion est uniforme (page 205)

Il faut trier les compleacutetions par freacutequence deacutecroissante

En pratique cela marche plutocirct bien En theacuteorie cette assertion est fausse Prenons les quatre compleacutetions suivantes

q freacutequence ordrea 4 1ab 3 2abc 2 3abcd 1 4

Dans cet exemple si lrsquoutilisateur tape ab il verra les compleacutetions

abcabcd

Dans tous les cas K(q k S) = l(q) minus k Cela veut dire que lrsquoutilisateur ne gagnera rien En revanche avec lrsquoordresuivant

q ordrea 4ab 2abc 3abcd 1

Si lrsquoutilisateur tape ab il verra les compleacutetions

abcdabc

Le nombre de caractegraveres eacuteconomiseacutes sera

q freacutequence ordre M(q S)a 4 4 1ab 3 2 2abc 2 3 3abcd 1 1 1 = K(q 0 S)

Drsquoougrave un gain total de G(S) = 3

204 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

Il faut placer les compleacutetions courtes avant

Le cas preacuteceacutedent est deacutejagrave un contre exemple Mais drsquoun point de vue utilisateur il nrsquoest pas facile de lire des compleacutetionsde longueurs diffeacuterentes Cela veut peut-ecirctre dire aussi que la meacutetrique consideacutereacutee pour choisir le meilleur systegraveme decompleacutetion est faux Cela sera discuteacute agrave la prochaine section

Il faut montrer toutes les compleacutetions

Le premier exemple offre aussi un contre exemple Dans cet exemple lrsquoensemble Q = (qi) des requecirctes utilisateurs etlrsquoensemble S = (si) des compleacutetions ou requecirctes complegravetes est le mecircme Il suffit de la modifier un peu On enlegravevela requecircte ab de S

q freacutequence ordre M(q S)a 4 1 1ab 3 infin 2abc 2 2 2abcd 1 3 3

Drsquoougrave un gain total de G(S) = 2 En conclusion si jrsquoenlegraveve une petite compleacutetion pour laquelle le gain est nul il estpossible que le gain pour les suivantes soit positif On en retient qursquoil ne faut pas montrer trop de compleacutetions qui sedistinguent drsquoun caractegravere Plus geacuteneacuteralement il ne sert agrave rien de montrer des compleacutetions plus longue que le preacutefixedrsquoun caractegravere Par extension si une compleacutetion est plus longue que le preacutefixe de d caractegraveres il faut la montrer agrave uneposition infeacuterieure agrave d

Et si le poids de chaque compleacutetion est uniforme

On suppose que les compleacutetions ont toutes le mecircme poids wi = 1 Dans quel ordre faut-il ranger les compleacutetionspour eacuteconomiser le plus de caractegraveres On aurait tendance agrave dire la plus longue drsquoabord ce qursquoon peut veacuterifier dans lenotebook Compleacutetion (page 370)

q freacutequence ordre M(q S)a 1 4 1ab 1 3 2abc 1 2 2abcd 1 1 1

Ajouter deux autres compleacutetions disjointes edf edfh Le gain maximum est 6 et il y a plusieurs ordres

edf edfh abc abcd a ababcd abc edfh edf ab a

On a presque lrsquoimpression qursquoon peut traiter chaque bloc seacutepareacutement a ab abc abcd drsquoun cocircteacute et edf edfh de lrsquoautreA lrsquointeacuterieur des blocs les regravegles seront les mecircmes

51 Compleacutetion 205

Machine Learning Statistiques et Programmation Version 035930

En reacutesumeacute si on connaicirct le meilleur ordre pour toutes les mots sur les noeuds terminaux dans les bulles rouges dansla bulle verte le meilleur ordre sera une fusion des deux listes ordonneacuteesQuelques essais sur le notebook ont tendance agrave montrer que lrsquoordre a peu drsquoimpact sur le reacutesultat final lorsque lescompleacutetions ont le mecircme poids Avec quatre mots la somme des gains est identique quelque soit lrsquoordre

p=poids g=gain

200 - actuellement p=10 g=110 | acte p=10 g=20 | actes p=10 g=20 | actualiteacute p=1rarr0 g=50200 - acte p=10 g=30 | actuellement p=10 g=100 | actualiteacute p=10 g=60 | actes p=1rarr0 g=10200 - acte p=10 g=30 | actes p=10 g=30 | actualiteacute p=10 g=60 | actuellement p=10rarrg=80

Mais si on change le poids de lrsquoune drsquoelles elle se retrouve en premiegravere position

192 - actes p=20 g=40 | actuellement p=10 g=100 | acte p=10 g=10 | actualiteacute p=1rarr0 g=50192 - actes p=20 g=40 | actuellement p=10 g=100 | actualiteacute p=10 g=60 | acte p=1rarr0 g=00

206 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

513 Nouvelle meacutetrique

bull Intuitions (page 207)bull Formalisation (page 208)bull Quelques reacutesultats (page 208)bull Deacutefinition avanceacutee (page 208)bull Questions (page 209)

Intuitions

1 La meacutetrique actuelle nrsquoest pas la meilleure2 Si les mots nrsquoont pas de long preacutefixes en commun il vaut mieux placer le mot le plus freacutequent en premiegravere

position Pour les mots de freacutequence identique lrsquoordre a peu drsquoimportance3 Srsquoil existe une seacutequence de mots emboicircteacutes les gains sont minimes agrave moins drsquoenlever des mots ou de poser les

grandes compleacutetions drsquoabordLes intuitions 2 et 3 seront sans doute remise en question en consideacuterant une nouvelle meacutetrique On considegraverelrsquoensemble des compleacutetions S composeacute de deux mots actuellement actualiteacute Le gain moyen par mots est de 9caractegraveres eacuteconomiseacutes Si on ajoute le grand preacutefixe commun agrave la liste actu ce gain moyen tombe agrave 633 (voirCompleacutetion (page 370)) quelque soit lrsquoordre choisi pour les compleacutetions Toutefois si on ne prend pas en comptele gain sur le mot actu car ce nrsquoest pas un mot correct mais plus un mot qui aide la lecture de la liste ce gain moyentombe agrave 8 seulement En conclusion si lrsquoutilisateur tape la lettre a et qursquoon lui montre ceci

actuactualiteacuteactuellement

Au lieu de

actualiteacuteactuellement

Il doit taper en moyenne un caractegravere de plus pour obtenir le mot qursquoil cherche Et la meacutetrique ne montre pas reacuteellementde preacutefeacuterence pour lrsquoordre drsquoaffichage des compleacutetions Pourtant lrsquoutilisateur pourrait tregraves bien utiliser la seacutequence detouches suivantes

touche mot composeacutea abas actu (compleacutetion)e actuebas actuellement

Dans cet exemple aussi petit on ne gagnerait pas grand-chose mais cela vaut le coup drsquoeacutetudier cette piste pour desvocabulaires plus grand se servir des preacutefixes commun comme tremplin pour les mots plus grand Lrsquoeffect positionperdrait un peu de son influence

51 Compleacutetion 207

Machine Learning Statistiques et Programmation Version 035930

Formalisation

On reprend la premiegravere meacutetrique (51)

M(q S) = min0⩽k⩽l(q)

k +K(q k S)

La fonction K(q k S) est deacutefinie par (52)

Deacutefinition D1 Dynamic Minimum KeystrokeOn deacutefinit la faccedilon optimale de saisir une requecircte sachant un systegraveme de compleacutetion S comme eacutetant le minimum obtenu

M prime(q S) = min0⩽kltl(q)

M prime(q[1k] S) + min(K(q k S) l(q)minus k)

On prend comme convention M prime(empty S) = 0 Le calcul de la meacutetrique se construit comme une suite qui part des chaicircnesles plus courtes aux plus longues La meacutetrique est donc bien deacutefinie Contrairement agrave la premiegravere meacutetrique le calculdeacutepend du reacutesultat pour tous les preacutefixes drsquoune compleacutetion

proprieacuteteacute P1 meacutetriquesforallq M prime(q S) ⩽ M(q S)

Si q isin S crsquoest eacutevident puisque M prime(q S) ⩽ M prime(empty S) + l(q) Si q isin S cela deacutecoule de la constation preacuteceacutedentepuisque M prime(q S) ⩽ M prime(q[[1k]] S) +K(q k S) ⩽ k +K(q k S)

Quelques reacutesultats

On considegravere la liste des mots actuellement actualiteacute actuel On compare les ordres qui maximisent la premiegravereet la seconde meacutetriques ainsi que le gain obtenu Premiegravere meacutetrique

70 - actuellement p=10 g=110 | actuel p=10 g=40 | actualiteacute p=10 g=6070 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actuel p=10 g=3070 - actuel p=10 g=50 | actuellement p=10 g=100 | actualiteacute p=10 g=60

Seconde meacutetrique

7333 - actuel p=10 g=50 | actualiteacute p=10 g=70 | actuellement p=10 g=10070 - actuellement p=10 g=110 | actuel p=10 g=40 | actualiteacute p=10 g=60

On note que la seconde meacutetrique propose un meilleur gain ce qui est attendu mais aussi que le mot actuel sera placeacutedevant le mot actuellement plus long sans que cela souffre drsquoambiguiumlteacute

Deacutefinition avanceacutee

Dans les faits le Dynamic Minimum Keystroke sous-estime le nombre de caractegraveres neacutecessaires Lorsqursquoon utilise unmot comme tremplin on peut aiseacutement le compleacuteter mais il faut presser une touche ou attendre un peu pour voir lesnouvelles compleacutetions associeacutees agrave la premiegravere compleacutetion choisie et maintenant consideacutereacute comme preacutefixe Crsquoest ceque prend en compte la deacutefinition suivante

Deacutefinition D2 Dynamic Minimum Keystroke modifieacute

208 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

On deacutefinit la faccedilon optimale de saisir une requecircte sachant un systegraveme de compleacutetion S comme eacutetant le minimum obtenu

Mrdquo(q S) = min

min1⩽k⩽l(q) Mrdquo(q[1k minus 1] S) + 1 +min(K(q k S) l(q)minus k)min0⩽k⩽l(q) Mrdquo(q[1k] S) + δ +min(K(q k S) l(q)minus k)

Si on prend comme exemple la requecircte machine learning le premier cas correspond agrave la seacutequence bull seacutelection de la compleacutetion machinebull pression de la touche espacebull seacutelection de la compleacutetion machine learning

Et le second cas agrave la seacutequence bull seacutelection de la compleacutetion machinebull pression de la touche droite pour afficher les nouvelles compleacutetionsbull seacutelection de la compleacutetion machine learning

Le coucirct de la pression de la touche droite est noteacute δ ⩽ 1 qursquoon prendra infeacuterieur agrave 1 On remarque eacutegalement qursquoaveccette nouvelle meacutetrique il est possible de diminuer le nombre minimum de touches agrave presser pour des requecirctes en dehorsde lrsquoensemble S agrave partir du moment ougrave elles prolongent une compleacutetion existante Crsquoest lagrave un point tregraves inteacuteressant decette meacutetrique De maniegravere eacutevidente forallq M prime(q S) ⩽ Mrdquo(q S)

Questions

Gracircce agrave cette meacutetrique on peut envisager de trouver des reacuteponses agrave certaines questions 1 Les diffeacuterences entre les trois meacutetriques sont-elles neacutegligeables ou non 2 Ajouter des compleacutetions non preacutesentes dans le corpus ameacuteliore-t-elle la meacutetrique Mecircme question pour la

suppression 3 Existe-t-il un moyen de construire de faccedilon iteacuterative lrsquoensemble des compleacutetions ou plutocirct lrsquoordre qui minimise

la meacutetrice M prime(q S) 4 Comment calculer rapidement les meacutetriques pour les requecirctes dans lrsquoensemble S et en dehors

Pour la premiegravere question une expeacuterience devrait donner une piste agrave deacutefaut drsquoy reacutepondre Pour la seconde il nrsquoestpas neacutecessaire drsquoenvisager la suppression de compleacutetions car celles-ci devraient naturellement se positionner en fin deliste Lrsquoajout correspond agrave la situation ougrave beaucoup de compleacutetions partagent le mecircme preacutefixe sans pour autant que cepreacutefixe fasse partie de la liste des compleacutetions

maceacuterermalinemachineriemachinerie infernalemachinerie infernalissimemachine artistiquemachine automatiquemachine chaplinmachine intelligentemachine learning

Lrsquoideacutee consiste agrave ajouter la compleacutetion machine qui sert de preacutefixe commun agrave beaucoup de compleacutetions et cela ameacuteliorele gain moyen dans le cas preacutesent (sans compter le gain sur la requecircte machine) Enfin la troisiegraveme et la quatriegravemequestion la reacuteponse requiert la deacutemonstration de quelques proprieacuteteacutes matheacutematiques Mais avant jrsquoajouterai que lapremiegravere meacutetrique M correspond agrave la ligne de commande Windows et la meacutetrique M prime correspond agrave la ligne decommande Linux

51 Compleacutetion 209

Machine Learning Statistiques et Programmation Version 035930

514 Proprieacuteteacutes matheacutematiques

On srsquointeacuteresse principalement agrave la meacutetrique M prime deacutefinie par Dynamic Minimum Keystroke mais les reacutesultats seronteacutetendues aux autres quand cela est possible

bull Calcul pour une compleacutetion (page 210)bull Calcul pour une requecircte en dehors (page 211)bull Compleacutetions emboicircteacutees (page 211)bull Listes tronqueacutees de compleacutetions (page 212)

Calcul pour une compleacutetion

On a besoin drsquoune proprieacuteteacute pour calculer eacuteleacutegamment les meacutetriques pour lrsquoensemble des compleacutetions

Lemme L1 Dynamic Minimum KeystrokeOn note d(q S) la longueur du plus long preacutefixe de q inclus dans S

d(q S) = max l(p)|p ≺ q p isin S p = q

M prime(q S) = mind(qS)⩽kltl(q)

M prime(q[1k] S) + min(K(q k S) l(q)minus k)

Il nrsquoest pas neacutecessaire de regarder tous les preacutefixes mais seulement ceux entre le plus long preacutefixe qui est aussi unecompleacutetion et la requecircte q La deacutemonstration est identique agrave la deacutemonstration du lemme qui suit Lrsquoideacutee de cetteproprieacuteteacute est de pouvoir reacuteduire le coucirct de lrsquoalgorithme de calcul des meacutetriques Ce nrsquoest pas la seule eacutecriture qursquoonpuisse en faitLe calcul de la meacutetrique M prime suggegravere qursquoon doit faire ce calcul dans le sens des preacutefixes croissants mais il serait plussimple de le faire dans le sens des compleacutetions de poids croissant (les compleacutetions de moindre poids sont toujoursafficheacutees avant)

Si lrsquoalgorithme est plus simple (sens de la fleacuteche dans le figure preacuteceacutedente) il faut parfois plusieurs iteacuterations pourobtenir la valeur finale

210 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

Calcul pour une requecircte en dehors

Mais il est faux de dire que pour deux requecirctes en dehors de lrsquoensemble des compleacutetions q1 ⪯ q2 =rArr M prime(q1 S) ⩽M prime(q2 S) Le lemme suivant preacutecise pourquoi

Lemme L2 calcul de Miquest(q S)On suppose que p(q S) est la compleacutetion la plus longue de lrsquoensemble S qui commence q

klowast = max k|q[[1k]] ≺ q et q isin Sp(q S) = q[[1klowast]]

La meacutetrique M prime(q S) veacuterifie la proprieacuteteacute suivante

M prime(q S) = M prime(p(q S) S) + l(q)minus l(p(q S))

La meacutetrique M prime(q S) est eacutegale agrave celle du plus long preacutefixe inclus dans lrsquoensemble les compleacutetions agrave laquelle on ajoutela diffeacuterence des longueurs Cela correspond aux caractegraveres que lrsquoutilisateur doit saisir La deacutemonstration est assezsimple On suppose que cela nrsquoest pas vrai et qursquoil existe un existe k lt klowast tel que

M prime(q[[1k]] S) + l(q)minus l(q[[1k]]) lt M prime(q[[1klowast]] S) + l(q)minus l(q[[1klowast]])

=rArr M prime(q[[1k]] S)minus k lt M prime(q[[1klowast]] S)minus klowast

=rArr M prime(q[[1k]] S) + (klowast minus k) lt M prime(q[[1klowast]] S)

Cela signifie qursquoon a reacuteussi une faccedilon plus efficace drsquoeacutecrire le preacutefixe q[[1klowast]] Or par deacutefinition M prime(q[[1klowast]] S) estcenseacutee ecirctre le nombre de caractegraveres minimal pour obtenir q[[1klowast]] Ce nrsquoest donc pas possible Cette proprieacuteteacute estimportante puisque pour calculer M prime(q[[1klowast]] S) il suffit de regarder le plus long preacutefixe appartenant agrave lrsquoensembledes compleacutetions et seulement celui-ci Cet algorithme et impleacutementeacute par la meacutethode enumerate_test_metric Ence qui concerne la meacutetrique M par deacutefinition forallq isin S M(q S) = 0 La meacutetrique Mrdquo mrsquoeacutevoque la cocircte anglaise198Lrsquoiteacuterationn fonctionne de la mecircme maniegravere agrave partir du moment ougrave la requecircte consideacutereacutee ne fait pas partie de lrsquoensembledes compleacutetions mais il y a lrsquoeacutetage drsquoen dessous qui pose un doute Il y a un brin de poeacutesie dans ce +1 Lrsquoapplicationde lrsquoimpleacutementation du calcul de la meacutetrique montre que M prime et Mrdquo sont tregraves souvent eacutegales Je vais laisser ce δ sousforme de poeacutesie pour le moment

A faire terminer la deacutemonstration pour MLa cocircte anglaise

Compleacutetions emboicircteacutees

On considegravere les compleacutetions suivantes

actuactualiteacuteactualiteacutesactuelactuellement

Pour le preacutefixe actue on suggegravere actuel at actuellement Pour le preacutefixe actua on suggegravere actualiteacute at actualiteacutes Pourle preacutefixe actu on suggegravere la concateacutenation de ces deux listes Par conseacutequent pour construire les listes de compleacutetionsassocieacutees agrave chaque preacutefixe il paraicirct de partir des feuilles de lrsquoarbre puis de fusionner les listes de compleacutetions jusqursquoau

198 httpswwwyoutubecomwatchv=YV54e3R-rLg

51 Compleacutetion 211

Machine Learning Statistiques et Programmation Version 035930

noeud racine Plus concregravetement si deux compleacutetions veacuterifie q1 ⪯ q2 alors lrsquoensemble des compleacutetions veacuterifieC(q1) supC(q2) On peut mecircme dire que C(q) = cupC(s)|s ≻ q isin S Cela signifie qursquoune fois qursquoon a construit un trierepreacutesentant lrsquoensemble des compleacutetions il suffit de partir des feuilles de lrsquoarbre jusqursquoagrave la racine pour construire laliste des compleacutetions agrave chaque eacutetape et que pour un noeud preacutecis la liste des compleacutetions est lrsquounion des listes decompleacutetions des noeuds fils

Listes tronqueacutees de compleacutetions

On reprend la premiegravere meacutetrique (51) qui utilise la fonction K(q k S) deacutefinie en (52)

M(q S) = min0⩽k⩽l(q)

k +K(q k S)

Etant donneacute que le nombre minimum de caractegraveres pour obtenir une compleacutetion dans le trie ne peut pas ecirctre supeacuterieuragrave la longueur si K(q k S) gt l(q)minus k on sait deacutejagrave que que le preacutefixe q[1k] ne sera pas le minimum Cette remarqueest applicable aux meacutetriques M prime et Mrdquo

515 Problegraveme drsquooptimisation

bull Enonceacute 1 (page 212)bull Enonceacute 2 (page 213)bull Une ideacutee (page 213)

Enonceacute 1

Problegraveme P1 Optimiser un systegraveme de compleacutetionOn suppose que lrsquoensemble des compleacutetions C = cj est connu On souhaite ordonner cet ensemble pour obtenirlrsquoensemble ordonneacute des compleacutetions S = (si) qursquoon considegravere comme une permutation σ de lrsquoensemble de deacutepart S(σ) = (si) = (cσ(j)) Ce systegraveme de compleacutetion est destineacute agrave un des utilisateurs qui forment des recherches ourequecirctesQ = (qi wi)1⩽i⩽NQ

qi est la requecircte wi est la freacutequence associeacutee agrave cette requecircte On deacutefinit lrsquoeffort demandeacuteaux utilisateurs par ce systegraveme de compleacutetion

E(CQ σ) =

NQsumi=1

wiMprime(qi S(σ))

Deacuteterminer le meilleur systegraveme de compleacutetion revient agrave trouver la permutation σ qui minimise E(CQ σ)

La meacutetrique M prime peut ecirctre remplaceacutee par Mrdquo La diffeacuterence peut paraicirctre insignifiante mais elle ne lrsquoest pas tant queccedila Le systegraveme de compleacutetion peut se concevoir comme une compression le systegraveme de compleacutetion permet de coderlrsquoensemble des recherches drsquoun utilisateur Q avec moins de caractegraveres que celui-ci en a besoin pour les taper Onajoute les caractegraveres rightarrow et darr aux lettres de lrsquoalphabet et cela permet de coder plus rapidement une requecirctesLa quantiteacute suivante peut ecirctre consideacutereacutee comme le taux de compression

t(CQ σ) =E(CQ σ)sumNQ

i=1 wil(qi)

Lrsquoideacutee derriegravere cette meacutetaphore est le fait drsquoavoir une ideacutee de la borne infeacuterieure pour ce taux de compression Onsrsquoinspirer de la complexiteacute de Lempel-Ziv199 (calculating Lempel-Ziv (LZ) complexity (aka sequence complexity) of

199 httpsfrwikipediaorgwikiComplexitC3A9_de_Lempel-Ziv

212 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

a binary string200) ou du codage de Huffman201 M prime permet une compression avec perte et Mrdquo sans perte Le calculde M prime autorise deux jumps de suite

abb(darrdarrdarrdarrdarr)

Mais les deux derniegraveres touches darr peuvent srsquoappliquer au premier preacutefixe ou aux suggestions montreacutees par la compleacutetionobtenue apregraves trois darr

abb(darrdarrdarr)(darrdarr)

La meacutetrique Mrdquo interdit ce cas

Enonceacute 2

Problegraveme P2 Optimiser un systegraveme de compleacutetion filtreacuteOn suppose que lrsquoensemble des compleacutetions C = cj est connu On souhaite ordonner cet ensemble pour obtenirlrsquoensemble ordonneacute des compleacutetions S = (si) qursquoon considegravere comme une permutation σ de lrsquoensemble de deacutepart S(σ) = (si) = (cσ(j)) On utilise aussi une fonction f qui filtre les suggestions montreacutees agrave lrsquoutilisateur elle ne changepas lrsquoordre mais peut cacher certaines suggestions si elles ne sont pas pertinentes Ce systegraveme de compleacutetion est destineacuteagrave un des utilisateurs qui forment des recherches ou requecirctes Q = (qi wi)1⩽i⩽NQ

qi est la requecircte wi est la freacutequenceassocieacutee agrave cette requecircte On deacutefinit lrsquoeffort demandeacute aux utilisateurs par ce systegraveme de compleacutetion

E(CQ σ f) =

NQsumi=1

wiMprime(qi S(σ) f)

Deacuteterminer le meilleur systegraveme de compleacutetion revient agrave trouver la permutation σ qui minimise E(CQ σ f)

Comme suggeacutereacute au paragraphe Il faut montrer toutes les compleacutetions (page 205) le filtre f peut rejetter une suggestionsi elle est montreacutee agrave une position qui ne permet aucun gain agrave lrsquoutilisateur crsquoest-agrave-dire que la diffeacuterence des longueurscompleacutetion - preacutefixe est plus petite que la position ougrave elle est montreacutee

Une ideacutee

On aimerait bien pouvoir trouver lrsquoordre optimal par morceau supposer que lrsquoordre optimal pour lrsquoensemble descompleacutetions correspond agrave lrsquoordre des compleacutetions sur un sous-ensemble partageant le mecircme preacutefixe

Lemme L1 Miquestet sous-ensembleOn suppose que la compleacutetion q est preacutefixe pour la requecircte qprime et σ(q) lt σ(qprime) ce qui signifie que la compleacutetionq est toujours afficheacutee avant la compleacutetion qprime si elles apparaissent ensemble Alors M prime(q S) lt M prime(qprime S) Plusspeacutecifiquement si on considegravere lrsquoensemble Sprime(q) = sminus q isin S|q ≺ s (sminus q est la compleacutetion s sans son preacutefixe q)

M prime(qprime S) = M prime(qprime minus q Sprime) +M prime(q S)

On sait deacutejagrave par construction que M prime(qprime S) ⩽ M prime(qprimeminusq Sprime)+M prime(q S) Par lrsquoabsurde on suppose que M prime(qprime S) ltM prime(qprimeminusq Sprime)+M prime(q S) comme la requecircte qminusqprime est toujours afficheacutee avant la requecircte qprime cela voudrait dire qursquoon auraittrouveacute une faccedilon plus optimale drsquoeacutecrire la requecircte qminus qprime avec le systegraveme S ce qui impossible drsquoapregraves la deacutefinition de lameacutetrique M prime Cette proprieacuteteacute nrsquoaide pas forcmeacutement agrave trouver un algorithme pour optimiser lrsquoordre des compleacutetionsdans la mesure ougrave la proprieacuteteacute suppose qursquoune compleacutetion soit afficheacute avant toutes celles dont elle est le preacutefixe La

200 httpstackoverflowcomquestions4946695calculating-lempel-ziv-lz-complexity-aka-sequence-complexity-of-a-binary-str201 httpsfrwikipediaorgwikiCodage_de_Huffman

51 Compleacutetion 213

Machine Learning Statistiques et Programmation Version 035930

proprieacuteteacute suivante est eacutevidemment vraie pour le cas particulier qursquoon vient de mentionner Si elle est vraie cela devraitpermettre de proceacuteder par sous-ensemble pour trouver lrsquoordre optimal

Theacuteoregraveme T1 Miquest ordre et sous-ensembleSoit q une requecircte de lrsquoensemble de compleacutetion S ordonneacutees selon sigma Si cet ordre veacuterifie

forallk σ(q[1k]) ⩽ σ(q[1k + 1]) (53)

On note lrsquoensemble Sprime(q[1k]) = q[k + 1len(q)] isin S alors

forallk M prime(q[1k] S) = M prime(q[k + 1l(q)] Sprime(q[1k]) +M prime(q[1k] S)

Ceci deacutecoule de lrsquoapplication du lemme preacuteceacutedent Ce theacuteoregraveme permet presque de deacuteterminer le meilleur ordre sigmaparmi ceux qui veacuterifie la contrainte (53) agrave savoir une requecircte courte est toujours afficheacutee avant celles qui la complegravetentOn procegravede par reacutecurrence on suppose connu les ordres σ(q) pour lrsquoensemble des compleacutetions qui commencent par lepreacutefixe p = q[1k] Sprime(q[1k]) = q|q[1k] = p q isin S Pour i = kminus 1 le meilleur ordre σ revient agrave fusionner leslistes ordonneacutees obtenues pour chaque preacutefixe de longueur k Il faut deacutemontrer la possibiliteacute de traiter les compleacutetionspar ordre croissant

516 Impleacutementation

bull Notion de trie (page 214)bull Algorithme eacuteleacutegant (page 215)

Jrsquoallais vous raconter en deacutetail ce qursquoest un trie202 et le paragraphe suivant vous en dira sans doute un peu plus agrave cesujet Le trie203 est le moyen le plus efficace de trouver un mot aleacuteatoire ou un preacutefixe aleacuteatoire dans une liste Mais il ya mieux et plus simple dans notre cas ougrave il faut trouver une longue liste de mots connue agrave lrsquoavance - donc pas aleacuteatoire- Et puis crsquoeacutetait sous mes yeux Il y a plus simple et aussi efficace quand les listes des mots et des compleacutetions sontconnues agrave lrsquoavance

Notion de trie

Une impleacutementation des tries est deacutecrites dans deux notebooks Arbre et Trie204 Les reacutesultats de ce chapitre onteacuteteacute produits avec le module completion et le notebook Compleacutetion (page 370) Le notebook Completion profiling(page 363) montre les reacutesultats du profiling Lrsquoimpleacutementation Python est tregraves gourmande en meacutemoire et elle seraitplus efficace en C++utilisation ou rechercheCrsquoest diffeacuterent de construire toutes les compleacutetions pour un preacutefixe plutocirct que toutes les compleacutetions pour tous lespreacutefixes Le premier cas correspond agrave un utilisateur qui cherche quelque chose Il faut ecirctre rapide quitte agrave retourner unreacutesultat tronqueacuteLe second cas correspond agrave objectif de recherche des drsquooptimisation Les enjeux sont plus de reacuteussir agrave calculer toutesles compleacutetions en un temps raisonnable et avec une utilisation meacutemoire raisonnable eacutegalementmeacutemoireDrsquoapregraves la remarque preacuteceacutedente il nrsquoest pas utile de conserver pour un preacutefixe donneacute lrsquointeacutegraliteacute des compleacutetions quicommencent par ce preacutefixe Dans le pire des cas cette liste a besoin de contenir autant de compleacutetions que le nombrede caractegraveres de la plus longue compleacutetioms

202 httpsfrwikipediaorgwikiTrie_(informatique)203 httpsfrwikipediaorgwikiTrie_(informatique)204 httpwwwxavierduprefrappensae_teaching_cshelpsphinxnotebooks_gs1a_A_arbre_triehtml

214 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

Algorithme eacuteleacutegant

Il faut relire le premier problegraveme diquestoptimisation (page 212) pour commencer agrave se poser la question comment calculerla quantiteacute E(CC σ) lorsque σ correspond agrave lrsquoordre alphabeacutetique La reacuteponse est simple il suffit de parcourir lescompleacutetions une et une seule fois Supposons qursquoau cours de ce parcours on est agrave la compleacutetion drsquoindice i On conserveun compteur p(k i) = K(c(i) k C) qui repreacutesente la position de la compleacutetion c(i) dans la liste des compleacutetionsafficheacutees par le systegraveme de compleacutetion pour le preacutefixe c(i)[[1k]] Le coucirct de lrsquoalgorithme est en O(N lnN +LN) ougraveN est le nombre de compleacutetions et L la longueur maximale drsquoune compleacutetionDans le cas ougrave σ est quelconque et C = Q on procegravede en deux eacutetapes Dans un premier temps on utilise une variantede lrsquoalgorithme preacuteceacutedent pour calculer M prime(q C) pour les requecirctes q dans lrsquoensemble des compleacutetionsDans un second temps on effectue une sorte de fusion entre les deux listes trieacutees alphabeacutetiquement Le coucirct delrsquoalgorithme est en O(ILN + 2N lnN +M lnM +max(NM)) ougrave M est le nombre de requecirctes dans lrsquoensembleQ Cette partie repose sur le lemme (page 211) lieacute au calcul des meacutetriques pour les reacutequecirctes hors de lrsquoensembledes compleacutetions I est un nombre drsquoiteacuteration neacutecessaires pour que les meacutetriques M prime convergent pour lrsquoensemble descompleacutetions En pratique crsquoest tregraves petitLrsquoalgorithme est impleacutementeacute dans le module completion_simple et plus particuliegraverement la fonctionCompletionSystemcompute_metrics

517 Digressions

bull Synonymes Contexte (page 215)bull Source (page 216)bull Fonction de gain (page 216)bull Minuscules majuscules (page 216)bull Suppression de caractegraveres (page 216)bull Coucirct drsquoun caractegravere (page 216)bull Compleacutetion partielle (page 216)bull Utilisateurs (page 217)bull Revenir en arriegravere (page 217)

Synonymes Contexte

On utilise dabord les preacutefixes pour chercher les mots dans un trie mails il est tout agrave fait possible de consideacuterer dessynonymes Avec les preacutefixes un noeud a au plus 27 (26 lettres + espaces) caractegraveres suivant possibles Si le preacutefixea des synonymes rien nrsquoempecircche de relier ce noeud avec les successeurs de ses synonymes A ce sujet voir Context-Sensitive Query Auto-Completion205 de Ziv Bar-Yossef et Naama Kraus

205 httptechnionacil~nkrauspapersfr332-bar-yossefpdf

51 Compleacutetion 215

Machine Learning Statistiques et Programmation Version 035930

Source

Dans le cas drsquoun moteur de recherche le trie ou lrsquoensemble S des requecirctes complegravetes est construit agrave partir des requecirctesdes utilisateurs Lorsque le systegraveme de compleacutetion est mise en place la distribution des requecirctes changent Les requecirctesles plus utiliseacutees vont ecirctre encore plus utiliseacutees car les utilisateurs vont moins srsquoeacutegarer en chemin comme srsquoeacutegarer versune faute drsquoorthographe Comment corriger la distribution des requecirctes malgreacute lrsquointervention du systegraveme de compleacutetion Cela pourrait faire lrsquoobjet drsquoun sujet de recherche

Fonction de gain

Jusqursquoagrave preacutesent on a consideacutereacute uniquement le nombre de caractegraveres eacuteconomiseacutes pour deacuteterminer le meilleur ordreRien nrsquoempecircche drsquoajouter une coucirct suppleacutemenaires lieacute agrave lrsquoordre des compleacutetions Une requecircte est peacutenaliseacutee si lescompleacutetions associeacutees sont loin de lrsquoordre alphabeacutetique On peut peacutenaliser un ordre eacuteloigneacute agrave chaque caractegravere ajouteacute

Minuscules majuscules

Crsquoest bien connu on fait peu de ces des accents sur internet De fait mecircme si lrsquoaccent apparaicirct agrave lrsquoeacutecran le systegravemede compleacutetion verra peut de diffeacuterences entre le e et eacute Sur Wikpeacutedia les homonymes sont distingueacutes par un sous-titreentre parenthegravese lrsquoanneacutee pour un eacuteveacutenement sportif reacutegulier On peut imaginer que plusieurs seacutequences de caractegraveresaboutissent agrave la mecircme entreacutee

Suppression de caractegraveres

Nous pourrions consideacuterer le fait de pouvoir supprimer des caractegraveres afin de trouver le chemmin le plus court pourobtenir une requecircte

Coucirct drsquoun caractegravere

Jusqursquoagrave preacutesent la pression drsquoune touche a le mecircme coucirct quelque soit la source un caractegravere une touche vers le basPourtant plus il y a de lettres dans lrsquoalphabet plus le systegraveme de compleacutetion sera performant agrave supposer que les motssoient plus ou moins eacutequireacutepartis selon les caractegraveres (la probabiliteacute du prochain caractegravere est uniforme) On peutconcevoir que chercher une touche lorsque lrsquoalphabet est grand peut prendre un certain temps Le cas du chinois estinteacuteressant car la saisie des caractegraveres206 peut prendre plusieurs touches Faut-il consideacuterer un caractegravere chinois commeuniteacute de deacutecomposition drsquoun mot ougrave la seacutequence des touches qui le construisent Dans le premier cas il faudrait sansdoute peacutenaliser la saisie drsquoun caractegravere en fonction du nombre de touches neacutecessaires pour le former par rapport agrave laseacutelection drsquoune compleacutetion

Compleacutetion partielle

On rappelle la meacutetrique (513) (voir aussi (52))

M prime(q S) = min0⩽k⩽l(q)

M prime(q[1k] S) +K(q k S)

Si on note L(p S) lrsquoensemble des compleacutetions pour le preacutefixe p Que dire de la deacutefinition suivante

M primep(q S) = min

0⩽k⩽l(q)

11L(q[1k]S)=empty

[M prime

p(q[1k] S) +K(q k S)]+

11L(q[1k]S)=empty[minj M

primep(q[1j] S) +M prime

p(q[j + 1] S)]

Cela revient agrave consideacuterer que si le systegraveme de compleacutetion ne propose aucune compleacutetion avec le preacutefixe en cours onpropose des compleacutetions avec un preacutefixe qui ne tient compte que des derniegraveres lettres

206 httpsfrwikipediaorgwikiSaisie_du_chinois_sur_ordinateur

216 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

Utilisateurs

La modeacutelisation matheacutematique aboutit agrave lrsquooptimisation drsquoune meacutetrique qui ne coiumlncide pas forceacutement agrave la logique delrsquoutilisateur Le fait de montrer une suggestion dans la liste donne en quelques sortes un signal qui indique que cetterequecircte a une bonne drsquoaboutir Crsquoest en particulier vrai si elle est identique agrave celle que lrsquoutilisateur est en train de saisirquand mecircme mecircme elle nrsquoaurait aucun sens La preacutesence drsquoune suggestion conforte lrsquoutilisateur dans le chemin qursquoilchoisitUn autre aspect est le fait qursquoune suggestion la premiegravere par exemple doit rester agrave lrsquoeacutecran si celle-ci inclut le preacutefixesaisit par lrsquoutilisateur Supposons que ce dernier saisisse fac le moteur de suggestions lui montrera en premier facebookIl faudra que facebook demeure en premiegravere position jusqursquoagrave ce lrsquoutilisateur ait soit cliqueacute dessus soit saisi quelquechose de plus long Enlever la suggestion facebook alors que le preacutefixe en cours est faceboo perturbe

Revenir en arriegravere

On pourrait eacutegalement imaginer une meacutetrique qui calcule le meilleur chemin en donnant la possibiliteacute de revenir enarriegravere Par exemple pour saisir eacuteleacutephant un utilisateur pourrait utiliser la suggestion eacuteleacutephants puis enlever le derniers On note la meacutetrique M prime

b

Deacutefinition D1 Dynamic Minimum Keystroke arriegravereOn deacutefinit la faccedilon optimale de saisir une requecircte sachant un systegraveme de compleacutetion S comme eacutetant le minimum obtenu

M primeb(q S) = min

min0⩽kltl(q) M prime

b(q[1k] S) + min(K(q k S) l(q)minus k)mins≻q M prime

b(s S) + l(s)minus l(q)

Le second terme de la meacutetrique neacutecessite de consideacuterer toutes les suggestions dans S qui commencent par le preacutefixe qLe calcul de la meacutetrique peut ecirctre fait en adaptant lrsquoalgorithme reprend les ideacutees du paragraphe Formalisation (page 208)mais il faudra parcourir les suggestions dans lrsquoordre alphabeacutetique puis mettre agrave jour la meacutetrique en les parcourant danslrsquoautre sens On recommence jusqursquoagrave convergenceNotebooks associeacutes

bull Compleacutetion (page 370)bull Completion profiling (page 363)bull Completion Trie and metrics (page 355)bull Compleacutetion Simple (page 376)

51 Compleacutetion 217

Machine Learning Statistiques et Programmation Version 035930

218 Chapter 5 NLP

CHAPTER 6

Meacutetriques

61 Courbe ROC

bull Deacutefinitions (page 220)bull Aire sous la courbe (page 222)

ndash Expression (page 222)ndash Intervalles de confiance (page 223)

bull Intervalles de confiance sur la courbe (page 224)ndash Construction de la courbe ROC (page 224)ndash Meacutethode boostrap (page 225)ndash Aire sous la courbe (page 226)

bull Distribution des scores mauvais et bons (page 226)bull Variantes (page 227)

ndash Taux de lecture ou de reconnaissance (page 227)bull Classification multi-classe (page 228)bull Exemple (page 229)

Ce document introduit la courbe ROC207 (Receiving Operator Characteristic) qui est communeacutement utiliseacutee pourmesurer la performance drsquoun classifieur Il introduit aussi des termes comme preacutecision rappel AUC208 qui sontpreacutesents dans la plupart des articles qui traitent de machine learning Le module roc impleacutemente les calculs ci-dessousqursquoon peut tester avec le notebook ROC (page 332)

207 httpsenwikipediaorgwikiReceiver_operating_characteristic208 httpsenwikipediaorgwikiReceiver_operating_characteristicArea_under_the_curve

219

Machine Learning Statistiques et Programmation Version 035930

611 Deacutefinitions

Supposons que nous avons un classifieur qui classe des observations en un ensemble de classes De plus il donne cettereacuteponse accompagneacutee drsquoun score de pertinence Deux cas sont possibles soit la reacuteponse est bonne (1) soit la reacuteponseest fausse (0) Pour chaque observation on associe un couple (r x) ougrave r est eacutegal agrave 0 ou 1 x est le score de pertinenceOn cherche agrave deacuteterminer agrave partir de quel seuil de pertinence la reacuteponse du classifieuur est fiable En faisant varier xon obtient une courbe (source wikipedia209)

Cette courbe sert eacutegalement agrave comparer diffeacuterents classifieurs Plus une courbe a des valeurs eacuteleveacutees plus lrsquoaire sousla courbe est grande moins le classifieur fait drsquoerreurDrsquoune maniegravere simplifieacutee le classifieur retourne une reacuteponse qui est soit mauvaise (-) soit bonne (+) On peut lrsquoeacutevaluercar pour construire un classifier on dispose toujours drsquoune base contenant les reacuteponses attendues En fonction du scorex et drsquoun seuil s on deacutefinit quatre cas

cas reacuteponse preacutedite est bonne (+) reacuteponse preacutedite est mauvaise (-)x ⩾ s TP vrai (true) positif FP faux positifx lt s TN vrai (true) neacutegatif FN faux neacutegatif

Ces reacutesultats sont souvent preacutesenteacutes selon une matrice confusion

reacuteponse attendue 0 10 TN FP1 FN TP

A partir de ces deacutefinitions on deacutefinit bull la preacutecision210 TP

TP+FP

bull le rappel ou recall211 TPTP+TN

En choisissant un seuil relatif au score de pertinence x au-dessus on valide la reacuteponse du classifieur en-dessous onne la valide pas On peut toujours calculer la preacutecision et le rappel pour toutes les reacuteponses dont le score est au-dessusdrsquoun seuil s La courbe ROC srsquoobtient en faisant varier s

209 httpenwikipediaorgwikiFileRoccurvespng210 httpsenwikipediaorgwikiInformation_retrievalPrecision211 httpsenwikipediaorgwikiInformation_retrievalRecall

220 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

Deacutefinition D1 Courbe ROCOn suppose que Y est la variable aleacuteatoire des scores des expeacuteriences qui ont reacuteussi X est celle des scores desexpeacuteriences qui ont eacutechoueacute On suppose eacutegalement que tous les scores sont indeacutependants On note FY et FX lesfonctions de reacutepartition de ces variables FY (s) = P (Y ⩽ s) et FX(s) = P (X ⩽ s) On deacutefinit en fonction drsquounseuil s isin R

bull R(s) = 1minus FY (s) = P (Y gt s)

bull E(s) = 1minus FX(s) = P (X gt s)

La courbe ROC est le graphe (E(s) R(s)) lorsque s varie dans R

TP (s) deacutesigne les true positifs au-dessus du seuil s avec les notations TP FP FN TN cela revient agrave

E(s) = 1minus TP (s)

TP (s) + TN(s)

R(s) = 1minus FN(s)

FP (s) + FN(s)

On remarque que foralls TP (s) + TN(s) est constant De mecircme pour FP (s) + FN(s)

On remarque que les fonctions s minusrarr E(s) et s minusrarr R(s) sont deacutecroissantes toutes deux Elles sont donc inversiblesDans le cas ougrave la variable aleacuteatoire θ est indeacutependante de la variable X la courbe ROC est une droite reliant les points(0 0) et (1minus p p) ougrave p = P (θ = 1) Ceci signifie que la connaissance du score X nrsquoapporte pas drsquoinformation quantagrave la reacuteussite de lrsquoexpeacuterienceIl peut paraicirctre complexe de distinguer la reacuteponse et le score du classifieur Crsquoest pourtant neacutecessaire dans le cas ougravele classifieur retourne un entier qui deacutesigne une classe parmi n Un cas positif est lorsque la classe preacutedite est eacutegale agravela classe attendue il est neacutegatif dans le cas contraire La courbe peut ecirctre adapteacutee pour drsquoautres problegravemes tels que leranking (voir [Agarwal2005])

61 Courbe ROC 221

Machine Learning Statistiques et Programmation Version 035930

Une autre faccedilon de lrsquoexprimer car je ne retiens jamais la deacutefinition des FP TP FN TN Pour quelqursquoun qui doitreacutefleacutechir trois secondes agrave chaque fois qursquoon me demande ougrave est la gauche ce nrsquoest jamais eacutevident

N+ =sumn

i=1 11yi==1TPR(s) = 1

N+

sumni=1 11score(Xi)⩾s11yi==1

FPR(s) = 11minusN+

sumni=1 11score(Xi)⩾s11yi =1

x = FPR(s) y = TPR(s) (FPR = False Positive Rate TPR = True Positive Rate)

612 Aire sous la courbe

Expression

Lrsquoaire sous la courbe (AUC) correspond agrave lrsquointeacutegrale de la fonction ROC Elle se calcule agrave partir du theacuteoregraveme suivant

Theacuteoregraveme T1 Aire sous la courbe (AUC)On utilise les notations de la deacutefinition de la Courbe ROC (page 221) Lrsquoaire sous la courbe ROC est eacutegale agrave P (Y gt X)

RappelSoit X une variable aleacuteatoire de densiteacute f et de fonction de reacutepartition F Si U = F (X) alors

P (U ⩽ t) = P (F (X) ⩽ t) = P(X ⩽ Fminus1(t)

)= F

(Fminus1(t)

)= t

La variable U est de loi uniforme sur [0 1] De plus soit g une fonction inteacutegrable quelconque on pose u = F (x) et intRg(x) f(x) dx =

int[01]

g(Fminus1(u)) du

DeacutemonstrationOn note fX la densiteacute de la variable X et fY celle de la variable Y On peut alors deacutefinir la probabiliteacute P (Y gt X) parune inteacutegrale

P (Y gt X) =

intx

inty

fX(x) fY (y) 11ygtxdxdy

On note FX la fonction de reacutepartition de X soit FX(x) =int x

minusinfin fX(u)du On pose comme changement de variable u = FX(x) On en deacuteduit que du = fX(x)dx La variable aleacuteatoire U = FX(X) est uniforme et comprise dans [0 1]

P (Y gt X) =

intx

fX(x)dx

inty

fY (y) 11ygtxdy

=

intu

du

inty

fY (y) 11ygtFminus1X (u)dy

=

intu

du P(Y gt Fminus1

X (u))

222 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

Or si u = FX(s) = E(s) alors Fminus1X (u) = s et P

(Y gt Fminus1

X (u))= Rprime(s) Par conseacutequent

P (Y gt X) =

intu

du P(Y gt Fminus1

X (u))=

intu

du Rprime(Fminus1X (u))

Cette derniegravere expression est lrsquoaire rechercheacutee Ce theacuteoregraveme nous permet de deacutefinir un estimateur pour lrsquoaire sous lacourbe ROC agrave lrsquoaide des U-statistiques212 de Mann-Whitney213 (voir [Saporta1990])

Corollaire C1 Estimateur de lrsquoaire sous la courbe ROCOn dispose des scores (Y1 Yn) des expeacuteriences qui ont reacuteussi et (X1 Xm) les scores des expeacuteriences qui onteacutechoueacute On suppose eacutegalement que tous les scores sont indeacutependants Les scores (Yi) sont identiquement distribueacutesil en est de mecircme pour les scores (Xi) Un estimateur de lrsquoaire A sous la courbe ROCiquestest

A =1

nm

msumi=1

nsumj=1

(11YjgtXi +

1

211Yj=Xi

)(61)

DeacutemonstrationLa deacutemonstration est eacutevidente

E(A)=

1

nm

msumi=1

nsumj=1

(P (Yj gt Xi) +

1

2P (Xi = Yj)

)= P (Y gt X) +

1

2P (Y = X)

Dans le cas ougrave X ou Y sont continues P (X = Y ) = 0

Intervalles de confiance

Il est possible de deacuteterminer un intervalle de confiance pour cet estimateur Le theacuteoregraveme central limite nous permet dedire que cet estimateur tend vers une loi normale lorsque n et m tendent vers lrsquoinfini

Corollaire C2 Variance de lrsquoestimateur AUCOn note PX = P (X lt min Yi Yj) et PY = P (max Xi Xj lt Y ) Xi et Xj sont de mecircme loi que X Yi Yj

sont de mecircme loi que Y La variance de lrsquoestimateur A deacutefinie par (61) est

VA =A(1minus A)

nm

[1 + (nminus 1)

PY minus A2

A(1minus A)+ (mminus 1)

PX minus A2

A(1minus A)

]

DeacutemonstrationCette deacutemonstration nrsquoest vraie que dans le cas continu Par conseacutequent P (X = Y ) = 0 On calcule tout drsquoabordEA2 et on utilise le fait que VA = E

(A2)minus A2

A2 =1

n2m2

msumi=1

nsumj=1

11XiltYj

2

=1

n2m2

msumi=1

nsumj=1

msumk=1

nsuml=1

11XiltYj11XkltYl

A2 = 1n2m2

summi=1

sumnj=1 11XiltYj

+ 1n2m2

summi=1

sumnj=1

sumk =i 11XiltYj11XkltYj

+ 1n2m2

summi=1

sumnj=1

suml =j 11XiltYj11XiltYl

+ 1n2m2

summi=1

sumnj=1

sumk =i

suml =j 11XiltYj11XkltYl

212 httpsenwikipediaorgwikiU-statistic213 httpsfrwikipediaorgwikiTest_de_Wilcoxon-Mann-Whitney

61 Courbe ROC 223

Machine Learning Statistiques et Programmation Version 035930

On en deacuteduit que

EA2 =A

nm+

nminus 1

nmP (max Xi Xk lt Yj) +

mminus 1

nmP (Xi lt min Yj Yl) +

nmminus nminusmminus 1

nmA2

VA2 =1

nm

[A+ (nminus 1)PY + (mminus 1)PX minus (n+m+ 1)A2

]=

1

nm

[A+ (nminus 1)

(PY minus A2

)+ (mminus 1)

(PX minus A2

)+ A2

]On retrouve lrsquoexpression chercheacutee

613 Intervalles de confiance sur la courbe

Les systegravemes de reconnaissance sont souvent ajusteacutes de telle maniegravere que le taux drsquoerreur soit constant par exemple1 Crsquoest la proportion de documents reconnus qui deacutetermine la performance de ce systegraveme Lrsquoobjectif ce paragrapheest de deacuteterminer un intervalle de confiance du taux de reconnaissance pour un taux drsquoerreur fixeacute

Construction de la courbe ROC

Ce premier paragraphe deacutetaille la maniegravere dont est construite une courbe ROC (voir Courbe ROC (page 221))

Algorithme A1 Courbe ROCOn suppose qursquoon dispose drsquoun ensemble de points (Xi θi) isin Rtimes0 1 pour i isin 1 n X_i est le score obtenupour lrsquoexpeacuterience i theta_i vaut 1 si elle a reacuteussi et 0 si elle a eacutechoueacute On suppose eacutegalement que cette liste est trieacuteepar ordre croissant forall i X_i infegal X_i+1 On souhaite eacutegalement tracer k points sur la courbe on deacuteterminepour cela k seuils ensembles_1s_k deacutefinis par forallj sk = X j k

n

On construit ensuite les points (Rj Ej) deacutefinis par

Rj =1

n

nsumi=1

θi11Xi⩾sj et Ej =1

n

nsumi=1

(1minus θi) 11Xi⩾sj

La courbe ROC est composeacutee de lrsquoensemble ROC = (Ej Rj) |1 ⩽ j ⩽ k

Les deux suites (Rj)j et (Ej)j sont toutes les deux deacutecroissantes drsquoapregraves leur deacutefinition La courbe peut ecirctre renduecontinue par interpolation

Deacutefinition D2 taux de classification agrave erreur fixeOn cherche un taux de reconnaissance pour un taux drsquoerreur donneacute On dispose pour cela drsquoune courbe ROC obtenuepar lrsquoalgorithme de la courbe ROC (page 224) et deacutefinie par les points ROC = (ej rj) |1 ⩽ j ⩽ k On suppose icique (e1 r1) = (1 1) et (ek rk) = (0 ) Si ce nrsquoest pas le cas on ajoute ces valeurs agrave lrsquoensemble ROC Pour un taux drsquoerreur donneacute elowast on cherche jlowast tel que

ejlowast+1 ⩽ elowast ⩽ ejlowast

Le taux de reconnaissance ρ chercheacute est donneacute par

ρ =elowast minus xjlowast

xjlowast+1 minus xjlowast[rjlowast+1 minus rjlowast ] + rjlowast

Il ne reste plus qursquoagrave deacutetailler la meacutethode bootstrap

224 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

Meacutethode boostrap

Une seule courbe ROC ne permet drsquoobtenir qursquoun seul taux On cherche ici agrave construire plusieurs courbes ROC agravepartir de la mecircme expeacuterience de faccedilon agrave obtenir plusieurs taux de reconnaissance pour le mecircme taux drsquoerreur De cettemaniegravere il sera possible de deacuteterminer un intervalle de confiance On srsquoinspire pour cela des meacutethodes de bootstrap214

Algorithme A2 Courbe ROC meacutethode boostrapOn dispose toujours du nuage de points E = (Xi θi) isin Rtimes 0 1 avec i isin 1 n On choisit C isin N le nombrede courbes ROC qursquoon deacutesire tracer Pour chaque courbe c isin 1 C

bull On construit un nouvel ensemble (X primei θ

primei)1⩽i⩽n construit par un tirage aleacuteatoire dans lrsquoensemble E avec remise

bull Lrsquoalgorithme de la courbe ROC (page 224) permet de constuire la courbe RkOC

bull Lrsquoalgorithme de taux de classification agrave erreur fixe (page 224) permet ensuite de deacuteterminer un taux dereconnaissance ρk pour le taux drsquoerreur elowast

La liste (ρ1 ρC) est trieacutee par ordre croissant Les quantiles sont ensuite utiliseacutes pour deacuteterminer lrsquointervalle deconfiance [ρ1 ρ2] du taux de reconnaissance pour le taux drsquoerreur elowast de telle sorte que

P (ρ isin [ρ1 ρ2]) = 1minus α

On prend geacuteneacuteralement α = 005

Cet algorithme aboutit aux reacutesultats suivants

La premiegravere image est celle drsquoune courbe ROC (lrsquoaxe des abscisses est inverseacute) la seconde repreacutesente toutes cellesobtenues par la meacutethode bootstrap pour trois courbes La troisiegraveme image superpose cent courbes Moins il y a depoints pour estimer une partie de la courbe plus les courbes sont espaceacutees Ces courbes ont eacuteteacute construites avec 12000points Le taux de lecture pour 1 drsquoerreur est eacutegal agrave 6809 Lrsquointervalle de confiance agrave 95 est [6610 7016](construit avec 500 courbes) Moyenne (6825) et meacutediane (6812) sont sensiblement eacutegales au taux calculeacute sur lapremiegravere courbe construite sans tirage aleacuteatoire Lrsquoeacutecart-type est 1 10 cela donne un intervalle de confiance eacutequivalentau preacuteceacutedent si on considegravere que la moyenne des taux suit asymptotiquement une loi normale Cette expeacuterience a eacuteteacutereproduite plusieurs fois et ces bornes sont assez stables contrairement (pm 005 ) aux extremas (pm 1)

214 httpsfrwikipediaorgwikiBootstrap_(statistiques)

61 Courbe ROC 225

Machine Learning Statistiques et Programmation Version 035930

Aire sous la courbe

La meacutethode bootstrap peut elle aussi ecirctre appliqueacutee pour calculer un intervalle de confiance pour lrsquoaire sous la courbe(AUC)

Courbe ROC (lrsquoaxe des abscisse est inverseacute) obtenue pour 100 tirages aleacuteatoires Lrsquoaire sous la courbe est eacutegale agrave080 et lrsquointervalle de confiance agrave 95 mesureacutee par la meacutethode bootsrap est [079 080] Les extremas sont presqueidentiques agrave ces chiffres

614 Distribution des scores mauvais et bons

On appelle un mauvais score un score associeacute agrave un mauvais reacutesultat de mecircme un bon score est le score drsquoun bonreacutesultat Si le score est une probabiliteacute on srsquoattend agrave trouver les bons scores regroupeacutes autour de la valeur 1 Si le scoreest un mauvais score il devrait ecirctre plus proche de zeacutero La figure qui suit montre des distributions obtenues pour deuxproblegravemes diffeacuterents Dans les deux cas le but rechercheacute est la deacutetermination drsquoun seuil seacuteparant le score drsquoun bonreacutesultat de celui drsquoun mauvais reacutesultat Lorsque ceci nrsquoest pas possible le score ne peut correspondre agrave un quelconquecritegravere confiance

La premiegravere courbe montre deux distributions qui se chevauchent mecircme si les bons scores semblent plus concentreacutes

226 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

autour des grandes valeurs Le seconde courbe montre un problegraveme mieux seacuteparable Lrsquoexistence drsquoun seuil entre unbon et un mauvais score est plus plausible

615 Variantes

Taux de lecture ou de reconnaissance

Il nrsquoexiste pas une grande diffeacuterence lorsque le taux drsquoerreur est faible Le taux de lecture est simplement la proportionde documents pour lesquels le score est aussi drsquoun seuil s que la reacuteponse du classifieur soit bonne ou mauvaise Parexemple pour un taux de substitution de 1 si on a 70 en taux de lecture cela signifie que sur 100 documents lesystegraveme va en accepter 70 et parmi ces 70 1 seront mal traiteacutes Le taux de substitution est un taux drsquoerreur rapporteacuteagrave un taux de lecture donneacute Lrsquoinconveacutenient du taux de lecture rapporteacute au taux de substitution est que la meacutethodedeacuteveloppeacutee au paragraphe Intervalles de confiance sur la courbe (page 224) ne srsquoapplique plus aussi bien car pour untaux de substitution donneacute il peut exister plusieurs taux de lecture

La premiegravere image montre 5 courbes taux de lecture taux de substitutions Les courbes ne sont pas monotones etmontre qursquoil existe parfois plusieurs taux de lecture pour un mecircme taux de substitution Comme le calcul des intervallesde confiance fait intervenir une interpolation lineacuteaire lorsque les courbes sont trop cahotiques le calcul retourne desvaleurs faussesOn peut deacutemontrer que la courbe taux de lecture taux de substitution nrsquoest pas une courbe ni monotone ni inversiblePour cela on dispose drsquoune suite de couple (Xi θi) croissante selon les Xi θi vaut 1 si lrsquoexpeacuterience a reacuteussi 0 sinonPour un seuil donneacute s on note Eprime(s) le taux de substitution et Rprime(s) le taux de lecture on obtient

Rprime(s) =1

n

nsumi=1

11Xi⩾s

Eprime(s) =1

nRprime(s)

nsumi=1

(1minus θi) 11Xi⩾s

61 Courbe ROC 227

Machine Learning Statistiques et Programmation Version 035930

On eacutecrit diffeacuteremment ces expressions en supposant que Xi(s1)minus1 lt s1 ⩽ Xi(s1) math

Rprime(s1) =nminus i(s1)

n

Eprime(s1) =1

nminus i(s1)

nsumi=i(s1)

(1minus θi)

On suppose maintenant que Xi(s2)minus1 lt s2 ⩽ Xi(s2) math et i(s1) + 1 = i(s2)

Rprime(s2) =nminus i(s2)

nlt Rprime(s1)

Eprime(s2) =1

nminus i(s2)

nsumi=i(s2)

(1minus θi) =1

nminus i(s2)

nminus i(s1)

nminus i(s1)

minus (1minus θi(s1))+

nsumi=i(s1)

(1minus θi)

= minus

(1minus θi(s1)

)nminus i(s2)

+

sumni=i(s1)

(1minus θi)

nminus i(s1)

nminus i(s1)

nminus i(s2)= minus

(1minus θi(s1)

)nminus i(s2)

+ Eprime(s1)nminus i(s1)

nminus i(s2)

Si on suppose que θi(s1) = 1 autrement dit lrsquoexpeacuterience s1 a reacuteussi on en deacuteduit que

Eprime(s2) = Eprime(s1)nminus i(s1)

nminus i(s2)= Eprime(s1)

nminus i(s2) + 1

nminus i(s2)gt Eprime(s1)

En revanche si θi = 0

Eprime(s2) = Eprime(s1)

(1 +

1

nminus i(s2)

)minus 1

nminus i(s2)= Eprime(s1) +

E(s1)minus 1

nminus i(s2)lt Eprime(s1)

Il nrsquoexiste donc pas toujours une fonction f reliant Rprime(s) agrave Eprime(s) agrave moins de construire cette courbe de telle sorteqursquoelle soit monotone en ne choisissant qursquoune sous-suite (Eprime(Xi) R

prime(Xi))i qui veacuterifie cette hypothegravese

616 Classification multi-classe

Une courbe ROC se construit avec deux informations une reacuteponse binaire et un score Que signifie cette reacuteponsebinaire Elle peut ecirctre

1 Le fait que le preacutedicteur ait bien preacutedit une classe en particulier Le score associeacute est celui que le preacutedicteurdonne pour cette classe

2 Le fait que le preacutedicteur ait bien preacutedit crsquoest-agrave-dire que la reacuteponse binaire signifie que la classe preacutedite est laclasse attendue le score associeacute est celui de la classe preacutedite crsquoest-agrave-dire le score maximum obtenu pour lrsquounedes classes

Plus formellement le preacutedicteur retourne un vecteur Si qui contient les probabiliteacutes drsquoappartenance agrave toutes les classesaussi appeleacutees plus geacuteneacuteralement score de confiance ou juste score Si(c) est la probabiliteacute de preacutedire la classe c Laclasse attendue est noteacutee yi crsquoest celle que le preacutedicteur doit preacutedire Dans le premier cas on construit le couple (bi si)de telle sorte que

bi = 1 si yi = c sinon 0si = Si(c)

Dans le second cas bi = 1 si maxSi = Si(yi) sinon 0si = maxSi

Le premier cas correspond par exemple agrave des problegravemes de deacutetection de fraude215 Le second cas correspond agrave tauxde classification global La courbe ROC pour ce cas est en regravegle geacuteneacuteral moins bonne que la plupart des courbes ROCobtenues pour chacune des classes prise seacutepareacutement (voir Reacutegression logistique216)

215 httpsenwikipediaorgwikiPredictive_analyticsFraud_detection216 httpwwwxavierduprefrapppapierstathelpsphinxnotebookswines_colorhtml

228 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

617 Exemple

Voir ROC217

62 Confidence Interval and p-Value

bull Introduction (page 229)bull p-value (page 230)bull Significant difference between samples mean (page 230)bull Application on binomial variables (page 231)bull Estimate a p-value by using the distribution function (page 231)bull Correlated variables (page 232)bull Multiple comparisons problem (page 234)bull Algorithm Expectation-Maximization (page 235)bull Notebooks (page 235)bull Bibliographie (page 246)

This document explains the relationship between p-value and confidence intervals It goes on with the specific caseof a binamial law Assuming we want to determine whether or not two binomial laws are significantly different howmany observations we need to get the p-value under a given threshold

621 Introduction

The term p-value218 is very popular in the world of search engines I usually prefer confidence interval 95 I think itis easier to understand Plus because p-Value are real values we could be tempted to compare them and it is usuallywrong On the other hand it is more difficult to compare confidence intervals especially if they are related to completedifferent variables Their nature prevents you from doing that Howerver p-Values and confidence interval are similarthey tell you whether or not a metric difference is significantUsually it starts from a set of identically distributed random variables (Xi)1⩽i⩽N We then estimate the averageθN = 1

N

sumNi=1 Xi and we ask the question is θN null In others terms we want to know if the average is significantly

different from zero If the random variable X follows a random law which has a standard deviation we can use thecentral limit theorem219 which tells us

radicNθN minusrarr

NrarrinfinN (0 σ)

Not all of them have a standard deviation For example if X follows a Cauchy law220 EX2 simint

x2

1+x2 dx which doesnot exist This remark also concerns every distribution known as heavy tail distributionIf Y sim N (0 σ) then we have P (|Y | ⩽ 196) = 095 That is why we can say

θN is not null with 95 confidence ifradicN|θN |σ

gt 196

217 httpwwwxavierduprefrappensae_teaching_cshelpsphinxantisechesml_basicplot_regressionhtmlsphx-glr-antiseches-ml-basic-plot-roc-py218 httpsfrwikipediaorgwikiValeur_p219 httpsenwikipediaorgwikiCentral_limit_theorem220 httpsenwikipediaorgwikiCauchy_distribution

62 Confidence Interval and p-Value 229

Machine Learning Statistiques et Programmation Version 035930

And the confidence intervalle at 95 would be[minus196σradic

N196σradic

N

]When EθN = θ0 = 0 it becomes

radicN[θN minus θ0

]minusrarrNrarrinfin

N (0 σ)

We usually want to check if the mean is equal to a specific value using a statistical test

H0 θN = θ0

H1 θN = θ0

We validate H0 if

θN isin[θ0 minus

196σradicN

θ0 +196σradic

N

]

622 p-value

With confidence intervals you first choose a confidence level and then you get an interval You then check if your valueis inside or outside your interval Inside the gain is not significant outside it is

With a p-value we consider the problem the other way given θN what is the probability that the difference∣∣∣θN minus θ0

∣∣∣is significant Letrsquos consider Y following a normal law N (0 1) We are looking for

P

(|Y | gt

radicN|θN |σ

)= α

α is the p-value

α = 1minusint βN

minusβN

1radic2π

eminusx2

2 dx = 2

int infin

βN

1radic2π

eminusx2

2 dx

where βN =radicN|θN |σ

At this point we should not forget that we use a theorem which tells us thatradicN |θN |

σ sim N (0 1) when N rarrinfin whichmeans everything we said is true when N is great enough

623 Significant difference between samples mean

Usually we do not want to test if an average is null but if the difference between two averages is null We consider tworandom samples having the same size each of them described by (Xi) and (Yi) All variables are independant (Xi)are distributed according the same law we assume the same for (Yi) We expect the following difference to be null

ηN =1

N

Nsumi=1

Xi minus1

N

Nsumi=1

Yi =1

N

[Nsumi=1

Xi minus Yi

]Considering expression (623) we can applying the central limit theorem on variable Z = X minus Y we get (η0 = 0)

radicNηN minusrarr

NrarrinfinN

(η0

radicVZN

)If both samples do not have the same number of observations this expression becomes

radicNηN minusrarr

N1rarrinfinN2rarrinfinN1N2

rarrx

N

(η0

radicVXN1

+VYN2

)

230 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

624 Application on binomial variables

A binomial variable X sim B (p) is defined by

P (X = 0) = 1minus p

P (X = 1) = p

Letrsquos consider two series of observations (Xi) sim B (p) and (Yi) sim B (q) We assume p = q and we want to determinehow many observations we need to get a p-value below 5 We know that V (Xi) = p(1minus p) and V (Yi) = q(1minus q)Next table shows the values First column contains values for p first row contains values for qminus p We also assume wehave the same number N of random observations for each variable The statistical test cen be defined like following

H0 p = q = p0

H1 p = q

If H0 is true thenradicNθN minusrarr

NrarrinfinN(0radic

p0(1minus p0)

radic1

N1+

1

N2

)(62)

pd -0200 -0100 -0020 -0010 -0002 -0001 0001 0002 0010 0020 0100 0200005 913 3650 91235 364939 364939 91235 3650 913 37 10010 70 1729 6915 172866 691463 691463 172866 6915 1729 70 18015 98 2449 9796 244893 979572 979572 244893 9796 2449 98 25020 31 123 3074 12293 307317 1229267 1229267 307317 12293 3074 123 31025 37 145 3602 14406 360137 1440548 1440548 360137 14406 3602 145 37030 41 162 4034 16135 403354 1613413 1613413 403354 16135 4034 162 41035 44 175 4370 17479 436966 1747864 1747864 436966 17479 4370 175 44040 47 185 4610 18440 460976 1843901 1843901 460976 18440 4610 185 47045 48 191 4754 19016 475381 1901523 1901523 475381 19016 4754 191 48050 49 193 4802 19208 480183 1920730 1920730 480183 19208 4802 193 49055 48 191 4754 19016 475381 1901523 1901523 475381 19016 4754 191 48060 47 185 4610 18440 460976 1843901 1843901 460976 18440 4610 185 47065 44 175 4370 17479 436966 1747864 1747864 436966 17479 4370 175 44070 41 162 4034 16135 403354 1613413 1613413 403354 16135 4034 162 41075 37 145 3602 14406 360137 1440548 1440548 360137 14406 3602 145 37080 31 123 3074 12293 307317 1229267 1229267 307317 12293 3074 123 31085 25 98 2449 9796 244893 979572 979572 244893 9796 2449 98090 18 70 1729 6915 172866 691463 691463 172866 6915 1729 70095 10 37 913 3650 91235 364939 364939 91235 3650 913

Given a binomial law with parameter p and a difference d this table gives the number of observations needed on bothsides to get a significant difference assuming p is the expected pourcentage

625 Estimate a p-value by using the distribution function

Expression (622) gives a way to estimate the p-value Computing the integral is not always possible but there is a wayto do it using Monte Carlo method221 Letrsquos assume X sim N (0 1) We denote fX as the density function of X Wealso consider an interval I = [minusa a] Then we have f(a) = f(minusa) and

P (X isin I) = P (|X| ⩽ a) = P (f(X) ⩾ f(a))

This is true because f is decreasing for x gt 0 The p-value α for a estimator β using Monte Carlo method is

1

N

Nsumi=1

11f(Xi)ltf(β) minusrarr α (63)

221 httpsenwikipediaorgwikiMonte_Carlo_method

62 Confidence Interval and p-Value 231

Machine Learning Statistiques et Programmation Version 035930

Assuming every (Xi)i follows a normal law N (0 1)

626 Correlated variables

Letrsquos assume we now have a vector a correlated variables X = (X1 Xd) drawn following a law N (θ0Σ)The central limit theorem is still valid

radicNθN minusrarr

NrarrinfinN (θ0Σ)

We know estimators for the average and the covariance matrix defined as follows

θN =1

n

Nsumi=1

Xi

ΣN =1

n

Nsumi=1

(Xi minus θN )(Xi minus θN )prime

We usually want to check if

H0 θN = θ0

H1 θN = θ0

If Λ is diagonal matrix of Σ (diagonal matrix with eigen values) All eigen values are real and positive we then define

Σ = PΛP prime and Σ12 = PΛ

12P prime

We consider Zi = (Xi minus θN )Σminus 12 We then have EZi = 0 and VZi = I2 where I2 is the identity matrix We could

now consider each dimension of Zi independently as illustrated in next figure it shows the difference on an example

if we consider the correlation of two variables correlated such as Σ =

(01 005005 02

)

232 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

We assume we observe two Bernouilli222 variables correlated Red points represents the area for which we would accepthypothesis H0 in case both variables are independant Blue area represents the same but with the correlation But thatwould not be the best way to do it The confidence interval for a couple of indenpendant gaussian (N1 N2) variables isan ellipse Two independent normal variables N2

1 +N22 with a null mean and standard deviation equal to one follows

a χ2 law Based on that we can deduce a boundary for the confidence zone at 95 Next figure shows this zone for a

non-correlated couple and a correlated couple (Σ =

(01 005005 02

))

222 httpsenwikipediaorgwikiBernoulli_distribution

62 Confidence Interval and p-Value 233

Machine Learning Statistiques et Programmation Version 035930

We assume we observe two Bernouilli variables correlated Red points represents the area for which we would accepthypothesis H0 in case both variables are independant Blue area represents the same but with the correlation

627 Multiple comparisons problem

The problem of Multiple comparisons223 happens when dealing with many metrics measyring a change Thatrsquos allwaysthe case when two version of the sam websire are compared in a test AB224 The metrics are correlated but it is unlikelythat all metrics differences will be significant or not The HolmndashBonferroni method225 proposes a way to define anhypthesis on the top of the existing ones

223 httpsenwikipediaorgwikiMultiple_comparisons_problem224 httpsfrwikipediaorgwikiTest_AB225 httpsenwikipediaorgwikiHolmE28093Bonferroni_method

234 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

628 Algorithm Expectation-Maximization

We here assume there are two populations mixed defined by random variable C Letrsquos X be a mixture of two binomiallaws of parameters p and q It is for example the case for a series draws coming from two different coins

P (X) = P (X|C = a)P (C = a) + P (X|X = b)P (C = b)

The likelihood of a random sample (X1 Xn) the class we do not observe are (C1 Cn)

L(θ) =prodi

[pXi(1minus p)(1minusXi)π

]1minusCi[qXi(1minus q)(1minusXi)(1minus π)

]Ci

(64)

The parameters are θ = (π p q) We use an algorithm Expectation-Maximization (EM)226 to determine the parametersWe define at iteration t

wi = ECi|Xiθt (Xi)

=pXit (1minus pt)

1minusXiπt

pXit (1minus pt)1minusXiπt + qXi

t (1minus qt)1minusXi(1minus πt)

We then update the parameters

π =1

n

nsumi=1

wi

p =

sumni=1 wiXisumni=1 wi

q =

sumni=1(1minus wi)Xisumni=1(1minus wi)

See also Applying the EM Algorithm Binomial Mixtures227

629 Notebooks

The following notebook produces the figures displayed in this document

p-values

Compute p-values and heavy tails estimators

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull p-value table (page 236)bull p-values in 2D (page 237)bull p-value ratio (page 239)bull p-values and EM (page 240)bull p-value and heavy tail (page 243)

226 httpsenwikipediaorgwikiExpectationE28093maximization_algorithm227 httpstatisticalrecipesblogspotfr201204applying-em-algorithm-binomial-mixtureshtml

62 Confidence Interval and p-Value 235

Machine Learning Statistiques et Programmation Version 035930

matplotlib inline

p-value table

from scipystats import normimport pandasfrom pandas import DataFrameimport numpy

def pvalue(p q N)theta = abs(p-q)var = p(1-p)bn = (2N)05 theta var05ret = (1 - normcdf(bn))2return ret

def pvalue_N(p q alpha)theta = abs(p-q)var = p(1-p)rev = abs(normppf (alpha2))N = 2 (rev var05 theta) 2return int(N+1)

def alphatable(ps dps alpha)values = []for p in ps

row=[]for dp in dps

q = p+dpr = pvalue_N(pqalpha) if 1 gt= q gt= 0 else numpynanrowappend (r)

valuesappend (row)return values

def dataframe(psdpstable)columns = dpsdf = pandasDataFrame(data=table index=ps)dfcolumns = dpsreturn df

print (normppf(0025)normppf (0025)) -19599639845400545ps = [0001 0002] + [ 005i for i in range (120) ]dps = [ -02 -01 -002 -001 -0002 -0001

02 01 002 001 0002 0001 ]dpssort()t = alphatable(ps dps 005)dataframe (ps dps t)

236 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

normppf(0025) -19599639845400545

p-values in 2D

import numpy matplotlib random mathimport matplotlibpyplot as pylab

def matrix_square_root(sigma) eigen vect = numpylinalgeig(sigma)dim = len(sigma)res = numpyidentity(dim)for i in range(0dim)

res[ii] = eigen[i]05return vect res vecttranspose()

def chi2_level (alpha = 095) N = 1000x = [ randomgauss(01) for _ in range(0N) ]y = [ randomgauss(01) for _ in range(0N) ]r = map ( lambda c (c[0]2+c[1]2)05 zip(xy))r = list(r)rsort()res = r [ int (alpha N) ]return res

def square_figure(mat a) x = [ ]y = [ ]for i in range (0100)

xappend( a mat[0][0]05 )yappend( (randomrandom ()-05) a mat[1][1]052 )xappend( -a mat[0][0]05 )yappend( (randomrandom ()-05) a mat[1][1]052 )

yappend( a mat[1][1]05 )xappend( (randomrandom ()-05) a mat[0][0]052 )yappend( -a mat[1][1]05 )xappend( (randomrandom ()-05) a mat[0][0]052 )

pylabplot(xy ro)

x = [ ]y = [ ]for i in range (0100)

xappend( a )yappend( (randomrandom ()-05) a2 )xappend( -a )yappend( (randomrandom ()-05) a2 )

yappend( a )(suite sur la page suivante)

62 Confidence Interval and p-Value 237

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

xappend( (randomrandom ()-05) a2 )yappend( -a )xappend( (randomrandom ()-05) a2 )

xsys = [][]for ab in zip (xy)

ar = numpymatrix( [ [a] [b] ] )transpose()we = ar rootxsappend( we [00] )ysappend( we [01] )

pylabplot(xsys bo)pylabshow()

def circle_figure (mat a) x = [ ]y = [ ]for i in range (0200)

z = randomrandom() mathpi 2i = a mat[0][0]05 mathcos(z)j = a mat[0][0]05 mathsin(z)xappend ( i )yappend ( j )

pylabplot(xy ro)

x = [ ]y = [ ]for i in range (0200)

z = randomrandom() mathpi 2i = a mathcos(z)j = a mathsin(z)xappend ( i )yappend ( j )

xsys = [][]for ab in zip (xy)

ar = numpymatrix( [ [a] [b] ] )transpose()we = ar rootxsappend( we [00] )ysappend( we [01] )

pylabplot(xsys bo)pylabshow()

level = chi2_level ()mat = [ [01 005] [005 02] ]npmat = numpymatrix(mat)root = matrix_square_root (npmat)square_figure (mat 196)circle_figure (mat level)

238 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

p-value ratio

import random math

def densite_gauss (mu sigma x) e = -(x - mu)2 (sigma2 2)d = 1 ((2mathpi)05 sigma)return d mathexp (e)

(suite sur la page suivante)

62 Confidence Interval and p-Value 239

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

def simulation_vector (N mu sigma) return [ randomgauss(musigma) for n in range(N) ]

def ratio (vector x fdensite) under = 0above = 0fx = fdensite(x)for u in vector

f = fdensite (u)if f gt= fx

above += 1else

under += 1return float(above) float (above + under)

x = 196N = 10000mu = 0sigma = 1

v = simulation_vector(N mu sigma)g = ratio(v x lambda y densite_gauss (mu sigma y) )print (g)

09487

p-values and EM

See Applying the EM Algorithm Binomial Mixtures228

from scipystats import normimport random math

def average_std_deviation(sample)mean = 0var = 0for x in sample

mean += xvar += xx

mean = len(sample)var = len(sample)var -= meanmeanreturn meanvar 05

def bootsample(sample)n = len(sample)-1return [ sample[ randomrandint(0n) ] for _ in sample ]

(suite sur la page suivante)

228 httpstatisticalrecipesblogspotfr201204applying-em-algorithm-binomial-mixtureshtml

240 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

def bootstrap_difference(sampleX sampleY draws=2000 confidence=005)diff = [ ]for n in range (0draws)

if n 1000 == 0print(n)

sx = bootsample(sampleX)sy = bootsample(sampleY)px = sum(sx) 10 len(sx)py = sum(sy) 10 len(sy)diffappend (px-py)

diffsort()n = int(len(diff) confidence 2)av = sum(diff) len(diff)return av diff [n] diff [len(diff)-n]

generation of a sample

def generate_obs(p)x = randomrandom()if x lt= p return 1else return 0

def generate_n_obs(p n)return [ generate_obs(p) for i in range (0n) ]

std deviation

def diff_std_deviation(px py)s = px(1-px) + py(1-py)return px py s05

def pvalue(diff std N)theta = abs(diff)bn = (2N)05 theta stdpv = (1 - normcdf(bn))2return pv

def omega_i (X pi p q) np = p pi if X == 1 else (1-p)pinq = q (1-pi) if X == 1 else (1-q)(1-pi)return np (np + nq)

def likelihood (X pi p q) np = p pi if X == 1 else (1-p)pinq = q (1-pi) if X == 1 else (1-q)(1-pi)return mathlog(np) + mathlog(nq)

def algoEM (sample)p = randomrandom()q = randomrandom()pi = randomrandom()iter = 0

(suite sur la page suivante)

62 Confidence Interval and p-Value 241

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

while iter lt 10 lk = sum ( [ likelihood (x pi p q) for x in sample ] )wi = [ omega_i (x pi p q) for x in sample ]sw = sum(wi)pin = sum(wi) len(wi)pn = sum([ x w for xw in zip (samplewi) ]) swqn = sum([ x (1-w) for xw in zip (samplewi) ]) (len(wi) - sw)

pipq = pinpnqniter += 1

lk = sum ( [ likelihood (x pi p q) for x in sample ] )return pipq lk

mixpq = 020 080pi = 07N = 1000na = int(N pi)nb = N - na

print(------- sample)sampleX = generate_n_obs(p na) + generate_n_obs (q nb)randomshuffle(sampleX)print(ave p pi + q(1-pi))print(mea sum(sampleX)1len(sampleX))

lk = sum ( [ likelihood (x pi p q) for x in sampleX ] )print (min lk lk sum (sampleX)1 len(sampleX))res = []for k in range (0 10)

r = algoEM (sampleX)resappend ( (r[-1] r) )

ressort ()

rows = []for r in res

pipqlk = r[1]rowsappend( [p pi + q(1-pi)] + list(r[1]))

df = pandasDataFrame(data=rows)dfcolumns = [average pi p q likelihood]df

------- sampleave 038mea 0373min lk -33932292120130046 0373

242 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

p-value and heavy tail

from scipystats import norm zipfimport sys

def generate_n_obs_zipf (tail_index n) return list(zipfrvs(tail_index size=n))

def hill_estimator (sample) sample = list(sample)samplesort(reverse=True)end = len(sample)10end = min(end100)s = 0res = []for k in range (0end)

s += mathlog(sample[k])h = (s - (k+1)mathlog(sample[k+1]))(k+1)h = 1hresappend( [k h] )

return res

mixtail_index = 105N = 10000

sample = generate_n_obs_zipf(tail_index N)sample[5]

[357621 148 18 1812876449 36150]

import pandas

def graph_XY(curves xlabel=None ylabel=None marker=Truelink_point=False title=None format_date=Y-m-dlegend_loc=0 figsize=None ax=None)

if ax is Noneimport matplotlibpyplot as plt pylint disable=C0415fig ax = pltsubplots(1 1 figsize=figsize)

smarker = (True True) o- (True False) o (False True) - (False False) [marker link_point]

has_date = Falsefor xf yf label in curves

axplot(xf yf smarker label=label)axlegend(loc=legend_loc)return ax

(suite sur la page suivante)

62 Confidence Interval and p-Value 243

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

def draw_variance(sample) avg = 0std = 0n = 0w = 1add = []for ix in enumerate(sample)

x = float (x)avg += x wstd += xx wn += wval = (stdn - (avgn)2)05addappend ( [ i avgn val] )

print(add[-1])table = pandasDataFrame(add columns=[index avg(n) std(n)])return graph_XY([

[table[index] table[avg(n)] avg(n)][table[index] table[std(n)] std(n)]

] marker=False link_point=True)

draw_variance(sample)

[9999 551868710339 23334255446156308]

def draw_hill_estimator (sample) res = hill_estimator(sample)table = DataFrame(res columns=[d hill])return graph_XY(

(suite sur la page suivante)

244 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

[[table[d] table[hill] Hill]]marker=False link_point=True)

draw_hill_estimator(sample)

def draw_heavy_tail (sample) table = DataFrame([[_] for _ in sample ] columns=[obs])std = 1

normal = normrvs(size = len(sample))normal = [ xstd for x in normal ]nortbl = DataFrame([ [_] for _ in normal ] columns=[obs])nortbl[iobs] = (nortbl[obs] 10)astype(numpyint64)

histon = nortbl[[iobs obs]]groupby(iobs as_index=False)count()histoncolumns = [iobs nb]histon = histonsort_values(nb ascending=False)reset_index(drop=True)

table[one] = 1histo = tablegroupby(obs as_index=False)count()histocolumns = [obs nb]histo = histosort_values(nb ascending=False)reset_index(drop=True)historeset_index(drop=True inplace=True)histo[index] = histoindex + 1

vec = list(histon[nb])vec += [0] len(histo)histo[nb_normal] = vec[len(histo)]

histo[log(index)] = numpylog(histo[index]) numpylog(10)(suite sur la page suivante)

62 Confidence Interval and p-Value 245

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

histo[log(nb)] = numpylog(histo[nb]) numpylog(10)histo[log(nb_normal)] = numpylog(histo[nb_normal]) numpylog(10)return graph_XY ([

[histo[log(index)] histo[log(nb)] Zipf][histo[log(index)] histo[log(nb_normal)] Gauss] ]

marker=False link_point=True)

draw_heavy_tail(sample)

cpython372_x64libsite-packagespandascoreseriespy679 RuntimeWarning divide by zerorarrencountered in logresult = getattr(ufunc method)(inputs kwargs)

6210 Bibliographie

bull p-Value and Statistical Practice229

bull An investigation of the false discovery rate and the misinterpretation of p-values230

bull HolmndashBonferroni method231

229 httpwwwstatcolumbiaedu~gelmanresearchpublishedpvalues3pdf230 httprsosroyalsocietypublishingorgcontentroyopensci13140216fullpdf231 httpsenwikipediaorgwikiHolmE28093Bonferroni_method

246 Chapter 6 Meacutetriques

CHAPTER 7

Algorithmes

Le machine learning propose un grand nombre de modegraveles pour des problegravemes standardiseacutes Au delagrave il faut savoir ecirctreinventifs crsquoest-agrave-dire la grande majoriteacute des cas

71 Distance drsquoeacutedition

Les distances drsquoeacutedition permettent de comparer deux mots entre eux ou plus geacuteneacuteralement deux seacutequences de symbolesentre elles Lrsquousage le plus simple est de trouver pour un mot mal orthographieacute le mot le plus proche dans undictionnaire crsquoest une option proposeacutee dans la plupart des traitements de texte La distance preacutesenteacutee est la distancede Levenshtein232 (voir [Levenstein1966]) Elle est parfois appeleacutee Damerau Levenstein Matching (DLM)233 (voireacutegalement [Damerau1964]) Cette distance fait intervenir trois opeacuterations eacuteleacutementaires

bull comparaison entre deux caractegraveresbull insertion drsquoun caractegraverebull suppression drsquoun caractegravere

Pour comparer deux mots il faut construire une meacutethode associant ces trois opeacuterations afin que le premier mot setransforme en le second mot Lrsquoexemple suivant utilise les mots idstzance et distances il montre une meacutethodepermettant de passer du premier au second La distance sera la somme des coucircts associeacutes agrave chacune des opeacuterationschoisies La comparaison entre deux lettres identiques est en geacuteneacuteral de coucirct nul toute autre opeacuteration eacutetant de coucirctstrictement positif

232 httpsfrwikipediaorgwikiDistance_de_Levenshtein233 httpsfrwikipediaorgwikiDistance_de_Damerau-Levenshtein

247

Machine Learning Statistiques et Programmation Version 035930

Table1 distance drsquoeacuteditionmot 1 mot 2 opeacuteration coucircti d comparaison entre i et d 1d i comparaison entre d et i 1s s comparaison entre s et s 0t t comparaison entre t et t 0z suppression de z 1a a comparaison entre a et a 0n n comparaison entre n et n 0c c comparaison entre c et c 0e e comparaison entre e et e 0

s insertion de s 1somme 4

Pour cette distance drsquoeacutedition entre les mots idstzance et distances La succession drsquoopeacuterations proposeacutee nrsquoest pasla seule qui permettent de construire le second mot agrave partir du premier mais crsquoest la moins coucircteuse

711 Deacutefinition et proprieacuteteacutes

Deacutefinition

Tout drsquoabord il faut deacutefinir ce qursquoest un mot ou une seacutequence

Deacutefinition D1 motOn note C lrsquoespace des caractegraveres ou des symboles Un mot ou une seacutequence est une suite finie de C On note SC =cupinfink=1C

k lrsquoespace des mots formeacutes de caractegraveres appartenant agrave C

On peut deacutefinir la distance drsquoeacutedition

Deacutefinition D2 distance drsquoeacuteditionLa distance drsquoeacutedition d sur SC est deacutefinie par

d SC times SC minusrarr R+

(m1m2) minusrarr minO seacutequencedrsquoopeacuterations

d (m1m2 O)

La distance est le coucirct de la transformation du mot m1 en m2 la moins coucircteuse Il reste agrave deacutemontrer que cette distanceen est bien une puis agrave proposer une meacutethode de calcul plus rapide que celle suggeacutereacutee par cette deacutefinition

Proprieacuteteacutes

Ce paragraphe a pour objectif de deacutemontrer que la distance (page 248) en est bien une

Deacutefinition D3 distance entre caractegraveresSoit Cprime = C

⋃ lrsquoensemble des caractegraveres ajouteacute au caractegravere vide On note c (Cprime)2 minusrarr R+ la fonction coucirct

deacutefinie comme suit

forall (x y) isin (Cprime)2 c (x y) est le coucirct

drsquoune comparaison si (x y) isin (C)2drsquoune insertion si (x y) isin (C)times drsquoune suppression si (x y) isin times (C)0 si (x y) = ( )

248 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

On note S2Cprime = cupinfinn=1

(Cprime2)n

lrsquoensemble des suites finies de Cprime

Pour modeacuteliser les transformations drsquoun mot vers un autre on deacutefinit pour un mot m un mot acceptable

Deacutefinition D4 mot acceptableSoit m = (m1 mn) un mot tel qursquoil est deacutefini preacuteceacutedemment Soit M = (Mi)i⩾1 une suite infinie de caractegravereson dit que M est un mot acceptable pour m si et seulement si la sous-suite extraite de M contenant tous les caractegraveresdiffeacuterents de est eacutegal au mot m On note acc (m) lrsquoensemble des mots acceptables pour le mot m

Par conseacutequent tout mot acceptable mprime pour le mot m est eacutegal agrave m si on supprime les caractegraveres du mot mprime Enparticulier agrave partir drsquoun certain indice mprime est une suite infinie de caractegraveres Il reste alors agrave exprimer la deacutefinitionde la distance drsquoeacutedition en utilisant les mots acceptables

Deacutefinition D5 distance drsquoeacuteditionSoit c la distance drsquoeacutedition (page 248) d deacutefinie sur SC est deacutefinie par

d SC times SC minusrarr R+

(m1m2) minusrarr minsum+infin

i=1 c(M i

1Mi2

)| (M1M2) isin acc (m1)times acc (m2)

(71)

Il est eacutevident que la seacuteriesum+infin

i=1 c(M i

1Mi2

)est convergente La ref`distance de caractegraveres

ltedition_distance_definition_1gt` implique que les distance drsquoeacutedition deacutefinies en 1 (page 248) et 2 (page 249)sont identiques

Theacuteoregraveme T1 distance drsquoeacuteditionSoit c et d les fonctions deacutefinies respectivement par (711) et (711) alors

c est une distance sur C lArrrArr d est une distance sur SC

On cherche drsquoabord agrave deacutemontrer quec est une distance sur Cprime lArr= d est une distance sur SC

Cette assertion est eacutevidente car si (m1m2) sont deux mots de un caractegravere la distance d sur SC deacutefinit alors la distancec sur CprimeOn deacutemontre ensuite que

c est une distance sur Cprime =rArr d est une distance sur SCSoient deux mots (m1m2) soit (M1M2) isin acc (m1) times acc (m2) comme c est une distance sur Cprime alorsd (M1M2) = d (M2M1)Drsquoougrave drsquoapregraves la deacutefinition 2 (page 249)

d (m1m2) = d (m2m1) (72)

Soit (N1 N2) isin acc (m1)times acc (m2) tels que d (m1m2) = d (N2 N1) alors

d (m1m2) = 0 =rArr d (N1 N2) = 0

=rArr+infinsumi=1

c(N i

1 Ni2

)= 0

=rArr foralli ⩾ 1 N i1 = N i

2

=rArr N1 = N2

d (m1m2) = 0 =rArr m1 = m2

71 Distance drsquoeacutedition 249

Machine Learning Statistiques et Programmation Version 035930

Il reste agrave deacutemontrer lrsquoineacutegaliteacute triangulaire Soient trois mots (m1m2m3) on veut deacutemontrer que d (m1m3) ⩽d (m1m2) + d (m2m3) On deacutefinit

(N1 N2) isin acc (m1)times acc (m2) tels que d (m1m2) = d (N1 N2)

(P2 P3) isin acc (m2)times acc (m3) tels que d (m2m3) = d (P2 P3)

(O1 O3) isin acc (m1)times acc (m3) tels que d (m1m3) = d (O1 O3)

Mais il est possible drsquoapregraves la deacutefinition drsquoun mot acceptable (page 249) drsquoinseacuterer des caractegraveres dans les motsN1 N2 P2 P3 O1 O3 de telle sorte qursquoil existe (M1M2M3) isin acc (m1)times isin acc (m2)times isin acc (m3) tels que

d (m1m2) = d (M1M2)

d (m2m3) = d (M2M3)

d (m1m3) = d (M1M3)

Or comme la fonction c est une distance sur Cprime on peut affirmer que d (M1M3) ⩽ d (M1M2)+ d (M2M3) Drsquoougrave

begineqnarray dpam_1m_3 infegal dpam_1m_2 + d pam_2m_3 labeledit_demo_eq_3endeqnarray

Les assertions 1 2 3 montrent que d est bien une distance Le tableau suivant illustre la deacutemonstration pour les suitesM1M2M3 pour les mots et les mots idtzance tonce distances

M1 i d t z a n c eM2 t o n c eM3 d i s t a n c e s

La distance drsquoeacutedition 2 (page 249) ne tient pas compte de la longueur des mots qursquoelle compare On serait tenteacute dedeacutefinir une nouvelle distance drsquoeacutedition inspireacutee de la preacuteceacutedente

Deacutefinition D6 distance drsquoeacutedition eacutetendueSoit d^ la distance drsquoeacutedition deacutefinie en 2 (page 249) pour laquelle les coucircts de comparaison drsquoinsertion et desuppression sont tous eacutegaux agrave 1 La distance drsquoeacutedition dprime sur SC est deacutefinie par

dprime SC times SC minusrarr R+

(m1m2) minusrarr dprime (m1m2) =dlowast (m1m2)

max l (m1) l (m2)

ougrave l (m) est la longueur du mot m

Le tableau suivant donne un exemple pour lequel lrsquoineacutegaliteacute triangulaire nrsquoest pas veacuterifieacutee La fonction dlowast nrsquoest doncpas une distance

mot 1 mot 2 distance dlowast distance dprime

APPOLLINE APPOLINE 1 1 9APPOLLINE APOLLINE 1 1 9APOLLINE APPOLINE 2 2 8

Par conseacutequent d (APOLLINEAPPOLINE) gt d (APOLLINEAPPOLLINE) +d (APPOLLINEAPPOLINE) et la la fonction dlowast ne veacuterifie pas lrsquoineacutegaliteacute triangulaire

250 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

712 Factorisation des calculs

La deacutefinition de la distance drsquoeacutedition ne permet pas drsquoenvisager le calcul de la distance dans un temps raisonnable Il estpossible neacuteanmoins drsquoexprimer cette distance drsquoune autre maniegravere afin de reacutesoudre ce problegraveme (voir [Wagner1974])On deacutefinit la suite suivante

Deacutefinition D7 distance drsquoeacutedition tronqueacuteeSoient deux mots (m1m2) on deacutefinit la suite (

dm1m2

ij

)0⩽i⩽n10⩽j⩽n2

(= (dij)0⩽i⩽n1

0⩽j⩽n2

pour ne pas alourdir les notations)

Par d00 = 0

dij = min

diminus1jminus1 + comparaison

(mi

1mj2

)

dijminus1 + insertion(mj

2

)

diminus1j + suppression(mi

1

)

Cette suite tronqueacutee permet drsquoobtenir le reacutesultat de la proprieacuteteacute suivante

Proprieacuteteacute P1 calcul rapide de la distance drsquoeacuteditionLa suite deacutefinie par 3 (page 251) veacuterifie d (m1m2) = dn1n2 ougrave d est la distance drsquoeacutedition deacutefinie en 1 (page 248) ou2 (page 249)

Cette factorisation des calculs est illustreacutee par les tableaux de cette figure La deacutemonstration srsquoeffectue par reacutecurrencela deacutefinition 3 (page 251) est bien sucircr eacutequivalente 1 (page 248) pour des mots de longueur un On suppose donc quece reacutesultat est vrai pour un couple de mots (m1m2) de longueur (l1 l2) veacuterifiant l1 ⩽ i et l_2 infegal j avec au plusune eacutegaliteacute Soit m un mot on note n le nombre de lettres qursquoil contient On note m (l) le mot formeacute des l premiegravereslettres de m Alors

dm1m2

ij = d (m1 (i) m2 (j))

d (m1 (i) m2 (j)) = min

d (m1 (iminus 1) m2 (j minus 1)) + comparaison (m1im2j) d (m1 (i) m2 (j minus 1)) + insertion (m2j) d (m1 (iminus 1) m2 (j)) + suppression (m1i)

Le calcul factoriseacute de la distance drsquoeacutedition entre deux mots de longueur l1 et l2 a un coucirct de lrsquoordre O (l1l2) Ilest souvent illustreacute par un tableau comme celui de la figure suivante qui permet eacutegalement de retrouver la meilleureseacutequence drsquoopeacuterations permettant de passer du premier mot au second

dans ce sens

crsquoest unecomparaison

minusrarr jdans ce sens crsquoest une insertion

dans ce sensdarr crsquoest unei suppression

d i s t a n c e s0

i 1d 2s 2t 2z 3a 3n 3c 3e 3 4

d i s t a n c e s0

i 1d 2 3 4s 4t 4z 5a 5 6 7n 8c 9e 9 10

71 Distance drsquoeacutedition 251

Machine Learning Statistiques et Programmation Version 035930

Chaque case (i j) contient la distance qui seacutepare les i premiegraveres lettres du mot 1 des j premiegraveres lettres du mot 2 selonle chemin ou la meacutethode choisie La derniegravere case indique la distance qui seacutepare les deux mots quel que soit le cheminchoisi

713 Extension de la distance drsquoeacutedition

Jusqursquoagrave preacutesent seuls trois types drsquoopeacuterations ont eacuteteacute envisageacutes pour constuire la distance drsquoeacutedition tous trois portentsur des caractegraveres et aucunement sur des paires de caractegraveres Lrsquoarticle [Kripasundar1996] (voir aussi [Seni1996]suggegravere drsquoeacutetendre la deacutefinition 3 (page 251) aux permutations de lettres

Deacutefinition D8 distance drsquoeacutedition tronqueacutee eacutetendueSoit deux mots (m1m2) on deacutefinit la suite

(dm1m2

ij

)0⩽i⩽n10⩽j⩽n2

(= (dij)0⩽i⩽n1

0⩽j⩽n2

pour ne pas alourdir les notations)

par

d00 = 0

dij = min

diminus1jminus1 + comparaison

(mi

1mj2

)

dijminus1 + insertion(mj

2 i)

diminus1j + suppression(mi

1 j)

diminus2jminus2 + permutation((

miminus11 mi

1

)(mjminus1

2 mj2

))

La distance drsquoeacutedition chercheacutee est toujours d (m1m2) = dn1n2

mais la deacutemonstration du fait que d est bien unedistance ne peut pas ecirctre copieacutee sur celle du theacuteoregraveme 1 (page 249) mais sur les travaux preacutesenteacutes dans lrsquoarticle[Wagner1974]

714 Apprentissage drsquoune distance drsquoeacutedition

Lrsquoarticle [Waard1995] suggegravere lrsquoapprentissage des coucircts des opeacuterations eacuteleacutementaires associeacutees agrave une distance drsquoeacutedition(comparaison insertion suppression permutation ) On note lrsquoensemble de ces coucircts ou paramegravetres Θ =(θ1 θn) On considegravere deux mots X et Y la distance drsquoeacutedition d (XY ) est une fonction lineacuteaire des coucirctsSoit D = ((X1 Y1) (XN YN )) une liste de couple de mots pour lesquels le reacutesultat de la distance drsquoeacutedition estconnu et noteacute (c1 cN ) il est alors possible de calculer une erreur srsquoexprimant sous la forme

E =

Nsumi=1

(d (Xi Yi)minus ci)2=

Nsumi=1

(nsum

k=1

αik (Θ) θk minus ci

)2

Les coefficients αik (Θ) deacutependent des paramegravetres Θ car la distance drsquoeacutedition correspond au coucirct de la transformationde moindre coucirct drsquoapregraves la deacutefinition ref`2 ltdefition_distance_edition_2gt` αik (Θ) correspond au nombre de fois quele paramegravetre θk intervient dans la transformation de moindre coucirct entre Xi et Yi Cette expression doit ecirctre minimaleafin drsquooptenir les coucircts Θ optimaux Toutefois les coucircts θk sont tous strictement positifs et plutocirct que drsquoeffectuer uneoptimisation sous contrainte ces coucircts sont modeacuteliseacutes de la faccedilon suivante

E =

Nsumi=1

(nsum

k=1

αik (Ω)1

1 + eminusωkminus ci

)2

Les fonctions αik (Ω) ne sont pas deacuterivable par rapport Ω mais il est possible drsquoeffectuer une optimisation sanscontrainte par descente de gradient Les coucircts sont donc appris en deux eacutetapes

252 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

Algorithme A1 Apprentissage drsquoune distance drsquoeacuteditionLes notations sont celles utiliseacutes pour lrsquoeacutequation (714) Les coucircts Ω sont tireacutes aleacuteatoirementestimationLes coefficients αik (Ω) sont calculeacuteescalcul du gradientDans cette eacutetape les coefficients αik (Ω) restent constants Il suffit alors de minimiser la fonction deacuterivable E (Ω) surRn ceci peut ecirctre effectueacute au moyen drsquoun algorithme de descente de gradient similaire agrave ceux utiliseacutes pour les reacuteseauxde neuronesTant que lrsquoerreurE (Ω) ne converge pas on continue Lrsquoerreur E diminue jusqursquoagrave converger puisque lrsquoeacutetape qui reacuteestimeles coefficients αik (Ω) les minimise agrave Ω = (ω1 ωn) constant

715 Bibliographie

72 Distance between two graphs

This page gathers some thoughts about comparing two graphs without any cycle This problem is known as graphsimilarity or graph matching234 One of the solution is the Graph Edit Distance235 a better solution is described in[Blondel2004] You can also read Graph similarity236

bull Definitions (page 254)bull Problem (page 254)bull First approach (page 255)

ndash Step 1 edit distance (page 255)ndash Step 2 Kruskal kind (bijection on paths) (page 256)ndash Step 3 Matching (page 256)ndash Step 4 Kruskal kind the return (bijection on edges and vertices) (page 256)ndash Step 5 Merging the two graphs (page 257)

bull Distance between graphs (page 257)bull Second approach faster (page 258)bull Bibliography (page 258)

234 httpsenwikipediaorgwikiGraph_matching235 httpsenwikipediaorgwikiGraph_edit_distance236 httpwwwcsuoigr~pvassildownloadsGraphDistanceLauraZagerpdf

72 Distance between two graphs 253

Machine Learning Statistiques et Programmation Version 035930

721 Definitions

The first approach is implemented in module graph_distance Example of use

graph1 = [ (ab) (bc) (bd) (de) (ef) (bf) (bg) (f g)(ag) (ag) (cd) (d g)(dh) (aah) (aac) (f h) ]

graph2 = copydeepcopy(graph1) + [ (h m) (m l) (l C) (C r)(a k) (k l) (k C)]

graph1 = Graph(graph1)graph2 = Graph(graph2)

distance graph = graph1distance_matching_graphs_paths(graph2 use_min=Falserarrstore=store)

graph is the merged graph mentioned below

722 Problem

This graph distance aims at computing a distance between graphs but also to align two graphs and to merge them intoa single one For example letrsquos consider the following graphs

We would like to merge them and to know which vertices were merged which ones were added and deleted Thefollowing ideas and algorithm are only applicable on graphs without cycles To simplify we assume there are only oneroot and one leave If there are mulitple we then create a single root we connect to all the existing ones We do the

254 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

same for the unique leave we create if there are multiple It will have all the existing ones as predecessors We alsoassume each vertex and each edge holds a label used during the matching It is better to match vertices or edges holdingthe same label A weight can be introduced to give more important to some elements (vertex edge)

723 First approach

Step 1 edit distance

The main idea consists in using Levensteinrsquos edit distance237 This algorithm applies on sequences but not on graphsBut because both graphs do not contain any cycle we can extract all paths from them Every path starts with the samevertex - the only root - and ends with the same one - the only leave - We also consider each edge or vertex as an elementof the sequence Before describing the edit distance letrsquos denote p1 as a path from the first graph p2 as a path from thesecond one pk(i) is the element i of this sequence Following Levenstein description we denote d(ij) as the distancebetween the two subsequences p1(1i) p2(1j) Based on that we use an edit distance defined as follows

d(i j) = min

d(iminus 1 j) + insertion(p1(i))d(i j minus 1) + insertion(p2(j))d(iminus 1 j minus 1) + comparison(p1(i) p2(j))

First of all we are not only interested in the distance but also in the alignment which would imply to keep which elementwas chosen as a minimum for each d(ij) If we denote nk the length of path k then d(n1 n2) is the distance we arelooking forSecond if two paths do not have the same length it implies some elements could be compared between each otherseven if one is an edge and the other one is a vertex This case is unavoidable if two paths have different lengthsThird the weight we use for the edit distance will be involved in a kind of tradeof do we prefer to boost the structureor the label when we merge the graphs Those weights should depend on the task whether or not it is better to alignvertices with the same label or to keep the structure Here are the chosen weights

operation weight conditioninsertion(c) w(c) weight held by the edge or the vertexcomparison(ab) 0 if vertices a and b share the same labelcomparison(ab) 0 if edges a and b share the same label and if vertices at both ends share the same

labelcomparison(ab) w(a) +

w(b)if edges a and b share the same label and if vertices at both ends do not share thesame label

comparison(ab) w(a)+w(b)2 if a and b do not share the same kind

comparison(ab) 3(w(a)+w(b))2 if a and b share the same kind but not the label

Kind means in this context edge or vertex In that case we think that sharing the same kind but not the same labelis the worst case scenario Those weights avoid having multiples time the same distance between two random pathswhich will be important during the next step In fact because the two graphs do not contain cycles they have a finitenumber of paths We will need to compute all distances between all possible pairs The more distinct values we havefor a distance between two paths the better it is

237 httpsenwikipediaorgwikiLevenshtein_distance

72 Distance between two graphs 255

Machine Learning Statistiques et Programmation Version 035930

Step 2 Kruskal kind (bijection on paths)

Among all possible distances we compute between two paths some of them might be irrelevant If for some reasonsthere is an edge which connects the root to the leave computing the edit distance between this short path and any otherone seems weird Thatrsquos why we need to consider a kind of paths association We need to associate a path from a graphto another from the other graph and the association needs to be a bijection assuming two close paths will have a lowdistanceAfter the first step we ended up with a matrix containing all possible distances We convert this matrix into a graphwhere each path is a vertex each distance is a weighted edge We use a kind of Kruskal algorithm to remove heavyweighted edges until we get a kind of bijection

bull We sort all edges by weight (reverse order)bull We remove the first ones until we get an injection on both sides a path from a graph must be associated to only

one pathBasically some paths from the bigger graph will not be teamed up with another path

Step 3 Matching

Now that we have a kind of bijection between paths it also means we have a series of alignments between paths onefrom the first graph one from the second graph and an alignment between them computed during the step We buildtwo matrices one for the edges Me one for the vertices Mv defined as follows

bull Me(i j) contains the number of times edge i from graph 1 is associated to edge j from graph 2 among all pathsassociated by the previous step

bull Mv(i j) contains the same for the vertices

Step 4 Kruskal kind the return (bijection on edges and vertices)

We now have two matrices which contains pretty much the same information as we have in step 2 each element isthe number of times an edge or a vertex was associated with an edge or a vertex of the other graph We use the samealgorithm until we get a kind of bijection between vertices or edges from both matrices

256 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

Step 5 Merging the two graphs

Once we finalized the previous steps we know which vertices and edges will be associated with vertices and edgesfrom the other graph Whatrsquos left is to add the left over to the picture which is shown by next Figure

Red and symbol - means deleted from graph~1 and not present in graph 2 Green and symbol + means not present ingraph 1 and added in graph 2 The black pieces remains unchangedThe main drawback of this algorithm is its speed It is very time consuming We need to compute distances between allpaths which is ok when graphs are small but very long when graphs are bigger Many paths share the same beginningand we could certainly avoid wasting time computing edit distances between those paths

724 Distance between graphs

We defined a distance between two sequences based on the sum of operations needed to switch from the first sequenceto the second one we can follow the same way here The alignment we were able to build between two graphs showsinsertions deletions and comparisons of different edges of vertices By giving a weight of each kind we can sum themto build the distance we are looking for We use the same weights we defined to compute the alignment between twopaths from both graphs Letrsquos defined an aligned graph G = (ab) G is the set of edges and vertices of the finalgraph a b are an edge of a vertex from the first graph for a and from the second graph for b a or b can be null Wealso defined insertion(a) = comparison(empty a)

d(G1 G2) =sum

aisinG1cupemptybisinG2cupempty

comparison(a b)11(ab)isinG

It is obvioulsy symmetric To proove it verifies d(G1 G2) = 0 lArrrArr G1 = G2 we could proove that every path fromG1 will be associated to itself during the first step It is not necessarily true because two different paths could share the

72 Distance between two graphs 257

Machine Learning Statistiques et Programmation Version 035930

same sequence of labels Letrsquos consider the following example

begin

FFF

FFFF

F 1 a 2 b

end

3 a 4 b

==

This graph contains three paths

path1 1 2 abpath2 3 4 abpath3 1 2 3 4 abab

The matrix distance between paths will give (xgt 0) 0 0 x0 0 xx x 0

The bolded values 0 represent one possible association between paths which could lead to the possible associationbetween vertices

1 0 1 00 1 0 11 0 1 00 1 0 1

In that particular case the algorithm will not return a null distance mostly because while aligning sequences we do notpay too much attention to the local structure One edge could be missing from the alignment We could try to correctthat by adding some cost when two vertices do not have the number of input or output edges instead of consideringonly the labels

725 Second approach faster

No implemented yet

726 Bibliography

73 Deacutetection de segments

bull Lrsquoideacutee (page 259)bull Illustration (page 261)bull Explications (page 266)

ndash Bibliographie (page 266)

258 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

731 Lrsquoideacutee

Une image aleacuteatoire ressemble agrave la mire en un temps ougrave la teacuteleacutevision ne rediffusait pas les programmes diurne la nuit

Dans ce brouillard aleacuteatoire la probabiliteacute drsquoavoir des points aligneacutes est tregraves faible si faible que le simple fait drsquoen voirest un eacuteveacutenement extraordinaire Trois points aligneacutes ne sont pas rares quatre un peu plus cinq encore plus A partirdrsquoun certain seuil on peut consideacuterer que trop de points aligneacutes forme une droite et un eacuteveacutenement trop rare pour ecirctreignoreacute On cherche agrave deacutetecter les arecirctes dans une image comme la suivante

On calcule le gradient drsquoune image en noir et blanc

73 Deacutetection de segments 259

Machine Learning Statistiques et Programmation Version 035930

Puis on extrait les segments en les consideacuterant comme des anomalies par rapport agrave un champ de pixels aleacuteatoire

260 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

732 Illustration

Deacutetection de segments dans une image

Crsquoest une technique assez vieille et qui consiste agrave deacutetecter des segments comme des anomalies lrsquoalignement de pointsest un eacuteveacutenement assez rare dans un nuage de points mais rare comment Cette ideacutee megravene agrave la probabilisation drsquouneimage pour quantifier ce qursquoest un alignement de points neacutecessairement rare

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Une image aleacuteatoire (page 261)bull Gradient (page 263)bull Deacutetection de segments (page 263)bull Deacutetection de segments sur une image (page 264)

Une image aleacuteatoire

On considegravere un bruit aleacuteatoire uniforme dans une image et on ajoute des points aleacuteatoires tireacutes le long drsquoune ligneselon une loi gaussienne uniforme sur la ligne gaussien autour du segment

from mlstatpyimagedetection_segment import random_noise_image convert_array2PILimg = random_noise_image((100 100))convert_array2PIL(img mode=binary)

from mlstatpyimagedetection_segment import random_segment_imagerandom_segment_image(img density=3 lmin=03)

size 36angle 2285619160431492x1 23597410654261072y1 40x2 0y2 6718753777770554nbpoints 108

convert_array2PIL(img mode=binary)

73 Deacutetection de segments 261

Machine Learning Statistiques et Programmation Version 035930

random_segment_image(img density=5 lmin=03)random_segment_image(img density=5 lmin=03)convert_array2PIL(img mode=binary)

pilimg = convert_array2PIL(img mode=binary)convert(RGB)pilimg

from PIL import ImageFilter

pilimg = pilimgfilter(ImageFilterBLUR)filter(ImageFilterBLUR)filter(ImageFilterrarrBLUR)filter(ImageFilterBLUR)pilimg

from PIL import ImageEnhanceenh = ImageEnhanceSharpness(pilimg)

(suite sur la page suivante)

262 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

final_img = enhenhance(4)final_img

Gradient

La deacutetection des segments est baseacutee sur le gradient

from mlstatpyimagedetection_segment import compute_gradient plot_gradientgrad = compute_gradient(final_img color=0)

plot_gradient(pilimgcopy() grad direction=-2)

Deacutetection de segments

from mlstatpyimagedetection_segment import detect_segmentsseg = detect_segments(final_img verbose=1 seuil_nfa=1e-1)len(seg)

n = 1000 82 temps 027 sec nalign 298n = 2000 82 temps 052 sec nalign 671n = 3000 164 temps 083 sec nalign 964n = 4000 164 temps 110 sec nalign 1357n = 5000 249 temps 139 sec nalign 1544n = 6000 252 temps 166 sec nalign 1924n = 7000 374 temps 195 sec nalign 2183n = 8000 375 temps 223 sec nalign 2460n = 9000 379 temps 256 sec nalign 2728

379

73 Deacutetection de segments 263

Machine Learning Statistiques et Programmation Version 035930

from mlstatpyimagedetection_segment import plot_segmentsplot_segments(final_imgcopy() seg)

Deacutetection de segments sur une image

from PIL import Imageegl = Imageopen(eglise_zoom2jpg)egl

On reacuteduit la taille de lrsquoimage

egl2 = eglcrop((0 0 eglsize[0]3 3eglsize[1]4))egl2

264 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

grad2 = compute_gradient(egl2 color=0)plot_gradient(egl2copy() grad2 direction=-2)

seg2 = detect_segments(egl2)len(seg2)

490

from mlstatpyimagedetection_segment import plot_segmentsres = plot_segments(egl2copy() seg2)res

73 Deacutetection de segments 265

Machine Learning Statistiques et Programmation Version 035930

Il faudrait fusionner les segments mais cela a lrsquoair de marcherLa fonction detect_segments lance la deacutetection des segments

733 Explications

La preacutesentation Deacutetection des images dans les images digitales239 deacutetaille le principe de lrsquoalgorithme Lrsquoideacutee delrsquoalgorithme est assez proche de la transformeacutee de Hough240 Celle-ci est impleacutementeacutee dans le module scikit-image241

ou opencv242

Bibliographie

bull From Gestalt Theory to Image Analysis243 Agnegraves Desolneux Lionel Moisan Jean-Michel Morelbull Learning Equivariant Functions with Matrix Valued Kernels244

bull The Hough Transform Estimator245

bull An Extension to Hough Transform Based on Gradient Orientation246

239 httpsgithubcomsdpythonmlstatpyblobmaster_todosegment_detectionpresentationpdf240 httpsfrwikipediaorgwikiTransformC3A9e_de_Hough241 httpscikit-imageorgdocsdevapiskimagetransformhtml242 httpsdocsopencvorg24136doctutorialsimgprocimgtranshough_lineshough_lineshtmlhighlight=hough243 httpwwwmath-infouniv-paris5fr~moisanpapers2006-9pdf244 httpwwwjmlrorgpapersvolume8reisert07areisert07apdf245 httpsarxivorgpdfmath0503668pdf246 httpsarxivorgftparxivpapers1510151004863pdf

266 Chapter 7 Algorithmes

CHAPTER 8

Peacutereacutegrinations

Ce sont quelques notebooks sur des points particuliers qui surgissent au quotidien quand on traite des donneacutees Souventplus pratiques que theacuteoriques crsquoest lrsquooccasion de deacutecouvrir quelques poussiegraveres sous le tapis

81 Reacutepartir en base drsquoapprentissage et de test

Crsquoest un problegraveme plutocirct facile puisqursquoil srsquoagit de reacutepartir aleacuteatoirement les lignes drsquoune base de donneacutees drsquoun cocircteacute oude lrsquoautre Lorsque le problegraveme de machine learning agrave reacutesoudre est un problegraveme de classification il faut srsquoassurer quechaque cocircteacute contient une proportion raisonnable de chaque classe

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Reacutepartition naiumlve (page 268)bull Reacutepartition stratifieacutee (page 271)bull Streaming splitting (page 276)bull Streaming distribueacute (page 282)

import matplotlibpyplot as pltmatplotlib inline

267

Machine Learning Statistiques et Programmation Version 035930

811 Reacutepartition naiumlve

On considegravere une base de donneacutees qursquoon divise en 23 apprentissage 13 test On note cette proportion t Deux classes0 et 1 la proportion de la classe 1 est de p qursquoon choisit petit

import randomdef generate_dataset(n t)

return [1 if randomrandom() lt t else 0 for i in range(0n)]

ens = generate_dataset(4000 001)sum(ens)

40

Et on divise en base drsquoapprentissage et de test

def custom_split_train_test(ens p)choice = generate_dataset(len(ens) p)train = [x for x c in zip(ens choice) if c == 1]test = [x for x c in zip(ens choice) if c == 0]return train test

train test = custom_split_train_test(ens 066)print(len(train) sum(train) sum(train)len(train))print(len(test) sum(test) sum(test)len(test))

2683 27 0010063361908311591317 13 0009870918754745633

On recommence un grand nombre de fois et on repreacutesente la proportion obtenue dans la base de test

tirages = [sum(test)len(test) for train test in [custom_split_train_test(ens 066)rarrfor i in range(0100)]]

pltplot(tirages o)pltylabel(proportion classe 1)pltxlabel(tirages)

268 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

On considegravere maintenant la moyenne les valeurs extrecircmes de la proportion en faisant varier p

ps = [0001 i for i in range(1 50)]tmin tmax tmean = [] [] []for p in ps

ens = generate_dataset(4000 p)tirages = [sum(test)len(test) for train test in [custom_split_train_test(ens 0

rarr66) for i in range(0200)]]tiragessort()tminappend(tirages[int(len(tirages)005)])tmaxappend(tirages[-int(len(tirages)005)])tmeanappend(sum(tirages) len(tirages))

fig ax = pltsubplots(1 1)axplot(ps ps -- label=expected proportion)axplot(ps tmin label=min)axplot(ps tmax label=max)axplot(ps tmean label=mean)axlegend()

81 Reacutepartir en base drsquoapprentissage et de test 269

Machine Learning Statistiques et Programmation Version 035930

Et train_test_split247

from sklearnmodel_selection import train_test_splitimport pandas

ps = [0001 i for i in range(1 50)]tmin tmax tmean = [] [] []for p in ps

ens = pandasSeries(generate_dataset(4000 p))tirages = [sum(test)len(test) for train test in [train_test_split(ens test_size=0

rarr66) for i in range(0200)]]tiragessort()tminappend(tirages[int(len(tirages)005)])tmaxappend(tirages[-int(len(tirages)005)])tmeanappend(sum(tirages) len(tirages))

fig ax = pltsubplots(1 1)axplot(ps ps -- label=expected proportion)axplot(ps tmin label=min)axplot(ps tmax label=max)axplot(ps tmean label=mean)axset_title(train_test_split from sklearn)axlegend()

247 httpscikit-learnorgstablemodulesgeneratedsklearnmodel_selectiontrain_test_splithtml

270 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Lrsquoeacutecart entre les extrecircmes paraicirct plus petit Le geacuteneacuterateur pseudo aleacuteatoire utiliseacute par scikit-learn248 paraicirct de meilleurqualiteacute Nous y reviendront peut-ecirctre un jour

812 Reacutepartition stratifieacutee

Nous utilisons maintenant le paramegravetre stratify qui permet de srsquoassurer que les deux classes sont eacutequitablement reacutepartiesentre les deux ensembles train et test

from sklearnmodel_selection import train_test_splitimport pandas

ps = [0001 i for i in range(1 50)]tmin tmax tmean = [] [] []for p in ps

ens = pandasSeries(generate_dataset(4000 p))

traintest = []excs = []for i in range(0 200)

trytrain test = train_test_split(ens test_size=066 stratify=ens)traintestappend((traintest))

except ValueError as eprint(Skipping small class too small in one side e)excsappend(e)

if len(traintest) lt 100ex = excs[0] if len(excs) gt 0 else no exceptionraise Exception(Too few you should check the implementation is okn0

rarrformat(ex))(suite sur la page suivante)

248 httpscikit-learnorg

81 Reacutepartir en base drsquoapprentissage et de test 271

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

tirages = [sum(test)len(test) for train test in traintest]tiragessort()tminappend(tirages[int(len(tirages)005)])tmaxappend(tirages[-int(len(tirages)005)])tmeanappend(sum(tirages) len(tirages))

fig ax = pltsubplots(1 1)axplot(ps ps -- label=expected proportion)axplot(ps tmin label=min)axplot(ps tmax label=max)axplot(ps tmean label=mean)axset_title(stratified train_test_split from sklearn)axlegend()

La proportion initiale est bien respecteacutee Comment faire cela en pratique Le plus simple est sans doute de bull De trier les observations qui appartiennent agrave chaque classebull De les permuter de faccedilon aleacuteatoirebull Puis de prendre les premiers eacuteleacutements pour la base drsquoapprentissage dans chaque classe et les derniers pour la

base de test

def custom_statitied_split_train_test(ens p stratify)strat = set(stratify)train = []test = []for st in strat

cl = [e for e s in zip(ens stratify) if s == st]randomshuffle(cl)i = int(len(cl) p)trainextend(cl[i])

(suite sur la page suivante)

272 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

testextend(cl[i])return train test

ps = [0001 i for i in range(1 50)]tmin tmax tmean = [] [] []for p in ps

ens = generate_dataset(4000 p)tirages = [sum(test)len(test) for train test in [custom_statitied_split_train_

rarrtest(ensp=066 stratify=ens) for i in range(0200)]]

tiragessort()tminappend(tirages[int(len(tirages)005)])tmaxappend(tirages[-int(len(tirages)005)])tmeanappend(sum(tirages) len(tirages))

fig ax = pltsubplots(1 1)axplot(ps ps -- label=expected proportion)axplot(ps tmin label=min)axplot(ps tmax label=max)axplot(ps tmean label=mean)axset_title(custom stratified train_test_split)axlegend()

La meacutethode est simple mais plus coucircteuse puisqursquoelle neacutecessite un tri

import time

ns = []tn = []

(suite sur la page suivante)

81 Reacutepartir en base drsquoapprentissage et de test 273

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

ts = []

ii = 5for N in [10000 20000 50000 100000 200000 500000 int(1e6)

int(2e6) int(5e6)]print(N)ens = pandasSeries(generate_dataset(N 005))nsappend(N)

tt = []for i in range(0ii)

t = timeperf_counter()train_test_split(ens test_size=066)d = 10 (timeperf_counter()-t) iittappend(d)

ttsort()tnappend(tt[len(tt)2])

tt = []for i in range(0ii)

t = timeperf_counter()train_test_split(ens test_size=066 stratify=ens)d = 10 (timeperf_counter()-t) iittappend(d)

ttsort()tsappend(tt[len(tt)2])

100002000050000100000200000500000100000020000005000000

import mathfig ax = pltsubplots(1 1)dd = tn[-1] - (ts[-1] - tn[-1])13axplot(ns [x dd ns[-1] for x in ns] label=O(x))axplot(ns [x mathlog(x) ns[0] dd ns[-1] (ns[0] mathlog(ns[0])) for x inrarrns] label=O(x ln x))axplot(ns tn label=split)axplot(ns ts label=stratified split)axset_title(processing time for train_test_split)axgrid(True)axset_xscale(log nonposx=clip)axset_yscale(log nonposy=clip)axset_xlabel(N)axset_ylabel(time(s))axlegend()

274 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Le coucirct de la fonction train_test_split249 semble ecirctre entre O(n) et O(n lnn) Regardons

import mathfig ax = pltsubplots(1 1)axplot(ns [(x tn[-1]) (n mathlog(n) (ns[-1] mathlog(ns[-1]))) for x n inrarrzip(tn ns)]

label=split n ln s)axplot(ns [(x ts[-1]) (n mathlog(n) (ns[-1] mathlog(ns[-1]))) for x n inrarrzip(ts ns)]

label=stratified n ln s)axplot(ns [(x tn[-1]) (n ns[-1]) for x n in zip(tn ns)] label=split n)axplot(ns [(x ts[-1]) (n ns[-1]) for x n in zip(ts ns)] label=stratified nrarr)

axset_title(processing time for train_test_split)axgrid(True)axset_xscale(log nonposx=clip)axset_xlabel(N)axset_ylabel(time(s) (s ln s))axset_ylim([0515])axlegend()

249 httpscikit-learnorgstablemodulesgeneratedsklearnmodel_selectiontrain_test_splithtml

81 Reacutepartir en base drsquoapprentissage et de test 275

Machine Learning Statistiques et Programmation Version 035930

Crsquoest difficile agrave voir sur ce scheacutema Il faudrait tirer plus drsquoexemple regader les quantiles plutocirct que la seule meacutedianeLe code de scikit-learn250 est plus explicite une permutation preacutecegravede la reacutepartition en train test

813 Streaming splitting

Streaming veut dire qursquoon traite les donneacutees sous la forme drsquoun flux et qursquoon ne sait pas combien il y en Concregravetementil faut commencer la reacutepartition train test au moment sans savoir quand elle srsquoarrecirctera Par conseacutequent il faut qursquoagravetout instant on soit capable drsquointerrompre la reacutepartition et celle-ci doit ecirctre valideLe premier algorithme qui consiste agrave tirer un nombre aleacuteatoire et agrave le reacutepartir en train ou test selon le nombre tireacuteChaque observation est traiteacutee indeacutependamment A tout moment la reacutepartition peut ecirctre interrompue En pratique onimpleacutemente ce type de processus sous la forme drsquoiteacuterateur ou de mapper Crsquoest une fonction qui accepte un iteacuterateursur un ensemble et qui retourne un iteacuterateur sur les valeurs transformeacutees Dans notre cas on retourne lrsquoobservationsuivi de 0 si elle est classeacutee en train et 1 en test

def streaming_split_train_test(stream p)for obs in stream

x = randomrandom()yield obs 0 if x lt= p else 1

def iterate_data(n t)while n gt 0

yield 1 if randomrandom() lt t else 0n -= 1

for obs s in streaming_split_train_test(iterate_data(10 005) 066)print(obs=0 traintest=1format(obs s))

250 httpsgithubcomscikit-learnscikit-learnblobmastersklearnmodel_selection_splitpyL1048

276 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

obs=0 traintest=1obs=0 traintest=0obs=0 traintest=0obs=0 traintest=1obs=0 traintest=0obs=1 traintest=0obs=0 traintest=0obs=0 traintest=0obs=0 traintest=0obs=0 traintest=0

La reacutepartition stratifieacutee repose sur une permutation aleacuteatoire et cela implique drsquoavoir accegraves agrave lrsquointeacutegraliteacute des donneacuteesau preacutealable En streaming ce nrsquoest pas possible Il faut donc penser agrave autre chose pour obtenir une version stratifieacuteede la version streaming Rien nrsquoempecircche en version streaming de garder les derniegraveres observations en meacutemoire pourfaire une mini-permutation Nous allons introduire quelques changements

1 Le stream est maintenant un flux sur deux valeurs lrsquoobservation et la classe agrave laquelle il appartient2 La fonction va conserver les derniegraveres valeurs pour chaque classe3 La fonction va produire des observations de temps en temps quand elle sera sucircre que les observations seront

stratifieacutees4 Nuos allons compter les observations distribueacutees dans chaque base

def streaming_stratified_split_train_test(stream p)n = max(1p 1(1-p))if n gt 10000

raise Exception(Cette reacutepartition train test est vraiment deacuteseacutequilibreacutee)memory = for obs strat in stream

if strat not in memorymemory[strat] = []

memory[strat]append(obs)

for k in memoryv = memory[k]if len(v) gt= n

on permute aleacuteatoirementrandomshuffle(v)i = int(len(v) p + 05)for j in range(0i)

yield v[j] 0 apprentissagefor j in range(ilen(v))

yield v[j] 1 test on efface de la meacutemoire les informations produitesmemory[k] = []

lorsquon a fini il faut tout de mecircme reacutepartir les observations stockeacuteesfor k in memory

v = memory[k] on permute aleacuteatoirementrandomshuffle(v)i = int(len(v) p)for j in range(0i)

(suite sur la page suivante)

81 Reacutepartir en base drsquoapprentissage et de test 277

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

yield v[j] 0 apprentissagefor j in range(ilen(v))

yield v[j] 1 test

iter = streaming_stratified_split_train_test( ((ii) for i in iterate_data(10000 005))rarr 066)df = pandasDataFrame(iter)dfcolumns = [obs train_test]print(dfshape)dfhead()

(10000 2)

df2 = dfcopy()df2[un] = 1piv = df2groupby([obs train_test] as_index=False)count()pivot(train_test obsrarr un)piv

Il y a juste un petit problegraveme avec cette impleacutementation On multiplie la taille du buffer par un reacuteel Je suggegravere drsquoenleverle nombre 05 dans le code pour voir ce qursquoil se passe La somme des arrondis est loin drsquoecirctre un arrondi mecircme si Nchoisi tel que N = max( 1p

11minusp )

piv[sum] = piv[0] + piv[1]piv[ratio] = piv[1] piv[sum]piv

Il faut corriger ces erreurs drsquoarrondi On srsquoinspire de lrsquoalgorithme de Bresenham251 et meacutemoriser les eacuteleacutements reacutepartis

def streaming_stratified_split_train_test2(stream p)n = max(1p 1(1-p))if n gt 10000

raise Exception(Cette reacutepartition train test est vraiment deacuteseacutequilibreacutee)counts = memory = for obs strat in stream

if strat not in memorymemory[strat] = []

memory[strat]append(obs)

for k in memoryv = memory[k]if len(v) gt= n

on permute aleacuteatoirementrandomshuffle(v)if (0k) in counts

tt = counts[1k] + counts[0k]delta = - int(counts[0k] - ttp + 05)

elsedelta = 0

(suite sur la page suivante)

251 httpsfrwikipediaorgwikiAlgorithme_de_tracC3A9_de_segment_de_Bresenham

278 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

i = int(len(v) p + 05)i += deltai = max(0 min(len(v) i))for j in range(0i)

yield v[j] 0 apprentissagefor j in range(ilen(v))

yield v[j] 1 testif (0k) not in counts

counts[0k] = icounts[1k] = len(v)-i

elsecounts[0k] += icounts[1k] += len(v)-i

on efface de la meacutemoire les informations produitesmemory[k] = []

lorsquon a fini il faut tout de mecircme reacutepartir les observations stockeacuteesfor k in memory

v = memory[k] on permute aleacuteatoirementrandomshuffle(v)if (0k) in counts

tt = counts[1k] + counts[0k]delta = - int(counts[0k] - ttp + 05)

elsedelta = 0

i = int(len(v) p + 05)i += deltai = max(0 min(len(v) i))for j in range(0i)

yield v[j] 0 apprentissagefor j in range(ilen(v))

yield v[j] 1 testif (0k) not in counts

counts[0k] = icounts[1k] = len(v)-i

elsecounts[0k] += icounts[1k] += len(v)-i

iter = streaming_stratified_split_train_test2( ((ii) for i in iterate_data(10000 0rarr05)) 066)df = pandasDataFrame(iter)dfcolumns = [obs train_test]df2 = dfcopy()df2[un] = 1piv = df2groupby([obs train_test] as_index=False)count()pivot(train_test obsrarr un)piv[sum] = piv[0] + piv[1]piv[ratio] = piv[1] piv[sum]print(ratio de classe 1 dans leacutechantillon entier 15f

(suite sur la page suivante)

81 Reacutepartir en base drsquoapprentissage et de test 279

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

((piviloc[11] + piviloc[01]) (piviloc[01] + piviloc[00] + piviloc[11]rarr+ piviloc[10]) ))piv

ratio de classe 1 dans leacutechantillon entier 004980

Pas trop mal Le dernier inconveacutenient est la taille de la fenecirctre Dans lrsquoexemple qui suit elle sera de 3 Lrsquoalgorithme vadonc grouper les eacuteleacutements par trois les permuter aleacuteatoirement et les laisser filer Nous ne pourrons jamais avoir troiseacuteleacutements de suite du mecircme cocircteacute train ou test On peut bidouiller comme suit (ligne marqueacutees changement) Lafonction qui suit ne permet toujours pas drsquoavoir de grandes seacutequences reacutepartie du mecircme cocircteacute mais ce sera lrsquoinconveacutenientde ce type drsquoalgorithme La taille du buffer limite cette possibiliteacute

def streaming_stratified_split_train_test3(stream p)n = 2 max(1p 1(1-p)) changementif n gt 10000

raise Exception(Cette reacutepartition train test est vraiment deacuteseacutequilibreacutee)counts = memory = for obs strat in stream

if strat not in memorymemory[strat] = []

memory[strat]append(obs)

for k in memoryv = memory[k]if len(v) gt= n + randomrandint(0 10) changement

on permute aleacuteatoirementrandomshuffle(v)if (0k) in counts

tt = counts[1k] + counts[0k]delta = - int(counts[0k] - ttp + 05)

elsedelta = 0

i = int(len(v) p + 05)i += deltai = max(0 min(len(v) i))for j in range(0i)

yield v[j] 0 apprentissagefor j in range(ilen(v))

yield v[j] 1 testif (0k) not in counts

counts[0k] = icounts[1k] = len(v)-i

elsecounts[0k] += icounts[1k] += len(v)-i

on efface de la meacutemoire les informations produitesmemory[k] = []

lorsquon a fini il faut tout de mecircme reacutepartir les observations stockeacuteesfor k in memory

(suite sur la page suivante)

280 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

v = memory[k] on permute aleacuteatoirementrandomshuffle(v)if (0k) in counts

tt = counts[1k] + counts[0k]delta = - int(counts[0k] - ttp + 05)

elsedelta = 0

i = int(len(v) p + 05)i += deltai = max(0 min(len(v) i))for j in range(0i)

yield v[j] 0 apprentissagefor j in range(ilen(v))

yield v[j] 1 testif (0k) not in counts

counts[0k] = icounts[1k] = len(v)-i

elsecounts[0k] += icounts[1k] += len(v)-i

iter = streaming_stratified_split_train_test3( ((ii) for i in iterate_data(10000 0rarr05)) 066)df = pandasDataFrame(iter)dfcolumns = [obs train_test]df2 = dfcopy()df2[un] = 1piv = df2groupby([obs train_test] as_index=False)count()pivot(train_test obsrarr un)piv[sum] = piv[0] + piv[1]piv[ratio] = piv[1] piv[sum]print(ratio de classe 1 dans leacutechantillon entier 15f

((piviloc[11] + piviloc[01]) (piviloc[01] + piviloc[00] + piviloc[11]rarr+ piviloc[10]) ))piv

ratio de classe 1 dans leacutechantillon entier 005000

81 Reacutepartir en base drsquoapprentissage et de test 281

Machine Learning Statistiques et Programmation Version 035930

814 Streaming distribueacute

Crsquoest possible mais crsquoest un peu plus compliqueacute parce que le hasard en distribueacute crsquoest compliqueacute On nrsquoest jamais sucircrque des seacuteries pseudo-aleacuteatoires soient tout-agrave-fait indeacutependantes lorsqursquoelles sont geacuteneacutereacutees en parallegraveles

82 Correacutelations non lineacuteaires

Les correacutelations indiquent si deux variables sont lineacuteairement eacutequivalentes Comment eacutetendre cette notion agrave desvariables lieacutees mais pas de faccedilon lineacuteaire

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Un exemple (page 282)bull Un peu de theacuteorie (page 284)bull Veacuterifications (page 284)bull Overfitting (page 285)bull Correacutelations de variables cateacutegorielles (page 290)bull Maximal information coefficient (page 298)

matplotlib inline

821 Un exemple

from sklearn import datasets

iris = datasetsload_iris()X = irisdataY = iristargetimport pandasdf = pandasDataFrame(X)dfcolumns = [X1 X2 X3 X4]dfhead()

import seaborn as snssnsset()snspairplot(df)

282 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Et les correacutelations

dfcorr()

82 Correacutelations non lineacuteaires 283

Machine Learning Statistiques et Programmation Version 035930

822 Un peu de theacuteorie

Le coefficient de correacutelation252 de Pearson est calculeacute comme suit

cor(Xi Xj) =cov(Xi Yi)

σ(Xi)σ(Xj)

Lorsque les variables sont centreacutees EXi = EXj = 0 cette formule devient

cor(Xi Xj) =E(XiXj)radicEX2

i EX2j

Lorsque les variables sont reacuteduites EX2i = EX2

j = 1 cette formule devient cor(Xi Xj) = E(XiXj) Admettonsmaintenant que lrsquoon cherche agrave trouver le coefficient αij qui minimise la variance du bruit ϵij

Xj = αijXi + ϵij

Le coefficient αij est le reacutesultat drsquoune reacutegression lineacuteaire qui minimise E(Xj minus αijXi)2 Si les variables Xi Xj

sont centreacutees et reacuteduites αlowastij = E(XiXj) = cor(Xi Xj) On eacutetend cette deacutefinition dans le cas drsquoune fonction

parameacutetrable f f(ωX) rarr R et drsquoune reacutegression non lineacuteaire On suppose que les paramegravetres ωlowast minimisentla quantiteacute minω(Xj minus f(ωXi))

2 On eacutecrit alors Xj = αijf(ωlowastXi)

αij+ ϵij et on choisit αij de telle sorte que

E(

f(ωlowastXi)2

α2ij

)= 1 On deacutefinit la correacutelation non lineacuteaire au sens de f

corf (Xi Xj) =radic

E(f(ωXi)2)

On veacuterifie que ce coefficient est compris entre [0 1] Il est positif de maniegravere eacutevidente Il est eacutegalement infeacuterieur agrave1 si cela nrsquoeacutetait pas le cas nous pourrions construire une fonction f(ωlowast X) + c qui est une meilleur solution pour leprogramme de minimisation Ce nombre ressemble agrave une correacutelation agrave ceci pregraves qursquoelle ne peut ecirctre neacutegative

823 Veacuterifications

Tout drsquoabord le cas lineacuteaire

from sklearnpreprocessing import scaleimport numpy

def correlation_etendue(df model params)cor = dfcorr()df = scale(df)for i in range(corshape[0])

xi = df[ ii+1]for j in range(corshape[1])

mod = model(params)xj = df[ j]modfit(xi xj)v = modpredict(xi)c = numpystd(v)coriloc[ij] = c

return cor

from sklearnlinear_model import LinearRegressioncor = correlation_etendue(df LinearRegression fit_intercept=False)cor

252 httpsfrwikipediaorgwikiCorrC3A9lation_(statistiques)

284 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

On affiche agrave nouveau les correacutelations qui sont identiques au signe pregraves

dfcorr()

Et le cas non lineacuteaire

from sklearntree import DecisionTreeRegressorcor = correlation_etendue(df DecisionTreeRegressor)cor

from sklearnensemble import RandomForestRegressorcor = correlation_etendue(df RandomForestRegressor n_estimators=10)cor

824 Overfitting

Ces chiffres sont beaucoup trop optimistes Les modegraveles de machine learning peuvent tout agrave fait faire de lrsquooverfittingIl faut ameacuteliorer la fonction en divisant en apprentissage et test plusieurs fois Il faut eacutegalement tenir compte de lrsquoerreurde preacutediction On rappelle que

Xj = αijf(ωlowast Xi)

αij+ ϵij = corf (Xi Xj)

f(ωlowast Xi)radicE(f(ωXi)2)

+ ϵij

Or E(X2j ) = 1 et on suppose que les bruits ne sont pas correacuteleacutees lineacuteairement aux f(ωlowast Xi) On en deacuteduit que

corf (Xi Xj) =radic1minus Eϵ2ij

from sklearnmodel_selection import train_test_splitimport numpy

def correlation_cross_val(df model draws=5 params)cor = dfcorr()df = scale(df)for i in range(corshape[0])

xi = df[ ii+1]for j in range(corshape[1])

xj = df[ j]mem = []for k in range(0 draws)

xi_train xi_test xj_train xj_test = train_test_split(xi xj test_rarrsize=05)

mod = model(params)modfit(xi_train xj_train)v = modpredict(xi_test)c = (1 - numpyvar(v - xj_test))memappend(max(c 0) 05)

coriloc[ij] = sum(mem) len(mem)return cor

cor = correlation_cross_val(df LinearRegression fit_intercept=False draws=20)cor

cor = correlation_cross_val(df DecisionTreeRegressor)cor

82 Correacutelations non lineacuteaires 285

Machine Learning Statistiques et Programmation Version 035930

cor = correlation_cross_val(df RandomForestRegressor n_estimators=10)cor

Les reacutesultats sont assez fluctuants lorsque les donneacutees sont mal correacuteleacutees On remarque eacutegalement que la matrice nrsquoestplus neacutecessairement symmeacutetrique

import matplotlibpyplot as plt

def pairplot_cross_val(data model=None ax=None params)if ax is None

fig ax = pltsubplots(datashape[1] datashape[1] figsize=paramsget(figsizerarr (1010)))if figsize in params

del params[figsize]if model is None

from sklearnlinear_model import LinearRegressionmodel = LinearRegression

df = scale(data)cor = numpycorrcoef(dfT)for i in range(corshape[0])

xi = df[ ii+1]for j in range(corshape[1])

xj = df[ j]mem = []xi_train xi_test xj_train xj_test = train_test_split(xi xj test_size=0

rarr5)mod = model(params)modfit(xi_train xj_train)v = modpredict(xi_test)mod = model(params)modfit(xi_test xj_test)v2 = modpredict(xi_train)ax[ij]plot(xj_test v )ax[ij]plot(xj_train v2 )if j == 0

ax[ij]set_ylabel(datacolumns[i])if i == datashape[1]-1

ax[ij]set_xlabel(datacolumns[j])mi = min(min(xj_test) min(v) min(xj_train) min(v2))ma = max(max(xj_test) max(v) max(xj_train) max(v2))ax[ij]plot([mi ma] [mi ma] --)

return ax

ax = pairplot_cross_val(df)ax

286 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

ax = pairplot_cross_val(df model=DecisionTreeRegressor)ax

82 Correacutelations non lineacuteaires 287

Machine Learning Statistiques et Programmation Version 035930

ax = pairplot_cross_val(df model=RandomForestRegressor n_estimators=10)ax

288 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

from sklearnneighbors import KNeighborsRegressorax = pairplot_cross_val(df model=KNeighborsRegressor)ax

82 Correacutelations non lineacuteaires 289

Machine Learning Statistiques et Programmation Version 035930

825 Correacutelations de variables cateacutegorielles

Crsquoest le problegraveme eacutepineux si on se restreint au lineacuteaire Cela nrsquoa pas trop de sens drsquoaffecter une valeur agrave chaque cateacutegorieet la correacutelation de deux variables binaires (des modaliteacutes) est toujours eacutetrange car il nrsquoy a que deux valeurs possibles

cov(XY ) = E [(X minus EX)(Y minus EY )] = E(XY )minus EXEY = P(X = 1 et Y = 1)minus EXEY

Dans le cas de variables binaires geacuteneacutereacutees de modaliteacutes de la mecircme variables cateacutegorielles le premier terme est toujoursnul puisque les modaliteacutes sont exclusives et la correacutelation est toujours neacutegative

import randomex = numpyzeros((100 2))for i in range(0 exshape[0])

h = randomrandint(0 exshape[1]-1)(suite sur la page suivante)

290 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

ex[i h] = 1ex[5]

array([[1 0][0 1][1 0][1 0][1 0]])

numpycorrcoef(exT)

array([[ 1 -1][-1 1]])

import randomex = numpyzeros((100 3))for i in range(0 exshape[0])

h = randomrandint(0 exshape[1]-1)ex[i h] = 1

ex[5]numpycorrcoef(exT)

array([[ 1 -051449576 -051449576][-051449576 1 -047058824][-051449576 -047058824 1 ]])

Supposons maintenant que nous avons deux variables cateacutegorielles tregraves proches bull X1 est une couleur rouge bleu grisbull X2 est une nuance rose orange cyan magenta blanc noir

c1 = [rouge bleu gris]c2 = [rose orange cyan magenta blanc noir]ind = [randomrandint(0 2) for i in range(0 100)]x1 = [c1[i] for i in ind]x2 = [c2[i2 + randomrandint(01)] for i in ind]df = pandasDataFrame(dict(X1=x1 X2=x2))dfhead()

On peut eacutevidemment transformer en entier

dummies = pandasget_dummies(df)dummieshead()

dummiescorr()

Ca ne dit pas grand-chose

from sklearnpreprocessing import LabelEncoderenc = LabelEncoder()df[X1e] = encfit_transform(df[X1])

(suite sur la page suivante)

82 Correacutelations non lineacuteaires 291

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

df[X2e] = encfit_transform(df[X2])dfhead()

dfcorr()

Ca ne veut toujours pas dire grand-chose Et si on change la premiegravere colonne en permutant les lables

df[X1e] = df[X1e]apply(lambda i (i+1)3)dfhead()

dfcorr()

La correacutelation lineacuteaire sur des variables cateacutegorielles nrsquoa pas de sens Essayons avec un arbre de deacutecision Crsquoest lemodegravele adeacutequat pour ce type de valeur discregravetes

cor = correlation_cross_val(df[[X1e X2e]] DecisionTreeRegressor)cor

Et si on permute le premier label

df[X1e] = df[X1e]apply(lambda i (i+1)3)correlation_cross_val(df[[X1e X2e]] DecisionTreeRegressor)

Mecircme reacutesultat qui srsquointerpregravete de la sorte bull La variable X1e se deacuteduit de X2e (car cor(X2e X1e) = 1)bull La variable X2e et fortement lieacute agrave X2e

La valeur numeacuterique choisie pour repreacutesente la variable cateacutegorielle nrsquoa pas drsquoimpact sur les reacutesultats

ax = pairplot_cross_val(df[[X1e X2e]] model=DecisionTreeRegressor)ax

292 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Et sur un jeu de donneacutees plus complet

from sklearndatasets import load_bostondf = load_boston()df = pandasDataFrame(dfdata columns=dffeature_names)dfhead()

Cxavierdupre__home_github_forkscikit-learnsklearnutilsdeprecationpy87 FutureWarningrarrFunction load_boston is deprecated load_boston is deprecated in 10 and will berarrremoved in 12

The Boston housing prices dataset has an ethical problem You can refer tothe documentation of this function for further detailsThe scikit-learn maintainers therefore strongly discourage the use of thisdataset unless the purpose of the code is to study and educate aboutethical issues in data science and machine learningIn this special case you can fetch the dataset from the original

82 Correacutelations non lineacuteaires 293

Machine Learning Statistiques et Programmation Version 035930

sourceimport pandas as pdimport numpy as np

data_url = httplibstatcmuedudatasetsbostonraw_df = pdread_csv(data_url sep=s+ skiprows=22 header=None)data = nphstack([raw_dfvalues[2 ] raw_dfvalues[12 2]])target = raw_dfvalues[12 2]

Alternative datasets include the California housing dataset (iefetch_california_housing()253) and the Ames housingdataset You can load the datasets as follows

from sklearndatasets import fetch_california_housinghousing = fetch_california_housing()

for the California housing dataset andfrom sklearndatasets import fetch_openmlhousing = fetch_openml(name=house_prices as_frame=True)

for the Ames housing datasetwarningswarn(msg category=FutureWarning)

dfcorr()

On dessine les 5 premiegraveres variables On voit que la variable CHAS est binaire

snspairplot(df[dfcolumns[6]])

253 httpsscikitunhboxvoidbxkernzcharlsquoprotectdiscretionarycharhyphencharfontlearnorgstablemodulesgeneratedsklearndatasetsfetch_california_housinghtmlsklearndatasetsfetch_california_housing

294 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

correlation_cross_val(df DecisionTreeRegressor)

pairplot_cross_val(df[dfcolumns[6]] model=DecisionTreeRegressor figsize=(1616))

82 Correacutelations non lineacuteaires 295

Machine Learning Statistiques et Programmation Version 035930

On regarde en pariculier les variables TAX RAD PTRATIO

snspairplot(df[[RAD TAX PTRATIO]])

296 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

df[[RAD TAX PTRATIO]]corr()

pairplot_cross_val(df[[RAD TAX PTRATIO]] model=DecisionTreeRegressor)

82 Correacutelations non lineacuteaires 297

Machine Learning Statistiques et Programmation Version 035930

correlation_cross_val(df[[RAD TAX PTRATIO]] DecisionTreeRegressor)

Les variables sont toutes trois lieacutees de faccedilon non lineacuteaire

826 Maximal information coefficient

Cette approche est plutocirct pragmatique mais peut se reacuteveacuteler coucircteuse en terme de calculs Elle permet aussi decomprendre qursquoun coefficient de correacutelation deacutepend des hypothegraveses qursquoon choisi pour les donneacutees On peut toujoursconstruire un coefficient de correacutelation qui soit eacutegal agrave 1 mais il correspond agrave toujours agrave un pheacutenomegravene qursquoon souhaiteeacutetudier La correacutelation lineacuteaire recherche des relations lineacuteaires On peut chercher une relation polynomiale Les arbresde deacutecision recherche une correacutelation construite agrave partir de fonction en escalier Plus la relation a de degreacute de liberteacuteplus le coefficient a de chance de tendre vers 1 moins il a de chance drsquoecirctre aussi eacuteleveacute sur de nouvelles donneacuteesCela permet neacuteanmoins de mieux comprendre les avantages et les inconveacutenients de meacutetriques du type MIC254 ouMaximal information coefficient Plus de deacutetails sont disponibles dans cet article Equitability mutual information

254 httpsenwikipediaorgwikiMaximal_information_coefficient

298 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

and the maximal information coefficient255 Le module minepy256 impleacutemente cette meacutetrique ainsi que drsquoautres quipoursuivent le mecircme objectif Lrsquoinformation mutuelle est deacutefinie comme ceci pour deux variables discregravetes

MI(XY ) =sumxisinX

sumyisinY

p(x y) ln2p(x y)

p(x)p(y)

La fonction p(x y) deacutefinit la distribution conjointe des deux variables p(x) p(y) les deux probabiliteacutes marginales Ilexiste une extension pour les variables continues

MIC(XY ) =

intxisinXisinyisinY p(x y) ln2

p(x y)

p(x)p(y)dxdy

Une faccedilon de calculer une approximation du coefficient MIC(x y) est de discreacutetiser les deux variables X et Y ceqursquoon fait en appliquant un algorithme similaire agrave celui utiliseacute pour construire un arbre de deacutecision agrave ceci pregraves que qursquoilnrsquoy a qursquoune seule variable et que la variable agrave preacutedire est elle-mecircmeLrsquoinformation mutuelle est inspireacute de la distance de Kullback-Leiber257 qui est une distance entre deux probabiliteacutes quisont ici la disribution du couple (XY ) et la distribution que ce couple aurait si les deux variables eacutetaient indeacutependantescrsquoest agrave dire le produit de leur distribution

matplotlib inline

import numpy as npimport matplotlibpyplot as plt

rs = nprandomRandomState(seed=0)

def mysubplot(x y numRows numCols plotNumxlim=(-4 4) ylim=(-4 4))

r = nparound(npcorrcoef(x y)[0 1] 1)

deacutebut ajoutdf = pandasDataFrame(dict(x=x y=y))cor = correlation_cross_val(df DecisionTreeRegressor)dt = max(coriloc[10] coriloc[01])

ax = pltsubplot(numRows numCols plotNumxlim=xlim ylim=ylim)

axset_title(Pearson r=1fnDT=1f (r dt)fontsize=10)axset_frame_on(False)axaxesget_xaxis()set_visible(False)axaxesget_yaxis()set_visible(False)axplot(x y )axset_xticks([])axset_yticks([])return ax

def rotation(xy t)return npdot(xy [[npcos(t) -npsin(t)] [npsin(t) npcos(t)]])

(suite sur la page suivante)

255 httpsarxivorgabs13017745v1256 httpminepyreadthedocsioenlatestpythonhtml257 httpsfrwikipediaorgwikiDivergence_de_Kullback-Leibler

82 Correacutelations non lineacuteaires 299

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

def mvnormal(n=1000)cors = [10 08 04 00 -04 -08 -10]for i cor in enumerate(cors)

cov = [[1 cor][cor 1]]xy = rsmultivariate_normal([0 0] cov n)mysubplot(xy[ 0] xy[ 1] 3 7 i+1)

def rotnormal(n=1000)ts = [0 nppi12 nppi6 nppi4 nppi2-nppi6

nppi2-nppi12 nppi2]cov = [[1 1][1 1]]xy = rsmultivariate_normal([0 0] cov n)for i t in enumerate(ts)

xy_r = rotation(xy t)mysubplot(xy_r[ 0] xy_r[ 1] 3 7 i+8)

def others(n=1000)x = rsuniform(-1 1 n)y = 4(x2-05)2 + rsuniform(-1 1 n)3mysubplot(x y 3 7 15 (-1 1) (-13 1+13))

y = rsuniform(-1 1 n)xy = npconcatenate((xreshape(-1 1) yreshape(-1 1)) axis=1)xy = rotation(xy -nppi8)lim = npsqrt(2+npsqrt(2)) npsqrt(2)mysubplot(xy[ 0] xy[ 1] 3 7 16 (-lim lim) (-lim lim))

xy = rotation(xy -nppi8)lim = npsqrt(2)mysubplot(xy[ 0] xy[ 1] 3 7 17 (-lim lim) (-lim lim))

y = 2x2 + rsuniform(-1 1 n)mysubplot(x y 3 7 18 (-1 1) (-1 3))

y = (x2 + rsuniform(0 05 n)) nparray([-1 1])[rsrandint(0 1 size=n)]

mysubplot(x y 3 7 19 (-15 15) (-15 15))

y = npcos(x nppi) + rsuniform(0 18 n)x = npsin(x nppi) + rsuniform(0 18 n)mysubplot(x y 3 7 20 (-15 15) (-15 15))

xy1 = nprandommultivariate_normal([3 3] [[1 0] [0 1]] int(n4))xy2 = nprandommultivariate_normal([-3 3] [[1 0] [0 1]] int(n4))xy3 = nprandommultivariate_normal([-3 -3] [[1 0] [0 1]] int(n4))xy4 = nprandommultivariate_normal([3 -3] [[1 0] [0 1]] int(n4))xy = npconcatenate((xy1 xy2 xy3 xy4) axis=0)mysubplot(xy[ 0] xy[ 1] 3 7 21 (-7 7) (-7 7))

pltfigure(figsize=(147))mvnormal(n=800)

(suite sur la page suivante)

300 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

rotnormal(n=200)others(n=800) plttight_layout() pltshow()

83 File drsquoattente un petit exemple

Psychokinegravese les ampoules grillent agrave distance

bull Petite histoire (page 302)bull Un peu de theacuteorie (page 302)

ndash File drsquoattente cas MM1 (page 303)ndash File drsquoattente cas MMS (page 304)ndash Retour aux ampoules (page 305)ndash Application numeacuterique (page 306)

bull Programme informatique (page 306)bull Bibliographie (page 308)

83 File drsquoattente un petit exemple 301

Machine Learning Statistiques et Programmation Version 035930

831 Petite histoire

Cet eacutenonceacute srsquoinspire du livre Devenez sorciers devenez savants258 de Georges Charpak et Henri Broch dont est tireacutelrsquoextrait suivant

Le preacutesentateur se tourne vers la cameacutera principale et drsquoun air tregraves seacuterieux et enjocircleur regarde leteacuteleacutespectateur droit dans les yeux en deacuteclarant Allez-y Allumez cinq ou six lampes agrave cocircteacute de vousPuis il se tourne vers le meacutedium et demande Vous pensez reacuteellement pouvoir le faire Apregraves quelquesmoments drsquoheacutesitation le mage se prononce Jrsquoespegravere avoir suffisamment de concentration ce soir maisje ne suis pas dans les conditions vraiment ideacuteales pour produire ce genre de pheacutenomegravene agrave distancedrsquohabitude je me retire pendant plusieurs jours dans une solitude totale et une profonde obscuriteacute apregravesun jeucircne strict

Si jamais il eacutechoue le public le mettra au compte des circonstances et non pas de ces compeacutetences Et pourtant lemeacutedium nrsquoeacutechoue pas Des ampoules grillent chez les teacuteleacutespectateurs qui regardent cette eacutemission Ils font part austandard teacuteleacutephonique de la chaicircne qui diffuse en direct cet extraordinaire moment de culture Le meacutedium a donc bienreacuteussi - comme il le preacutetendait - en concentrant sa puissance spirituelle sur la matiegravere agrave griller des ampoules eacutelectriquesagrave distanceSupposons que cette eacutemission soit suivie par environ un million de teacuteleacutespectateurs et qursquoelle dure une heure ou plusCela signifie qursquoenviron cinq agrave six millions drsquoampoules ont eacuteteacute allumeacutees pendant une heure ou plus Supposons que cenombre soit de deux millionsLa dureacutee de vie moyenne drsquoune ampoule agrave incandescence est de mille heures Ce qui signifie que pendant la dureacutee delrsquoeacutemission il y aura environ deux milles lampes grilleacutees

832 Un peu de theacuteorie

Ce problegraveme ressemble agrave un problegraveme de files drsquoattente Ce dernier consiste agrave deacuteterminer un nombre adeacutequat deguichets en fonction de la vitesse de remplissage drsquoune file drsquoattente afin de limiter le temps drsquoattente On deacutesignesouvent cette probleacutematique par un sigle du type MMS Le premier M signifie qursquoon suppose que la probabiliteacute quen personnes arrivent pendant une dureacutee t suit une loi de Poisson de paramegravetre λt Le second M signifie qursquoon supposeque le temps de traitement drsquoune personne par un guichetier suit une loi exponentielle de paramegravetre micro S deacutesigne lenombre de guichets Pour de tels problegravemes on cherche agrave deacuteterminer la probabiliteacute que le systegraveme (file drsquoattente +guichets) contienne n personnes De cette probabiliteacute on peut deacuteduire par exemple le temps drsquoattente moyen pour unepersonne qui entre dans la file drsquoattente On suppose que le systegraveme est stationnaire les probabiliteacutes ne deacutependent pasdu temps

Deacutefinition D1 loi de Poisson et loi exponentielleSi une variable X suit une loi de Poisson de paramegravete λt elle a pour densiteacute

P (X = n) =(λt)n

neminusλt (81)

Si une variable X suit une loi exponentielle de paramegravetre micro elle a pour densiteacute

f(t) = micro eminusmicrot et P (X ⩽ t) =

int t

0

micro eminusmicroxdx = 1minus eminusmicrot (82)

258 httpsfrwikipediaorgwikiDevenez_sorciers_devenez_savants

302 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

File drsquoattente cas MM1

On srsquointeacuteresse drsquoabord agrave un systegraveme MM1 Il nrsquoy a donc qursquoun seul guichet λ est le nombre moyen drsquoarriveacutee paruniteacute de temps tandis que micro est le nombre moyen de clients traiteacutes par uniteacute de temps On suppose eacutegalement queλ lt micro Dans le cas contraire la file drsquoattente devient infinie On deacutesigne par pn(t) la probabiliteacute que la file drsquoattentecontiennent n personne Que vaut cette probabiliteacute agrave lrsquoinstant t+ dt On considegravere que pendant la dureacutee t+dt au plus une personne peut srsquoajouter agrave la file drsquoattente et au plus une personnepeut ecirctre traiteacutee par un guichetier Les autres cas sont neacutegligeables On deacutesigne par B(x t dt) le fait qursquoune personnequitte un guichet pendant les instants t et t + dt sachant qursquoelle est arriveacutee au guichet agrave lrsquoinstant x On chercheagrave deacuteterminer la probabiliteacute P (B(x t dt)) On peut dire aussi que P (B(x t dt) est la probabiliteacute que le temps detraitement drsquoune personne est infeacuterieur agrave t+ dtminus x sachant qursquoil est supeacuterieur agrave tminus x Si D est une variable de dureacuteesuivant une loi exponentielle alors

P (B(x t dt)) = P (D ⩽ t+ dtminus x|D gt tminus x)

=P (t+ dtminus x ⩾ D gt tminus x)

P (D gt tminus x)

=

int t+dtminusx

tminusxmicroeminusmicrouduintinfin

tminusxmicroeminusmicroudu

=eminusmicro(tminusx) minus eminusmicro(tminusx+dt)

eminusmicro(tminusx)

= 1minus eminusmicrodt

P (B(x t dt)) = minusmicrodt+ o(dt)

Cette probabiliteacute ne deacutepend ni de x ni de t En ce qui concerne les arriveacutees la probabiliteacute qursquoune personne arrivependant les instants t et t + dt ne deacutepend pas du passeacute et suit une loi de Poisson de paramegravetre λ Cette constation etlrsquoeacutequation (832) nous permettent drsquoeacutecrire que

P (une personne arrive pendant dt) = λdt eminusλdt sim λdt+ o(dt) (83)P (une personne part pendant dt) = 1minus eminusmicrodt sim microdt+ o(dt) (84)

De plus pendant la dureacutee dt quatre cas sont possibles bull Une personne peut arriver sans qursquoaucune ne parte drsquoun guichetbull Une personne peut partir drsquoun guichet sans qursquoaucune autre nrsquoarrivebull Une personne peut arriver et une autre partir drsquoun guichetbull Aucune personne nrsquoarrive et aucune ne part drsquoun guichet

Ces quatre cas permettent drsquoeacutecrire la relation suivante

pn(t+ dt) = pnminus1(t) λdt+ pn+1(t) microdt+

pn(t) (microdtλdt) + pn(t) (1minus microdt) (1minus λdt)

On neacuteglige les termes du second degreacute en (dt)2

pn(t+ dt) = pnminus1(t) λdt+ pn+1(t) microdt+ pn(t) (1minus microdtminus λdt)

lArrrArr pn(t+ dt)minus pn(t)

dt= λpnminus1(t) + micropn+1(t)minus (micro+ λ) pn(t)

Cette relation nrsquoest vraie que lorsque n gt 0 lorsque n = 0 aucune personne deacutejagrave preacutesente ne peut ecirctre traiteacutee par unguichetier on a donc

p0(t+ dt)minus p0(t)

dt= microp1(t)minus λp0(t)

Comme le systegraveme est stationnaire toutes les deacuteriveacutees sont nulles Les probabiliteacutes ne deacutependent pas du temps Cecidonne les relations suivantes

λpnminus1 + micropn+1 minus (micro+ λ) pn = 0microp1 minus λp0 = 0

lArrrArr

micropn+1 = (micro+ λ) pn minus λ pnminus1

microp1 = λp0

83 File drsquoattente un petit exemple 303

Machine Learning Statistiques et Programmation Version 035930

On veacuterifie par reacutecurrence que

pn =

micro

)n

p0

Il reste agrave deacuteterminer p0 Or commesuminfin

0 pn = 1 = p0suminfin

0

(λmicro

)n on obtient que fracp_0 1 - fraclambdamu

= 1 Longleftrightarrow p_0 = 1 - fraclambdamuExemple On suppose qursquoun meacutedecin traite en moyenne quatre patients par heure tandis qursquoil accepte trois rendez-vous par heureDonc λ = 3 et micro = 4 Le nombre moyen n de patients dans sa salle drsquoattente est donneacute par

n =

infinsum0

npn =

(1minus λ

micro

) infinsum0

n

micro

)n

=

λmicro

1minus λmicro

microminus λ

Il y a donc en moyenne trois personnes dans la salle drsquoattente de ce meacutedecin Comme le temps moyen de traitement dechacun est 1

micro le temps moyen drsquoattente drsquoun patient arrivant dans la salle drsquoattente est λmicromicrominusλ Ce temps est eacutegal agrave trois

quarts drsquoheure pour cet exemple

File drsquoattente cas MMS

Le systegraveme contient doreacutenavant S guichets on suppose que la vitesse micro de traitement des clients est commune agrave tousles guichets On cherche tout drsquoabord la probabiliteacute qursquoune personne srsquoen aille parmi les k qui occupent un guichet Ondeacutesigne par (D1 Dk) k variables indeacutependantes suivant une loi exponentielle de paramegravetre micro pendant un tempsdt la probabiliteacute qursquoune personne parmi k quitte un guichet est

P (min D1 Dk ⩽ dt) = 1minus P (min D1 Dk gt dt)

= 1minus

[kprod

n=1

P (Dn gt dt)

]

= 1minus

[kprod

n=1

1minus P (Dn ⩽ dt)

]

= 1minus

[kprod

n=1

eminusmicrodt

]= 1minus eminuskmicrodt sim kmicrodt+ o(dt)

Pour deacuteterminer les probabiliteacutes (pn)n on applique le mecircme raisonnement que pour un systegravemeMM1 en distinguantles cas n ⩽ S et n gt S On adapte la reacutecurrence donneacutee par le systegraveme drsquoeacutequations (832) au cas MMS microp1 minus λp0 = 0

λpnminus1 + (n+ 1)micropn+1 minus (nmicro+ λ) pn = 0 si 1 ⩽ n lt Sλpnminus1 + Smicropn+1 minus (Smicro+ λ) pn = 0 si n ⩾ S

On suppose que λSmicro lt 1 afin que la file drsquoattente ne devienne infinie Comme pour un systegraveme MM1 ces formules

de reacutecurrences et le fait quesuminfin

0 pn = 1 permet de deacuteduire que

p0 =1

(λmicro )

S

S(1minus λSmicro )

+sumSminus1

k=1(λ

micro )n

n

pn =1

n

micro

)n

p0 si n lt S

pn =1

SnminusSS

micro

)n

p0 si n ⩾ S

304 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Ces calculs sont utiliseacutes pour optimiser le nombre de guichets Chaque guichetier a un coucirct qui doit ecirctre compareacute avecle coucirct associeacute au temps drsquoattente des clients Ces reacutesultats sont extraits du livre [Faure2000]

La theacuteorie des files drsquoattente remonte aux premiers travaux de K Erlang (1917) sur le calcul dunombre drsquoorganes de chaque type agrave installer dans un central teacuteleacutephonique automatique Deacuteveloppeacuteeaussi par Engset (1918) cette theacuteorie srsquoest amplifieacutee sous lrsquoimpulsion de nombreux chercheurs (E BorelD Kendall A Kolmogorov Khintchine LC Palm F Pollaczek L Feller ) Les informaticienslrsquoutilisent notamment pour lrsquoeacutevaluation de performances agrave titre preacutevisionnel des systegravemes ou des reacuteseauxinformatiques

Retour aux ampoules

La dureacutee de traitement drsquoun client fait penser agrave la dureacutee de vie drsquoune ampoule Les lampes font office de guichetstandis que le rocircle des clients est joueacute par des lumiegraveres Toutefois ce nrsquoest pas le temps drsquoattente moyen ni la longueurmoyenne de la file drsquoattente qui nous inteacuteresse mais en quelque sorte le nombre de clients qui sont traiteacutes pendant unedureacutee T En fait plus exactement crsquoest le nombre de guichets qui auront traiteacutes au moins un client pendant une dureacuteeT qui nous inteacuteresse Il correspond exactement au nombre drsquoampoules qui vont griller pendant cette mecircme peacuteriode T Il reste agrave deacutefinir ce qursquoest une file drsquoattente drsquoampoules et surtout son paramegravetre λLorsqursquoune ampoule grille elle est a priori changeacutee dans les plus brefs deacutelais comme si la file drsquoattente des ampouleseacutetait infinie Ceci signifie que λ gtgt micro configuration qui sort du champ drsquoapplication des files drsquoattente MMSLe paramegravetre λ nrsquoa a priori aucun rocircle agrave jouer On peut neacuteanmoins srsquoinspirer de la meacutethode deacuteveloppeacutee dans lesparagraphes preacuteceacutedants pour aborder le problegraveme des ampoulesOn suppose que la dureacutee de vie drsquoune ampoule suit toujours une loi exponentielle de paramegravetre micro et qursquoil y en aexactement S qui brillent en mecircme temps On note pn(t) la probabiliteacute que n ampoules aient grilleacutees agrave lrsquoinstant t SiN(t) est le nombre drsquoampoules grilleacutees agrave lrsquoinstant t pn(t) = P (N(t) = n) Cette fonction nrsquoest plus stationnaire etdeacutecroicirct avec le temps agrave partir drsquoun certain moment Plus on avance dans le temps plus le nombre drsquoampoules grilleacuteesaugmente Par conseacutequent la probabiliteacute qursquoil y ait n ampoules grilleacutees augmente tout drsquoabord puis agrave partir drsquounmoment t elle diminue On utilise un raisonnement similaire agrave celui qui a permis drsquoeacutecrire les eacutequations (832)(832) pour obtenir

pn(t+ dt) = (1minus Smicrodt) pn(t) + Smicropnminus1(t)dt

lArrrArr pn(t+ dt)minus pnminus1(t)

dt= minusSmicropn(t) + Smicropnminus1(t)

lArrrArr pprimen(t) = minusSmicropn(t) + Smicropnminus1(t)

On connaicirct la fonction p0(t) puisqursquoelle correspond agrave la probabiliteacute qursquoaucune des S ampoules nrsquoait grilleacute depuislrsquoinstant~0 jusqursquoagrave lrsquoinstant t par conseacutequent

p0(t) = P ( dureacutee de vie des S ampoules soient toutes supeacuterieures agrave t)

=rArr p0(t) =

[int infin

t

microeminusmicroudu

]S=rArr p0(t) = eminusSmicrot

Lrsquoeacutequation (832) permet de deacutefinir une suite drsquoeacutequations diffeacuterentielles du premier degreacute

p0(t) = eminusSmicrot

pprime1(t) = minusSmicrop1(t) + SmicroeminusSmicrot

pprime2(t) = minusSmicrop2(t) + p1(t)

pprimen(t) = minusSmicropn(t) + Smicropnminus1(t)

On peut donc calculer par reacutecurrence la suite de fonction (pn(t))n La solution de lrsquoeacutequation diffeacuterentielle homogegraveneest eminusSmicrot On utilise la meacutethode de la variation de la constante en posant pn(t) = Cn(t)e

minusSmicrot On aboutit agrave lrsquoeacutequation

83 File drsquoattente un petit exemple 305

Machine Learning Statistiques et Programmation Version 035930

pprimen(t) = minusSmicropn(t) + Smicropnminus1(t) = minusSmicropn(t) + C primen(t)e

minusSmicrot

=rArr C primen(t)e

minusSmicrot = Smicropnminus1(t)

=rArr C primen(t) = Smicropnminus1(t)e

Smicrot

Pour n = 1 on obtient C prime1(t) = Smicro =rArr C prime

1(t) = Smicrot + A1 Par conseacutequent p1(t) = (Smicrot+A1) eminusSmicrot On

sait que foralltsuminfin

0 pn(t) = 1 mais cela ne permet pas de deacuteterminer la constante A1 Neacuteanmoins en faisant tendret minusrarr 0 neacutecessairement p1(t) minusrarr 0 Par conseacutequent A1 = 0 et p1(t) = Smicrot eminusSmicrot On pose maintenantp2(t) = C2(t)e

minusSmicrot La reacutesolution de lrsquoeacutequation diffeacuterentielle (832) pour n = 2 aboutit agrave

C prime2(t) = Smicrop1(t)e

Smicrot = (Smicrot)2

=rArr C2(t) =1

2S2micro2t2 +A2

=rArr p2(t) =

(1

2S2micro2t2 +A2

)eminusSmicrot

De mecircme en faisant tendre t minusrarr 0 on deacutemontre que A2 = 0 En poursuivant ce raisonnement par reacutecurrence ondeacutemontre que

pn(t) =(Smicrot)

n

neminusSmicrot (85)

pn(t) = P (N(t) = n) et drsquoapregraves lrsquoeacutequation (85) la variable aleacuteatoire N(t) suit une loi de Poisson de paramegravetre SmicrotN est aussi appeleacute processus de Poisson259 Lrsquoespeacuterance de N est eacutegale agrave EN(t) = Smicrot Pendant une dureacutee T lenombre moyen drsquoampoules grilleacutees est

EN(t)minusN(tminus T ) = EN(T )minus EN(tminus T ) = SmicroT

Ce nombre est indeacutependant du temps t

Application numeacuterique

Pour des ampoules drsquoune dureacutee de 1000 heures le paramegravetre micro = 11000 T = 1 Srsquoil y a deux millions drsquoampoules le

nombre moyen drsquoampoules grilleacutees par heure est SmicroT = 2000 On retrouve le reacutesultat eacutenonceacute

833 Programme informatique

La dureacutee de vie de chaque ampoule suit une loi exponentielle de paramegravetre micro Il faut donc simuler une telle variabledont la fonction de reacutepartition est Fmicro(x) = 1 minus emicrox On utilise pour cela une proprieacuteteacute qui deacutecoule de la fonction dereacutepartition On note Fminus1

micro (x) = minus ln(1minusx)micro Cette fonction veacuterifie Fminus1

micro (Fmicro(x)) = 1 Or si U est une variable aleacuteatoireuniforme sur [0 1] alors la variable V = Fminus1

micro (U) suit la loi exponentielle avec micro pour paramegravetre EffectivementP (V ⩽ t) = P

(Fminus1micro (U) ⩽ t

)= P (U ⩽ Fmicro(t)) = Fmicro(x) La fonction de reacutepartition de la variable V est Fmicro V est

donc une loi exponentielle de paramegravetre micro La premiegravere fonction simule une variable exponentielle de paramegravetre micro ltltlt

import mathimport random

def generate_expo(mu)(suite sur la page suivante)

259 httpsfrwikipediaorgwikiProcessus_de_Poisson

306 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

x = 0while x == 0

x = randomrandom()y = - mathlog(1 - x) mureturn y

print(generate_expo(2))

gtgtgt

0760195985951345

Le module random260 propose aussi une fonction qui simule automatiquement une variable exponentielleltltlt

import random

def generate_expo(mu)return randomexpovariate(mu)

print(generate_expo(2))

gtgtgt

01480834222333039

Pour reacutealiser cette simulation on suppose qursquoon a un tableau de S ampoules Chaque case de ce tableau contient ladureacutee de vie restante drsquoune ampoule simuleacutee selon une loi exponentielle Au deacutepart toutes les dureacutees de vie sontnulles On considegravere qursquoagrave chaque iteacuteration une heure passe Lors de chaque iteacuteration pour chaque ampoule on veacuterifiesa dureacutee de vie restante Si celle-ci est nulle on la remplace par une autre dont on choisit aleacuteatoirement la dureacutee de vie(arrondie agrave lrsquoentier le plus proche) Si la dureacutee de vie nrsquoest pas nulle on la diminue drsquoune heure A chaque iteacuteration oncompte le nombre drsquoampoules grilleacutees pour en faire la moyenne au bout de n iteacuterations Pour effectuer cette simulationles valeurs choisies sont

S = 10000 micro =1

100 n = 500

Le programme suivant reacutealise cette simulation On calcule la moyenne du nombre drsquoampoules grilleacutees par heure surles 500 iteacuterations excepteacute la premiegravere pour laquelle toutes les ampoules sont grilleacutees - configuration aberrante ou toutdu moins tregraves peu probable - La valeur obtenue est proche de Smicro = 100

260 httpsdocspythonorg3libraryrandomhtml

83 File drsquoattente un petit exemple 307

Machine Learning Statistiques et Programmation Version 035930

834 Bibliographie

84 Optimisation avec donneacutees aleacuteatoires

bull Un problegraveme simple (page 308)bull Modeacutelisation de la demande (page 310)bull Variations saisonniegraveres et prolongations (page 312)bull Bibliographie (page 313)

841 Un problegraveme simple

Un supermarcheacute pourrait vendre en moyenne 80 poulets par semaine srsquoil pouvait savoir agrave lrsquoavance combien de pouletsagrave acheter pour satisfaire la demainde En reacutealiteacute le magasin se reacuteapprovisionne une fois par semaine et lorsque la fin dela semaine arrive tous les poulets invendus sont soldeacutes et supposeacutes vendus Le geacuterant du supermarcheacute voudrait savoirquel est le nombre optimal de poulets agrave commander chaque semaine On suppose que le prix drsquoun poulet agrave lrsquoachat estp son prix agrave la vente est q gt p son prix soldeacute est s Admettons que le supermarcheacute achegravete X poulets en vende aumieux N non soldeacutes et X minusN soldeacutes srsquoil en reste Pour calculer son beacuteneacutefice B il faut tenir compte de deux cas et dufait que le supermarcheacute ne peut pas vendre plus de poulets qursquoil nrsquoen a acheteacute

B = X(q minus p) si N ⩾ XB = N(q minus p) + (X minusN)(sminus p) = X(sminus p) +N(q minus s) si N lt X

On peut reacuteduire ces deux expressions agrave une seule en utilisant la fonction indicatrice

B = f(NX p q s) = X(q minus p)11N⩾X + [X(sminus p) +N(q minus s)] 11NltX

Si N eacutetait connu avec certitude il suffirait de choisir X = N ce serait la reacuteponse optimale mais le nombre de pouletsN vendus est inconnu car il varie chaque semaine Pour avoir une ideacutee plus preacutecise le geacuterant du supermarcheacute adeacutelibeacutereacutement acheteacute trop de poulets pendant plusieurs semaines Il srsquoest aperccedilu que la variable aleacuteatoire N suit une loide Poisson261 de paramegravetre λ = 80 On connaicirct seulement la probabiliteacute que N soit eacutegale agrave une valeur fixeacutee La figuresuivante montre lrsquoallure de cette distribution

P (X = i) = eminusλλi

i

Comme le nombre de poulets acheteacutes varie drsquoune semaine agrave lrsquoautre le beacuteneacutefice du supermarcheacute varie aussi drsquounesemaine agrave lrsquoautre Ce que le geacuterant veut optimiser crsquoest la somme de ses profits sur une anneacutee ce qui est eacutequivalentagrave maximiser la moyenne de ses profits chaque semaine Il faut donc chercher agrave maximiser lrsquoespeacuterence de la variablealeacuteatoire B agrave p q s constant puis agrave obtenir la valeur X ayant meneacute agrave ce maximum

maxX

EB = maxX

Ef(NX p q s) = maxX

infinsumi=0

f(NX p q s)P (N = i)

Etant donneacute la forme de la fonction f il nrsquoest pas eacutevident de construire une expression exacte de Xlowast deacutefini parmaxX Ef(NX p q s) = f(NXlowast p q s) Comme l = 80 drsquoapregraves la figure preacuteceacutedente on cherche Xlowast danslrsquoensemble 0 2l = 180 aller au delagrave de 180 est inutile tant la probabiliteacute est faible Il suffit de calculer f pourchacune de ces valeurs et de prendre celle qui permet drsquoobtenir le maximum Ces calculs longs et reacutepeacutetitifs vont ecirctreeffectueacutes par un programme informatique qui sera deacutecoupeacute en fonctions comme ceci

261 httpsfrwikipediaorgwikiLoi_de_Poisson

308 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Figure1 Ce graphe reacutepresente la fonction de densiteacute drsquoune loi de Poisson de paramegravetre 80 On observe que le pic estobtenu pour une valeur proche de 80 crsquoest la valeur la plus probable Ceci signifie que le nombre de poulets acheteacutes leplus probable est 80

fonction objectiffactorielle(x) calcule xprofit(NXpqs) calcule la fonction fproba_poisson(l i) calcule la probabiliteacute de Poisson connaissant λ et iesperance(Xpqsl) calcule lrsquoespeacuterance (sa moyenne) de la fonction fmaximum(pqsl) construit une liste de toutes les valeurs de ffind_maximum (res) cherche le maximum dans la liste retourneacutee par la fonction maximum

Le programme obtenu ressemble agrave pouletpy les derniegraveres lignes servent agrave tracer la courbe preacutesenteacutee par la figurequi suitltltlt

from mlstatpygardenpoulet import maximumres = maximum(2 5 1 80) res est la courbe afficheacutee plus basprint(res[4])

gtgtgt

[(0 00) (1 29999999999999942) (2 59999999999999885) (3 8999999999999975)]

84 Optimisation avec donneacutees aleacuteatoires 309

Machine Learning Statistiques et Programmation Version 035930

842 Modeacutelisation de la demande

La repreacutesentation de la demande est essentielle crsquoest elle qui deacutetermine le reacutesultat Il est possible de lrsquoaffiner commepar exemple supposer que certaines personnes achegravetent deux ou trois poulets et que la somme des poulets acheteacutes peutecirctre deacutecomposeacutee comme N = N1 + 2N2 + 3N3 ougrave Ni est le nombre de personnes achetant i poulets Dans ce casce nrsquoest plus N qui suit une loi de Poisson mais N1 N2 N3 qui suivent chacune des lois de Poisson de paramegravetresdiffeacuterents dont il faudra estimer les paramegravetresCette modification implique lrsquoeacutecriture drsquoune fonction proba_poisson_melange au lieu de proba_poisson Lademande nrsquoest plus une loi connue mais un meacutelange de lois connues dont la densiteacute nrsquoa pas drsquoexpression connue ilfaut la tabuler Pour cela on utilise deux proprieacuteteacutes sur les lois exponentielles

Theacuteoregraveme T1 simulation drsquoune loi quelconqueSoit F =

intf une fonction de reacutepartition de densiteacute f veacuterifiant f gt 0 soit U une variable aleacuteatoire uniformeacutement

distribueacutee sur [0 1] alors Fminus1(U) est variable aleacuteatoire de densiteacute f

La deacutemonstration est courte Soit X une variable aleacuteatoire de densiteacute f par deacutefinition P (X ⩽ x) = F (x) Soit Uune variable aleacuteatoire uniformeacutement distribueacute sur [0 1] alors

forallu isin [0 1] P (U ⩽ u) = u

lArrrArr P(Fminus1(U) ⩽ Fminus1(u)

)= u

lArrrArr P(Fminus1(U) ⩽ Fminus1(F (t))

)= F (t)

lArrrArr P(Fminus1(U) ⩽ t

)= F (t)

Si la fonction F nrsquoest pas strictement croissante on pourra prendre Fminus1(t) = inf u|F (u) ⩾ t Ce theacuteoregraveme seraappliqueacute agrave une loi exponentielle de paramegravetre λ La densiteacute drsquoune telle loi est f(x) = λ expminusλx F (x) =

int x

0f(t)dt =

1minus expminusλx On en deacuteduit que Fminus1(t) = minus ln(1minust)λ par conseacutequent minus ln(1minusU)

λ suit une loi exponentielle de paramegravetreλ si U est une loi uniforme sur [0 1]

Theacuteoregraveme T2 simulation drsquoune loi de PoissonOn deacutefinit une suite infinie (Xi)i gt 0 de loi exponentielle de paramegravetre λ On deacutefinit ensuite la seacuterie de variablesaleacuteatoires Si =

sumik=1 Xk et enfin N(t) = inf i|Si gt t Alors la variable aleacuteatoire N(t) suit une loi de Poisson de

paramegravetre λt

La loi exponentielle est souvent utiliseacutee pour modeacuteliser le temps drsquoattente drsquoun eacuteveacutenement comme le temps drsquoattentedrsquoun meacutetro une fois sur le quai On lrsquoutilise aussi pour modeacuteliser la dureacutee de vie drsquoun outil drsquoune ampoule parexemple La loi de Poisson peut par exemple modeacuteliser le nombre drsquoampoules neacutecessaire pour eacuteclairer une piegravecesur une certaine dureacutee Avant de deacutemontrer le theacuteoregraveme il faut deacutefinir drsquoabord la loi Gamma262 On pose aupreacutealable Γ(α) =

intinfin0

uαminus1eminusudu Une variable aleacuteatoire de loi Gamma de paramegravetres (α λ) a pour densiteacute f(x) = λα

Γ(α) tαminus1eminusλt La fonction Γ veacuterifie une proprieacuteteacute utile par la suite foralln isin Nlowast Γ(n) = (nminus 1)

Theacuteoregraveme T3 somme de loi exponentielle iidSoit X1 Xn n variables aleacuteatoires indeacutependantes et identiquement distribueacutees de loi Exp(λ) alors la sommesumn

k=1 Xk suit une loi Gamma(n λ)

La deacutemonstration utilise lrsquouniciteacute de la fonction caracteacuteristique EeiX Il suffit de deacutemonstrer que la fonctioncaracteacuteristique de la somme est celle drsquoune loi Gamma On suppose que X1 Xn suivent des lois exponentielles

262 httpsfrwikipediaorgwikiLoi_Gamma

310 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

de paramegravetre λ et Y suit une loi Gamma(n λ)

Eexp

(i

nsumk=1

Xk

)=

nprodk=1

EeiXk

=

[int infin

0

λeixeminusλxdx

]n= λn

[int infin

0

e(iminusλ)xdx

]n= λn

[minus 1

(iminus λ)

]n=

λminus i

]nEeiY =

int infin

0

λn

Γ(n)tnminus1eminusλteitdt =

int infin

0

λn

Γ(n)tnminus1e(iminusλ)tdt

=λn

Γ(n)

Γ(n)

(iminus λ)n=

λminus i

]nCes lignes deacutemontrent le theacuteoregraveme On deacutemontre maintenant simulation drsquoune loi de Poisson (page 310) Ladeacutemonstration repose sur le fait que P (N(t) ⩾ n)lArrrArr P (Sn ⩽ t) On en deacuteduit que

P (N(t) = n) = P (N(t) ⩾ n)minus P (N(t) ⩾ n+ 1) = P (Sn ⩽ t)minus P (Sn+1 ⩽ t)

Or drsquoapregraves le theacuteoregraveme somme de loi exponentielle iid (page 310) Sn suit une loi Gamma(n λ)

P (N(t) = n) =

int t

0

λn

Γ(n)unminus1eminusλuduminus

int t

0

λn+1

Γ(n+ 1)uneminusλudu

=

int t

0

[λn

(nminus 1)unminus1eminusλu minus λn+1

nuneminusλu

]du

=

[λn

nuneminusλu

]t0

= eminusλt (λt)n

n

Il suffit drsquoutiliser ce theacuteoregraveme pour simuler une loi de Poisson de paramegravetre λ ce que fait la fonction poisson suivanteltltlt

import randomimport math

def exponentielle(l)u = randomrandom()return -10 l mathlog(10 - u)

def poisson(l)s = 0i = 0while s lt= 1

s += exponentielle(l)i += 1

return i - 1

print(poisson(2))

gtgtgt

84 Optimisation avec donneacutees aleacuteatoires 311

Machine Learning Statistiques et Programmation Version 035930

2

On veacuterifie que cette meacutethode de simulation permet de retrouver les reacutesultats theacuteoriques Pour cela on effectue 1000tirages drsquoune variable suivant une loi de Poisson avec λ = 10 puis on compte le nombre de fois qursquoon obtient chaqueentier compris entre 0 et 40 La figure qui suit permet de comparer les reacutesultats obtenus

Figure2 Comparaison entre une fonction de densiteacute estimeacutee empiriquement pour la loi de Poisson de paramegravetre λ = 10

et sa densiteacute theacuteorique f(i) = eminusλ λi

i

On cherche maintenant agrave calculer les probabiliteacutes P (N = i) sachant que N = N1 + 2N2 + 3N3 et N1 sim P(48)N2 sim P(10) N3 sim P(4) Lrsquoaddition de deux lois de Poisson indeacutependantes est une loi de Poisson En revanchesi N1 suit une loi de Poisson 2N1 ne suit pas une loi de Poisson 2N1 est une variable paire crsquoest une proprieacuteteacute quinrsquoest jamais veacuterifieacutee par une loi de Poisson Il nrsquoexiste pas drsquoexpression eacutevidente pour la densiteacute du meacutelange N ilfaut donc simuler cette variable Crsquoest lrsquoobjectif de la fonction poisson_melange De la mecircme maniegravere on estimelrsquohistogramme du meacutelange avec cette fois-ci un plus grand nombre de tirages (10000) pour aboutir agrave la figure suivanteOn utilise ces eacuteleacutements pour modeacuteliser la demande de poulets selon ce meacutelange de lois Poisson Le premier programmeest modifieacute pour aboutir au suivant

843 Variations saisonniegraveres et prolongations

Les paragraphes preacuteceacutedents supposent que la demande est constante et ne deacutepend pas des saisons Cette affirmation estpeut-ecirctre vraie en ce concerne les poulets mais ce nrsquoest certainement pas le cas des huicirctres qui sont traditionnellementconsommeacutees en deacutecembre Appliqueacute agrave lrsquoexemple des poulets deacutecrits dans cet eacutenonceacute la loi de Poisson appliqueacutee agrave laconsommation deacutepend maintenant de la semaineTenir compte de la saisonnaliteacute nrsquoest pas forceacutement un problegraveme de modeacutelisation mais plutocirct drsquoestimation Au lieudrsquoavoir une seule consommation moyenne il y a en aura maintenant 52 Ceci implique drsquoavoir des donneacutees ennombre suffisant pour estimer les paramegravetres du modegravele la preacutecision des reacutesultats deacutepend de celle de lrsquoestimationIl est possible drsquoestimer seacutepareacutement les variations saisonniegraveres et la demande elle-mecircme mais la preacutesentation de cestechniques deacutepassent le cadre de ce livre il est preacutefeacuterable de se reporter agrave [Gourieacuteroux1983] ou [Saporta2006]Les poulets soldeacutes ne sont pas plus mauvais que les poulets non soldeacutes bien que la date de peacuteremption soit certainementplus rapprocheacutee de la date drsquoachat On suppose qursquoun geacuterant concurrent de ce supermarcheacute a eu vent de la techniquedrsquooptimisation du magasin il connaicirct eacutegalement le prix du poulet et son prix soldeacute Il a eacutegalement accegraves au prixdrsquoachat puisqursquoil se fournit chez les mecircmes agriculteurs Il lui reste agrave connaicirctre le nombre de poulets commandeacutes etune estimation de la demande pour savoir si les poulets de son concurrents se vendent mieux que les siens Il se renddans le supermarcheacute concurrent tous les jours ougrave les poulets sont soldeacutes et les comptent Il voudrait pouvoir en deacuteduirele nombre de poulets vendus

312 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Figure3 Dans le cas du meacutelange de lois Poisson le maximum est cette-fois ci obtenu pour 87 poulets et est de 225euros Ces reacutesultats sont leacutegegraverement diffeacuterents de ceux obtenus par une simple loi Poisson (80)

844 Bibliographie

85 Le gradient et le discret

Les meacutethodes drsquooptimisation agrave base de gradient srsquoappuie sur une fonction drsquoerreur deacuterivable qursquoon devrait appliquer depreacutefeacuterence sur des variables aleacuteatoires reacuteelles Ce notebook explore quelques ideacutees

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Un petit problegraveme simple (page 314)bull Multiplication des observations (page 314)bull Introduire du bruit (page 316)bull Comparaisons de plusieurs modegraveles (page 317)bull Avec une ACP (page 318)bull Base drsquoapprentissage et de test (page 319)bull Petite explication (page 322)

85 Le gradient et le discret 313

Machine Learning Statistiques et Programmation Version 035930

851 Un petit problegraveme simple

On utilise le jeu de donneacutees iris disponible dans scikit-learn263

from sklearn import datasets

iris = datasetsload_iris()X = irisdata[ 2] we only take the first two featuresY = iristarget

On cale une reacutegression logistique On ne distingue pas apprentissage et test car ce nrsquoest pas le propos de ce notebook

from sklearnlinear_model import LogisticRegressionclf = LogisticRegression(multi_class=ovr solver=liblinear)clffit(X Y)

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovrn_jobs=None penalty=l2 random_state=None solver=liblineartol=00001 verbose=0 warm_start=False)

Puis on calcule la matrice de confusion

from sklearnmetrics import confusion_matrixpred = clfpredict(X)confusion_matrix(Y pred)

array([[49 1 0][ 2 21 27][ 1 4 45]] dtype=int64)

852 Multiplication des observations

Le paramegravetre multi_class=ovr stipule que le modegravele cache en fait lrsquoestimation de 3 reacutegressions logistiques binaireEssayons de nrsquoen faire qursquoune seule en ajouter le label Y aux variables Soit un couple (Xi isin R Yi isin N) qui correspondagrave une observation pour un problegraveme multi-classe Comme il y a C classes on multiplie cette ligne par le nombre declasses C pour obtenir

forallc isin [1 C]

X primei = (Xi1 Xid Yi1 YiC)

Y primei = 11Yi=c

Yik = 11c=k

Voyons ce que cela donne sur un exemple

import numpyimport pandas

def multiplie(X Y classes=None)if classes is None

classes = numpyunique(Y)XS = []YS = []

(suite sur la page suivante)

263 httpscikit-learnorgstableauto_examplesdatasetsplot_iris_datasethtml

314 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

for i in classesX2 = numpyzeros((Xshape[0] 3))X2[i] = 1Yb = Y == iXSappend(numpyhstack([X X2]))Yb = Ybreshape((len(Yb) 1))YSappend(Yb)

Xext = numpyvstack(XS)Yext = numpyvstack(YS)return Xext Yext

x y = multiplie(X[1] Y[1] [0 1 2])df = pandasDataFrame(numpyhstack([x y]))dfcolumns = [X1 X2 Y0 Y1 Y2 Y]df

Trois colonnes ont eacuteteacute ajouteacutees cocircteacute X la ligne a eacuteteacute multiplieacutee 3 fois la derniegravere colonne est Y qui ne vaut 1 quelorsque le 1 est au bon endroit dans une des colonnes ajouteacutees Le problegraveme de classification qui eacuteteacute de preacutedire labonne classe devient est-ce la classe agrave preacutedire est k On applique cela sur toutes les lignes de la base et cela donne

Xext Yext = multiplie(X Y)numpyhstack([Xext Yext])df = pandasDataFrame(numpyhstack([Xext Yext]))dfcolumns = [X1 X2 Y0 Y1 Y2 Y]dfiloc[numpyrandompermutation(dfindex) ]head(n=10)

from sklearnensemble import GradientBoostingClassifierclf = GradientBoostingClassifier()clffit(Xext Yextravel())

GradientBoostingClassifier(criterion=friedman_mse init=Nonelearning_rate=01 loss=deviance max_depth=3max_features=None max_leaf_nodes=Nonemin_impurity_decrease=00 min_impurity_split=Nonemin_samples_leaf=1 min_samples_split=2min_weight_fraction_leaf=00 n_estimators=100n_iter_no_change=None presort=auto random_state=Nonesubsample=10 tol=00001 validation_fraction=01verbose=0 warm_start=False)

pred = clfpredict(Xext)confusion_matrix(Yext pred)

array([[278 22][ 25 125]] dtype=int64)

85 Le gradient et le discret 315

Machine Learning Statistiques et Programmation Version 035930

853 Introduire du bruit

Un des problegravemes de cette meacutethode est qursquoon ajoute une variable binaire pour un problegraveme reacutesolu agrave lrsquoaide drsquouneoptimisation agrave base de gradient Crsquoest moyen Pas de problegraveme changeons un peu la donne

def multiplie_bruit(X Y classes=None)if classes is None

classes = numpyunique(Y)XS = []YS = []for i in classes

X2 = numpyrandomrandn((Xshape[0] 3))reshape(Xshape[0] 3) 01X2 = numpyrandomrandom((Xshape[0] 3)) 02X2[i] += 1Yb = Y == iXSappend(numpyhstack([X X2]))Yb = Ybreshape((len(Yb) 1))YSappend(Yb)

Xext = numpyvstack(XS)Yext = numpyvstack(YS)return Xext Yext

x y = multiplie_bruit(X[1] Y[1] [0 1 2])df = pandasDataFrame(numpyhstack([x y]))dfcolumns = [X1 X2 Y0 Y1 Y2 Y]df

Le problegraveme est le mecircme qursquoavant excepteacute les variables Yi qui sont maintenant reacuteel Au lieu drsquoecirctre nul on prend unevaleur Yi lt 04

Xextb Yextb = multiplie_bruit(X Y)df = pandasDataFrame(numpyhstack([Xextb Yextb]))dfcolumns = [X1 X2 Y0 Y1 Y2 Y]dfiloc[numpyrandompermutation(dfindex) ]head(n=10)

from sklearnensemble import GradientBoostingClassifierclfb = GradientBoostingClassifier()clfbfit(Xextb Yextbravel())

GradientBoostingClassifier(criterion=friedman_mse init=Nonelearning_rate=01 loss=deviance max_depth=3max_features=None max_leaf_nodes=Nonemin_impurity_decrease=00 min_impurity_split=Nonemin_samples_leaf=1 min_samples_split=2min_weight_fraction_leaf=00 n_estimators=100n_iter_no_change=None presort=auto random_state=Nonesubsample=10 tol=00001 validation_fraction=01verbose=0 warm_start=False)

predb = clfbpredict(Xextb)confusion_matrix(Yextb predb)

316 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

array([[299 1][ 10 140]] dtype=int64)

Crsquoest un petit peu mieux

854 Comparaisons de plusieurs modegraveles

On cherche maintenant agrave comparer le gain en introduisant du bruit pour diffeacuterents modegraveles

def error(model x y)p = modelpredict(x)cm = confusion_matrix(y p)return (cm[10] + cm[01]) cmsum()

def comparaison(model X Y)

if isinstance(model tuple)clf = model[0](model[1])clfb = model[0](model[1])model = model[0]

elseclf = model()clfb = model()

Xext Yext = multiplie(X Y)clffit(Xext Yextravel())err = error(clf Xext Yext)

Xextb Yextb = multiplie_bruit(X Y)clfbfit(Xextb Yextbravel())errb = error(clfb Xextb Yextb)return dict(model=model__name__ err1=err err2=errb)

from sklearnlinear_model import LogisticRegressionfrom sklearntree import DecisionTreeClassifier ExtraTreeClassifierfrom sklearnensemble import RandomForestClassifier ExtraTreesClassifierrarrAdaBoostClassifierfrom sklearnneural_network import MLPClassifierfrom sklearnnaive_bayes import GaussianNBfrom sklearnneighbors import KNeighborsClassifier RadiusNeighborsClassifierfrom xgboost import XGBClassifier

models = [(LogisticRegression dict(multi_class=ovr solver=liblinear))GradientBoostingClassifier(RandomForestClassifier dict(n_estimators=20))DecisionTreeClassifierExtraTreeClassifierXGBClassifier(ExtraTreesClassifier dict(n_estimators=20))(MLPClassifier dict(activation=logistic))GaussianNB KNeighborsClassifier(AdaBoostClassifier dict(base_estimator=LogisticRegression(multi_class=ovr

rarrsolver=liblinear)(suite sur la page suivante)

85 Le gradient et le discret 317

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

algorithm=SAMME))]

res = [comparaison(model X Y) for model in models]df = pandasDataFrame(res)dfsort_values(model)

err1 correspond agrave Y0 Y1 Y2 binaire err2 aux mecircmes variables mais avec un peu de bruit Lrsquoajout ne semble pasfaire deacutecroicirctre la performance et lrsquoameacuteliore dans certains cas Crsquoest une piste agrave suivre Reste agrave savoir si les modegravelesnrsquoapprennent pas le bruit

855 Avec une ACP

On peut faire varier le nombre de composantes jrsquoen ai gardeacute qursquoune LrsquoACP est appliqueacutee apregraves avoir ajouteacute les variablesbinaires ou binaires bruiteacutees Le reacutesultat est sans eacutequivoque Aucun modegravele ne parvient agrave apprendre sans lrsquoajout debruit

from sklearndecomposition import PCA

def comparaison_ACP(model X Y)

if isinstance(model tuple)clf = model[0](model[1])clfb = model[0](model[1])model = model[0]

elseclf = model()clfb = model()

axes = 1solver = fullXext Yext = multiplie(X Y)Xext = PCA(n_components=axes svd_solver=solver)fit_transform(Xext)clffit(Xext Yextravel())err = error(clf Xext Yext)

Xextb Yextb = multiplie_bruit(X Y)Xextb = PCA(n_components=axes svd_solver=solver)fit_transform(Xextb)clfbfit(Xextb Yextbravel())errb = error(clfb Xextb Yextb)return dict(modelACP=model__name__ errACP1=err errACP2=errb)

res = [comparaison_ACP(model X Y) for model in models]dfb = pandasDataFrame(res)pandasconcat([ dfsort_values(model) dfbsort_values(modelACP)] axis=1)

318 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

856 Base drsquoapprentissage et de test

Cette fois-ci on srsquointeacuteresse agrave la qualiteacute des frontiegraveres que les modegraveles trouvent en veacuterifiant sur une base de test quelrsquoapprentissage srsquoest bien passeacute

from sklearnmodel_selection import train_test_split

def comparaison_train_test(models X Y mbruit=multiplie_bruit acp=None)

axes = acpsolver = full

ind = numpyrandompermutation(numpyarange(Xshape[0]))X = X[ind]Y = Y[ind]X_train X_test Y_train Y_test = train_test_split(X Y test_size=13)

res = []for model in models

if isinstance(model tuple)clf = model[0](model[1])clfb = model[0](model[1])model = model[0]

elseclf = model()clfb = model()

Xext_train Yext_train = multiplie(X_train Y_train)Xext_test Yext_test = multiplie(X_test Y_test)if acp

Xext_train_ = Xext_trainXext_test_ = Xext_testacp_model = PCA(n_components=axes svd_solver=solver)fit(Xext_train)Xext_train = acp_modeltransform(Xext_train)Xext_test = acp_modeltransform(Xext_test)

clffit(Xext_train Yext_trainravel())

err_train = error(clf Xext_train Yext_train)err_test = error(clf Xext_test Yext_test)

Xextb_train Yextb_train = mbruit(X_train Y_train)Xextb_test Yextb_test = mbruit(X_test Y_test)if acp

acp_model = PCA(n_components=axes svd_solver=solver)fit(Xextb_train)Xextb_train = acp_modeltransform(Xextb_train)Xextb_test = acp_modeltransform(Xextb_test)Xext_train = acp_modeltransform(Xext_train_)Xext_test = acp_modeltransform(Xext_test_)

clfbfit(Xextb_train Yextb_trainravel())

errb_train = error(clfb Xextb_train Yextb_train)errb_train_clean = error(clfb Xext_train Yext_train)

(suite sur la page suivante)

85 Le gradient et le discret 319

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

errb_test = error(clfb Xextb_test Yextb_test)errb_test_clean = error(clfb Xext_test Yext_test)

resappend(dict(modelTT=model__name__ err_train=err_train err2_train=errb_rarrtrain

err_test=err_test err2_test=errb_test err2b_test_clean=errb_test_cleanerr2b_train_clean=errb_train_clean))

dfb = pandasDataFrame(res)dfb = dfb[[modelTT err_train err2_train err2b_train_clean err_test

rarrerr2_test err2b_test_clean]]dfb = dfbsort_values(modelTT)return dfb

dfb = comparaison_train_test(models X Y)dfb

Les colonnes err2b_train_clean et err2b_test_clean sont les erreurs obtenues par des modegraveles appris sur des colonnesbruiteacutees et testeacutees sur des colonnes non bruiteacutees ce qui est le veacuteritable test On srsquoaperccediloit que les performances sonttregraves deacutegradeacutees sur la base drsquotest Une raison est que le bruit choisi ajouteacute nrsquoest pas centreacute Corrigeons cela

def multiplie_bruit_centree(X Y classes=None)if classes is None

classes = numpyunique(Y)XS = []YS = []for i in classes

X2 = numpyrandomrandn((Xshape[0] 3))reshape(Xshape[0] 3) 01X2 = numpyrandomrandom((Xshape[0] 3)) 02 - 01X2[i] += 1Yb = Y == iXSappend(numpyhstack([X X2]))Yb = Ybreshape((len(Yb) 1))YSappend(Yb)

Xext = numpyvstack(XS)Yext = numpyvstack(YS)return Xext Yext

dfb = comparaison_train_test(models X Y mbruit=multiplie_bruit_centree acp=None)dfb

Crsquoest mieux mais on en conclut que dans la plupart des cas la meilleure performance sur la base drsquoapprentissage avecle bruit ajouteacute est due au fait que les modegraveles apprennent par coeur Sur la base de test les performances ne sont pasmeilleures Une erreur de 33 signifie que la reacuteponse du classifieur est constante On multiplie les exemples

def multiplie_bruit_centree_duplique(X Y classes=None)if classes is None

classes = numpyunique(Y)XS = []YS = []for i in classes

(suite sur la page suivante)

320 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

for k in range(05)X2 = numpyrandomrandn((Xshape[0] 3))reshape(Xshape[0] 3) 03X2 = numpyrandomrandom((Xshape[0] 3)) 08 - 04X2[i] += 1Yb = Y == iXSappend(numpyhstack([X X2]))Yb = Ybreshape((len(Yb) 1))YSappend(Yb)

Xext = numpyvstack(XS)Yext = numpyvstack(YS)return Xext Yext

dfb = comparaison_train_test(models X Y mbruit=multiplie_bruit_centree_dupliquerarracp=None)dfb

Cela fonctionne un peu mieux le fait drsquoajouter du hasard ne permet pas drsquoobtenir des gains significatifs agrave part pour lemodegravele SVC264

def multiplie_bruit_centree_duplique_rebalance(X Y classes=None)if classes is None

classes = numpyunique(Y)XS = []YS = []for i in classes

X2 = numpyrandomrandom((Xshape[0] 3)) 08 - 04X2[i] += 1 ((i 2) 2 - 1)Yb = Y == iXSappend(numpyhstack([X X2]))Yb = Ybreshape((len(Yb) 1))YSappend(Yb)

Xext = numpyvstack(XS)Yext = numpyvstack(YS)return Xext Yext

dfb = comparaison_train_test(models X Y mbruit=multiplie_bruit_centree_duplique_rarrrebalance)dfb

264 httpscikit-learnorgstablemodulesgeneratedsklearnsvmSVChtml

85 Le gradient et le discret 321

Machine Learning Statistiques et Programmation Version 035930

857 Petite explication

Dans tout le notebook le score de la reacutegression logistique est nul Elle ne parvient pas agrave apprendre tout simplementparce que le problegraveme choisi nrsquoest pas lineacuteaire seacuteparable Srsquoil lrsquoeacutetait cela voudrait dire que le problegraveme suivant lrsquoestaussi

M = numpyzeros((9 6))Y = numpyzeros((9 1))for i in range(0 9)

M[i i3] = 1M[i i3+3] = 1Y[i] = 1 if i3 == i3 else 0

MY

(array([[1 0 0 1 0 0][1 0 0 0 1 0][1 0 0 0 0 1][0 1 0 1 0 0][0 1 0 0 1 0][0 1 0 0 0 1][0 0 1 1 0 0][0 0 1 0 1 0][0 0 1 0 0 1]]) array([[1][0][0][0][1][0][0][0][1]]))

clf = LogisticRegression(multi_class=ovr solver=liblinear)clffit(M Yravel())

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovrn_jobs=None penalty=l2 random_state=None solver=liblineartol=00001 verbose=0 warm_start=False)

clfpredict(M)

array([0 0 0 0 0 0 0 0 0])

A revisiter

322 Chapter 8 Peacutereacutegrinations

CHAPTER 9

Galleries

91 Gallery of examples

911 Arbre drsquoindeacutecision

La construction drsquoun arbre de deacutecision appliqueacute agrave une classification binaire suppose qursquoon puisse deacuteterminer un seuilqui seacutepare les deux classes ou tout du moins qui aboutisse agrave deux sous-ensemble dans lesquels une classe est majoritaireMais certains cas crsquoest une chose compliqueacutee

bull Un cas simple et un cas compliqueacute (page 323)ndash Seuil de deacutecision (page 324)

Un cas simple et un cas compliqueacute

Il faut choisir un seuil sur lrsquoaxe des abscisses qui permette de classer le jeu de donneacutees

import numpyimport matplotlibpyplot as pltfrom pandas import DataFrame

def random_set_1d(n kind)x = numpyrandomrand(n) 3 - 1if kind

y = numpyempty(xshape dtype=numpyint32)y[x lt 0] = 0y[(x gt= 0) amp (x lt= 1)] = 1y[x gt 1] = 0

elsey = numpyempty(xshape dtype=numpyint32)

(suite sur la page suivante)

323

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

y[x lt 0] = 0y[x gt= 0] = 1

x2 = numpyrandomrand(n)return numpyvstack([x x2])T y

def plot_ds(X y ax=None title=None)if ax is None

ax = pltgca()axscatter(X[ 0] X[ 1] c=y s=20 edgecolor=k lw=05)if title is not None

axset_title(title)return ax

X1 y1 = random_set_1d(1000 False)X2 y2 = random_set_1d(1000 True)

fig ax = pltsubplots(1 2 figsize=(12 6) sharey=True)plot_ds(X1 y1 ax=ax[0] title=easy)plot_ds(X2 y2 ax=ax[1] title=difficult)

Out

ltAxesSubplottitle=centerdifficultgt

Seuil de deacutecision

Les arbres de deacutecision utilisent comme critegravere le critegravere de Gini265 ou liquestentropie266 Lrsquoapprentissage drsquoune reacutegressionlogistique srsquoappuie sur la log-vraisemblance (page 185) du jeu de donneacutees On regarde lrsquoeacutevolution de ces critegraveres enfonction des diffeacuterents seuils possibles

def plog2(p)if p == 0

return 0return p numpylog(p) numpylog(2)

def logistic(x)return 1 (1 + numpyexp(-x))

def likelihood(x y theta=1 th=0)lr = logistic((x - th) theta)return y lr + (1 - y) (1 - lr)

def criteria(X y)res = numpyempty((Xshape[0] 8))

(suite sur la page suivante)

265 httpsfrwikipediaorgwikiArbre_de_dC3A9cision_(apprentissage)Cas_des_arbres_de_classification266 httpsfrwikipediaorgwikiEntropie_de_Shannon

324 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

res[ 0] = X[ 0]res[ 1] = yorder = numpyargsort(res[ 0])res = res[order ]copy()x = res[ 0]copy()y = res[ 1]copy()

for i in range(1 resshape[0] - 1) ginip1 = numpysum(y[i]) ip2 = numpysum(y[i]) (yshape[0] - i)res[i 2] = p1res[i 3] = p2res[i 4] = 1 - p12 - (1 - p1)2 + 1 - p22 - (1 - p2)2res[i 5] = - plog2(p1) - plog2(1 - p1) - plog2(p2) - plog2(1 - p2)th = x[i]res[i 6] = logistic(th 10)res[i 7] = numpysum(likelihood(x y 10 th)) resshape[0]

return DataFrame(res[1-1] columns=[X y p1 p2 Gini Gain lr LL-10])

X1 y1 = random_set_1d(1000 False)X2 y2 = random_set_1d(1000 True)

df = criteria(X1 y1)print(dfhead())

Out

X y p1 p2 Gini Gain lr LL-100 -0997743 00 00 0660661 0448376 0924185 0000046 06869061 -0991923 00 00 0661323 0447950 0923547 0000049 06880352 -0987839 00 00 0661986 0447521 0922906 0000051 06888473 -0987460 00 00 0662651 0447090 0922260 0000051 06889234 -0987248 00 00 0663317 0446655 0921610 0000052 0688965

Et visuellement

def plot_ds(X y ax=None title=None)if ax is None

ax = pltgca()axscatter(X[ 0] X[ 1] c=y s=20 edgecolor=k lw=05)if title is not None

axset_title(title)return ax

df1 = criteria(X1 y1)df2 = criteria(X2 y2)

fig ax = pltsubplots(1 2 figsize=(12 6) sharey=True)plot_ds(X1 y1 ax=ax[0] title=easy)

(suite sur la page suivante)

91 Gallery of examples 325

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

plot_ds(X2 y2 ax=ax[1] title=difficult)df1plot(x=X y=[Gini Gain LL-10 p1 p2] ax=ax[0] lw=5)df2plot(x=X y=[Gini Gain LL-10 p1 p2] ax=ax[1] lw=5)

Out

ltAxesSubplottitle=centerdifficult xlabel=Xgt

Le premier exemple est le cas simple et tous les indicateurs trouvent bien la fontiegravere entre les deux classes comme unextremum sur lrsquointervalle consideacutereacute Le second cas est lineacuteairement non seacuteparable Aucun des indicateurs ne sembletrouver une des deux frontiegraveres La log-vraisemblance montre deux maxima Lrsquoun est bien situeacute sur une frontiegraverele second est situeacute agrave une extreacutemiteacute de lrsquointervalle ce qui revient agrave construire un classifier qui retourneacute une reacuteponseconstante Crsquoest donc inutileTotal running time of the script ( 0 minutes 2776 seconds)

92 Galleries

Notebooks Coverage (page 380)

bull Le petit coin des data scientists (page 326)bull Images (page 332)bull Meacutetriques (page 332)bull Machine Learning (page 339)bull NLP - Natural Language Processing (page 355)

921 Le petit coin des data scientists

Ce sont quelques notebooks sur des points particuliers qui surgissent au quotidien quand on traite des donneacutees

Classification multiple

Explorations autour drsquoun problegraveme de classification multiple

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Deacutebut de lrsquohistoire (page 327)ndash Confusions (page 327)ndash Clustering (page 327)

bull Mise en pratique (page 328)

326 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Deacutebut de lrsquohistoire

11yi

Confusions

Un des premiers reacuteflexes apregraves avoir appris une classification multi-classe est de regarder la matrice de confusion267Certaines classes sont difficiles agrave classer drsquoautres non Je me demandais srsquoil existait un moyen de deacuteterminer cela sansapprendre un classifieur On souhaite apprendre la classification des points (Xi yi) Xi est un vecteur yi la classeattendue Si yi est la classe preacutedite lrsquoerreur de classification est

E =sumi

11yi =yi

On note cij = 11yi=j et cij = 11yi=j On note le vecteur Cj = (cij)i et Cj = (cij)i On peut reacuteeacutecrire lrsquoerreur comme

E =sumij

11yi=j11yi =j =sumij

11yi=j(1minus 11yi=j) =sumij

cij(1minus cij) =sumj

lt Cj 1minus Cj gt

Crsquoest aussi eacutegal agrave

E =sumk =j

lt Cj Ck gt

Et lt Cj Ck gt correspond au nombre drsquoerreurs de confusion le nombre drsquoeacuteleacutements de la classe j classeacutes dans laclasse k lt Cj Ck gt est le nombre drsquoeacuteleacutements correctement classeacutes dans la classe j On peut montrer quesum

kj

lt Cj Ck gt= N

ougrave N est le nombre drsquoobservations

Clustering

Et si nous introduisions un clustering intermeacutediaire On construit Q cluster qi est le cluster du point Xi et on notedil = 11qi=l et le vecteur Dl = (dil)i

E =sumk =j

lt Cj Ck gt

On note XY le produit terme agrave terme de deux vecteurs

E =sumk =jl

lt Cj Dl Ck gt=sumk =jl

lt Cj Dl CkDl gt

Le nombre drsquoerreurs est la somme des erreurs faites sur chaque cluster Supposons maintenant qursquoun classifieur retourneune reacuteponse constante sur chacun des clusters on choisit la classe plus repreacutesenteacutee Ca ressemble beaucoup agrave unclassifieur bayeacutesien268 On note f(l) cette classe la plus repreacutesenteacutee Elle veacuterifie

f(l) = argmaxj

lt Cj Dl gt

267 httpsfrwikipediaorgwikiMatrice_de_confusion268 httpscikit-learnorgstablemodulesnaive_bayeshtml

92 Galleries 327

Machine Learning Statistiques et Programmation Version 035930

Cela signifie que cij =sum

l 11j=f(l)dil Si on note l(i) le cluster associeacute agrave i On continue cij = 11j=f(l(i)) On deacutefinitlrsquoerreur e(l) lrsquoerreur de classification faite sur chaque cluster l

e(l) =sumi

dilsumj

cij(1minus 11j=f(l)) =sumi

dil

sumj

cij minussumj

cij11j=f(l)

=sumi

dil(1minus cif(l)

)=sumi

dil minussumi

dilcif(l)

Pour reacutesumer lrsquoerreur est le nombre drsquoeacuteleacutements moins le nombre drsquoeacuteleacutements dans la classe majoritaire du cluster Sile nombre de clusters Q devient supeacuterieur ou eacutegal au nombre drsquoobservations cette erreur devient nulle

Mise en pratique

Lrsquoideacutee est de voir comment eacutevolue cette erreur de classification naiumlve en fonction du nombre de clusters La diffeacuterencepar rapport agrave un classifieur est qursquoon sait comment sont fabriqueacutes les clusters et qursquoon peut imaginer les classes commeun assemblage de clusters drsquoune forme connue

File drsquoattente un exemple simple

Cet exemple vient illustrer le paragraphe sur les files drsquoattente et lrsquoespeacuterance de vie des ampoules

matplotlib inline

import mathimport random

def generate_expo(mu)return randomexpovariate(mu)

generate_expo(2)

00749720223112896

Les paramegravetres de la simulation

S = 10000iteration = 500mu = 10 100

On creacutee un tableau de S ampoules qui contient la dureacutee de vie restante de chaque ampoule

ampoule = [0 for a in range(0S)]moyenne_grille = 0stats = []

for i in range(0iteration)grille = 0mean = 0

for n in range(0S)mean += ampoule[n]if ampoule[n] == 0

remplacement dune ampoule grilleacutee(suite sur la page suivante)

328 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

grille += 1 on deacutetermine la dureacutee de vie de cette ampoule on arrondit agrave lentier le plus procheampoule[n] = int (generate_expo(mu))

else on enlegraveve une heure agrave la dureacutee de vie de lampouleampoule[n] -= 1

mean = S

statsappend(dict(i=i mean=mean grille=grille))

if i gt 0moyenne_grille += grille

if i 100 == 0print(iteacuteration i moyenne dureacutee mean grilleacutees grille)

moyenne_grille = float (moyenne_grille) float (iteration - 1)print(nombre moyen dampoules grilleacutees moyenne_grille)

iteacuteration 0 moyenne dureacutee 00 grilleacutees 10000iteacuteration 100 moyenne dureacutee 997184 grilleacutees 95iteacuteration 200 moyenne dureacutee 987154 grilleacutees 93iteacuteration 300 moyenne dureacutee 992155 grilleacutees 101iteacuteration 400 moyenne dureacutee 989101 grilleacutees 108nombre moyen dampoules grilleacutees 9988577154308618

import pandasdf = pandasDataFrame(stats)df = df[[i mean grille]]df[grille_sum] = df[grille]cumsum() - 10000dfhead()

import matplotlibpyplot as pltfig ax = pltsubplots(3 1 figsize=(148))df[1]plot(x=i y=mean label=dureacutee de vie moyenne restante ax=ax[0])df[1]plot(x=i y=grille label=ampoules grilleacutees ce jour ax=ax[1])df[2]plot(x=i y=grille_sum label=total des ampoules grilleacutees ax=ax[2])ax[0]set_xlabel(dureacutee)

ltmatplotlibtextText at 0x1e2155ce4a8gt

92 Galleries 329

Machine Learning Statistiques et Programmation Version 035930

330 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Classification multiple(page 326)

Explorations autour drsquoun problegraveme de classification multiple

Correacutelations nonlineacuteaires (page 282)

Les correacutelations indiquent si deux variables sont lineacuteairementeacutequivalentes Comment eacutetendre cette notion agrave des variables lieacuteesmais pas de faccedilon lineacuteaire

File drsquoattente unexemple simple(page 328)

Cet exemple vient illustrer le paragraphe sur les files drsquoattente etlrsquoespeacuterance de vie des ampoules

Le gradient et lediscret (page 313)

Les meacutethodes drsquooptimisation agrave base de gradient srsquoappuie sur une fonctiondrsquoerreur deacuterivable qursquoon devrait appliquer de preacutefeacuterence sur des variablesaleacuteatoires reacuteelles Ce notebook explore quelques ideacutees

Reacutegression lineacuteaire(page 107)

Ce notebook srsquointeacuteresse agrave la faccedilon drsquointerpreacuteter les reacutesultats drsquounereacutegression lineacuteaire lorsque les variables sont correacuteleacutees puis il explore unefaccedilon drsquoassocier arbre de deacutecision et reacutegression lineacuteaire pour construireune reacutegression lineacuteaire par morceaux

Reacutegression quantileillustreacutee (page 125)

La reacutegression quantile est moins sensible aux points aberrants Elle peutecirctre deacutefinie comme une reacutegression avec une norme L1 (une valeur absolue)Ce notebook explore des reacutegressions avec des quantiles diffeacuterents

Reacutepartir en basedrsquoapprentissage et detest (page 267)

Crsquoest un problegraveme plutocirct facile puisqursquoil srsquoagit de reacutepartir aleacuteatoirement leslignes drsquoune base de donneacutees drsquoun cocircteacute ou de lrsquoautre Lorsque le problegravemede machine learning agrave reacutesoudre est un problegraveme de classification il fautsrsquoassurer que chaque cocircteacute contient une proportion raisonnable de chaqueclasse

92 Galleries 331

Machine Learning Statistiques et Programmation Version 035930

922 Images

Deacutetection de segmentsdans une image(page 261)

Crsquoest une technique assez vieille et qui consiste agrave deacutetecter des segmentscomme des anomalies lrsquoalignement de points est un eacuteveacutenement assezrare dans un nuage de points mais rare comment Cette ideacutee megravene agrave laprobabilisation drsquoune image pour quantifier ce qursquoest un alignement depoints neacutecessairement rare

923 Meacutetriques

ROC

A few graphs about ROC on the iris datasets

matplotlib inlineimport matplotlibpyplot as pltpltstyleuse(ggplot)

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Iris datasets (page 332)bull ROC with scikit-learn (page 333)bull ROC - TPR FPR (page 334)bull ROC - score distribution (page 337)bull ROC - recall precision (page 338)

Iris datasets

from sklearn import datasetsiris = datasetsload_iris()X = irisdata[ 2]y = iristarget

from sklearnmodel_selection import train_test_splitX_train X_test y_train y_test = train_test_split(X y test_size=033)

from sklearnlinear_model import LogisticRegressionclf = LogisticRegression()clffit(X_train y_train)

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovr n_jobs=1

(suite sur la page suivante)

332 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

penalty=l2 random_state=None solver=liblinear tol=00001verbose=0 warm_start=False)

import numpyypred = clfpredict(X_test)yprob = clfpredict_proba(X_test)score = numpyarray(list(yprob[iypred[i]] for i in range(len(ypred))))

data = numpyzeros((len(ypred) 2))data[0] = scoreravel()data[ypred==y_test1] = 1data[5]

array([[ 070495209 1 ][ 056148737 0 ][ 056148737 1 ][ 077416227 1 ][ 058631799 0 ]])

ROC with scikit-learn

We use the following example Receiver Operating Characteristic (ROC)269

from sklearnmetrics import roc_curvefpr tpr th = roc_curve(y_test == ypred score)

import matplotlibpyplot as pltpltplot(fpr tpr label=ROC curve)pltplot([0 1] [0 1] linestyle=--)pltxlim([00 10])pltylim([00 10])pltxlabel(False Positive Rate)pltylabel(True Positive Rate)pltlegend(loc=lower right)

ltmatplotliblegendLegend at 0x268373a2128gt

269 httpscikit-learnorgstableauto_examplesmodel_selectionplot_rochtmlsphx-glr-auto-examples-model-selection-plot-roc-py

92 Galleries 333

Machine Learning Statistiques et Programmation Version 035930

import pandasdf = pandasDataFrame(dict(fpr=fpr tpr=tpr threshold=th))df

ROC - TPR FPR

We do the same with the class this module provides ROC270bull TPR = True Positive Ratebull FPR = False Positive Rate

You can see as TPR the distribution function of a score for a positive example and the FPR the same for a negativeexample

from mlstatpymlroc import ROC

roc = ROC(df=data)

roc

Overall precision 063 - AUC=0850594--------------

score label weight0 0375573 00 101 0385480 00 102 0412314 00 103 0412703 10 10

(suite sur la page suivante)

270 httpwwwxavierduprefrappmlstatpyhelpsphinxmlstatpymlrochtmlhighlight=rocmodule-mlstatpymlroc

334 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

4 0417941 00 10--------------

score label weight45 0863174 10 1046 0863174 10 1047 0869794 10 1048 0903335 10 1049 0910712 10 10--------------

False Positive Rate True Positive Rate threshold0 0000000 0032258 09107121 0000000 0193548 08286172 0000000 0354839 07909093 0000000 0516129 07370004 0052632 0645161 06275895 0157895 0741935 06079756 0263158 0838710 05614877 0526316 0838710 05422118 0684211 0903226 05208359 0842105 0967742 041794110 1000000 1000000 0375573--------------

error recall threshold0 0000000 002 09107121 0000000 012 08286172 0000000 022 07909093 0000000 032 07370004 0047619 042 06275895 0115385 052 06079756 0161290 062 05614877 0277778 072 05422118 0317073 082 05208359 0347826 092 041794110 0380000 100 0375573

rocauc()

085059422750424452

rocplot(nb=10)

ltmatplotlibaxes_subplotsAxesSubplot at 0x2683ff2b668gt

92 Galleries 335

Machine Learning Statistiques et Programmation Version 035930

This function draws the curve with only 10 points but we can ask for more

rocplot(nb=100)

ltmatplotlibaxes_subplotsAxesSubplot at 0x2683feba240gt

We can also ask to draw bootstropped curves to get a sense of the confidence

336 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

rocplot(nb=10 bootstrap=10)

ltmatplotlibaxes_subplotsAxesSubplot at 0x26840008748gt

ROC - score distribution

This another representation for the metrics FPR and TPRP (x lt s) is the probability that a score for a positive exampleto be less than s P (minus gt s) is the probability that a score for a negative example to be higher than s We assume inthis case that the higher the better for the score

rocplot(curve=ROCCurveTypePROBSCORE thresholds=True)

ltmatplotlibaxes_subplotsAxesSubplot at 0x268410618d0gt

92 Galleries 337

Machine Learning Statistiques et Programmation Version 035930

When curves intersects at score slowast error rates for positive and negative examples are equal If we show the confusionmatrix for this particular score slowast it gives

conf = rocconfusion()conf[P(+lts)] = 1 - conf[True Positive] confloc[len(conf)-1True Positive]conf[P(-gts)] = 1 - conf[True Negative] confloc[0True Negative]conf

ROC - recall precision

In this representation we show the score

import matplotlibpyplot as pltfig axes = pltsubplots(ncols=2 nrows=1 figsize=(144))rocplot(curve=ROCCurveTypeRECPREC thresholds=True ax=axes[0])rocplot(curve=ROCCurveTypeRECPREC ax=axes[1])

ltmatplotlibaxes_subplotsAxesSubplot at 0x2684151d3c8gt

338 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

ROC (page 332) A few graphs about ROC on the iris datasets

p-values (page 235) Compute p-values and heavy tails estimators

924 Machine Learning

Benchmark

Ce notebook compare diffeacuterents modegraveles depuis un notebook

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Petit bench sur le clustering (page 340)ndash Deacutefinition du bench (page 340)ndash Lancer le bench (page 340)ndash Reacutecupeacuterer les reacutesultats (page 341)ndash Dessin Graphs (page 341)

Si le message Widget Javascript not detected It may not be installed or enabled properly apparaicirct vous devriezexeacutecuter la commande jupyter nbextension enable --py --sys-prefix widgetsnbextension depuis laligne de commande Le code suivant vous permet de veacuterifier que cela a eacuteteacute fait

from tqdm import tnrange tqdm_notebookfrom time import sleep

for i in tnrange(3 desc=1st loop)for j in tqdm_notebook(range(20) desc=2nd loop)

sleep(001)

92 Galleries 339

Machine Learning Statistiques et Programmation Version 035930

matplotlib inline

Petit bench sur le clustering

Deacutefinition du bench

import dillfrom tqdm import tnrangefrom sklearncluster import AgglomerativeClustering KMeansfrom sklearndatasets import make_blobsfrom mlstatpyml import MlGridBenchMark

params = [dict(model=lambda KMeans(n_clusters=3) name=KMeans-3 shortname=km-3)dict(model=lambda AgglomerativeClustering() name=AgglomerativeClustering

rarrshortname=aggclus)]

datasets = [dict(X=make_blobs(100 centers=3)[0] Nclus=3name=blob-100-3 shortname=b-100-3 no_split=True)

dict(X=make_blobs(100 centers=5)[0] Nclus=5name=blob-100-5 shortname=b-100-5 no_split=True) ]

bench = MlGridBenchMark(TestName datasets fLOG=None clog=Nonecache_file=cachepickle pickle_module=dillrepetition=3 progressbar=tnrangegraphx=[_time time_train Nclus]graphy=[silhouette Nrows])

Lancer le bench

benchrun(params)

0|2017-03-19 201111 [BenchMarkrun] number of cached run 4 0|| 04 [0000lt rarrits]

3|2017-03-19 201113 [BenchMarkrun] done 75|| 34 [0002lt0000 110its] rarr 11its]_train 002142968022685221 time_test 0rarr0025012412126208527 _btry aggclus-b-100-5 _iexp 2 model_namerarrAgglomerativeClustering ds_name blob-100-5 Nrows 100 Nfeat 2 Nclusrarr5 no_split True _date datetimedatetime(2017 3 19 20 11 11 647355) _rarrtime 01007650830318858 _span datetimetimedelta(0 0 112581) _i 3 _namerarr TestName 75|| 34 [0000lt0000 422its]]000 353its]]

340 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Reacutecupeacuterer les reacutesultats

df = benchto_df()df

dfplot(x=time_train y=silhouette kind=scatter)

ltmatplotlibaxes_subplotsAxesSubplot at 0x122b8004748gt

Dessin Graphs

benchplot_graphs(figsize=(1212))

array([[ltmatplotlibaxes_subplotsAxesSubplot object at 0x00000122B8269A90gtltmatplotlibaxes_subplotsAxesSubplot object at 0x00000122B82E1DA0gt][ltmatplotlibaxes_subplotsAxesSubplot object at 0x00000122B83512E8gtltmatplotlibaxes_subplotsAxesSubplot object at 0x00000122B83A1828gt][ltmatplotlibaxes_subplotsAxesSubplot object at 0x00000122B8409D68gtltmatplotlibaxes_subplotsAxesSubplot object at 0x00000122B8462588gt]]

rarrdtype=object)

92 Galleries 341

Machine Learning Statistiques et Programmation Version 035930

Factorisation et matrice et ACP

Un exemple pour montrer lrsquoeacutequivalence entre lrsquoACP et une factorisation de matrice

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Factorisation de matrices (page 343)bull ACP analyse en composantes principales (page 344)

matplotlib inline

342 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Factorisation de matrices

def erreur_mf(M W H)d = M - W Ha = dravel()e = a aTe 05 (Mshape[0] Mshape[1])return e

On creacutee un nuage de points avec que des coordonneacutees positives pour satisfaire les hypothegraveses de la factorisation dematrices

from numpyrandom import randM = rand(2 20)M[1] += 3 M[0]M

array([[ 081960047 063887134 074019269 096110175 00685406 011103301 006033529 067913157 010460611 098860048050497448 026893866 073143267 032617974 01332449 083328515 03775355 069163261 053095348 015601268]

[ 248031078 22279066 285929872 327833973 027323095053806662 048019992 209428487 040521666 394539474236639105 166857684 314027534 194032092 122602705309679803 1696636 269144798 184350664 116862532]])

from sklearndecomposition import NMFmf = NMF(1)W = mffit_transform(M)H = mfcomponents_erreur_mf(M W H)

019729615330190822

wh = W H

import matplotlibpyplot as pltfig ax = pltsubplots(1 1)axplot(M[0] M[1] ob)axplot(wh[0] wh[1] or)axset_xlim([01])axset_ylim([04])

(0 4)

92 Galleries 343

Machine Learning Statistiques et Programmation Version 035930

ACP analyse en composantes principales

from sklearndecomposition import PCApca = PCA(n_components=1)pcafit(MT)

PCA(copy=True iterated_power=auto n_components=1 random_state=Nonesvd_solver=auto tol=00 whiten=False)

projected_points = pcainverse_transform(pcatransform(MT))pj = projected_pointsT

import matplotlibpyplot as pltfig ax = pltsubplots(1 1)axplot(M[0] M[1] ob)axplot(wh[0] wh[1] or)axplot(pj[0] pj[1] og)axset_xlim([01])axset_ylim([04])

(0 4)

344 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Les reacutesultats ne sont pas exactement identiques car lrsquoACP271 centre le nuage de points par deacutefaut On utilise celui destatsmodels272 pour eacuteviter cela

from statsmodelsmultivariatepca import PCApca = PCA(MT ncomp=1 standardize=False demean=False normalize=False)pca

Principal Component Analysis(nobs 20 nvar 2 transformation None normalizationrarrFalse number of components 1 SVD id 0x1c01a2861d0)

pj2 = pcaprojectionT

import matplotlibpyplot as pltfig ax = pltsubplots(1 1)axplot(M[0] M[1] ob)axplot(wh[0] wh[1] or)axplot(pj[0] pj[1] og)axplot(pj2[0] pj2[1] oy)axset_xlim([01])axset_ylim([04])

(0 4)

271 httpscikit-learnorgstablemodulesgeneratedsklearndecompositionPCAhtml272 httpwwwstatsmodelsorgdevgeneratedstatsmodelsmultivariatepcaPCAhtml

92 Galleries 345

Machine Learning Statistiques et Programmation Version 035930

On retrouve exactement les mecircmes reacutesultats

Valeurs manquantes et factorisation de matrices

Reacuteflexion autour des valeur manquantes et de la factorisation de matrice positive

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Matrice agrave coefficients aleacuteatoires (page 346)bull Matrice avec des vecteurs colonnes correacuteleacutes (page 348)bull Matrice identiteacute (page 350)bull Matrice identiteacute et repreacutesentation spatiale (page 351)

matplotlib inline

Matrice agrave coefficients aleacuteatoires

On eacutetudie la factorisation drsquoune matrice agrave coefficients tout agrave fait aleacuteatoires qui suivent une loi uniforme sur lrsquointervalle[0 1] Essayons sur une petite matrice

from numpyrandom import randM = rand(3 3)M

array([[ 005119593 043722929 09290821 ][ 04588466 014187813 023762633][ 09768084 047674026 079044526]])

346 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

from sklearndecomposition import NMFmf = NMF(1)mffit_transform(M)

array([[ 067825803][ 038030919][ 102295362]])

La matrice preacuteceacutedente est la matrice W dans le produit WH la matrice qui suit est H

mfcomponents_

array([[ 073190904 050765757 092611883]])

mfreconstruction_err_ (Mshape[0] Mshape[1])

007236890712696428

On recalcule lrsquoerreur

d = M - mffit_transform(M) mfcomponents_a = dravel()e = a aTe 05 (Mshape[0] Mshape[1])

0072368907126964283

eravel()

array([ 042421796])

Et maintenant sur une grande et plus neacutecessairement carreacutee

M = rand(300 10)mf = NMF(1)mffit_transform(M)mfreconstruction_err_ (Mshape[0] Mshape[1])

0004996164872801101

Lrsquoerreur est la mecircme

errs = []rangs = list(range(1 11))for k in rangs

mf = NMF(k)mffit_transform(M)e = mfreconstruction_err_ (Mshape[0] Mshape[1])errsappend(e)

92 Galleries 347

Machine Learning Statistiques et Programmation Version 035930

import pandasdf = pandasDataFrame(dict(rang=rangs erreur=errs))dfplot(x=rang y=erreur)

ltmatplotlibaxes_subplotsAxesSubplot at 0x199924d8668gt

Matrice avec des vecteurs colonnes correacuteleacutes

Supposons maintenant que la matrice preacuteceacutedente M est de rang 3 Pour srsquoen assurer on tire une matrice aleacutealatoireavec 3 vecteurs colonnes et on reacuteplique des colonnes jusqursquoagrave la dimension souhaiteacutee

from numpy import hstackM = rand(300 3)M = hstack([M M M M[1]])Mshape

(300 10)

errs = []rangs = list(range(1 11))for k in rangs

mf = NMF(k)mffit_transform(M)e = mfreconstruction_err_ (Mshape[0] Mshape[1])errsappend(e)

import pandasdf = pandasDataFrame(dict(rang=rangs erreur=errs))

(suite sur la page suivante)

348 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

dfplot(x=rang y=erreur)

ltmatplotlibaxes_subplotsAxesSubplot at 0x199925d6630gt

On essaye agrave nouveausur une matrice un peu plus petite

M = rand(3 2)M = hstack([M M[1]])M

array([[ 027190312 06497563 027190312][ 044853292 087097224 044853292][ 029424835 065106952 029424835]])

mf = NMF(2)mffit_transform(M)

array([[ 061835197 0 ][ 082887888 029866219][ 061960446 007743224]])

mfcomponents_

array([[ 043972536 105078419 043972536][ 028143493 0 028143493]])

La derniegravere colonne est identique agrave la premiegravere

92 Galleries 349

Machine Learning Statistiques et Programmation Version 035930

Matrice identiteacute

Et maintenant si la matrice M est la matrice identiteacute que se passe-t-il

from numpy import identityM = identity(3)M

array([[ 1 0 0][ 0 1 0][ 0 0 1]])

mf = NMF(1)mffit_transform(M)

array([[ 0][ 1][ 0]])

mfcomponents_

array([[ 0 1 0]])

mfreconstruction_err_ 2

20000000000000004

On essaye avec k = 2

mf = NMF(2)mffit_transform(M)

array([[ 0 0 ][ 0 103940448][ 095521772 0 ]])

mfcomponents_

array([[ 0 0 104688175][ 0 096208937 0 ]])

mfreconstruction_err_ 2

10

Avec des vecteurs normeacutes et indeacutependants (formant donc une base de lrsquoespace vectoriel) lrsquoalgorithme aboutit agrave unematrice W eacutegale au k premiers vecteurs et oublie les autres

350 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Matrice identiteacute et repreacutesentation spatiale

Pour comprendre un peu mieux ce dernier exemple il est utile de chercher drsquoautres solutions dont lrsquoerreur esteacutequivalente

def erreur_mf(M W H)d = M - W Ha = dravel()e = a aTe 05 (Mshape[0] Mshape[1])return e

M = identity(3)mf = NMF(2)W = mffit_transform(M)H = mfcomponents_erreur_mf(M W H)

10

W

array([[ 0 0 ][ 09703523 0 ][ 0 102721047]])

H

array([[ 0 103055354 0 ][ 0 0 097351032]])

W H

array([[ 0 0 0][ 0 1 0][ 0 0 1]])

from mpl_toolkitsmplot3d import Axes3Dimport matplotlibpyplot as pltfig = pltfigure()ax = figadd_subplot(111 projection=3d)wh = W Haxscatter(M[0] M[1] M[2] c=b marker=o s=20)axscatter(wh[0] wh[1] wh[2] c=r marker=^)

ltmpl_toolkitsmplot3dart3dPath3DCollection at 0x19992d2a5c0gt

92 Galleries 351

Machine Learning Statistiques et Programmation Version 035930

Et si on pose maintenant

import numpyW = numpyarray([[05 05 0] [0 0 1]])TH = numpyarray([[1 1 0] [00 00 10]])W

array([[ 05 0 ][ 05 0 ][ 0 1 ]])

H

array([[ 1 1 0][ 0 0 1]])

W H

array([[ 05 05 0 ][ 05 05 0 ][ 0 0 1 ]])

erreur_mf(M W H)

10

fig = pltfigure()ax = figadd_subplot(111 projection=3d)wh = W Haxscatter(M[0] M[1] M[2] c=b marker=o s=20)axscatter(wh[0] wh[1] wh[2] c=r marker=^)

352 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

ltmpl_toolkitsmplot3dart3dPath3DCollection at 0x19992a2e5f8gt

On peut voir la matrice M comme un ensemble de n points dans un espace vectoriel La matrice W est un ensemblede k lt n points dans le mecircme espace La matrice WH de rang k est une approximation de cet ensemble dans lemecircme espace crsquoest aussi n combinaisons lineacuteaires de k points de faccedilon agrave former n points les plus proches proches den points de la matrice M

92 Galleries 353

Machine Learning Statistiques et Programmation Version 035930

Analyse de survie(page 197)

Benchmark (page 339) Ce notebook compare diffeacuterents modegraveles depuis un notebook

Factorisation etmatrice et ACP(page 342)

Un exemple pour montrer lrsquoeacutequivalence entre lrsquoACP et une factorisation dematrice

Reacutegression lineacuteairepar morceaux(page 129)

La reacutegression lineacuteaire par morceaux a lrsquoavantage de produire un modegravelelocalement interpreacutetable Mais ce nrsquoest pas eacutevident drsquoestimer un tel modegravelequand on ne connaicirct pas les morceaux par avance

Reacutegression sansinversion (page 147)

Ce notebook mesure le temps de calcul dans deux algorithmes pourreacutesoudre une reacutegression lineacuteaire le premier inverse un matrice le secondle fait sans inverser une matrice le troisiegraveme reprend lrsquoideacutee du second maisutilise une deacutecomposition QR puis inverse la matrice R

Reacuteseaux de neurones(page 192)

Reacuteseaux de neurones avec scikit-learn

Un arbre de deacutecisionen reacuteseaux deneurones (page 87)

Lrsquoideacutee est de convertir sous la forme drsquoun reacuteseaux de neurones un arbrede deacutecision puis de continuer lrsquoapprentissage de faccedilon agrave obtenir unassemblage de reacutegression logistique plutocirct que de deacutecision binaire

Valeurs manquanteset factorisation dematrices (page 346)

Reacuteflexion autour des valeur manquantes et de la factorisation de matricepositive

Voronoiuml et reacutegressionlogistique (page 161)

Le notebook eacutetudie la pertinence drsquoun modegravele de reacutegression logistiquedans certaines configurations Il regarde aussi le diagramme de Voronoiumlassocieacute agrave une reacutegression logistique agrave trois classes Il donne quelquesintuitions sur les modegraveles que la reacutegression logistique peut reacutesoudre354 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

925 NLP - Natural Language Processing

Completion Trie and metrics

Evaluation of a completion system on wikpedia pages

matplotlib inlineimport matplotlibpyplot as pltpltstyleuse(ggplot)from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Wikipedia titles uniform (page 355)bull Reduce the alphabet size (page 358)bull Wikipedia titles uniform longer test (page 361)

Wikipedia titles uniform

from mlstatpydatawikipedia import download_titlesfile_titles = download_titles(country=fr)

from mlstatpydatawikipedia import enumerate_titleslist_titles = list(sorted(set(_ for _ in enumerate_titles(file_titles) if A lt= _[0] lt=rarrZ)))

len(list_titles) list_titles[5] list_titles[10000001000005]

(3108490[AA amp AA (Airport Express)A (Ayumi Hamasaki)A (Disque dAyumi Hamasaki)]

[Fantasy in the skyFantasy mythiqueFantasy of mannersFantasy tennisFantasy urbaine])

from mlstatpynlpcompletion import CompletionTrieNode

def gain_dynamique_moyen_par_mot(queries weights)per = list(zip(weights queries))total = sum(w len(q) for q w in zip(queries weights))res = []trie = CompletionTrieNodebuild([(None q) for _ q in per])trieprecompute_stat()trieupdate_stat_dynamic()wks = [(w p len(w)-triemin_keystroke0(w)[0]) for p w in per]

(suite sur la page suivante)

92 Galleries 355

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

wks_dyn = [(w p len(w)-triemin_dynamic_keystroke(w)[0]) for p w in per]wks_dyn2 = [(w p len(w)-triemin_dynamic_keystroke2(w)[0]) for p w in per]gain = sum( gptotal for w p g in wks)gain_dyn = sum( gptotal for w p g in wks_dyn)gain_dyn2 = sum( gptotal for w p g in wks_dyn2)ave_length = sum( len(w) p total for p w in per)return gain gain_dyn gain_dyn2 ave_length

import time random pandas

def benchmark(sizes)print(time 0)allres = []for size in sizes

begin = timeperf_counter()if size is None

size = len(list_titles)spl = list_titles

elsespl = randomsample(list_titles size)

splsort()res = gain_dynamique_moyen_par_mot(spl [10] len(spl))dt = timeperf_counter() - beginprint(time 0s - nb=1format(dt len(spl)) gain tuple(_res[-1] for _

rarrin res))allresappend((size dt) + res) with open(sampledtxt len(spl) w encoding=utf-8) as f fwrite(njoin(spl))

df = pandasDataFrame(allres columns=size time mks mks mks ave_lensplit())for c in mks mks mkssplit()

df[ + c] = df[c] df[ave_len]df[c + mks] = df[c] df[mks]

return df

df = benchmark([200 500 800 1000 2000 5000 8000 10000 20000])dftail(n=2)

time 0time 021504800644533353s - nb=200 gain (0820872274143302 0820872274143302 0rarr820872274143302 10)time 06058446756721159s - nb=500 gain (07976588628762532 07976588628762532 0rarr7976588628762532 10)time 1009366944402156s - nb=800 gain (0779308535065277 0779308535065277 0rarr779308535065277 10)time 12731077523609795s - nb=1000 gain (07819106501794998 07819106501794998 0rarr7819106501794998 10)time 30382918326608044s - nb=2000 gain (07491075326810025 07491075326810025 0rarr7491075326810025 10)time 6941259884811901s - nb=5000 gain (07193327903836085 07193534087277493 0rarr7193534087277493 10)time 12096078319013222s - nb=8000 gain (06971821041145199 06971821041145199 0rarr6971821041145199 10)

(suite sur la page suivante)

356 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

time 17030497306746902s - nb=10000 gain (06881011563817098 06881371807341721 0rarr6881371807341721 10)time 3055692095058407s - nb=20000 gain (06579791591697565 06582343738435791 0rarr6582343738435791 10)

import matplotlibpyplot as pltf ax = pltsubplots(2 2 figsize=(1410))dfplot(x=size y=time ax=ax[10])dfplot(x=size y=[mks mks mks ave_len] ax=ax[00])dfplot(x=size y=[mks mks mks] ax=ax[01])dfplot(x=size y=[mksmks mksmks] ax=ax[11])ax[00]legend()ax[01]legend()ax[10]legend()ax[11]legend()ax[11]set_ylim([09 11])ax[00]set_title(Raw Gain)ax[01]set_title(Relative Gain)ax[10]set_title(Time)ax[11]set_title(Comparison between MKS)

ltmatplotlibtextText at 0x15a756202b0gt

92 Galleries 357

Machine Learning Statistiques et Programmation Version 035930

Reduce the alphabet size

from mlstatpydatawikipedia import enumerate_titleslist_titles = list(sorted(set(_ for _ in enumerate_titles(file_titles) if A lt= _[0] lt=rarrZ)))

import time random pandas

def char_modulo(c size)if len(c) = 1

raise Exception(unexpected size s c) if len(c) = len(clower()) raise Exception(unexpected lower size s = s (d = d) (c clower()

rarrlen(c) len(clower())))if size is None

return celse

cl = clower()if len(cl) gt len(c)

cl = co = ord(cl)a = 97d = (o - a) + size 10return chr(97 + (d size))

def reduce_alphabet(sample size)return [join(char_modulo(c size) for c in word) for word in sample]

def benchmark_size(size alphabet_sizes)if size is None

size = len(list_titles)sample = list_titles

elsesample = randomsample(list_titles size)

print(time 0)allres = []for size in alphabet_sizes

begin = timeperf_counter()spl = reduce_alphabet(sample size)spl = list(sorted(set(spl)))res = gain_dynamique_moyen_par_mot(spl [10] len(spl))dt = timeperf_counter() - beginprint(time 0s - nb=1format(dt len(spl)) gain tuple(_res[-1] for _

rarrin res))if size is None

size = max(_ for _ in alphabet_sizes if _ is not None) + 5allresappend((size dt) + res) with open(sampledtxt len(spl) w encoding=utf-8) as f fwrite(njoin(spl))

df = pandasDataFrame(allres columns=size time mks mks mks ave_lensplit())for c in mks mks mkssplit()

df[ + c] = df[c] df[ave_len](suite sur la page suivante)

358 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

df[c + mks] = df[c] df[mks]return df

df = benchmark_size(5000 [None] + list(range(2 26)))dftail(n=2)

time 0time 759344921135289s - nb=5000 gain (0716585290640898 0716585290640898 0rarr716585290640898 10)time 38923985946166795s - nb=4581 gain (041594360086768417 04448874994683378 0rarr4448874994683378 10)time 5085379287694195s - nb=4942 gain (05571683533987387 05620376961406324 0rarr5620376961406324 10)time 5121866923020207s - nb=4974 gain (05983975448244626 06052151883090817 0rarr6052151883090817 10)time 5501076360438674s - nb=4991 gain (06380275314306908 06382847383691052 0rarr6382847383691052 10)time 5524899975880544s - nb=4988 gain (06475382003395598 06479497864896859 0rarr6479497864896859 10)time 6245833967660474s - nb=4997 gain (06639308855291576 06639308855291576 0rarr6639308855291576 10)time 6012760238038936s - nb=4997 gain (06712028636672216 06712028636672216 0rarr6712028636672216 10)time 6076252674864918s - nb=4997 gain (06838256469329845 06839490681696653 0rarr6839490681696653 10)time 6111897439143831s - nb=4999 gain (06822851853756178 06823160384634976 0rarr6823160384634976 10)time 5873518026578495s - nb=4997 gain (06900718921309502 06900718921309502 0rarr6900718921309502 10)time 6684070891827105s - nb=4999 gain (06925798323648767 06925798323648767 0rarr6925798323648767 10)time 6735858496876062s - nb=4997 gain (06969017445687994 06969017445687994 0rarr6969017445687994 10)time 6131690155300021s - nb=4999 gain (06960868000205542 06960868000205542 0rarr6960868000205542 10)time 62186773552921295s - nb=4999 gain (07022574175965309 07022574175965309 0rarr7022574175965309 10)time 5907541621836572s - nb=4998 gain (06991010265166325 06991010265166325 0rarr6991010265166325 10)time 631432889332882s - nb=4999 gain (07022368488712789 07022471332339055 0rarr7022471332339055 10)time 5892940837380593s - nb=4998 gain (07070717459272685 07070717459272685 0rarr7070717459272685 10)time 6061792582734597s - nb=4999 gain (07097547179513399 07097547179513399 0rarr7097547179513399 10)time 6094942944771901s - nb=4999 gain (07079858075795616 07080166606674415 0rarr7080166606674415 10)time 6141645954818159s - nb=4999 gain (07118732966524257 07118732966524257 0rarr7118732966524257 10)time 59873731844709255s - nb=4999 gain (07094359027099135 07094359027099135 0rarr7094359027099135 10)time 60718454556808865s - nb=4999 gain (07120892682675833 07120892682675833 0rarr7120892682675833 10) (suite sur la page suivante)

92 Galleries 359

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

time 6133951068150054s - nb=4999 gain (07124903584100222 07124903584100222 0rarr7124903584100222 10)time 6292655432947868s - nb=4999 gain (0713611353936324 0713611353936324 0rarr713611353936324 10)

df = dfsort_values(size)

import matplotlibpyplot as pltf ax = pltsubplots(2 2 figsize=(1410))dfplot(x=size y=time ax=ax[10])dfplot(x=size y=[mks mks mks ave_len] ax=ax[00])dfplot(x=size y=[mks mks mks] ax=ax[01])dfplot(x=size y=[mksmks mksmks] ax=ax[11])ax[00]legend()ax[01]legend()ax[10]legend()ax[11]legend()ax[11]set_ylim([09 11])ax[00]set_title(Raw Gain)ax[01]set_title(Relative Gain)ax[10]set_title(Time)ax[11]set_title(Comparison between MKS)

ltmatplotlibtextText at 0x15a74bf40b8gt

360 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Wikipedia titles uniform longer test

df2 = benchmark([50000])df2tail(n=2)

time 0time 52057980205573585s - nb=50000 gain (06162242515637921 0616305075104518 0rarr616305075104518 10)

df2 = benchmark([50000 100000 200000]) 500000 500000 1000000 2000000 None])rarrtoo long in pythondf2tail(n=2)

time 0time 5251158252780897s - nb=50000 gain (0615225173328998 06153599275825006 0rarr6153599275825006 10)time 1050721302614229s - nb=100000 gain (05836043296652512 05841384772496148 0rarr5841384772496148 10)time 18786111486480695s - nb=200000 gain (05507786166438062 05518801462043321 0rarr5518801462043321 10)

92 Galleries 361

Machine Learning Statistiques et Programmation Version 035930

dfall = pandasconcat([df df2])f ax = pltsubplots(2 2 figsize=(1410))dfallplot(x=size y=time ax=ax[10])dfallplot(x=size y=[mks mks mks ave_len] ax=ax[00])dfallplot(x=size y=[mks mks mks] ax=ax[01])dfallplot(x=size y=[mksmks mksmks] ax=ax[11])ax[00]legend()ax[01]legend()ax[10]legend()ax[11]legend()ax[11]set_ylim([09 11])ax[00]set_title(Raw Gain)ax[01]set_title(Relative Gain)ax[10]set_title(Time)ax[11]set_title(Comparison between MKS)

ltmatplotlibtextText at 0x15a132f8be0gt

362 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Completion profiling

Profiling avec cProfile273 memory_profiler274 pyinstrument275 snakeviz276line_profiler277 ne semble pas plus ecirctre maintenu

matplotlib inlineimport matplotlibpyplot as pltpltstyleuse(ggplot)from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Setup (page 363)ndash Function to profile (page 363)ndash Data (page 364)

bull Standard modules (page 364)ndash cProfile (page 364)

bull Others informations when profiling (page 366)ndash memory_profiler (page 366)

bull Static Visualization (page 368)ndash pyinstrument (page 368)

bull Javascript Visualization (page 369)ndash SnakeViz (page 369)ndash vprof py-spy (page 369)

Setup

Function to profile

from mlstatpynlpcompletion import CompletionTrieNode

def gain_dynamique_moyen_par_mot(queries weights)per = list(zip(weights queries))total = sum(weights) 10res = []trie = CompletionTrieNodebuild([(None q) for _ q in per])trieprecompute_stat()trieupdate_stat_dynamic()wks = [(w p len(w) - triemin_keystroke0(w)[0]) for p w in per]wks_dyn = [(w p len(w) - triemin_dynamic_keystroke(w)[0])

for p w in per]wks_dyn2 = [(w p len(w) - triemin_dynamic_keystroke2(w)[0])

(suite sur la page suivante)

273 httpsdocspythonorg37libraryprofilehtml274 httpspypiorgprojectmemory-profiler275 httpsgithubcomjoerickpyinstrument276 httpsjiffyclubgithubiosnakeviz277 httpsgithubcomrkernline_profiler

92 Galleries 363

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

for p w in per]gain = sum(g p total for w p g in wks)gain_dyn = sum(g p total for w p g in wks_dyn)gain_dyn2 = sum(g p total for w p g in wks_dyn2)ave_length = sum(len(w) p total for p w in per)return gain gain_dyn gain_dyn2 ave_length

Data

from mlstatpydatawikipedia import download_titlesfile_titles = download_titles(country=fr)

len(file_titles)

33

from mlstatpydatawikipedia import enumerate_titleslist_titles = list(sorted(set(_ for _ in enumerate_titles(file_titles) if A lt= _[0] lt=rarrZ)))

import randomsample1000 = randomsample(list_titles 1000)with open(sample1000txt w encoding=utf-8) as f

fwrite(njoin(sample1000))

Standard modules

cProfile

import cProfile io pstats os

def toprofile0(lines)gain_dynamique_moyen_par_mot(lines [10] len(lines))

def doprofile(lines filename)pr = cProfileProfile()prenable()toprofile0(lines)prdisable()s = ioStringIO()ps = pstatsStats(pr stream=s)sort_stats(cumulative)psprint_stats()rem = ospathnormpath(ospathjoin(osgetcwd() ))res = sgetvalue()replace(rem )psdump_stats(filename)return res

364 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

r = doprofile(sample1000 completionprof)print(r)

1311797 function calls in 1865 secondsOrdered by cumulative timencalls tottime percall cumtime percall filenamelineno(function)

1 0000 0000 1865 1865 ltipython-input-7-d2b6d910fdd7gt3(toprofile0)1 0000 0000 1865 1865 ltipython-input-2-684f3e860cf5gt3(gain_

rarrdynamique_moyen_par_mot)1 0241 0241 1232 1232 srcmlstatpynlpcompletionpy415(precompute_

rarrstat)15982 0244 0000 0770 0000 srcmlstatpynlpcompletionpy503(merge_

rarrcompletions)1 0088 0088 0366 0366 srcmlstatpynlpcompletionpy450(update_stat_

rarrdynamic)15982 0307 0000 0314 0000 built-in method builtins__build_class__

1 0194 0194 0220 0220 srcmlstatpynlpcompletionpy203(build)16982 0094 0000 0165 0000 srcmlstatpynlpcompletionpy555(update_

rarrdynamic_minimum_keystroke)36051 0114 0000 0130 0000 srcmlstatpynlpcompletionpy523(ltlistcompgt)37609 0035 0000 0071 0000 built-in method builtinsall16982 0051 0000 0058 0000 srcmlstatpynlpcompletionpy588(second_step)314299 0053 0000 0053 0000 built-in method builtinslen15983 0006 0000 0049 0000 method extend of collectionsdeque

rarrobjects16983 0031 0000 0047 0000 srcmlstatpynlpcompletionpy97(unsorted_iter)15982 0039 0000 0046 0000 srcmlstatpynlpcompletionpy542(update_

rarrminimum_keystroke)16982 0041 0000 0044 0000 srcmlstatpynlpcompletionpy624(init_dynamic_

rarrminimum_keystroke)1001 0028 0000 0043 0000 srcmlstatpynlpcompletionpy132(leaves)

115015 0041 0000 0041 0000 srcmlstatpynlpcompletionpy435(ltgenexprgt)15982 0024 0000 0032 0000 built-in method builtinssorted3000 0031 0000 0031 0000 srcmlstatpynlpcompletionpy257(find)

110110 0027 0000 0027 0000 built-in method builtinshasattr117519 0023 0000 0023 0000 method values of dict objects

1 0001 0001 0017 0017 ltipython-input-2-684f3e860cf5gt10(ltlistcompgt)16982 0015 0000 0017 0000 srcmlstatpynlpcompletionpy20(__init__)47946 0016 0000 0016 0000 method extend of list objects23287 0015 0000 0015 0000 built-in method builtinsmin1000 0002 0000 0015 0000 srcmlstatpynlpcompletionpy321(min_

rarrkeystroke0)1 0001 0001 0013 0013 ltipython-input-2-684f3e860cf5gt13(ltlistcompgt)

50946 0013 0000 0013 0000 method pop of list objects1 0001 0001 0013 0013 ltipython-input-2-684f3e860cf5gt11(ltlistcompgt)

20069 0012 0000 0012 0000 built-in method builtinsmax1000 0002 0000 0012 0000 srcmlstatpynlpcompletionpy382(min_dynamic_

rarrkeystroke2)1000 0002 0000 0012 0000 srcmlstatpynlpcompletionpy352(min_dynamic_

rarrkeystroke)56589 0011 0000 0011 0000 method popleft of collectionsdeque

rarrobjects52034 0011 0000 0011 0000 method append of list objects38608 0009 0000 0009 0000 method append of collectionsdeque

92 Galleries 365

Machine Learning Statistiques et Programmation Version 035930

rarrobjects16982 0008 0000 0008 0000 srcmlstatpynlpcompletionpy517(ltgenexprgt)16981 0007 0000 0007 0000 srcmlstatpynlpcompletionpy54(_add)15982 0007 0000 0007 0000 srcmlstatpynlpcompletionpy511(ltlistcompgt)15982 0007 0000 0007 0000 srcmlstatpynlpcompletionpy508(Fake)31964 0006 0000 0006 0000 method items of dict objects

5 0001 0000 0002 0000 built-in method builtinssum17982 0002 0000 0002 0000 built-in method builtinsisinstance1001 0000 0000 0001 0000 ltipython-input-2-684f3e860cf5gt18(ltgenexprgt)1001 0001 0000 0001 0000 ltipython-input-2-684f3e860cf5gt15(ltgenexprgt)

1 0000 0000 0000 0000 ltipython-input-2-684f3e860cf5gt7(ltlistcompgt)1001 0000 0000 0000 0000 ltipython-input-2-684f3e860cf5gt16(ltgenexprgt)1001 0000 0000 0000 0000 ltipython-input-2-684f3e860cf5gt17(ltgenexprgt)

1 0000 0000 0000 0000 method disable of _lsprofProfilerrarrobjects

Others informations when profiling

memory_profiler

See memory_profiler278 Version 056 is bugged (see 258279)

from memory_profiler import profile __version__load_ext memory_profiler

memit toprofile0(sample1000)

peak memory 41120 MiB increment 1840 MiB

from io import StringIOst = StringIO()profile(stream=st)def toprofile(lines)

gain_dynamique_moyen_par_mot(lines [10] len(lines))toprofile(sample1000)

ERROR Could not find file ltipython-input-11-7512ff5cdee3gtNOTE mprun can only be used on functions defined in physical files and not in therarrIPython environment

file temp_mem_profilepy

from mlstatpynlpcompletion import CompletionTrieNodefrom memory_profiler import profile

profile(precision=4)def gain_dynamique_moyen_par_mot(queries weights)

per = list(zip(weights queries))total = sum(weights) 10

(suite sur la page suivante)

278 httpspypipythonorgpypimemory_profiler041279 httpsgithubcompythonprofilersmemory_profilerissues258

366 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

res = []trie = CompletionTrieNodebuild([(None q) for _ q in per])trieprecompute_stat()trieupdate_stat_dynamic()wks = [(w p len(w) - triemin_keystroke0(w)[0]) for p w in per]wks_dyn = [(w p len(w) - triemin_dynamic_keystroke(w)[0])

for p w in per]wks_dyn2 = [(w p len(w) - triemin_dynamic_keystroke2(w)[0])

for p w in per]gain = sum(g p total for w p g in wks)gain_dyn = sum(g p total for w p g in wks_dyn)gain_dyn2 = sum(g p total for w p g in wks_dyn2)ave_length = sum(len(w) p total for p w in per)return gain gain_dyn gain_dyn2 ave_length

profile(precision=4)def toprofile()

with open(sample1000txt r encoding=utf-8) as flines = [_strip(nr ) for _ in freadlines()]

gain_dynamique_moyen_par_mot(lines [10] len(lines))toprofile()

Overwriting temp_mem_profilepy

import syscmd = sysexecutablefrom pyquickhelperloghelper import run_cmdcmd += -m memory_profiler temp_mem_profilepyout err = run_cmd(cmd wait=True)print(out)

Filename temp_mem_profilepyLine Mem usage Increment Line Contents================================================

5 567930 MiB 567930 MiB profile(precision=4)6 def gain_dynamique_moyen_par_mot(queries weights)7 567930 MiB 00000 MiB per = list(zip(weights queries))8 567930 MiB 00000 MiB total = sum(weights) 109 567930 MiB 00000 MiB res = []

10 633047 MiB 64492 MiB trie = CompletionTrieNodebuild([(None q) for _rarrq in per])

11 710742 MiB 77695 MiB trieprecompute_stat()12 806211 MiB 95469 MiB trieupdate_stat_dynamic()13 807305 MiB 01094 MiB wks = [(w p len(w) - triemin_keystroke0(w)[0])

rarrfor p w in per]14 807930 MiB 00469 MiB wks_dyn = [(w p len(w) - triemin_dynamic_

rarrkeystroke(w)[0])15 807930 MiB 00000 MiB for p w in per]16 808398 MiB 00430 MiB wks_dyn2 = [(w p len(w) - triemin_dynamic_

rarrkeystroke2(w)[0])17 808398 MiB 00000 MiB for p w in per]18 808398 MiB 00000 MiB gain = sum(g p total for w p g in wks)

92 Galleries 367

Machine Learning Statistiques et Programmation Version 035930

19 808398 MiB 00000 MiB gain_dyn = sum(g p total for w p g in wks_rarrdyn)

20 808398 MiB 00000 MiB gain_dyn2 = sum(g p total for w p g in wks_rarrdyn2)

21 808398 MiB 00000 MiB ave_length = sum(len(w) p total for p w inrarrper)

22 808398 MiB 00000 MiB return gain gain_dyn gain_dyn2 ave_length

Filename temp_mem_profilepyLine Mem usage Increment Line Contents================================================

24 565820 MiB 565820 MiB profile(precision=4)25 def toprofile()26 565820 MiB 00000 MiB with open(sample1000txt r

rarrencoding=utf-8) as f27 567930 MiB 00742 MiB lines = [_strip(nr ) for _ in f

rarrreadlines()]28 808398 MiB 240469 MiB gain_dynamique_moyen_par_mot(lines [10]

rarrlen(lines))

Static Visualization

pyinstrument

See pyinstrument280

from pyinstrument import Profiler

profiler = Profiler(use_signal=False)profilerstart()

toprofile0(sample1000)

profilerstop()out = profileroutput_text(unicode=False color=False)print(outreplace( ))

_ _ ____ _ _ _ _ __ Recorded 181734 Samples 1048__ _ _ _ Duration 1802 CPU time 1703 _ v301Program -f pstats completionprof -o completiondot1799 run_code IPythoncoreinteractiveshellpy3288`- 1799 ltmodulegt ltipython-input-18-f16978ea99efgt6`- 1799 toprofile0 ltipython-input-7-d2b6d910fdd7gt3`- 1799 gain_dynamique_moyen_par_mot ltipython-input-2-684f3e860cf5gt3

|- 1251 precompute_stat mlstatpynlpcompletionpy415| |- 0917 merge_completions mlstatpynlpcompletionpy503| | |- 0771 [self]| | `- 0136 ltlistcompgt mlstatpynlpcompletionpy523| |- 0224 [self]| |- 0051 update_minimum_keystroke mlstatpynlpcompletionpy542

(suite sur la page suivante)

280 httpsgithubcomjoerickpyinstrument

368 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

| |- 0037 ltgenexprgt mlstatpynlpcompletionpy435| `- 0021 leaves mlstatpynlpcompletionpy132|- 0289 update_stat_dynamic mlstatpynlpcompletionpy450| |- 0147 update_dynamic_minimum_keystroke mlstatpynlpcompletionpy555| | |- 0100 [self]| | `- 0046 second_step mlstatpynlpcompletionpy588| |- 0084 [self]| |- 0040 init_dynamic_minimum_keystroke mlstatpynlpcompletionpy624| `- 0018 unsorted_iter mlstatpynlpcompletionpy97|- 0204 build mlstatpynlpcompletionpy203| `- 0190 [self]|- 0020 ltlistcompgt ltipython-input-2-684f3e860cf5gt10| `- 0019 min_keystroke0 mlstatpynlpcompletionpy321`- 0018 ltlistcompgt ltipython-input-2-684f3e860cf5gt13

Javascript Visualization

SnakeViz

load_ext snakeviz

Lrsquoinstruction qui suit lance lrsquoexplorateur par deacutefaut avec les donneacutees du profilage

snakeviz toprofile0(sample1000)

from pyquickhelperhelpgen import NbImageNbImage(imagesfunc_infojpg width=400)

vprof py-spy

See vprof281 or py-spy282 The second one outputs a SVG file easy to handle

from vprof import profiler

needs to be run from a file not from a notebook profilerrun(toprofile0 cmh args=(sample1000) host=localhost port=8000)

281 httpsgithubcomnvdvvprof282 httpsgithubcombenfredpy-spy

92 Galleries 369

Machine Learning Statistiques et Programmation Version 035930

from pyquickhelperhelpgen import NbImageNbImage(imagesvprofjpg width=800)

Compleacutetion

Comparaion de plusieurs algorithmes pour impleacutementer un systegraveme de compleacutetion

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Tester des ideacutees (page 371)ndash Meilleur ordre pour a ab abc abcd (page 371)ndash Meilleur ordre pour a ab abc abcd edf edfh (page 371)ndash Influence du poids (page 372)

bull Nouvelle meacutetrique (page 374)ndash Intuition (page 374)

bull Veacuterification (page 375)bull Ajouter une compleacutetion (page 376)bull Wikipedia (page 376)

370 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Tester des ideacutees

Meilleur ordre pour a ab abc abcd

from mlstatpynlpcompletion import CompletionTrieNodeimport itertoolsqueries = [a ab abc abcd]for per in itertoolspermutations(queries)

trie = CompletionTrieNodebuild([(None w) for w in per])gain = sum( len(w) - triemin_keystroke(w)[0] for w in per)print(gain ordre per)

0 ordre (a ab abc abcd)1 ordre (a ab abcd abc)1 ordre (a abc ab abcd)2 ordre (a abc abcd ab)2 ordre (a abcd ab abc)2 ordre (a abcd abc ab)1 ordre (ab a abc abcd)2 ordre (ab a abcd abc)2 ordre (ab abc a abcd)3 ordre (ab abc abcd a)3 ordre (ab abcd a abc)3 ordre (ab abcd abc a)2 ordre (abc a ab abcd)3 ordre (abc a abcd ab)2 ordre (abc ab a abcd)3 ordre (abc ab abcd a)4 ordre (abc abcd a ab)4 ordre (abc abcd ab a)3 ordre (abcd a ab abc)3 ordre (abcd a abc ab)3 ordre (abcd ab a abc)3 ordre (abcd ab abc a)4 ordre (abcd abc a ab)4 ordre (abcd abc ab a)

Meilleur ordre pour a ab abc abcd edf edfh

queries = [a ab abc abcd edf edfh]res = []for per in itertoolspermutations(queries)

trie = CompletionTrieNodebuild([(None w) for w in per])gain = sum( len(w) - triemin_keystroke(w)[0] for w in per)resappend((gain ordre per))

ressort(reverse=True)for r in res[30]

print(r)

92 Galleries 371

Machine Learning Statistiques et Programmation Version 035930

(6 ordre (edfh edf abcd abc ab a))(6 ordre (edfh edf abcd abc a ab))(6 ordre (edfh edf abcd ab abc a))(6 ordre (edfh edf abcd ab a abc))(6 ordre (edfh edf abcd a abc ab))(6 ordre (edfh edf abcd a ab abc))(6 ordre (edfh edf abc abcd ab a))(6 ordre (edfh edf abc abcd a ab))(6 ordre (edf edfh abcd abc ab a))(6 ordre (edf edfh abcd abc a ab))(6 ordre (edf edfh abcd ab abc a))(6 ordre (edf edfh abcd ab a abc))(6 ordre (edf edfh abcd a abc ab))(6 ordre (edf edfh abcd a ab abc))(6 ordre (edf edfh abc abcd ab a))(6 ordre (edf edfh abc abcd a ab))(6 ordre (abcd abc edfh edf ab a))(6 ordre (abcd abc edfh edf a ab))(6 ordre (abcd abc edfh ab edf a))(6 ordre (abcd abc edfh ab a edf))(6 ordre (abcd abc edfh a edf ab))(6 ordre (abcd abc edfh a ab edf))(6 ordre (abcd abc edf edfh ab a))(6 ordre (abcd abc edf edfh a ab))(6 ordre (abcd abc edf ab edfh a))(6 ordre (abcd abc edf ab a edfh))(6 ordre (abcd abc edf a edfh ab))(6 ordre (abcd abc edf a ab edfh))(6 ordre (abcd abc ab edfh edf a))(6 ordre (abcd abc ab edfh a edf))

Influence du poids

queries = [actuellement actualiteacute acte actes]weights = [1 1 1 2]total = sum(weights) 10 len(queries)res = []for per in itertoolspermutations(zip(queries weights))

trie = CompletionTrieNodebuild([(None w) for w p in per])wks = [(w p len(w)-triemin_keystroke(w)[0]) for w p in per]gain = sum( gptotal for w p g in wks)resappend((gain wks))

ressort(reverse=True)for r in res

print(034 - 1format(r[0] | join(s p=11f g=11f _ for _ inrarrr[1])))

192 - actes p=20 g=40 | actuellement p=10 g=100 | acte p=10 g=10 | actualiteacute p=1rarr0 g=50192 - actes p=20 g=40 | actualiteacute p=10 g=70 | acte p=10 g=10 | actuellement p=10rarrg=80

(suite sur la page suivante)

372 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

192 - actes p=20 g=40 | acte p=10 g=20 | actualiteacute p=10 g=60 | actuellement p=10rarrg=80192 - actes p=20 g=40 | actuellement p=10 g=100 | actualiteacute p=10 g=60 | acte p=1rarr0 g=00192 - actes p=20 g=40 | actualiteacute p=10 g=70 | actuellement p=10 g=90 | acte p=10rarrg=00192 - actes p=20 g=40 | acte p=10 g=20 | actuellement p=10 g=90 | actualiteacute p=10rarrg=50184 - actuellement p=10 g=110 | actes p=20 g=30 | actualiteacute p=10 g=60 | acte p=1rarr0 g=00184 - actuellement p=10 g=110 | actes p=20 g=30 | acte p=10 g=10 | actualiteacute p=1rarr0 g=50184 - actualiteacute p=10 g=80 | actes p=20 g=30 | actuellement p=10 g=90 | acte p=10rarrg=00184 - actualiteacute p=10 g=80 | actes p=20 g=30 | acte p=10 g=10 | actuellement p=10rarrg=80184 - acte p=10 g=30 | actes p=20 g=30 | actuellement p=10 g=90 | actualiteacute p=10rarrg=50184 - acte p=10 g=30 | actes p=20 g=30 | actualiteacute p=10 g=60 | actuellement p=10rarrg=80176 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actes p=20 g=20 | acte p=1rarr0 g=00176 - actuellement p=10 g=110 | acte p=10 g=20 | actes p=20 g=20 | actualiteacute p=1rarr0 g=50176 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | actes p=20 g=20 | acte p=1rarr0 g=00176 - actualiteacute p=10 g=80 | acte p=10 g=20 | actes p=20 g=20 | actuellement p=10rarrg=80176 - acte p=10 g=30 | actuellement p=10 g=100 | actes p=20 g=20 | actualiteacute p=1rarr0 g=50176 - acte p=10 g=30 | actualiteacute p=10 g=70 | actes p=20 g=20 | actuellement p=10rarrg=80168 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | acte p=10 g=10 | actes p=2rarr0 g=10168 - actuellement p=10 g=110 | acte p=10 g=20 | actualiteacute p=10 g=60 | actes p=2rarr0 g=10168 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | acte p=10 g=10 | actes p=2rarr0 g=10168 - actualiteacute p=10 g=80 | acte p=10 g=20 | actuellement p=10 g=90 | actes p=20rarrg=10168 - acte p=10 g=30 | actuellement p=10 g=100 | actualiteacute p=10 g=60 | actes p=2rarr0 g=10168 - acte p=10 g=30 | actualiteacute p=10 g=70 | actuellement p=10 g=90 | actes p=20rarrg=10

92 Galleries 373

Machine Learning Statistiques et Programmation Version 035930

Nouvelle meacutetrique

Intuition

def gain_moyen_par_mot(queries weights)total = sum(weights) 10res = []for per in itertoolspermutations(zip(queries weights))

trie = CompletionTrieNodebuild([(None w) for w p in per])wks = [(w p len(w)-triemin_keystroke(w)[0]) for w p in per]gain = sum( gptotal for w p g in wks)resappend((gain wks))

ressort(reverse=True)for i r in enumerate(res)

print(034 - 1format(r[0] | join(s p=11f g=11f _ for _ inrarrr[1])))

if i gt 10print()break

queries = [actuellement actualiteacute actuel]weights = [1 1 1]gain_moyen_par_mot(queries weights)

70 - actuellement p=10 g=110 | actuel p=10 g=40 | actualiteacute p=10 g=6070 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actuel p=10 g=3070 - actuel p=10 g=50 | actuellement p=10 g=100 | actualiteacute p=10 g=6070 - actuel p=10 g=50 | actualiteacute p=10 g=70 | actuellement p=10 g=9070 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | actuel p=10 g=3070 - actualiteacute p=10 g=80 | actuel p=10 g=40 | actuellement p=10 g=90

queries = [actuellement actualiteacute actuel]weights = [1 1 0]gain_moyen_par_mot(queries weights)

90 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actuel p=00 g=3090 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | actuel p=00 g=3085 - actuellement p=10 g=110 | actuel p=00 g=40 | actualiteacute p=10 g=6085 - actualiteacute p=10 g=80 | actuel p=00 g=40 | actuellement p=10 g=9080 - actuel p=00 g=50 | actuellement p=10 g=100 | actualiteacute p=10 g=6080 - actuel p=00 g=50 | actualiteacute p=10 g=70 | actuellement p=10 g=90

queries = [actuellement actualiteacute]weights = [1 1]gain_moyen_par_mot(queries weights)

90 - actuellement p=10 g=110 | actualiteacute p=10 g=7090 - actualiteacute p=10 g=80 | actuellement p=10 g=100

374 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Veacuterification

def gain_dynamique_moyen_par_mot(queries weights permutation=True)total = sum(weights) 10res = []for per in itertoolspermutations(zip(queries weights))

trie = CompletionTrieNodebuild([(None w) for w p in per])trieprecompute_stat()trieupdate_stat_dynamic()wks = [(w p len(w)-triemin_dynamic_keystroke(w)[0]) for w p in per]gain = sum( gptotal for w p g in wks)resappend((gain wks))if not permutation

breakressort(reverse=True)for i r in enumerate(res)

print(034 - 1format(r[0] | join(s p=11f g=11f _ for _ inrarrr[1])))

if i gt 10print()break

Pas de changement

queries = [actuellement actualiteacute actuel]weights = [1 1 0]gain_dynamique_moyen_par_mot(queries weights)

90 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actuel p=00 g=3090 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | actuel p=00 g=3085 - actuellement p=10 g=110 | actuel p=00 g=40 | actualiteacute p=10 g=6085 - actuel p=00 g=50 | actualiteacute p=10 g=70 | actuellement p=10 g=10085 - actualiteacute p=10 g=80 | actuel p=00 g=40 | actuellement p=10 g=9080 - actuel p=00 g=50 | actuellement p=10 g=100 | actualiteacute p=10 g=60

Changements

queries = [actuellement actualiteacute actuel]weights = [1 1 1]gain_dynamique_moyen_par_mot(queries weights)

7333 - actuel p=10 g=50 | actualiteacute p=10 g=70 | actuellement p=10 g=10070 - actuellement p=10 g=110 | actuel p=10 g=40 | actualiteacute p=10 g=6070 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actuel p=10 g=3070 - actuel p=10 g=50 | actuellement p=10 g=100 | actualiteacute p=10 g=6070 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | actuel p=10 g=3070 - actualiteacute p=10 g=80 | actuel p=10 g=40 | actuellement p=10 g=90

gain_moyen_par_mot(queries weights)

70 - actuellement p=10 g=110 | actuel p=10 g=40 | actualiteacute p=10 g=6070 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actuel p=10 g=30

(suite sur la page suivante)

92 Galleries 375

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

70 - actuel p=10 g=50 | actuellement p=10 g=100 | actualiteacute p=10 g=6070 - actuel p=10 g=50 | actualiteacute p=10 g=70 | actuellement p=10 g=9070 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | actuel p=10 g=3070 - actualiteacute p=10 g=80 | actuel p=10 g=40 | actuellement p=10 g=90

Ajouter une compleacutetion

queries = [maceacuterer maline machinerie machinerie infernale machinerierarrinfernalissime

machine artistique machine automatiquemachine chaplin machine intelligente machine learning]

weights = [1] len(queries)gain_dynamique_moyen_par_mot(queries weights permutation=False)

101 - maceacuterer p=10 g=60 | maline p=10 g=40 | machinerie p=10 g=70 | machinerierarrinfernale p=10 g=160 | machinerie infernalissime p=10 g=200 | machine artistiquerarrp=10 g=120 | machine automatique p=10 g=120 | machine chaplin p=10 g=70 |rarrmachine intelligente p=10 g=110 | machine learning p=10 g=60

queries = [machine] + queriesweights = [1] len(queries)weights[queriesindex(machine)] = 00gain_dynamique_moyen_par_mot(queries weights permutation=False)

123 - machine p=00 g=60 | maceacuterer p=10 g=50 | maline p=10 g=30 | machinerie p=10rarrg=80 | machinerie infernale p=10 g=170 | machinerie infernalissime p=10 g=210 |rarrmachine artistique p=10 g=150 | machine automatique p=10 g=150 | machine chaplinrarrp=10 g=110 | machine intelligente p=10 g=160 | machine learning p=10 g=120

Wikipedia

bull PageCount283

bull dump284

Compleacutetion Simple

Evaluation drsquoune meacutetrique pour un systegraveme de compleacutetion sur quelques cas simples

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Meacutetrique Mrsquo (page 377)

283 httpsdumpswikimediaorgotherpagecounts-raw284 httpsdumpswikimediaorgbackup-indexhtml

376 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Meacutetrique Mrsquo

from mlstatpynlp import CompletionSystemmots = [po po rouge po vert po orange port port blanc port bleurarrport rouge]ens = CompletionSystem(mots)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

n=0 M=1 | pon=1 M=2 | po rougen=2 M=3 | po vertn=3 M=4 | po orangen=4 M=3 | portn=5 M=4 | port blancn=6 M=5 | port bleun=7 M=6 | port rouge

mots_rev = motscopy()mots_rev[4] mots_rev[-1] = mots_rev[-1] mots_rev[4]ens = CompletionSystem(mots_rev)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

n=0 M=1 | pon=1 M=2 | po rougen=2 M=3 | po vertn=3 M=4 | po orangen=4 M=3 | port rougen=5 M=4 | port blancn=6 M=5 | port bleun=7 M=3 | port

mots_court = [m[4] for m in mots if mstartswith(port) and len(m) gt 4]ens = CompletionSystem(mots_court)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

n=0 M=1 | blancn=1 M=2 | bleun=2 M=3 | rouge

mots_court = [m for m in mots if m = port]ens = CompletionSystem(mots_court)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

92 Galleries 377

Machine Learning Statistiques et Programmation Version 035930

n=0 M=1 | pon=1 M=2 | po rougen=2 M=3 | po vertn=3 M=4 | po orangen=4 M=3 | port blancn=5 M=4 | port bleun=6 M=5 | port rouge

couleur = [blanc vert orange rouge noir noire blanche]key = portesmots = [port port rouge port vert port orange pore pour]motsappend(key)mots += [key + + c for c in couleur]ens = CompletionSystem(mots)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

n=0 M=1 | portn=1 M=2 | port rougen=2 M=3 | port vertn=3 M=4 | port orangen=4 M=4 | poren=5 M=4 | pourn=6 M=3 | portesn=7 M=4 | portes blancn=8 M=5 | portes vertn=9 M=6 | portes orangen=10 M=6 | portes rougen=11 M=6 | portes noirn=12 M=7 | portes noiren=13 M=5 | portes blanche

mots2 = [m for m in mots if m = portes]ens = CompletionSystem(mots2)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

n=0 M=1 | portn=1 M=2 | port rougen=2 M=3 | port vertn=3 M=4 | port orangen=4 M=4 | poren=5 M=4 | pourn=6 M=3 | portes blancn=7 M=4 | portes vertn=8 M=5 | portes orangen=9 M=6 | portes rougen=10 M=6 | portes noirn=11 M=7 | portes noiren=12 M=4 | portes blanche

378 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

mots3 = mots2copy()mots3insert(1 portes)ens = CompletionSystem(mots3)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

n=0 M=1 | portn=1 M=2 | portesn=2 M=3 | port rougen=3 M=4 | port vertn=4 M=4 | port orangen=5 M=4 | poren=6 M=4 | pourn=7 M=3 | portes blancn=8 M=4 | portes vertn=9 M=5 | portes orangen=10 M=5 | portes rougen=11 M=5 | portes noirn=12 M=6 | portes noiren=13 M=4 | portes blanche

Completion Trie andmetrics (page 355)

Evaluation of a completion system on wikpedia pages

Completion profiling(page 363)

Profiling avec cProfile memory_profiler pyinstrument snakeviz

Compleacutetion(page 370)

Comparaion de plusieurs algorithmes pour impleacutementer un systegraveme decompleacutetion

Compleacutetion Simple(page 376)

Evaluation drsquoune meacutetrique pour un systegraveme de compleacutetion sur quelquescas simples

92 Galleries 379

Machine Learning Statistiques et Programmation Version 035930

Notebooks Coverage

Report on last executions100 2022-05-30

380 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

index coverageexetime

lastexecution

name title successtime nbcells

nbruns

nbvalid

0 100 0128 2022-05-30

dsgardenclassification_multipleipynb(page 326)

Classification multiple(page 326)

True 3270 2 2 2

1 100 1057502022-05-30

dsgardencorrelation_non_lineaireipynb(page 282)

Correacutelations nonlineacuteaires (page 282)

True 10893141 41 41

2 100 254842022-05-30

dsgardendiscret_gradientipynb(page 313)

Le gradient et le discret(page 313)

True 2863522 22 22

3 100 9101 2022-05-30

dsgardenfile_dattente_exipynb(page 328)

File drsquoattente unexemple simple(page 328)

True 122148 8 8

4 100 6688 2022-05-30

dsgardenquantile_regression_exampleipynb(page 125)

Reacutegression quantileillustreacutee (page 125)

True 9845 10 10 10

5 100 205002022-05-30

dsgardenregression_lineaireipynb(page 107)

Reacutegression lineacuteaire(page 107)

True 2365541 41 41

6 100 2670542022-05-30

dsgardensplit_train_testipynb(page 267)

Reacutepartir en basedrsquoapprentissage et detest (page 267)

True 27022029 29 29

7 100 451632022-05-30

imagesegment_detectionipynb(page 261)

Deacutetection de segmentsdans une image(page 261)

True 4832817 17 17

8 100 8300 2022-05-30

metricpvalues_examplesipynb(page 235)

p-values (page 235) True 1164011 11 11

9 100 103502022-05-30

metricroc_exampleipynb(page 332)

ROC (page 332) True 1350021 21 21

10 100 168982022-05-30

mlbenchmarkipynb(page 339)

Benchmark (page 339) True 202269 9 9

11 100 578262022-05-30

mllogreg_voronoiipynb(page 161)

Voronoiuml et reacutegressionlogistique (page 161)

True 6112464 64 64

12 100 8253 2022-05-30

mlmf_acpipynb(page 342)

Factorisation et matriceet ACP (page 342)

True 1138114 14 14

13 100 3167802022-05-30

mlneural_treeipynb(page 87)

Un arbre de deacutecisionen reacuteseaux de neurones(page 87)

True 32004362 62 62

14 100 110512022-05-30

mlpiecewise_linear_regressionipynb(page 129)

Reacutegression lineacuteaire parmorceaux (page 129)

True 142137 7 7

15 100 2835952022-05-30

mlregression_no_inversionipynb(page 147)

Reacutegression sansinversion (page 147)

True 28670317 17 17

16 100 4432 2022-05-30

mlreseau_neuronesipynb(page 192)

Reacuteseaux de neurones(page 192)

True 7580 5 5 5

17 100 1492502022-05-30

mlsurvivalipynb(page 197)

Analyse de survie(page 197)

True 15233215 15 15

18 100 9986 2022-05-30

mlvaleurs_manquantes_mfipynb(page 346)

Valeurs manquanteset factorisation dematrices (page 346)

True 1310035 35 35

19 100 967422022-05-30

nlpcompletion_profilingipynb(page 363)

Completion profiling(page 363)

True 9985720 20 20

20 100 0914 2022-05-30

nlpcompletion_simpleipynb(page 376)

Compleacutetion Simple(page 376)

True 4006 9 9 9

21 100 2270 2022-05-30

nlpcompletion_trieipynb(page 370)

Compleacutetion (page 370) True 5394 15 15 15

22 100 6436272022-05-11

nlpcompletion_trie_longipynb(page 355)

Completion Trie andmetrics (page 355)

True 64778116 16 16

92 Galleries 381

Machine Learning Statistiques et Programmation Version 035930

382 Chapter 9 Galleries

CHAPTER 10

API

101 Machine Learning

bull Meacutetriques (page 383)bull Tree and neural networks (page 384)

1011 Meacutetriques

mlstatpymlMlGridBenchMark (self name datasets clog = None fLOG = ltfunction noLOG at 0x7f0cecf745e0gtpath_to_images = iquestiquest cache_file = None progressbar = None graphx = None graphy = None params)

The class tests a list of model over a list of datasetsmlstatpymlROC (self y_true = None y_score = None sample_weight = None df = None)

Helper to draw a ROC285 curvemlstatpymlvoronoi_estimation_from_lr (L B C = None D = None cl = 0 qr = True max_iter = Noneverbose = False)

Determines a Voronoi diagram close to a convex partition defined by a logistic regression in n classesM isin Mnd a row matrix (L1 Ln) Every border between two classes i and j is defined by ⟨Li X⟩ +B = ⟨Lj X⟩+BThe function looks for a set of points from which the Voronoi diagram can be inferred It is done througha linear regression with norm L1 See Reacutegression logistique diagramme de Voronoiuml k-Means (page 155)

285 httpsfrwikipediaorgwikiCourbe_ROC

383

Machine Learning Statistiques et Programmation Version 035930

1012 Tree and neural networks

mlstatpyml_neural_tree_nodeNeuralTreeNode (self weights bias = None activation = iquestsigmoidiquest nodeid= -1 tag = None)

One node in a neural networkmlstatpymlneural_treeNeuralTreeNet (self dim empty = True)

Node ensemble

102 Optimisation

bull Gradient (page 384)

1021 Gradient

mlstatpyoptimSGDOptimizer (self coef learning_rate_init = 01 lr_schedule = iquestinvscalingiquest momentum = 09power_t = 05 early_th = None min_threshold = None max_threshold = None l1 = 00 l2 = 00)

Stochastic gradient descent optimizer with momentum

103 Traitement du langage naturel

bull Compleacutetion (page 384)bull Normalisation (page 386)

1031 Compleacutetion

mlstatpynlpCompletionElement (self value weight = 10 disp = None)Definition of an element in a completion system it contains the following members

bull value the completionbull weight a weight or a position we assume a completion with a lower weight is shown at a lower

positionbull disp display string (no impact on the algorithm)bull mks0 value of minimum keystrokebull mks0_ length of the prefix to obtain mks0bull mks1 value of dynamic minimum keystrokebull mks1_ length of the prefix to obtain mks1bull mks2 value of modified dynamic minimum keystrokebull mks2_ length of the prefix to obtain mks2

empty_prefix ()return an instance filled with an empty prefix

init_metrics (self position completions = None)

384 Chapter 10 API

Machine Learning Statistiques et Programmation Version 035930

initiate the metricsstr_all_completions (self maxn = 10 use_precompute = True)

builds a string with all completions for all prefixes along the paths this is only available ifparameter completions was used when calling method update_metrics

str_mks (self )return a string with metric information

str_mks0 (self )return a string with metric information

update_metrics (self prefix position improved delta completions = None iteration = -1)update the metrics

mlstatpynlpCompletionSystem (self elements)define a completion systemcompare_with_trie (self delta = 08 fLOG = ltfunction noLOG at 0x7f0cecf745e0gt)

Compares the results with the other implementationcompute_metrics (self ffilter = None delta = 08 details = False fLOG = ltfunction noLOG at0x7f0cecf745e0gt)

Computes the metric for the completion itselfenumerate_test_metric (self qset)

Evaluates the completion set on a set of queries the function returns a list ofCompletionElement with the three metrics M M prime Mrdquo for these particular queries

find (self value is_sorted = False)Not very efficient finds an item in a the list

items (self )Iterates on (evalue e)

sort_values (self )sort the elements by value

sort_weight (self )Sorts the elements by value

test_metric (self qset)Evaluates the completion set on a set of queries the function returns a dictionary with theaggregated metrics and some statistics about them

to_dict (self )Returns a dictionary

tuples (self )Iterates on (eweight evalue)

103 Traitement du langage naturel 385

Machine Learning Statistiques et Programmation Version 035930

1032 Normalisation

mlstatpydatawikipedianormalize_wiki_text (text)Normalizes a text such as a wikipedia title

mlstatpynlpremove_diacritics (input_str)remove diacritics

104 Source de donneacutees

bull Wikipeacutedia (page 386)

1041 Wikipeacutedia

mlstatpydatawikipediadownload_dump (country name folder = iquestiquest unzip = True timeout = -1 overwrite =False fLOG = ltfunction noLOG at 0x7f0cecf745e0gt)

Downloads wikipedia dumps from dumpswikimediaorgfrwikilatest286mlstatpydatawikipediadownload_pageviews (dt folder = iquestiquest unzip = True timeout = -1 overwrite = FalsefLOG = ltfunction noLOG at 0x7f0cecf745e0gt)

Downloads wikipedia pagacount for a precise date (up to the hours) the url follows the pattern

httpsdumpswikimediaorgotherpageviewsYY-mpagecounts-Ymd-H0000rarrgz

mlstatpydatawikipediadownload_titles (country folder = iquestiquest unzip = True timeout = -1 overwrite =False fLOG = ltfunction noLOG at 0x7f0cecf745e0gt)

Downloads wikipedia titles from dumpswikimediaorgfrwikilatestlatest-all-titles-in-ns0gz287mlstatpydatawikipediaenumerate_titles (filename norm = True encoding = iquestutf8iquest)

Enumerates titles from a filemlstatpydatawikipediadownload_dump (country name folder = iquestiquest unzip = True timeout = -1 overwrite =False fLOG = ltfunction noLOG at 0x7f0cecf745e0gt)

Downloads wikipedia dumps from dumpswikimediaorgfrwikilatest288

105 Graphes

bull Distance (page 387)

286 httpsdumpswikimediaorgfrwikilatest287 httpsdumpswikimediaorgfrwikilatestlatest-all-titles-in-ns0gz288 httpsdumpswikimediaorgfrwikilatest

386 Chapter 10 API

Machine Learning Statistiques et Programmation Version 035930

1051 Distance

mlstatpygraphGraphDistance (self edge_list vertex_label = None add_loop = False weight_vertex = 10weight_edge = 10)

Defines a graph to compute a distance between two graphsdistance_matching_graphs_paths (self graph2 function_mach_vertices = Nonefunction_match_edges = None noClean = False store = None use_min = True weight_vertex =10 weight_edge = 10 verbose = 0 fLOG = ltbuilt-in function printgt)

Computes an alignment between two graphs

106 Image

bull Conversion (page 387)bull Images aleacuteatoires (page 387)bull Segments (page 387)

1061 Conversion

mlstatpyimagedetection_segmentconvert_array2PIL (img mode = None)Convertit une image donneacutee sous la forme drsquoun array au format numpyarray289

mlstatpyimagedetection_segmentconvert_PIL2array (img)Convertit une image donneacutee sous la forme drsquoune image Pillow290 au format numpyarray291

1062 Images aleacuteatoires

mlstatpyimagedetection_segmentrandom_noise_image (size ratio = 01)Construit une image blanche de taille size noircit aleacuteatoirement ratio x nb pixels pixels

mlstatpyimagedetection_segmentrandom_segment_image (image lmin = 01 lmax = 10 noise = 001density = 10)

Ajoute un segment aleacuteatoire agrave une image Geacutenegravere des points le long drsquoun segment aleacuteatoire

1063 Segments

mlstatpyimagedetection_segmentdetect_segments (image proba_bin = 00625 cos_angle =09807852804032304 seuil_nfa = 1e-05 seuil_norme = 2 angle = 01308996938995747 stop = -1 verbose =False)

Deacutetecte les segments dans une imagemlstatpyimagedetection_segmentplot_segments (image segments outfile = None color = (255 0 0))

Dessine les segments produits par la fonction detect_segments

289 httpsdocsscipyorgdocnumpyreferencegeneratednumpyarrayhtml290 httpspillowreadthedocsio291 httpsdocsscipyorgdocnumpyreferencegeneratednumpyarrayhtml

106 Image 387

Machine Learning Statistiques et Programmation Version 035930

388 Chapter 10 API

CHAPTER 11

Index

389

Machine Learning Statistiques et Programmation Version 035930

390 Chapter 11 Index

Bibliography

[Arthur2007] k-means++ the advantages of careful seeding (2007) Arthur D Vassilvitskii S Proceedings ofthe eighteenth annual ACM-SIAM symposium on Discrete algorithms Society for Industrial and AppliedMathematics Philadelphia PA USA pp 1027ndash1035 PDF7

[Balakrishnan1996] Comparative performance of the FSCL neural net and K-means algorithm for market segmentation(1996) P V Sundar Balakrishnan Martha Cooper Varghese S Jacob Phillip A Lewis European Journalof Operation Research volume 93 pages 346-357

[Bahmani2012] Scalable K-Means++ (2012) Bahman Bahmani Benjamin Moseley Andrea Vattani Ravi KumarSergei Vassilvitskii Proceedings of the VLDB Endowment (PVLDB) Vol 5 No 7 pp 622-633 (2012)PDF8 arXiv9

[Cheung2003] klowast-Means A new generalized k-means clustering algorithm (2003) Yiu-Ming Cheung PatternRecognition Letters volume 24 2883-2893

[Davies1979] A cluster Separation Measure (1979) D L Davies D W Bouldin IEEE Trans Pattern Analysis andMachine Intelligence (PAMI) volume 1(2)

[Goodman1954] Measures of associations for cross-validations (1954) L Goodman W Kruskal J Am Stat Assocvolume 49 pages 732-764

[Herbin2001] Estimation of the number of clusters and influence zones (2001) M Herbin N Bonnet P VautrotPattern Recognition Letters volume 22 pages 1557-1568

[Kothari1999] On finding the number of clusters (1999) Ravi Kothari Dax Pitts Pattern Recognition Letters volume20 pages 405-416

[Liu2003] Strip line detection and thinning by RPCL-based local PCA (2003) Zhi-Yong Liu Kai-Chun Chiu Lei XuPattern Recognition Letters volume 24 pages 2335-2344

[Silverman1986] Density Estimation for Statistics and Data Analysis (1986) B W Silverman Monographs onStatistics and Applied Probability Chapman and Hall London volume 26

[Xu1993] Rival penalized competitive learning for clustering analysis rbf net and curve detection (1993) L Xu AKrzyzak E Oja IEEE Trans Neural Networks volume (4) pages 636-649

[Biernacki2001] Assessing a Mixture Model for Clustering with the Integrated Completed Likelihood (2001) CBiernacki G Deleux G Govaert IEEE Transactions on Image Analysis and Machine Intelligence volume22(7) pages 719-725

7 httpilpubsstanfordedu809077812006-13pdf8 httptheorystanfordedu~sergeipapersvldb12-kmparpdf9 httpsarxivorgabs12036402

391

Machine Learning Statistiques et Programmation Version 035930

[Celeux1985] The SEM algorithm a probabilistic teacher algorithm derived from the EM algorithm for the mixtureproblem (1985) G Celeux J Diebolt Computational Statistics Quarterly Volume 2(1) pages 73-82

[Celeux1985b] On stochastic version of the EM algorithm (1985) Gilles Celeux Didier Chauveau Jean DieboltRapport de recherche de lrsquoINRIA n 2514

[Dempster1977] Maximum-Likelihood from incomplete data via the EM algorithm (1977) A P Dempster N MLaird D B Rubin Journal of Royal Statistical Society B volume 39 pages 1-38

[Figueiredo2002] Unsupervised learning of finite mixture models (2002) M A T Figueiredo A K Jain IEEETransactions on Pattern Analysis and Machine Intelligence volume 24(3) pages 381-396

[ZhangB2004] Competitive EM algorithm for finite mixture models (2004) Baibo Zhang Changshui Zhang XingYi Pattern Recognition volume 37 pages 131-144

[Kohonen1982] Self-organized formation of topologically correct feature maps (1982) T Kohonen Biol Cybernvolume (43) pages 59-69

[Kohonen1997] Self-Organizing Map (1997) T Kohonen Springer[Lo1991] On the rate of convergence in topology preserving neural networks (1991) Z Lo B Bavarian Biological

Cybernetics volume 63 pages 55-63[Rougier] Dynamic Self-Organising Map16 Nicolas P Rougier and Yann Boniface[Wu2004] Clustering of the self-organizing map using a clustering validity index based on inter-cluster and intra-cluster

density (2004) Sitao Wu Tommy W S Chow Pattern Recognition volume (37) pages 175-188[Bottou1991] Une approche theacuteorique de lrsquoapprentissage connexionniste Application agrave la reconnaissance de la

parole Leacuteon BottouThegravese de lrsquoUniversiteacute de Paris Sud Centre drsquoOrsay

[Broyden1967] Quasi-Newton methods and their application to function minimization (1967) C G Broyden MathComput pages 21-368

[Bishop1995] Neural networks for pattern recognition (1995) C M Bishop Oxford University Press[Cottrel1995] Neural modeling for time series a statistical stepwise methode for weight elimination (1995) M Cottrel

B Girard M Mangeas C Muller IEEE Transaction On Neural Networks[Cybenko1989] Approximation by superpositions of a sigmoidal function (1989) G Cybenko Mathematics of

Controls Signals and Systems p 303-314[Davidon1959] Variable metric method for minimization (1959) C W Davidon AEC Research and Development

Report ANL-5990[Driancourt1996] Optimisation par descente de gradient stochastique de systegravemes modulaires combinant reacuteseaux de

neurones et programmation dynamique Application agrave la reconnaissance de la parole (1996) X DriancourtThegravese de lrsquoUniversiteacute de Paris Sud Centre drsquoOrsay

[Fletcher1963] A rapidly convergent descent method for minimization (1963) R Fletcher M J D Powell ComputerJournal 6 pages 163-168

[Fletcher1993] An overview of Unconstrained Optimization (1993) R Fletcher Numerical Analysis Report NA149[Kullback1951] On information and sufficiency (1951) S Kullback R A Leibler Ann Math Stat 22 pages 79-86[LeCun1985] Une proceacutedure drsquoapprentissage pour reacuteseaux agrave seuil asymeacutetrique (1985) Yann Le Cun Cognita p 599-

604[Moreacute1977] The Levenberg-Marquardt algorithm Implementation and theory (1977) J J Moreacute Proceedings of the

1977 Dundee Conference on Numerical Analysis G A Watson ed Lecture Notes in Mathematics vol630 Springer-Verlag Berlin pages 105-116

[Rumelhart1986] Learning internal representations by error propagation (1986) D E Rumelhart G E Hinton R JWilliams in Parallel distributed processing explorations in the microstructures of cohniyionn MIT PressCambridge

16 httpwwwlabrifrpersonrougiercodingarticlearticlehtml

392 Bibliography

Machine Learning Statistiques et Programmation Version 035930

[Saporta1990] Probabiliteacutes analyse des donneacutees et statistique (1990) Gilbert Saporta Editions Technip[Song1997] Self-organizing algorithm of robust PCA based on single layer NN (1997) Song Wang Shaowei Xia

Proceedings of the 4th International Conference Document Analysis and Recognition[Beckmann1990] The R$^$-tree an efficient and robust access method for points and rectangles N Beckmann H

P Kriegel P Schneider B Seeger Proceedings of SIGMOD conference Atlantic City pages 322-331[Berchtold1996] The X-Tree An index structure for high dimension data S Berchtold D A Keim H P Kriegel

Proceedings of the 22nd Internation Conference on Very Large Databases Bombay India[Farago1993] Fast Nearest-Neighbor Search in Dissimilarity Spaces A Farago T Linder G Lugosi IEEE

Transactions on Pattern Analysis and Machine Intelligence volume 15(9) pages 957-962[Guttman1984] R-Trees A Dynamic Index Structure for Spatial Searching A Guttman Proceedings ACM SIGMOD

pages 47-57[Moreno2003] A modification of the LAESA algorithm for approximated k-NN classification Francisco Moreno-Seco

Luisa Mico Jose Oncina Pattern Recognition Letters volumne 24 pages 47-53[Rico-Juan2003] Comparison of AESA and LAESA search algorithms using string and tree-edit-distances J R Rico-

Juan L Mico Pattern Recognition Letters volume 24 pages 1417-1426[Sellis1987] The R+tree - a Dynamic Index for Multi-Dimensional Objects T Sellis N Roussopoulos C Faloutos

Proceedings of the 13th VLDB conference pages 507-518[Acara2011] Scalable tensorfactorizations for incomplete data Evrim Acara Daniel MDunlavyc Tamara GKoldab

Morten Moslashrupd Chemometrics and Intelligent Laboratory Systems Volume 106 Issue 1 15 March 2011Pages 41-56 or ArXiv 1005219788

[Boutsidis2008] SVD-based initialization A head start for nonnegative matrix factorization Christos Boutsidis andEfstratios Gallopoulos Pattern Recognition 41(4) 1350-1362 2008

[Gilles2014] The Why and How of Nonnegative Matrix Factorization Nicolas Gillis ArXiv 1401522689

[Gupta2010] Additive Non-negative Matrix Factorization for Missing Data Mithun Das Gupta ArXiv 1007038090

[Koenker2017] Quantile Regression 40 years on109 Roger Koenker (2017)[Chen2014] Fast Iteratively Reweighted Least Squares Algorithms for Analysis-Based Sparsity Reconstruction110

Chen Chen Junzhou Huang Lei He Hongsheng Li[Acharya2016] Fast Algorithms for Segmented Regression145 Jayadev Acharya Ilias Diakonikolas Jerry Li Ludwig

Schmidt ICML 2016146

[Cai2020] Online Sufficient Dimension Reduction Through Sliced Inverse Regression147 Zhanrui Cai Runze LiLiping Zhu

[Nie2016] Online PCA with Optimal Regret148 Jiazhong Nie Wojciech Kotlowski Manfred K Warmuth[Preda2010] The NIPALS Algorithm for Missing Functional Data149 Cristian Preda Gilbert Saporta Mohamed Hadj

Mbarek Revue roumaine de matheacutematiques pures et appliqueacutees 2010 55 (4) pp315-326[Char] Regularization and Penalized Regression154 Arthur Charpentier[Bampoulidis2017] Does Online Evaluation Correspond to Offline Evaluation in Query Auto Completion (2017)

Alexandros Bampoulidis Joatildeo PalottiMihai LupuJon BrasseyAllan Hanbury ECIR 2017 Advances inInformation Retrieval

88 httpsarxivorgpdf10052197pdf89 httpsarxivorgabs1401522690 httpsarxivorgabs10070380

109 httpwwweconuiucedu~rogercoursesNIPEhandoutsQR40pdf110 httpsarxivorgabs14115057145 httpsarxivorgabs160703990146 httpsicmlcc2016indexhtml147 httpwwwjmlrorgpapersvolume2118-56718-567pdf148 httpjmlrorgpapersvolume1715-32015-320pdf149 httpshalarchives-ouvertesfrhal-01125940document154 httpsfreakonometricshypothesesorg58240

Bibliography 393

Machine Learning Statistiques et Programmation Version 035930

[Sevenster2013] Algorithmic and user study of an autocompletion algorithm on a large medical vocabulary (2013)Merlijn Sevenster Rob van Ommering Yuechen Qian Journal of Biomedical Informatics 45 pages 107-119

[Agarwal2005] Generalization Bounds for the Area Under the ROC Curve (2005) Shivani Agarwal Thore GraepelRalf Herbich Sariel Har-Peled Dan Roth Journal of Machine Learning Research volume 6 pages 393-425

[Saporta1990] Probabiliteacutes analyse des donneacutees et statistique (1990) Gilbert Saporta Editions Technip[Damerau1964] A technique for computer detection and correction of spelling errors (1964) F J Damerau Commun

ACM volume 7(3) pages 171-176[Kripasundar1996] Generating edit distance to incorporate domain information (1996) V Kripasunder G Seni R K

Srihari CEDARSUNY[Levenstein1966] Binary codes capables of correctiong deletions insertions and reversals (1966) V I Levenstein

Soviet Physics Doklady volume 10(8) pages 707-710[Seni1996] Generalizing edit distance to incorporate domain information handwritten text recognition as a case study

(1996) Giovanni Seni V Kripasundar Rohini K Srihari Pattern Recognition volume 29 pages 405-414[Waard1995] An optimised minimal edit distance for hand-written word recognition (1995) W P de Waard Pattern

Recognition Letters volume 1995 pages 1091-1096[Wagner1974] The string-to-string correction problem (1974) R A Wagner M Fisher Journal of the ACM volume

21 pages 168-178[Blondel2004] A measure of similarity between graph vertices Vincent Blondel Anahi Gajardo Maureen Heymans

Pierre Senellart Paul Van Dooren arxiv0407061238

[Faure2000] Preacutecis de recherche opeacuterationnelle 5iegraveme eacutedition Robert Faure Bernard Lemaire Christophe PicouleauDunod

[Gourieacuteroux1983] Analyse des seacuteries temporelles Christian Gourieacuteroux Alain Monfort Editions Economica[Saporta2006] Probabiliteacutes analyse des donneacutees et statistique Gilbert Saporta Editions Technip

238 httpsarxivorgabscs0407061

394 Bibliography

  • Clustering
    • k-means
      • Principe
        • Homogeacuteneacuteiteacute des dimensions
          • Ameacuteliorations de linitialisation
            • K-means++
            • K-means||
              • Estimation de probabiliteacutes
              • Seacutelection du nombre de classes
                • Critegravere de qualiteacute
                • Maxima de la fonction densiteacute
                • Deacutecroissance du nombre de classes
                  • Extension des nueacutees dynamiques
                    • Classes elliptiques
                    • Rival Penalized Competitive Learning (RPCL)
                    • RPCL-based local PCA
                    • Frequency Sensitive Competitive Learning (FSCL)
                      • k-means norme L1
                      • Bibliographie
                        • Meacutelange de lois normales
                          • Algorithme EM
                          • Competitive EM algorithm
                          • Bibliographie
                            • Carte de Kohonen
                              • Principe
                              • Carte de Kohonen et classification
                              • Autres utilisation des cartes de Kohenen
                              • Bibliographie
                                  • Non lineacuteaire
                                    • Reacuteseaux de neurones
                                      • Deacutefinition des reacuteseaux de neurones multi-couches
                                        • Un neurone
                                        • Une couche de neurones
                                        • Un reacuteseau de neurones le perceptron
                                          • La reacutegression
                                          • La classification
                                          • Deacutemonstration du theacuteoregraveme de la densiteacute des reacuteseaux de neurones
                                            • Formulation du problegraveme de la reacutegression
                                            • Densiteacute des reacuteseaux de neurones
                                              • Descente de gradient
                                                • Algorithme et convergence
                                                • Calcul du gradient ou reacutetropropagation
                                                  • Apprentissage dun reacuteseau de neurones
                                                    • Apprentissage avec gradient global
                                                      • Meacutethodes du premier ordre
                                                      • Meacutethodes du second ordre
                                                        • Apprentissage avec gradient stochastique
                                                          • Classification
                                                            • Vraisemblance dun eacutechantillon de variable suivant une loi multinomiale
                                                            • Problegraveme de classification pour les reacuteseaux de neurones
                                                            • Reacuteseau de neurones adeacutequat
                                                              • Prolongements
                                                                • Base dapprentissage et base de test
                                                                • Fonction de transfert agrave base radiale
                                                                • Poids partageacutes
                                                                • Deacuteriveacutee par rapport aux entreacutees
                                                                • Reacutegularisation ou Decay
                                                                • Problegravemes de gradients
                                                                • Seacutelection de connexions
                                                                  • Analyse en composantes principales (ACP) et Auto Encoders
                                                                    • Problegraveme de lanalyse en composantes principales
                                                                    • Reacutesolution dune ACP avec un reacuteseau de neurones diabolo
                                                                    • Calcul de valeurs propres et de vecteurs propres
                                                                    • Analyse en Composantes Principales (ACP)
                                                                      • Bibliographie
                                                                        • Classification agrave laide des plus proches voisins
                                                                          • Principe
                                                                          • B+ tree
                                                                          • R-tree ou Rectangular Tree
                                                                          • LAESA
                                                                          • Reacutesultats theacuteoriques
                                                                          • Impleacutementation
                                                                          • Bilbiographie
                                                                            • Liens entre factorisation de matrices ACP k-means
                                                                              • Factorisation de matrices et rang
                                                                              • Quelques cas simples
                                                                              • Intuition geacuteomeacutetrique
                                                                              • k-means
                                                                              • Quelques reacutesultats
                                                                              • Prolongements
                                                                                • Factorisation non-neacutegative
                                                                                • Preacutediction
                                                                                • Norme
                                                                                • Sparsiteacute
                                                                                • Valeurs manquantes
                                                                                • Interpreacutetation
                                                                                • NTF
                                                                                  • Bibliographie
                                                                                    • Un arbre de deacutecision en reacuteseaux de neurones
                                                                                      • Un exemple sur Iris
                                                                                      • Mecircme exemple en reacuteseau de neurones
                                                                                      • Intermegravede de simples neurones de reacutegression
                                                                                      • Intermegravede de simples neurones de classification
                                                                                      • Apprentissage du reacuteseau de neurones
                                                                                      • Autre architecture
                                                                                          • Reacutegression lineacuteaire
                                                                                            • Reacutegression lineacuteaire
                                                                                              • Un cas simple
                                                                                              • Evolution de R2
                                                                                              • Deux variables correacuteleacutees
                                                                                              • Indicatrices
                                                                                              • Reacutegression lineacuteaire par morceaux
                                                                                                • Reacutegression quantile
                                                                                                  • Meacutediane et valeur absolue
                                                                                                  • Reacutegression quantile
                                                                                                  • Reacutesolution dune reacutegression quantile
                                                                                                  • Quantile et optimisation
                                                                                                  • Reacutegression quantile pour un quantile p quelconque
                                                                                                  • Reacutesolution dune reacutegression quantile pour un quantile p quelconque
                                                                                                  • Notebook
                                                                                                    • Reacutegression quantile illustreacutee
                                                                                                      • Un jeu de donneacutees non symeacutetrique
                                                                                                      • Reacutegression lineacuteaire et reacutegression quantile
                                                                                                      • Diffeacuterents quantiles
                                                                                                          • Bilbiographie
                                                                                                            • Reacutegression lineacuteaire par morceaux
                                                                                                              • Exploration
                                                                                                                • Problegraveme et regreacutession lineacuteaire dans un espace agrave une dimension
                                                                                                                  • Reacutegression lineacuteaire par morceaux
                                                                                                                    • Des donneacutees artificielles
                                                                                                                    • Quelques exemples avec un arbre de deacutecision
                                                                                                                    • Quelques exemples avec un KBinsDiscretizer
                                                                                                                    • Arbre de deacutecision optimiseacute pour la reacutegression lineacuteaire
                                                                                                                        • Impleacutementation naiumlve dune reacutegression lineacuteaire par morceaux
                                                                                                                        • Aparteacute sur la continuiteacute de la reacutegression lineacuteaire par morceaux
                                                                                                                        • Reacutegression lineacuteaire et correacutelation
                                                                                                                        • Ideacutee de lalgorithme
                                                                                                                        • Un peu plus en deacutetail dans lalgorithme
                                                                                                                          • Synthegravese matheacutematique
                                                                                                                          • Streaming
                                                                                                                            • Streaming Gram-Schmidt
                                                                                                                            • Streaming Linear Regression
                                                                                                                            • Streaming Linear Regression version Gram-Schmidt
                                                                                                                              • Digressions
                                                                                                                              • Notebooks
                                                                                                                                • Reacutegression sans inversion
                                                                                                                                  • Streaming versions
                                                                                                                                      • Impleacutementations
                                                                                                                                      • Bilbiographie
                                                                                                                                        • Normalisation des coefficients
                                                                                                                                          • Reacuteduction de dimension
                                                                                                                                          • Peacutenalisation L1 et L2
                                                                                                                                          • Bibliographie
                                                                                                                                              • Reacutegression logistique
                                                                                                                                                • Reacutegression logistique diagramme de Voronoiuml k-Means
                                                                                                                                                  • Diagramme de Voronoiuml
                                                                                                                                                  • Reacutegression logistique
                                                                                                                                                  • Diagramme de Voronoiuml et partition convexe
                                                                                                                                                  • Reacutegression logistique et partition convexe
                                                                                                                                                  • Voronoiuml et reacutegression logistique
                                                                                                                                                  • Notebooks
                                                                                                                                                    • Voronoiuml et reacutegression logistique
                                                                                                                                                      • Reacutegression logistique
                                                                                                                                                      • Quelques diagramme de Voronoiuml
                                                                                                                                                      • Un diagramme de Voronoiuml proche
                                                                                                                                                      • Reacutegression logistique dans un quadrillage
                                                                                                                                                      • Reacutegression logistique autour dun cercle
                                                                                                                                                      • Pousser les classes sur la boule uniteacute
                                                                                                                                                      • Cas presque hexagonal
                                                                                                                                                      • Diagramme de Voronoiuml approcheacute
                                                                                                                                                        • Reacutegression logistique par morceaux arbres de deacutecision
                                                                                                                                                          • Parallegravele entre un neurone et une reacutegression logistique
                                                                                                                                                          • Principe dun arbre de deacutecision
                                                                                                                                                          • Construction dun pseudo arbre
                                                                                                                                                          • Aparteacute matheacutematique
                                                                                                                                                          • Approche EM et reacutegression logistique
                                                                                                                                                          • Lien vers les reacuteseaux de neurones
                                                                                                                                                          • Plan orthogonal
                                                                                                                                                          • Interpreacutetabiliteacute
                                                                                                                                                          • Bibliographie
                                                                                                                                                            • Reacuteseaux de neurones
                                                                                                                                                            • Analyse de survie
                                                                                                                                                              • Lien avec le machine learning
                                                                                                                                                              • Courbe de Kaplan-Meier
                                                                                                                                                              • Reacutegression de Cox
                                                                                                                                                              • Notebooks
                                                                                                                                                                • Analyse de survie
                                                                                                                                                                  • Quelques donneacutees
                                                                                                                                                                  • Reacutegression de Cox
                                                                                                                                                                      • Liens articles
                                                                                                                                                                      • Modules
                                                                                                                                                                          • NLP
                                                                                                                                                                            • Compleacutetion
                                                                                                                                                                              • Formalisation
                                                                                                                                                                                • Problegraveme doptimisation
                                                                                                                                                                                • Ensemble des compleacutetions
                                                                                                                                                                                • Gain
                                                                                                                                                                                  • Fausses ideacutees reccedilues
                                                                                                                                                                                    • Il faut trier les compleacutetions par freacutequence deacutecroissante
                                                                                                                                                                                    • Il faut placer les compleacutetions courtes avant
                                                                                                                                                                                    • Il faut montrer toutes les compleacutetions
                                                                                                                                                                                    • Et si le poids de chaque compleacutetion est uniforme
                                                                                                                                                                                      • Nouvelle meacutetrique
                                                                                                                                                                                        • Intuitions
                                                                                                                                                                                        • Formalisation
                                                                                                                                                                                        • Quelques reacutesultats
                                                                                                                                                                                        • Deacutefinition avanceacutee
                                                                                                                                                                                        • Questions
                                                                                                                                                                                          • Proprieacuteteacutes matheacutematiques
                                                                                                                                                                                            • Calcul pour une compleacutetion
                                                                                                                                                                                            • Calcul pour une requecircte en dehors
                                                                                                                                                                                            • Compleacutetions emboicircteacutees
                                                                                                                                                                                            • Listes tronqueacutees de compleacutetions
                                                                                                                                                                                              • Problegraveme doptimisation
                                                                                                                                                                                                • Enonceacute 1
                                                                                                                                                                                                • Enonceacute 2
                                                                                                                                                                                                • Une ideacutee
                                                                                                                                                                                                  • Impleacutementation
                                                                                                                                                                                                    • Notion de trie
                                                                                                                                                                                                    • Algorithme eacuteleacutegant
                                                                                                                                                                                                      • Digressions
                                                                                                                                                                                                        • Synonymes Contexte
                                                                                                                                                                                                        • Source
                                                                                                                                                                                                        • Fonction de gain
                                                                                                                                                                                                        • Minuscules majuscules
                                                                                                                                                                                                        • Suppression de caractegraveres
                                                                                                                                                                                                        • Coucirct dun caractegravere
                                                                                                                                                                                                        • Compleacutetion partielle
                                                                                                                                                                                                        • Utilisateurs
                                                                                                                                                                                                        • Revenir en arriegravere
                                                                                                                                                                                                          • Meacutetriques
                                                                                                                                                                                                            • Courbe ROC
                                                                                                                                                                                                              • Deacutefinitions
                                                                                                                                                                                                              • Aire sous la courbe
                                                                                                                                                                                                                • Expression
                                                                                                                                                                                                                • Intervalles de confiance
                                                                                                                                                                                                                  • Intervalles de confiance sur la courbe
                                                                                                                                                                                                                    • Construction de la courbe ROC
                                                                                                                                                                                                                    • Meacutethode boostrap
                                                                                                                                                                                                                    • Aire sous la courbe
                                                                                                                                                                                                                      • Distribution des scores mauvais et bons
                                                                                                                                                                                                                      • Variantes
                                                                                                                                                                                                                        • Taux de lecture ou de reconnaissance
                                                                                                                                                                                                                          • Classification multi-classe
                                                                                                                                                                                                                          • Exemple
                                                                                                                                                                                                                            • Confidence Interval and p-Value
                                                                                                                                                                                                                              • Introduction
                                                                                                                                                                                                                              • p-value
                                                                                                                                                                                                                              • Significant difference between samples mean
                                                                                                                                                                                                                              • Application on binomial variables
                                                                                                                                                                                                                              • Estimate a p-value by using the distribution function
                                                                                                                                                                                                                              • Correlated variables
                                                                                                                                                                                                                              • Multiple comparisons problem
                                                                                                                                                                                                                              • Algorithm Expectation-Maximization
                                                                                                                                                                                                                              • Notebooks
                                                                                                                                                                                                                                • p-values
                                                                                                                                                                                                                                  • p-value table
                                                                                                                                                                                                                                  • p-values in 2D
                                                                                                                                                                                                                                  • p-value ratio
                                                                                                                                                                                                                                  • p-values and EM
                                                                                                                                                                                                                                  • p-value and heavy tail
                                                                                                                                                                                                                                      • Bibliographie
                                                                                                                                                                                                                                          • Algorithmes
                                                                                                                                                                                                                                            • Distance deacutedition
                                                                                                                                                                                                                                              • Deacutefinition et proprieacuteteacutes
                                                                                                                                                                                                                                                • Deacutefinition
                                                                                                                                                                                                                                                • Proprieacuteteacutes
                                                                                                                                                                                                                                                  • Factorisation des calculs
                                                                                                                                                                                                                                                  • Extension de la distance deacutedition
                                                                                                                                                                                                                                                  • Apprentissage dune distance deacutedition
                                                                                                                                                                                                                                                  • Bibliographie
                                                                                                                                                                                                                                                    • Distance between two graphs
                                                                                                                                                                                                                                                      • Definitions
                                                                                                                                                                                                                                                      • Problem
                                                                                                                                                                                                                                                      • First approach
                                                                                                                                                                                                                                                        • Step 1 edit distance
                                                                                                                                                                                                                                                        • Step 2 Kruskal kind (bijection on paths)
                                                                                                                                                                                                                                                        • Step 3 Matching
                                                                                                                                                                                                                                                        • Step 4 Kruskal kind the return (bijection on edges and vertices)
                                                                                                                                                                                                                                                        • Step 5 Merging the two graphs
                                                                                                                                                                                                                                                          • Distance between graphs
                                                                                                                                                                                                                                                          • Second approach faster
                                                                                                                                                                                                                                                          • Bibliography
                                                                                                                                                                                                                                                            • Deacutetection de segments
                                                                                                                                                                                                                                                              • Lideacutee
                                                                                                                                                                                                                                                              • Illustration
                                                                                                                                                                                                                                                                • Deacutetection de segments dans une image
                                                                                                                                                                                                                                                                  • Une image aleacuteatoire
                                                                                                                                                                                                                                                                  • Gradient
                                                                                                                                                                                                                                                                  • Deacutetection de segments
                                                                                                                                                                                                                                                                  • Deacutetection de segments sur une image
                                                                                                                                                                                                                                                                      • Explications
                                                                                                                                                                                                                                                                        • Bibliographie
                                                                                                                                                                                                                                                                          • Peacutereacutegrinations
                                                                                                                                                                                                                                                                            • Reacutepartir en base dapprentissage et de test
                                                                                                                                                                                                                                                                              • Reacutepartition naiumlve
                                                                                                                                                                                                                                                                              • Reacutepartition stratifieacutee
                                                                                                                                                                                                                                                                              • Streaming splitting
                                                                                                                                                                                                                                                                              • Streaming distribueacute
                                                                                                                                                                                                                                                                                • Correacutelations non lineacuteaires
                                                                                                                                                                                                                                                                                  • Un exemple
                                                                                                                                                                                                                                                                                  • Un peu de theacuteorie
                                                                                                                                                                                                                                                                                  • Veacuterifications
                                                                                                                                                                                                                                                                                  • Overfitting
                                                                                                                                                                                                                                                                                  • Correacutelations de variables cateacutegorielles
                                                                                                                                                                                                                                                                                  • Maximal information coefficient
                                                                                                                                                                                                                                                                                    • File dattente un petit exemple
                                                                                                                                                                                                                                                                                      • Petite histoire
                                                                                                                                                                                                                                                                                      • Un peu de theacuteorie
                                                                                                                                                                                                                                                                                        • File dattente cas MM1
                                                                                                                                                                                                                                                                                        • File dattente cas MMS
                                                                                                                                                                                                                                                                                        • Retour aux ampoules
                                                                                                                                                                                                                                                                                        • Application numeacuterique
                                                                                                                                                                                                                                                                                          • Programme informatique
                                                                                                                                                                                                                                                                                          • Bibliographie
                                                                                                                                                                                                                                                                                            • Optimisation avec donneacutees aleacuteatoires
                                                                                                                                                                                                                                                                                              • Un problegraveme simple
                                                                                                                                                                                                                                                                                              • Modeacutelisation de la demande
                                                                                                                                                                                                                                                                                              • Variations saisonniegraveres et prolongations
                                                                                                                                                                                                                                                                                              • Bibliographie
                                                                                                                                                                                                                                                                                                • Le gradient et le discret
                                                                                                                                                                                                                                                                                                  • Un petit problegraveme simple
                                                                                                                                                                                                                                                                                                  • Multiplication des observations
                                                                                                                                                                                                                                                                                                  • Introduire du bruit
                                                                                                                                                                                                                                                                                                  • Comparaisons de plusieurs modegraveles
                                                                                                                                                                                                                                                                                                  • Avec une ACP
                                                                                                                                                                                                                                                                                                  • Base dapprentissage et de test
                                                                                                                                                                                                                                                                                                  • Petite explication
                                                                                                                                                                                                                                                                                                      • Galleries
                                                                                                                                                                                                                                                                                                        • Gallery of examples
                                                                                                                                                                                                                                                                                                          • Arbre dindeacutecision
                                                                                                                                                                                                                                                                                                            • Un cas simple et un cas compliqueacute
                                                                                                                                                                                                                                                                                                              • Seuil de deacutecision
                                                                                                                                                                                                                                                                                                                • Galleries
                                                                                                                                                                                                                                                                                                                  • Le petit coin des data scientists
                                                                                                                                                                                                                                                                                                                    • Classification multiple
                                                                                                                                                                                                                                                                                                                      • Deacutebut de lhistoire
                                                                                                                                                                                                                                                                                                                        • Confusions
                                                                                                                                                                                                                                                                                                                        • Clustering
                                                                                                                                                                                                                                                                                                                          • Mise en pratique
                                                                                                                                                                                                                                                                                                                            • File dattente un exemple simple
                                                                                                                                                                                                                                                                                                                              • Images
                                                                                                                                                                                                                                                                                                                              • Meacutetriques
                                                                                                                                                                                                                                                                                                                                • ROC
                                                                                                                                                                                                                                                                                                                                  • Iris datasets
                                                                                                                                                                                                                                                                                                                                  • ROC with scikit-learn
                                                                                                                                                                                                                                                                                                                                  • ROC - TPR FPR
                                                                                                                                                                                                                                                                                                                                  • ROC - score distribution
                                                                                                                                                                                                                                                                                                                                  • ROC - recall precision
                                                                                                                                                                                                                                                                                                                                      • Machine Learning
                                                                                                                                                                                                                                                                                                                                        • Benchmark
                                                                                                                                                                                                                                                                                                                                          • Petit bench sur le clustering
                                                                                                                                                                                                                                                                                                                                            • Deacutefinition du bench
                                                                                                                                                                                                                                                                                                                                            • Lancer le bench
                                                                                                                                                                                                                                                                                                                                            • Reacutecupeacuterer les reacutesultats
                                                                                                                                                                                                                                                                                                                                            • Dessin Graphs
                                                                                                                                                                                                                                                                                                                                                • Factorisation et matrice et ACP
                                                                                                                                                                                                                                                                                                                                                  • Factorisation de matrices
                                                                                                                                                                                                                                                                                                                                                  • ACP analyse en composantes principales
                                                                                                                                                                                                                                                                                                                                                    • Valeurs manquantes et factorisation de matrices
                                                                                                                                                                                                                                                                                                                                                      • Matrice agrave coefficients aleacuteatoires
                                                                                                                                                                                                                                                                                                                                                      • Matrice avec des vecteurs colonnes correacuteleacutes
                                                                                                                                                                                                                                                                                                                                                      • Matrice identiteacute
                                                                                                                                                                                                                                                                                                                                                      • Matrice identiteacute et repreacutesentation spatiale
                                                                                                                                                                                                                                                                                                                                                          • NLP - Natural Language Processing
                                                                                                                                                                                                                                                                                                                                                            • Completion Trie and metrics
                                                                                                                                                                                                                                                                                                                                                              • Wikipedia titles uniform
                                                                                                                                                                                                                                                                                                                                                              • Reduce the alphabet size
                                                                                                                                                                                                                                                                                                                                                              • Wikipedia titles uniform longer test
                                                                                                                                                                                                                                                                                                                                                                • Completion profiling
                                                                                                                                                                                                                                                                                                                                                                  • Setup
                                                                                                                                                                                                                                                                                                                                                                    • Function to profile
                                                                                                                                                                                                                                                                                                                                                                    • Data
                                                                                                                                                                                                                                                                                                                                                                      • Standard modules
                                                                                                                                                                                                                                                                                                                                                                        • cProfile
                                                                                                                                                                                                                                                                                                                                                                          • Others informations when profiling
                                                                                                                                                                                                                                                                                                                                                                            • memory_profiler
                                                                                                                                                                                                                                                                                                                                                                              • Static Visualization
                                                                                                                                                                                                                                                                                                                                                                                • pyinstrument
                                                                                                                                                                                                                                                                                                                                                                                  • Javascript Visualization
                                                                                                                                                                                                                                                                                                                                                                                    • SnakeViz
                                                                                                                                                                                                                                                                                                                                                                                    • vprof py-spy
                                                                                                                                                                                                                                                                                                                                                                                        • Compleacutetion
                                                                                                                                                                                                                                                                                                                                                                                          • Tester des ideacutees
                                                                                                                                                                                                                                                                                                                                                                                            • Meilleur ordre pour a ab abc abcd
                                                                                                                                                                                                                                                                                                                                                                                            • Meilleur ordre pour a ab abc abcd edf edfh
                                                                                                                                                                                                                                                                                                                                                                                            • Influence du poids
                                                                                                                                                                                                                                                                                                                                                                                              • Nouvelle meacutetrique
                                                                                                                                                                                                                                                                                                                                                                                                • Intuition
                                                                                                                                                                                                                                                                                                                                                                                                  • Veacuterification
                                                                                                                                                                                                                                                                                                                                                                                                  • Ajouter une compleacutetion
                                                                                                                                                                                                                                                                                                                                                                                                  • Wikipedia
                                                                                                                                                                                                                                                                                                                                                                                                    • Compleacutetion Simple
                                                                                                                                                                                                                                                                                                                                                                                                      • Meacutetrique M
                                                                                                                                                                                                                                                                                                                                                                                                        • Notebooks Coverage
                                                                                                                                                                                                                                                                                                                                                                                                          • API
                                                                                                                                                                                                                                                                                                                                                                                                            • Machine Learning
                                                                                                                                                                                                                                                                                                                                                                                                              • Meacutetriques
                                                                                                                                                                                                                                                                                                                                                                                                              • Tree and neural networks
                                                                                                                                                                                                                                                                                                                                                                                                                • Optimisation
                                                                                                                                                                                                                                                                                                                                                                                                                  • Gradient
                                                                                                                                                                                                                                                                                                                                                                                                                    • Traitement du langage naturel
                                                                                                                                                                                                                                                                                                                                                                                                                      • Compleacutetion
                                                                                                                                                                                                                                                                                                                                                                                                                      • Normalisation
                                                                                                                                                                                                                                                                                                                                                                                                                        • Source de donneacutees
                                                                                                                                                                                                                                                                                                                                                                                                                          • Wikipeacutedia
                                                                                                                                                                                                                                                                                                                                                                                                                            • Graphes
                                                                                                                                                                                                                                                                                                                                                                                                                              • Distance
                                                                                                                                                                                                                                                                                                                                                                                                                                • Image
                                                                                                                                                                                                                                                                                                                                                                                                                                  • Conversion
                                                                                                                                                                                                                                                                                                                                                                                                                                  • Images aleacuteatoires
                                                                                                                                                                                                                                                                                                                                                                                                                                  • Segments
                                                                                                                                                                                                                                                                                                                                                                                                                                      • Index
                                                                                                                                                                                                                                                                                                                                                                                                                                      • Bibliography
Page 3: Machine Learning, Statistiques et Programmation

82 Correacutelations non lineacuteaires 28283 File drsquoattente un petit exemple 30184 Optimisation avec donneacutees aleacuteatoires 30885 Le gradient et le discret 313

9 Galleries 32391 Gallery of examples 32392 Galleries 326

10 API 383101 Machine Learning 383102 Optimisation 384103 Traitement du langage naturel 384104 Source de donneacutees 386105 Graphes 386106 Image 387

11 Index 389

Bibliography 391

ii

CHAPTER 1

Clustering

11 k-means

bull Principe (page 2)ndash Homogeacuteneacuteiteacute des dimensions (page 4)

bull Ameacuteliorations de lrsquoinitialisation (page 5)ndash K-means++ (page 5)ndash K-means|| (page 5)

bull Estimation de probabiliteacutes (page 6)bull Seacutelection du nombre de classes (page 7)

ndash Critegravere de qualiteacute (page 7)ndash Maxima de la fonction densiteacute (page 8)ndash Deacutecroissance du nombre de classes (page 9)

bull Extension des nueacutees dynamiques (page 11)ndash Classes elliptiques (page 11)ndash Rival Penalized Competitive Learning (RPCL) (page 12)ndash RPCL-based local PCA (page 14)ndash Frequency Sensitive Competitive Learning (FSCL) (page 16)

bull k-means norme L1 (page 16)bull Bibliographie (page 17)

Deacutenomination franccedilaise algorithme des centres mobiles

1

Machine Learning Statistiques et Programmation Version 035930

111 Principe

Les centres mobiles ou nueacutees dynamiques sont un algorithme de classification non superviseacutee A partir drsquoun ensemblede points il deacutetermine pour un nombre de classes fixeacute une reacutepartition des points qui minimise un critegravere appeleacute inertieou variance intra-classe

Algorithme A1 centre mobile k-meansOn considegravere un ensemble de points

(Xi)1⩽i⩽P isin(RN)P

A chaque point est associeacutee une classe (ci)1⩽i⩽P isin 1 CP On deacutefinit les barycentres des classes (Gi)1⩽i⩽C isin(

RN)C

InitialisationLrsquoinitialisation consiste agrave choisir pour chaque point une classe aleacuteatoirement dans 1 C On pose t = 0Calcul des barycentres

for k in 1C

Gtk larrminus

sumPi=1 Xi 1cti=k

sumPi=1 1cti=k

Calcul de lrsquoinertie

It larrminussumP

i=1 d2(Xi G

tcti

)t larrminus t+ 1

if t gt 0 et It sim Itminus1

arrecirct de lrsquoalgorithmeAttribution des classes

for in 1P

ct+1i larrminus argmin

kd (Xi G

tk)

ougrave d (Xi Gtk) est la distance entre Xi et Gt

k

Retour agrave lrsquoeacutetape du calcul des barycentres jusqursquoagrave convergence de lrsquoinertie It

Theacuteoregraveme T1 convergence des k-meansQuelque soit lrsquoinitialisation choisie la suite (It)t⩾0 construite par lrsquoalgorithme des k-means (page 2) converge

La deacutemonstration du theacuteoregraveme neacutecessite le lemme suivant

Lemme L1 inertie minimumSoit (X1 XP ) isin

(RN)P P points de RN le minimum de la quantiteacute Q

(Y isin RN

)

Q (Y ) =

Psumi=1

d2 (Xi Y ) (11)

2 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

est atteint pour Y = G =1

P

sumPi=1 Xi le barycentre des points (X1 XP )

Soit (X1 XP ) isin(RN)P P points de RN

Psumi=1

minusminusrarrGXi =

minusrarr0 =rArr

Psumi=1

d2 (Xi Y ) =

Psumi=1

d2 (Xi G) + P d2 (GY )

=rArr argminY isinRN

Psumi=1

d2 (Xi Y ) = G

On peut maintenant deacutemontrer le theacuteoregraveme Lrsquoeacutetape drsquoattribution des classes consiste agrave attribuer agrave chaque point lebarycentre le plus proche On deacutefinit Jt par

J t+1 =

Psumi=1

d2(Xi G

tct+1i

)(12)

On en deacuteduit que

J t+1 =sum

icti =ct+1i

d2(Xi G

tct+1i

)+ J t+1

sumicti=ct+1

i

d2(Xi G

tct+1i

)(13)

J t+1 ⩽sum

icti =ct+1i

d2(Xi G

tcti

)+

sumicti=ct+1

i

d2(Xi G

tcti

)(14)

J t+1 ⩽ It (15)

Le lemme preacuteceacutedent appliqueacute agrave chacune des classes 1 C permet drsquoaffirmer que It+1 ⩽ J t+1 Par conseacutequentla suite (It)t⩾0 est deacutecroissante et minoreacutee par 0 elle est donc convergenteLrsquoalgorithme des centres mobiles cherche agrave attribuer agrave chaque point de lrsquoensemble une classe parmi les C disponiblesLa solution trouveacutee deacutepend de lrsquoinitialisation et nrsquoest pas forceacutement celle qui minimise lrsquoinertie intra-classe lrsquoinertiefinale est un minimum local Neacuteanmoins elle assure que la partition est formeacutee de classes convexes soit c1 et c2deux classes diffeacuterentes on note C1 et C2 les enveloppes convexes des points qui constituent ces deux classes alorso

C1 capo

C2 = empty La figure suivante preacutesente un exemple drsquoutilisation de lrsquoalgorithme des centres mobiles Des pointssont geacuteneacutereacutes aleacuteatoirement dans le plan et reacutepartis en quatre groupes

11 k-means 3

Machine Learning Statistiques et Programmation Version 035930

Crsquoest une application des centres mobiles avec une classification en quatre classes drsquoun ensemble aleacuteatoire de pointsplus dense sur la partie droite du graphe Les quatre classes ainsi formeacutees sont convexes

Homogeacuteneacuteiteacute des dimensions

Les coordonneacutees des points (Xi) isin RN sont geacuteneacuteralement non homogegravenes les ordres de grandeurs de chaquedimension sont diffeacuterents Crsquoest pourquoi il est conseilleacute de centrer et normaliser chaque dimension On note foralli isin 1 middot middot middot P Xi = (Xi1 XiN )

gk = (EX)k =1

P

Psumi=1

Xik

vkk =(E (X minus EX)

2)kk

=(EX2

)kkminus g2k

Les points centreacutes et normaliseacutes sont

foralli isin 1 middot middot middot P X primei =

(xi1 minus g1radic

v11

xiN minus gNradicvNN

)

4 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

Lrsquoalgorithme des centres mobiles est appliqueacute sur lrsquoensemble (X primei)1⩽i⩽P Il est possible ensuite de deacutecorreacuteler les

variables ou drsquoutiliser une distance dite de Malahanobis1 deacutefinie par dM (XY ) = XM Y prime ougrave Y prime deacutesigne la transposeacuteede Y et M est une matrice symeacutetrique deacutefinie positive Dans le cas de variables correacuteleacutees la matrice M = Σminus1 ougraveΣminus1 est la matrice de variance-covariance des variables aleacuteatoires (Xi)i

112 Ameacuteliorations de lrsquoinitialisation

K-means++

Lrsquoarticle [Arthur2007] montre que lrsquoinitialisation aleacuteatoire nrsquoest pas efficace et est sensible aux outliers ou pointsaberrants Lrsquoeacutetape drsquoinitialisation est remplaceacutee par la suivante

Algorithme A2 initialisation k-means++Cette eacutetape drsquoinitialisation viendra remplacer celle deacutefinie dans lrsquoalgorithme k-means (page 2) On considegravere unensemble de points

X = (Xi)1⩽i⩽P isin(RN)P

A chaque point est associeacutee une classe (ci)1⩽i⩽P isin 1 CP

Pour k centres on choisit C1 au hasard dans lrsquoensemble X Pour les suivants 1 k larr 2

2 On choisit aleacuteatoirement Gk isin X avec la probabiliteacute P (x) = Dkminus1(x)2sum

xisinX Dkminus1(x)2

3 k larr k + 1

4 On revient agrave lrsquoeacutetape 2 jusqursquoagrave ce que k = CLa fonction Dk est deacutefinie par la distance du point x au centre Gl choisi parmi les k premiers centres Dk(x) =min1⩽l⩽k d(xminusGl)La suite de lrsquoalgorithme k-means++ reprend les mecircmes eacutetapes que k-means (page 2)

Cette initilisation eacuteloigne le prochain centre le plus possibles des centres deacutejagrave choisis Lrsquoarticle montre que

Theacuteoregraveme T2 Borne supeacuterieure de lrsquoerreur produite par k-means++On deacutefinit lrsquoinertie par J(X) =

sumPi=1 minG d2(Xi G) Si JOPT deacutefinit lrsquoinertie optimale alors EJ(X) ⩽ 8(lnC +

2)JOPT (X)

La deacutemonstration est disponible dans lrsquoarticle [Arthur2007]

K-means||

Lrsquoarticle [Bahmani2012] propose une autre initialisation que K-means++ (page 5) mais plus rapide et paralleacutelisable

Algorithme A3 initialisation k-means||Cette eacutetape drsquoinitialisation viendra remplacer celle deacutefinie dans lrsquoalgorithme k-means (page 2) On considegravere unensemble de points

X = (Xi)1⩽i⩽P isin(RN)P

A chaque point est associeacutee une classe (ci)1⩽i⩽P isin 1 CP

Pour k centres on choisit G = G1 au hasard dans lrsquoensemble X 1 httpsfrwikipediaorgwikiDistance_de_Mahalanobis

11 k-means 5

Machine Learning Statistiques et Programmation Version 035930

on reacutepegravete O(lnD(GX)) fois Gprime larr eacutechantillon aleacuteatoire issue de X de probabiliteacute p(x) = l D(Gx)2sum

x D(Gx)2

Glarr G cupGprime

La fonction D(G x) est deacutefinie par la distance du point x au plus proche centre g isin G D(g x) = mingisinG d(xminus g)Cette eacutetape ajoute agrave lrsquoensemble des centres G un nombre aleacuteatoire de centres agrave chaque eacutetape Lrsquoensemble G contiendraplus de C centres

1 Pour tout g isin G on assigne le poids wg = card y|d(x y) lt minhisinG d(x h)2 On clusterise lrsquoensemble des points G en C clusters (avec un k-means classique par exemple)

Au lieu drsquoajouter les centres un par un comme dans lrsquoalgorithme k-means++ (page 5) plusieurs sont ajouteacutes agrave chaquefois plus l est grand plus ce nombre est grand Le tirage drsquoun eacutechantillon aleacuteatoire consiste agrave inclure chaque point xavec la probabiliteacute p(x) = l D(Gx)2sum

x D(Gx)2

113 Estimation de probabiliteacutes

A partir de cette classification en C classes on construit un vecteur de probabiliteacutes pour chaque point (Xi)1⩽i⩽P ensupposant que la loi de X sachant sa classe cX est une loi normale multidimensionnelle La classe de Xi est noteacutee ciOn peut alors eacutecrire

foralli isin 1 middot middot middot C

Gi = E(X11cX=i

)=

sumPk=1 Xk11ck=isumPk=1 11ck=i

Vi = E(XX prime11cX=i

)=

sumPk=1 XkX

primek11ck=isumP

k=1 11ck=i

P (cX = i) =

Psumk=1

11ck=i

f (X|cX = i) =1

(2π)N2radic

det (Vi)eminus

12 (XminusGi)

prime V minus1i (XminusGi)

f (X) =

Psumk=1

f (X|cX = i)P (cX = i)

On en deacuteduit que

P (cX = i|X) =f (X|cX = i)P (cX = i)

f (X)

La densiteacute des obervations est alors modeacuteliseacutee par une meacutelange de lois normales chacune centreacutee au barycentrede chaque classe Ces probabiliteacutes peuvent eacutegalement ecirctre apprises par un reacuteseau de neurones classifieur ougrave servirdrsquoinitialisation agrave un algorithme EM2

2 httpsfrwikipediaorgwikiAlgorithme_espC3A9rance-maximisation

6 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

114 Seacutelection du nombre de classes

Critegravere de qualiteacute

Lrsquoalgorithme des centres mobiles effectue une classification non superviseacutee agrave condition de connaicirctre au preacutealable lenombre de classes et cette information est rarement disponible Une alternative consiste agrave estimer la pertinence desclassifications obtenues pour diffeacuterents nombres de classes le nombre de classes optimal est celui qui correspond agrave laclassification la plus pertinente Cette pertinence ne peut ecirctre estimeacutee de maniegravere unique elle deacutepend des hypothegravesesfaites sur les eacuteleacutements agrave classer notamment sur la forme des classes qui peuvent ecirctre convexes ou pas ecirctre modeacuteliseacuteespar des lois normales multidimensionnelles agrave matrice de covariances diagonales Les deux critegraveres qui suivent sontadapteacutes agrave lrsquoalgorithme des centres mobiles Le critegravere de Davies-Bouldin3 (voir [Davies1979]) est minimum lorsquele nombre de classes est optimal

DB =1

C

Csumi=1

maxi =j

σi + σj

d (Ci Cj)(16)

Avec

C nombre de classesσi eacutecart-type des distances des observations de la classe iCi centre de la classe i

Le critegravere de Goodman-Kruskal4 (voir [Goodman1954]) est quant agrave lui maximum lorsque le nombre de classes estoptimal Il est toutefois plus coucircteux agrave calculer

GK =S+ minus Sminus

S+ + Sminus (17)

Avec

S+ = (q r s t) |d (q r) lt d (s t)Sminus = (q r s t) |d (q r) lt d (s t)

Ougrave (q r) sont dans la mecircme classe et (s t) sont dans des classes diffeacuterentes3 httpsenwikipediaorgwikiDaviesE28093Bouldin_index4 httpsenwikipediaorgwikiGoodman_and_Kruskal27s_gamma

11 k-means 7

Machine Learning Statistiques et Programmation Version 035930

Classification en quatre classes nombre de classes seacutelectionneacutees par le critegravere de Davies-Bouldin dont les valeurs sontillustreacutees par le graphe apposeacute agrave droite

Maxima de la fonction densiteacute

Lrsquoarticle [Herbin2001] propose une meacutethode diffeacuterente pour estimer le nombre de classes il srsquoagit tout drsquoaborddrsquoestimer la fonction densiteacute du nuage de points qui est une fonction de Rn minusrarr R Cette estimation est effectueacutee aumoyen drsquoune meacutethode non paramegravetrique telle que les estimateurs agrave noyau (voir [Silverman1986]) Soit (X1 XN )un nuage de points inclus dans une image on cherche agrave estimer la densiteacute fH (x) au pixel x

fH (x) =1

N

Nsumi=1

1

detHK(Hminus1 (xminusXi)

)Ougrave

K (x) =1

(2π)d2

eminus∥x∥2

2

H est un paramegravetre estimeacutee avec la regravegle de Silverman Lrsquoexemple utiliseacute dans cet article est un problegraveme desegmentation drsquoimage qui ne peut pas ecirctre reacutesolu par la meacutethode des nueacutees dynamiques puisque la forme des classesnrsquoest pas convexe ainsi que le montre la figure suivante La fonction de densiteacute f est seuilleacutee de maniegravere agrave obtenir unefonction g Rn minusrarr 0 1 deacutefinie par

g (x) = 11f(x)⩾s

Lrsquoensemble gminus1 (1) sub Rn est composeacutee de N composantes connexes noteacutees (C1 CN ) la classe drsquoun point xest alors lrsquoindice de la composante connexe agrave la laquelle il appartient ou la plus proche le cas eacutecheacuteant

8 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

Exemple de classification non superviseacutee appliqueacutee agrave un problegraveme de segmentation drsquoimage la premiegravere figure montrela densiteacute obtenue la seconde figure illustre la classification obtenue figure extraite de [Herbin2001] Cette meacutethodeparaicirct neacuteanmoins difficilement applicable lorsque la dimension de lrsquoespace vectoriel atteint de grande valeur Lrsquoexemplede lrsquoimage est pratique elle est deacutejagrave deacutecoupeacutee en reacutegion repreacutesenteacutees par les pixels lrsquoensemble gminus1 (1) correspondagrave lrsquoensemble des pixels x pour lesquels f (x) ⩾ s

Deacutecroissance du nombre de classes

Lrsquoarticle [Kothari1999] propose une meacutethode permettant de faire deacutecroicirctre le nombre de classes afin de choisir le nombreapproprieacute Lrsquoalgorithme des centres mobiles proposent de faire deacutecroicirctre lrsquoinertie noteacutee I deacutefinie pour un ensemble depoints noteacute X = (x1 xN ) et K classes La classe drsquoun eacuteleacutement x est noteacutee C (x) Les centres des classes sontnoteacutes Y = (y1 yK) Lrsquoinertie de ce nuage de points est deacutefinie par

I =sumxisinX

∥∥xminus yC(x)

∥∥2On deacutefinit tout drsquoabord une distance α isin R+ puis lrsquoensemble V (y α) = z isin Y |d (y z) ⩽ α V (y α) est donclrsquoensemble des voisins des centres dont la distance avec y est infeacuterieur agrave α Lrsquoarticle [Kothari1999] propose deminimiser le coucirct J (α) suivant

J (α) =sumxisinX

∥∥xminus yC(x)

∥∥2 + sumxisinX

sumyisinV (yC(x)α)

λ (y)∥∥y minus yC(x)

∥∥2Lorsque α est nul ce facteur est eacutegal agrave lrsquoinertie I = J (0) et ce terme est minimal lorsqursquoil y a autant de classes quedrsquoeacuteleacutements dans X Lorsque α tend vers lrsquoinfini J (α)rarr J (infin) ougrave

J (infin) =sumxisinX

∥∥xminus yC(x)

∥∥2 + sumxisinX

sumyisinY

λ (y)∥∥y minus yC(x)

∥∥2Ici encore il est possible de montrer que ce terme J (infin) est minimal lorsqursquoil nrsquoexiste plus qursquoune seule classe Leprincipe de cette meacutethode consiste agrave faire varier le paramegravetre α plus le paramegravetre α augmente plus le nombre declasses devra ecirctre reacuteduit Neacuteanmoins il existe des intervalles pour lequel ce nombre de classes est stable le veacuteritablenombre de classes de lrsquoensemble X sera consideacutereacute comme celui correspondant au plus grand intervalle stable

11 k-means 9

Machine Learning Statistiques et Programmation Version 035930

(a) (b)

Evolutation du nombre de classes en fonction du paramegravetre α lors de la minimisation du critegravere J (α) figure extraitede [Kothari1999] La premiegravere image repreacutesente le nuage de points illustrant quatre classes sans recouvrement Laseconde image montre que quatre classes est lrsquoeacutetat le plus longtemps stable lorsque α croicirctLe coucirct J (α) est une somme de coucirct dont lrsquoimportance de lrsquoun par rapport agrave lrsquoautre est controcircle par les paramegravetresλ (y) Le problegraveme de minimisation de J (α) est reacutesolu par lrsquoalgorithme qui suit Il srsquoappuie sur la meacutethode desmultiplicateurs de Lagrange

Algorithme A4 seacutelection du nombre de classes(voir [Kothari1999]) Les notations sont celles utiliseacutes dans les paragraphes preacuteceacutedents On suppose que le paramegravetre αeacutevolue dans lrsquointervalle [α1 α2] agrave intervalle reacutegulier αt Le nombre initial de classes est noteacute K et il est supposeacutesurestimer le veacuteritable nombre de classes Soit η isin ]0 1[ ce paramegravetre doit ecirctre choisi de telle sorte que danslrsquoalgorithme qui suit lrsquoeacutevolution des centres yk soit autant assureacutee par le premier de la fonction de coucirct que par lesecondinitialisation

αlarrminus α1

On tire aleacuteatoirement les centres des K classes (y1 yK)preacuteparationOn deacutefinit les deux suites entiegraveres

(c11 c

1K

)(c21 c

2K

) et les deux suites de vecteur

(z11 z

1K

)(z21 z

2K

)

forallk c1k = 0forallk c2k = 0forallk z1k = 0forallk z2k = 0

calcul des mises agrave jour

for i in 1N

Mise agrave jour drsquoapregraves le premier terme de la fonction de coucirct J (α)w larrminus argmin

1⩽l⩽K∥xi minus yl∥2

z1w larrminus z1w + η (xi minus yw)

c1w larrminus c1w + 1

10 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

Mise agrave jour drsquoapregraves le second terme de la fonction de coucirct J (α)

for v in 1k

if ∥yv minus yw∥ lt α

z2v larrminus z2v minus (yv minus yw)

c2v larrminus c2v + 1

for v in 1k

λv larrminusc2v∥z1

v∥c1v∥z2

v∥

yv larrminus yv + z1v + λvz2v

convergenceTant que lrsquoeacutetape preacuteceacutedente nrsquoa pas convergeacute vers une version stable des centres yk retour agrave lrsquoeacutetape preacuteceacutedente Sinontous les couples de classes (i j) veacuterifiant ∥yi minus yj∥ gt α sont fusionneacutes α larrminus α + αt Si α ⩽ α2 retour agrave lrsquoeacutetapede preacuteparationterminaisonLe nombre de classes est celui ayant preacutevalu pour le plus grand nombre de valeur de α

115 Extension des nueacutees dynamiques

Classes elliptiques

La version de lrsquoalgorithme des nueacutees dynamique proposeacutee dans lrsquoarticle [Cheung2003] suppose que les classes ne sontplus de forme circulaire mais suivent une loi normale quelconque La loi de lrsquoeacutechantillon constituant le nuage de pointsest de la forme

f (x) =

Nsumi=1

pi1

(2π)d2radicdetΣi

exp

(minus1

2(xminus microi)

primeΣminus1

i (xminus microi)

)Avec sumN

i=1 pi = 1 On deacutefinit

G (x microΣ) =1

(2π)d2radicdetΣ

exp

(minus1

2(xminus micro)

primeΣminus1 (xminus micro)

)Lrsquoalgorithme qui suit a pour objectif de minimiser la quantiteacute pour un eacutechantillon (X1 XK)

I =

Nsumi=1

Ksumk=1

11i=argmax

1⩽j⩽NG(Xkmicroj Σj)

ln [piG (Xk microiΣi)]

Algorithme A5 nueacutees dynamiques geacuteneacuteraliseacuteesLes notations sont celles utiliseacutees dans ce paragraphe Soient η ηs deux reacuteels tels que η gt ηs La regravegle preacuteconiseacutee parlrsquoarticle [Cheung2003] est ηs sim η

10 initialisationtlarrminus 0 Les paramegravetres

p0i micro

0i Σ

0i |1 ⩽ i ⩽ N

sont initialiseacutes gracircce agrave un algorithme des k-means (page 2) ou FSCL

(page 16) foralli p0i = 1N et β0

i = 0

11 k-means 11

Machine Learning Statistiques et Programmation Version 035930

reacutecurrenceSoit Xk choisi aleacuteatoirement dans (X1 XK)

i = argmin1⩽i⩽N

G(Xk micro

tiΣ

ti

)

for i in 1N

microt+1i = microt

i + η (Σti)

minus1(Xk minus microt

i)

βt+1i = βt

i + η (1minus αti)

Σt+1i = (1minus ηs) Σ

ti + ηs (Xk minus microt

i) (Xk minus microti)

prime

for i in 1N

pt+1i = eβ

t+1isumN

j=1 eβt+1j

tlarrminus t+ 1

terminaisonTant que argmin

1⩽i⩽NG (Xk micro

tiΣ

ti) change pour au moins un des points Xk

Lors de la mise agrave jour de Σminus1 lrsquoalgorithme preacuteceacutedent propose la mise agrave jour de Σi alors que le calcul de G ( microiΣi)implique Σminus1

i par conseacutequent il est preacutefeacuterable de mettre agrave jour directement la matrice Σminus1

(Σt+1

i

)minus1=

(Σti)

minus1

1minus ηs

[I minus ηs (Xk minus microt

i) (Xk minus microti)

prime(Σt

i)minus1

1minus ηs + ηs (Xk minus microti)

prime(Σt

i)minus1

(Xk minus microti)

]

Rival Penalized Competitive Learning (RPCL)

Lrsquoalgorithme suivant deacuteveloppeacute dans [Xu1993] est une variante de celui des centres mobiles Il entreprend agrave la foisla classification et la seacutelection du nombre optimal de classes agrave condition qursquoil soit infeacuterieur agrave une valeur maximale agravedeacuteterminer au deacutepart de lrsquoalgorithme Un meacutecanisme permet drsquoeacuteloigner les centres des classes peu pertinentes de sorteqursquoaucun point ne leur sera affecteacute

Algorithme A6 RPCLSoient (X1 XN ) N vecteurs agrave classer en au plus T classes de centres (C1 CT ) Soient deux reacuteels αr et αc

tels que 0 lt αr ≪ αc lt 1initialisationTirer aleacuteatoirement les centres (C1 CT )

for j in 1C

n0j larrminus 1

calcul de poidsChoisir aleacuteatoirement un point Xi

for j in 1C

γj =njsumCk=1 nk

12 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

for j in 1C

uj =

1 si j isin argmink

[γk d (Xi Ck)]

-1 si j isin argminj =k

[γk d (Xi Ck)]

0 sinon

mise agrave jour

for j in 1C

Ct+1j larrminus Ct

j +

αc (Xi minus Cj) si uj = 1minusαr (Xi minus Cj) si uj = minus10 sinon

ntj +

1 si uj = 10 sinon

tlarrminus t+ 1

terminaisonSrsquoil existe un indice j pour lequel Ct+1

j = Ctj alors retourner agrave lrsquoeacutetape de calcul de poids ou que les centres des classes

jugeacutees inutiles ont eacuteteacute repousseacutes vers lrsquoinfini

Pour chaque point le centre de la classe la plus proche en est rapprocheacute tandis que le centre de la seconde classe laplus proche en est eacuteloigneacute mais drsquoune faccedilon moins importante (condition αr ≪ αc) Apregraves convergence les centresdes classes inutiles ou non pertinentes seront repousseacutes vers lrsquoinfini Par conseacutequent aucun point nrsquoy sera rattacheacuteLrsquoalgorithme doit ecirctre lanceacute plusieurs fois Lrsquoalgorithme RPCL peut terminer sur un reacutesultat comme celui de la figuresuivante ougrave un centre reste coinceacute entre plusieurs autres Ce problegraveme est moins important lorsque la dimension delrsquoespace est plus grande

11 k-means 13

Machine Learning Statistiques et Programmation Version 035930

Application de lrsquoalgorithme RPCL (page 12) la classe 0 est incrusteacute entre les quatre autres et son centre ne peut seńăfaufileră vers lrsquoinfini

RPCL-based local PCA

Lrsquoarticle [Liu2003] propose une extension de lrsquoalgorithme RPCL (page 12) et suppose que les classes ne sont plusde forme circulaire mais suivent une loi normale quelconque Cette meacutethode est utiliseacutee pour la deacutetection de ligneconsideacutereacutees ici comme des lois normales deacutegeacuteneacutereacutees en deux dimensions la matrice de covariance deacutefinit une ellipsedont le grand axe est tregraves supeacuterieur au petit axe ce que montre la figure suivante Cette meacutethode est aussi preacutesenteacuteecomme un possible algorithme de squelettisation

14 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

Figure extraite de [Liu2003] lrsquoalgorithme est utiliseacute pour la deacutetection de lignes consideacutereacutees ici comme des lois normalesdont la matrice de covariance deacutefinit une ellipse deacutegeacuteneacutereacutee dont le petit axe est tregraves infeacuterieur au grand axe Les traitsfin griseacutes correspondent aux classes isoleacutees par lrsquoalgorithme RPCL-based local PCAOn modeacutelise le nuage de points par une meacutelange de lois normales

f (x) =

Nsumi=1

pi1

(2π)d2radicdetΣi

exp

(minus1

2(xminus microi)

primeΣminus1

i (xminus microi)

)

AvecsumN

i=1 pi = 1On suppose que le nombre de classes initiales N surestime le veacuteritable nombre de classes Lrsquoarticle [Liu2003]srsquointeacuteresse au cas particulier ougrave les matrices de covariances veacuterifient Σi = ζi I+σi ϕiϕ

primei avec ζi gt 0 σi gt 0 ϕprime

iϕi =1On deacutefinit eacutegalement

G (x microΣ) =1

(2π)d2radicdetΣ

exp

(minus1

2(xminus micro)

primeΣminus1 (xminus micro)

)Lrsquoalgorithme utiliseacute est similaire agrave lrsquoalgortihme RPCL (page 12) La distance d utiliseacutee lors de lrsquoeacutetape de calcul despoids afin de trouver la classe la plus probable pour un point donneacute Xk est remplaceacutee par lrsquoexpression

d (Xk classe i) = minus ln pti G(Xk micro

ti Σ

ti

)Lrsquoeacutetape de mise agrave jour des coefficients est remplaceacutee par

xt+1 larrminus xt +

αcnablaxt si uj = 1minusαrnablaxt si uj = minus10 sinon

Ougrave xt joue le rocircle drsquoun paramegravetre et est remplaceacute successivement par pti microti ζti σt

i ϕti

nablapti = minus 1pti

nablamicroti = minus (Xk minus microt

i)

nablaζti = 12 tr

[(Σt

i)minus1(I minus (Xk minus microt

i) (Xk minus microti)

prime(Σt

i)minus1)]

nablaσti = 1

2 (ϕti)

prime(Σt

i)minus1(I minus (Xk minus microt

i) (Xk minus microti)

prime(Σt

i)minus1)ϕti

nablaϕti = σt

i (Σti)

minus1(I minus (Xk minus microt

i) (Xk minus microti)

prime(Σt

i)minus1)ϕti

11 k-means 15

Machine Learning Statistiques et Programmation Version 035930

Frequency Sensitive Competitive Learning (FSCL)

Lrsquoalgorithme Frequency Sensitive Competitive Learning est preacutesenteacute dans [Balakrishnan1996] Par rapport agravelrsquoalgorithme des centres mobiles classique lors de lrsquoestimation des centres des classes lrsquoalgorithme eacutevite la formationde classes sous-repreacutesenteacutees

Algorithme A7 FSCLSoit un nuage de points (X1 XN ) soit C vecteurs (ω1 ωC) initialiseacutes de maniegravere aleacuteatoires Soit F (u t) isinR2 minusrarr R+ croissante par rapport agrave u Soit une suite de reacuteels (u1 uC) soit une suite ϵ (t) isin [0 1] deacutecroissanteougrave t repreacutesente le nombre drsquoiteacuterations Au deacutebut tlarr 0meilleur candidatPour un vecteur Xk choisi aleacuteatoirement dans lrsquoensemble (X1 XN ) on deacutetermine

ilowast isin argmin Di = F (ui t) d (Xk ωi)

mise agrave jour

ωilowast (t+ 1)larrminus ωilowast (t) + ϵ (t) (Xk minus ωilowast (t))

tlarrminus t+ 1

uilowast larrminus uilowast + 1

Retour agrave lrsquoeacutetape preacuteceacutedente jusqursquoagrave ce que les nombres uisumi ui

convergent

Exemple de fonctions pour F ϵ (voir [Balakrishnan1996])

F (u t) = uβeminustT avec β = 0 06 et 1T = 0 00005

ϵ (t) = β eminusγt avec γ = 0 05

Cet algorithme ressemble agrave celui des cartes topographiques de Kohonen sans toutefois utiliser un maillage entre lesneurones (ici les vecteurs ωi) Contrairement agrave lrsquoalgorithme RPCL les neurones ne sont pas repousseacutes srsquoils ne sontpas choisis mais la fonction croissante F (u t) par rapport agrave u assure que plus un neurone est seacutelectionneacute moins il ade chance de lrsquoecirctre bien que cet avantage disparaisse au fur et agrave mesure des iteacuterations

116 k-means norme L1

Lrsquoalgorithme dans sa version la plus courante optimise lrsquoinertie deacutefinie parsumP

i=1 d2(Xi G

tcti

) qui est en quelque

sorte une inertie L2 Que devriendrait lrsquoalgorithme si la norme choisie eacutetait une norme L1 il faudrait alors choisir agravechaque iteacuteration t des points qui minimise la quantiteacute

sumPi=1 d1

(Xi G

tcti

)ougrave d1 est la norme L1 entre deux points

XY d1(XY ) =sum

i |Xi minus Yi| Avant de continuer on rappelle un theacuteoregraveme

proprieacuteteacute P1 Meacutediane et valeur absolueSoit A = (x1 xn) un ensembl de n reacuteels quelconque On note m = med(x1 xn) la meacutediane de lrsquoensemble depoints A Alors la meacutediane m minimise la quantiteacute

sumni=1 |mminus xi|

Crsquoest cette proprieacuteteacute qui est utiliseacutee pour deacutefinir ce qursquoest la reacutegression quantile (page 121) et sa deacutemonstration estpreacutesenteacutee agrave la page Meacutediane et valeur absolue (page 122) Il ne reste plus qursquoagrave se servir de ce reacutesultat pour mettre agravejour lrsquoalgorithme centre mobile k-means (page 2) Lrsquoeacutetape qui consiste agrave affecter un point agrave un cluster repreacutesenteacute par unpoint ne pose pas de problegraveme si on utilise cette nouvelle norme Il ne reste plus qursquoagrave deacuteterminer le point qui repreacutesente

16 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

un cluster sachant les points qui le constituent Autrement dit il faut deacuteterminer le point qui minimiser la pseudo-inertiedeacutefinie comme suit pour un ensemble de points (X1 Xn) appartenant agrave un espace vectoriel de dimension k

I(GX1 Xn) = ∥GminusXi∥1 =nsum

i=1

dsumk=1

|Gk minusXik|

On cherche le point G qui minimise la quantiteacute I(GX1 Xn) Commesumn

i=1

sumdk=1 |Gk minusXik| =sumd

k=1

sumni=1 |Gk minusXik| on en deacuteduit qursquoon peut chercher la coordonneacutee Gk indeacutependemment les unes des autres

On en deacuteduit que le barycentre de norme L1 drsquoun ensemble de points dans un espace vectoriel de dimension d apour coordonneacutees les d meacutedianes extraites sur chacune des dimensions Lrsquoalgorithme est impleacutementeacute dans le modulemlinsights5 en srsquoinspirant du code KMeans6

117 Bibliographie

12 Meacutelange de lois normales

bull Algorithme EM (page 17)bull Competitive EM algorithm (page 18)bull Bibliographie (page 20)

121 Algorithme EM

Deacutefinition D1 meacutelange de lois normalesSoitX une variable aleacuteatoire drsquoun espace vectoriel de dimension d X suit un la loi drsquoun meacutelange de N lois gaussiennesde paramegravetres (microiΣi)1⩽i⩽N alors la densiteacute f de X est de la forme

f (x) =

Nsumi=1

pi1

(2π)d2radicdetΣi

exp

(minus1

2(xminus microi)

primeΣminus1

i (xminus microi)

)(18)

(19)

Avec sumN

i=1 pi = 1

Dans le cas drsquoune loi normale agrave valeur reacuteelle Σ = σ2 lrsquoalgorithme permet drsquoestimer la loi de lrsquoeacutechantillon(X1 XT ) il srsquoeffectue en plusieurs iteacuterations les paramegravetres pi (0) microi (0) σ2 (0) sont choisis de maniegravere aleacuteatoire

5 httpwwwxavierduprefrappmlinsightshelpsphinxindexhtml6 httpsscikit-learnorgstablemodulesgeneratedsklearnclusterKMeanshtml

12 Meacutelange de lois normales 17

Machine Learning Statistiques et Programmation Version 035930

agrave lrsquoiteacuteration t+ 1 la mise agrave jour des coefficients est faite comme suit

fki (t) = pi (t)1

(2π)d2radicdetΣi (t)

exp

(minus1

2(Xk minus microi (t))

primeΣminus1

i (t) (Xk minus microi (t))

)(110)

fki (t) =fki (t)sumi fki (t)

(111)

pi (t+ 1) =1

T

Tsumk=1

fki (t) (112)

microi (t+ 1) =

[Tsum

k=1

fki (t)

]minus1 Tsumk=1

fki (t)Xk (113)

Σ2i (t+ 1) =

[Tsum

k=1

fki (t)

]minus1 Tsumk=1

fki (t) (Xk minus microi (t+ 1)) (Xk minus microi (t+ 1))prime (114)

Lrsquoestimation drsquoune telle densiteacute srsquoeffectue par lrsquointermeacutediaire drsquoun algorithme de type Expectation Maximization(EM)10 (voir [Dempster1977]) ou de ses variantes SEM11 SAEM12 (voir [Celeux1995] [Celeux1985b]) Laseacutelection du nombre de lois dans le meacutelange reste un problegraveme ouvert abordeacute par lrsquoarticle [Biernacki2001]

122 Competitive EM algorithm

Lrsquoalgorithme deacuteveloppeacute dans lrsquoarticle [ZhangB2004] tente de corriger les deacutefauts de lrsquoalgorithme EM Cette nouvelleversion appeleacutee ńăCompetitive EMă ou CEM srsquoapplique agrave un meacutelange de lois - normales en particulier - il deacuteterminele nombre de classes optimal en supprimant ou en ajoutant des classes

Figures extraites de [ZhangB2004] la premiegravere image montre deux classes incluant deux autres classes qui devraitdonc ecirctre supprimeacutees La seconde image montre une classe aberrante tandis que la troisiegraveme image montre des classesse recouvrant partiellementOn considegravere un eacutechantillon de variables aleacuteatoires indeacutependantes et identiquement distribueacutees agrave valeur dans un espacevectoriel de dimension d Soit X une telle variable on suppose que X suit la loi du meacutelange suivant

f (X|θ) =ksum

i=1

αi f (X|θi)

Avec θ = (αi θi)1⩽i⩽k foralli αi ⩾ 0 etsumk

i=1 αi = 110 httpsfrwikipediaorgwikiAlgorithme_espC3A9rance-maximisation11 httpsfrwikipediaorgwikiAlgorithme_espC3A9rance-maximisationAlgorithme_SEM12 httpwikiwebpopixorgindexphpThe_SAEM_algorithm_for_estimating_population_parameters

18 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

On deacutefinit pour une classe m la probabiliteacute Psplit(m θ) qursquoelle doive ecirctre diviseacutee et celle qursquoelle doive ecirctre associeacutee agraveune autre Pmerge(m l θ) Celles ci sont deacutefinies comme suit

Psplit(m θ) =J (m θ)

Z (θ)(115)

Pmerge(m l θ) =β

J (m θ)Z (θ)(116)

β est une constante deacutefinie par expeacuteriences J (m θ) est deacutefini pour lrsquoeacutechantillon (x1 xn) par

J (m θ) =

intfm (x θ) log

fm (x θ)

pm (x θm)dx

Ougrave fm (x θ) =

sumni=1 11x=xi P(m|xiθ)sumn

i=1 P(m|xiθ)

La constante Z (θ) est choisie de telle sorte que les probabiliteacutes Psplit(m θ) et Pmerge(m l θ) veacuterifient

ksumm=1

Psplit(m θ) +

ksumm=1

ksuml=m+1

Pmerge(m l θ) = 1

Lrsquoalgorithme EM permet de construire une suite θt maximisant la vraisemblance agrave partir de poids θ0 LrsquoalgorithmeCEM13 est deacuteriveacute de lrsquoalgorithme EM

Algorithme A1 CEMLes notations sont celles utiliseacutees dans les paragraphes preacuteceacutedents On suppose que la variable aleacuteatoire Z = (XY )ougrave X est la variable observeacutee et Y la variable cacheacutee T deacutesigne le nombre maximal drsquoiteacuterationsinitialisationChoix arbitraire de k et θ0Expectation

Q(θ θt

)= E

(log [f (XY |θ)] |X θt

)Maximization

θt+1 = argmaxθ

Q(θ θt

)convergencetlarrminus t+ 1 si θt nrsquoa pas convergeacute vers un maximum local alors on retourne agrave lrsquoeacutetape Expectationdivision ou regroupementDans le cas contraire on estime les probabiliteacutes Psplit(m θ) et Pmerge(m l θ) deacutefinie par les expressionseq_split_merge On choisit aleacuteatoirement une division ou un regroupement (les choix les plus probables ayant le plusde chance drsquoecirctre seacutelectionneacutes) Ceci megravene au paramegravetre θprimet dont la partie modifieacutee par rapport agrave θt est deacutetermineacutee demaniegravere aleacuteatoire Lrsquoalgorithme EM est alors appliqueacute aux paramegravetres θprimet jusqursquoagrave convergence aux paramegravetres θprimeprimet acceptationOn calcule le facteur suivant

Pa = min

exp

[L (θprimeprimet X)minus L (θt X)

γ

] 1

On geacuteneacutere aleacuteatoirement une variable u sim U [0 1] si u ⩽ Pa alors les paramegravetres θprimeprimet sont valideacutes θt larrminus θprimeprimet et retouragrave lrsquoeacutetape drsquoexpectation Dans le cas contraire les paramegravetres θprimeprimet sont refuseacutes et retour agrave lrsquoeacutetape preacuteceacutedente

13 httpsfrwikipediaorgwikiAlgorithme_espC3A9rance-maximisationAlgorithme_CEM

12 Meacutelange de lois normales 19

Machine Learning Statistiques et Programmation Version 035930

terminaisonSi t lt T on retoure agrave lrsquoeacutetape drsquoexpectation Sinon on choisit les paramegravetres θlowast = θtlowast qui maximisent lrsquoexpression

L (θlowast|X) = log f (X|θ)minus Nlowast

2

klowastsumi=1

lognαlowast

i

12minus klowast

2log

n

12minus klowast(Nlowast + 1)

2(117)

Avec n le nombre drsquoexemples et N est le nombre de paramegravetres speacutecifiant chaque composant

Lrsquoarticle [ZhangB2004] prend γ = 10 mais ne preacutecise pas de valeur pour β qui deacutepend du problegraveme Toutefois ilexiste un cas suppleacutementaire ougrave la classe m doit ecirctre supprimeacutee afin drsquoeacuteviter sa convergence vers les extrecircmes du nuagede points agrave modeacuteliser Si nαm lt N le nombre moyen de points inclus dans une classe est infeacuterieur au nombre deparamegravetres attribueacutes agrave cette classe qui est alors supprimeacutee Cette condition comme lrsquoensemble de lrsquoarticle srsquoinspire delrsquoarticle [Figueiredo2002] dont est tireacute le critegravere deacutecrit en (refclassif_cem_cirtere)

123 Bibliographie

13 Carte de Kohonen

bull Principe (page 20)bull Carte de Kohonen et classification (page 21)bull Autres utilisation des cartes de Kohenen (page 23)bull Bibliographie (page 23)

131 Principe

Les cartes de Kohonen ou Self Organizing Map (SOM) est le terme anglais pour les cartes de Kohonen14 (voir[Kohonen1997]) sont assimileacutees agrave des meacutethodes neuronales Ces cartes sont constitueacutees drsquoun ensemble de neurones(micro1 microN ) lesquels sont relieacutes par une forme reacutecurrente de voisinage Les neurones sont initialement reacutepartis selonce systegraveme de voisinage Le reacuteseau eacutevolue ensuite puisque chaque point de lrsquoespace parmi lrsquoensemble (X1 XK)attire le neurone le plus proche vers lui ce neurone attirant agrave son tour ses voisins Cette proceacutedure est reacuteiteacutereacutee jusqursquoagraveconvergence du reacuteseau en faisant deacutecroicirctre lrsquoattirance des neurones vers les points du nuage

Trois types de voisinages couramment utiliseacutes pour les cartes de Kohonen voisinages lineacuteaire rectangulairetriangulaire

Algorithme A1 cartes de Kohonen (SOM)14 httpsfrwikipediaorgwikiCarte_auto_adaptative

20 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

Soient (microt1 micro

tN ) isin (Rn)

N des neurones de lrsquoespace vectoriel Rn On deacutesigne par V (microj) lrsquoensemble des neuronesvoisins de microj pour cette carte de Kohonen Par deacutefinition on a microj isin V (microj) Soit (X1 XK) isin (Rn)

K un nuagede points On utilise une suite de reacuteels positifs (αt) veacuterifiant

sumt⩾0 α

2t ltinfin et

sumt⩾0 αt =infin

initialisationLes neurones

(micro01 micro

0N

)sont reacutepartis dans lrsquoespace Rn de maniegravere reacuteguliegravere selon la forme de leur voisinage

tlarrminus 0neurone le plus procheOn choisi aleacuteatoirement un points du nuage Xi puis on deacutefinit le neurone microt

klowast de telle sorte que ∥microtklowast minusXi∥ =

min1⩽j⩽N

∥∥microtj minusXi

∥∥

mise agrave jour

foreach microtj in V (microt

klowast)

microt+1j larrminus microt

j + αt

(Xi minus microt+1

j

)tlarrminus t+ 1

Tant que lrsquoalgorithme nrsquoa pas convergeacute retour agrave lrsquoeacutetape du neurone le plus proche

Lrsquoeacutetape de mise agrave jour peut ecirctre modifieacutee de maniegravere agrave ameacuteliorer la vitesse de convergence (voir [Lo1991])

microt+1j larrminus microt

j + αt h(microtj micro

tklowast

)microk

(Xi minus microt+1

j

)Ougrave h est une fonction agrave valeur dans lrsquointervalle [0 1] qui vaut 1 lorsque microt

j = microtklowast et qui deacutecroicirct lorsque la distance

entre ces deux neurones augmente Une fonction typique est h (x y) = h0 exp(minus∥xminusy∥2

2σ2t

)

Les cartes de Kohonen sont utiliseacutees en analyse des donneacutees afin de projeter un nuage de points dans un espace agrave deuxdimensions drsquoune maniegravere non lineacuteaire en utilisant un voisinage rectangulaire Elles permettent eacutegalement drsquoeffectuerune classification non superviseacutee en regroupant les neurones lagrave ougrave les points sont concentreacutes Les arecirctes reliant lesneurones ou sommets de la cartes de Kohonen sont soit reacutetreacutecies pour signifier que deux neurones sont voisins soitdistendues pour indiquer une seacuteparation entre classes

132 Carte de Kohonen et classification

Lrsquoarticle [Wu2004] aborde le problegraveme drsquoune classification agrave partir du reacutesultat obtenu depuis une carte de Kohonen(page 20) Plutocirct que de classer les points ce sont les neurones qui seront classeacutes en C classes Apregraves avoir appliqueacuteliquestalgorithme de Kohonen (page 20) la meacutethode proposeacutee dans [Wu2004] consiste agrave classer de maniegravere non superviseacuteeles A neurones obtenus (micro1 microA) Toutefois ceux-ci ne sont pas tous pris en compte afin drsquoeacuteviter les pointsaberrants On suppose que αil = 1 si le neurone l est le plus proche du point Xi 0 dans le cas contraire Puis onconstruit les quantiteacutes suivantes

νk =

Nsumi=1

αik

Tk =1

νk

Nsumi=1

αikXi

θ(Tk) =

radicradicradicradic 1

νk

Nsumi=1

αik ∥Xi minus Tk∥2

13 Carte de Kohonen 21

Machine Learning Statistiques et Programmation Version 035930

De plus

θ =1

A

Asumk=1

θ(Tk)

σ(θ) =

radicradicradicradic 1

A

Asumk=1

(θ(Tk)minus θ

)2Si νk = 0 ou ∥microk minus Tk∥ gt θ + σ(θ) le neurone microk nrsquoest pas prise en compte lors de la classification non superviseacuteeUne fois celle-ci termineacutee chaque eacuteleacutement Xi est classeacute selon la classe du neurone le plus procheLrsquoarticle [Wu2004] propose eacutegalement un critegravere permettant de deacuteterminer le nombre de classes ideacuteale On noteaik = 1 si Xi appartient agrave la classe k dans le cas contraire aik = 0 On deacutefinit nk le nombre drsquoeacuteleacutements de la classek le vecteur moyenne Mk associeacute agrave la classe k

nk =

Nsumi=1

aik

Mk =1

nk

Nsumi=1

aikXi

σ2(Mk) =1

nk

Nsumi=1

aik ∥Xi minusMk∥2

On note au preacutealable σ =radic

1C

sumCk=1 σ2(Mk) Lrsquoarticle deacutefinit ensuite la densiteacute interne pour C classes

Dint(C) =1

C

Csumk=1

Nsumi=1

Nsumj=1

aikajk11∥XiminusXj∥⩽σ

On deacutefinit la distance dlowastkl pour (k l) isin 1 C2 cette distance est eacutegale agrave la distance minimale pour un couple depoints le premier appartenant agrave la classe i le second agrave la classe j

dlowastkl = min ∥Xi minusXj∥ |aikajl = 1 =∥∥Xkl

ilowast minusXkljlowast

∥∥La densiteacute externe est alors deacutefinie en fonction du nombre de classes C par

Dext(C) =

Csumk=1

Csuml=1

dklσ (k)σ (l)

Nsumi=1

11aik+ailgt011∥∥∥∥∥XiminusXkl

ilowast+Xkljlowast

2

∥∥∥∥∥⩽σ(k)+σ(l)2

Lrsquoarticle deacutefinit ensuite la seacuteparabiliteacute en fonction du nombre de classes C

Sep(C) =1

Dext(C)

Csumk=1

Csuml=1

dlowastkl

Enfin le critegravere Composing Density Between and With clusters noteacute CDBw(C) est deacutefini par

CDBw(C) = Dint(C) lowast Sep(C)

Ce critegravere est maximal pour un nombre de classes optimal Outre les reacutesultats de lrsquoarticle [Wu2004] sommairementreacutesumeacutes ici ce dernier revient sur lrsquohistoire des cartes de Kohonen depuis leur creacuteation [Kohonen1982] jusqursquoauxderniers deacuteveloppements reacutecents

22 Chapter 1 Clustering

Machine Learning Statistiques et Programmation Version 035930

133 Autres utilisation des cartes de Kohenen

On peut les utiliser pour deacuteterminer le plus court chemin passant par tous les noeuds drsquoun graphe crsquoest agrave dire appliquerKohonen au problegraveme du voyageur de commerce15

134 Bibliographie

15 httpwwwxavierduprefrappensae_teaching_cshelpsphinxspecialstsp_kohonenhtml

13 Carte de Kohonen 23

Machine Learning Statistiques et Programmation Version 035930

24 Chapter 1 Clustering

CHAPTER 2

Non lineacuteaire

Les paragraphes suivant abordent de faccedilon plutocirct theacuteorique des modegraveles de machine learning

21 Reacuteseaux de neurones

Ce chapitre aborde les reacuteseaux de neurones au travers de deux utilisations courantes la reacutegression (page 28) et laclassification (page 32) et une qui lrsquoest moins liquestanalyse en composantes principales17 ou ACP (page 66) sans oublier lesmeacutethodes drsquoestimation des paramegravetres qui les composent agrave savoir optimisations du premier et second ordre (Meacutethodesdu premier ordre (page 48) et Meacutethodes du second ordre (page 48)) ainsi qursquoune meacutethode permettant de supprimer descoefficients inutiles Seacutelection de connexions (page 63)

211 Deacutefinition des reacuteseaux de neurones multi-couches

Les reacuteseaux de neurones multi-couches (ou perceptrons) deacutefinissent une classe de fonctions dont lrsquointeacuterecirct est de pouvoirapprocher nrsquoimporte quelle fonction continue agrave support compact (voir theacuteoregraveme sur la densiteacute (page 35)) Aucun autretype de reacuteseau de neurones ne sera eacutetudieacute et par la suite tout reacuteseau de neurones sera consideacutereacute comme multi-couches(donc pas les reacuteseau de Kohonen18)

Un neurone

Deacutefinition D1 neuroneUn neurone agrave p entreacutees est une fonction f Rp+1 times Rp minusrarr R deacutefinie par

bull g R minusrarr Rbull W isin Rp+1 W = (w1 wp+1)

bull forallx isin Rp f (Wx) = g (sump

i=1 wixi + wp+1) avec x = (x1 xp)

17 httpsfrwikipediaorgwikiAnalyse_en_composantes_principales18 httpsfrwikipediaorgwikiCarte_auto_adaptative

25

Machine Learning Statistiques et Programmation Version 035930

Cette deacutefinition est inspireacutee du neurone biologique les poids jouant le rocircle de synapses le vecteur x celui des entreacuteeset W celui des coefficients ou poids Le coefficient wp+1 est appeleacute le biais et souvent noteacute b La fonction g est appeleacuteefonction de transfert ou fonction de seuil

Figure F1 neurone graphique x1

xi

xp

yfrarr z

wp

wi

w1

sum

1

b Le vecteur (x1 xp) isin Rp joue le rocircle des entreacutees y estappeleacute parfois le potentiel y =

sumpi=1 wixi+b z est appeleacutee la sortie du neurone f est appeleacutee la fonction de transfert

ou de seuil z = f (y) = f (sump

i=1 wixi + b)

La reacutepreacutesentation graphique (page 26) est plus souvent celle qursquoon retient Ce scheacutema est eacutegalement plus proche de sadeacutefinition biologique et dissocie mieux les rocircles non symeacutetriques des entreacutees et des poids Des exemples de fonctionsde transfert sont donneacutes par la table qui suit Les plus couramment utiliseacutees sont les fonctions lineacuteaire et sigmoiumlde

exemples de fonction de transfert ou de seuil expressionescalier 1[0+infin[

lineacuteaire x

sigmoiumlde entre [0 1]1

1 + eminusx

sigmoiumlde entre [minus1 1] 1minus 2

1 + ex

normale eminusx2

2

exponentielle ex

relu x11x⩾0

La plupart des fonctions utiliseacutees sont deacuterivables et cette proprieacuteteacute srsquoeacutetend agrave tout assemblage de neurones ce qui permetdrsquoutiliser lrsquoalgorithme de reacutetropropagation deacutecouvert par [Rumelhart1986] Ce dernier permet le calcul de la deacuteriveacuteeouvre ainsi les portes des meacutethodes drsquooptimisation baseacutees sur cette proprieacuteteacute La fonction relu19 a progressivementremplaceacute la fonction sigmoiumlde sur les couches cacheacutees car elle est non lineacuteaire et beaucoup plus rapide agrave calculer

Une couche de neurones

Deacutefinition D2 couche de neuronesSoit p et n deux entiers naturels on note W isin Rn(p+1) = (W1 Wn) avec foralli isin 1 middot middot middot n Wi isin Rp+1 Unecouche de n neurones et p entreacutees est une fonction

F Rn(p+1) times Rp minusrarr Rn

veacuterfifiant bull foralli isin 1 middot middot middot n fi est un neuronebull forallW isin Rn(p+1) times Rp F (Wx) = (f1 (W1 x) fn (Wn x))

Une couche de neurones repreacutesente la juxtaposition de plusieurs neurones partageant les mecircmes entreacutees mais ayantchacun leur propre vecteur de coefficients et leur propre sortie

19 httpsenwikipediaorgwikiRectifier_(neural_networks)

26 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Un reacuteseau de neurones le perceptron

Deacutefinition D3 reacuteseau de neurones multi-couches ou perceptronUn reacuteseau de neurones multi-couches agrave n sorties p entreacutees et C couches est une liste de couches (C1 CC)connecteacutees les unes aux autres de telle sorte que

bull foralli isin 1 middot middot middot C chaque couche Ci possegravede ni neurones et pi entreacuteesbull foralli isin 1 middot middot middot C minus 1 ni = pi+1 de plus p1 = p et nC = n

Les coefficients de la coucheCi sont noteacutes(W i

1 Wini

) cette couche deacutefinit une fonctionFi Soit la suite (Zi)0⩽i⩽C

deacutefinie par

Z0 isin Rp

foralli isin 1 middot middot middot C Zi = Fi

(W i

1 Wini Ziminus1

)On pose M = M =

sumCi=1 ni (pi + 1) le reacuteseau de neurones ainsi deacutefini est une fonction F telle que

F RM times Rp minusrarr Rn

(WZ0) minusrarr ZC

Figure F2 Modegravele du perceptron multi-couche (multi-layer perceptron MLP)

bull (x1 xp) entreacuteesbull Ci nombre de neurones sur la couche i C0 = p

bull zci sortie du neurone i de la couche c par extension z0i = xi

bull yci potentiel du neurone i de la couche cbull wcij coefficient associeacute agrave lrsquoentreacutee j du neurone i de la couche cbull bci biais du neurone i de la couche cbull fci fonction de seuil du neurone i de la couche c

On note Wc la matrice des poids associeacutee agrave la couche c De la mecircme maniegravere Bc est le vecteur des biais associeacutee agravela couche c Zc Yc sont les objets vectoriels correspondant On considegravere que les entreacutees forment la couche C0 demaniegravere agrave simplifier les eacutecritures Ainsi chaque couche Ci du perceptron a pour entreacutees les sorties de la couche Ciminus1Cette deacutefinition est plus facile agrave illustrer qursquoagrave eacutenoncer (voir Modegravele du perceptron (page 27)) et rappelle le rocircle nonsymeacutetrique des entreacutees et des poids Le meacutecanisme qui permet de calculer les sorties drsquoun reacuteseau de neurones sachantses poids est appeleacute propagation

21 Reacuteseaux de neurones 27

Machine Learning Statistiques et Programmation Version 035930

Algorithme A1 PropagationCet algorithme srsquoapplique agrave un reacuteseau de neurones veacuterifiant la deacutefinition du perceptron (page 27) Il srsquoagit de calculerles sorties de ce reacuteseau connaissant ses poids (wcij) et ses entreacutees (xj)

Zc larrminus X

Vient ensuite le calcul iteacuteratif de la suite (Zc)1⩽c⩽C

for c in 1C Yc larrminusWcZcminus1 +Bc

Zc larrminus F (Yc)

Le nombre de couches drsquoun reacuteseau de neurones nrsquoest pas limiteacute Les reacuteseaux de deux couches (une couche pour lesentreacutees une couche de sortie) sont rarement utiliseacutes Trois couches sont neacutecessaires (une couche pour les entreacuteesune couche dite cacheacutee une couche de sortie) pour construire des modegraveles avec une proprieacuteteacute inteacuteressante de densiteacute(page 35)

212 La reacutegression

Le bruit blanc est une variable aleacuteatoire couramment utiliseacute pour deacutesigner le hasard ou la part qui ne peut ecirctre modeacuteliseacuteedans une reacutegression ou tout autre problegraveme drsquoapprentissage On suppose parfois que ce bruit suive une loi normale

Deacutefinition D1 bruit blancUne suite de variables aleacuteatoires reacuteelles (ϵi)1⩽i⩽N est un bruit blanc

bull existσ gt 0 foralli isin 1 middot middot middot N ϵi sim N (0 σ)

bull forall (i j) isin 1 middot middot middot N2 i = j =rArr ϵi perpperp ϵj

Une reacutegression consiste agrave reacutesoudre le problegraveme suivant

Problegraveme P1 ReacutegressionSoient deux variables aleacuteatoires X et Y lrsquoobjectif est drsquoapproximer la fonction E (Y |X) = f (X) Les donneacutees duproblegraveme sont un eacutechantillon de points (Xi Yi) |1 ⩽ i ⩽ N et un modegravele parameacutetreacute avec maththeta`

foralli isin 1 middot middot middot N Yi = f (θXi) + ϵi

avec n isin N (ϵi)1⩽i⩽N bruit blanc (page 28) f est une fonction de paramegravetre θ

La fonction f peut ecirctre une fonction lineacuteaire un polynocircme un reacuteseau de neurones Lorsque le bruit blanc est normal latheacuteorie de lrsquoestimateur de vraisemblance (voir [Saporta1990]) permet drsquoaffirmer que le meilleur paramegravetre θ minimisantlrsquoerreur de preacutediction est

θ = argminθisinRp

E (θ) = argminθisinRp

[Nsumi=1

[Yi minus f (θXi)]2

]

28 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Le lien entre les variables X et Y deacutepend des hypothegraveses faites sur f Geacuteneacuteralement cette fonction nrsquoest supposeacuteenon lineacuteaire que lorsqursquoune reacutegression lineacuteaire20 donne de mauvais reacutesultats Cette hypothegravese est toujours testeacutee carla reacutesolution du problegraveme dans ce cas-lagrave est deacuteterministe et aboutit agrave la reacutesolution drsquoun systegraveme lineacuteaire avec autantdrsquoeacutequations que drsquoinconnues Voici ce que ce la donne avec un nuage de points (Xi Yi) deacutefini par Yi =

32X

2i minusXi +

14 + ϵi

Une fonction non lineacuteaire permet de srsquoapprocher un peu plus de la veacuteritable fonction Premier cas f est un reacuteseauavec un neurone sur la couche cacheacutee

20 httpsfrwikipediaorgwikiRC3A9gression_linC3A9aire

21 Reacuteseaux de neurones 29

Machine Learning Statistiques et Programmation Version 035930

Second cas f est un reacuteseau avec deux neurones sur la couche cacheacutee

30 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Troisiegraveme cas f est un reacuteseau avec 100 neurones sur la couche cacheacutee

Lrsquoerreur de preacutediction de ce reacuteseau de neurones est tregraves infeacuterieure agrave celle des modegraveles preacuteceacutedent ce modegravele a apprispar coe ur le nuage de points (Xi Yi) sans vraiment ńăcomprendreă ce qursquoil apprenait Dans le cas drsquoune reacutegressionagrave cent neurones le nombre de coefficients du reacuteseau de neurones (301) est largement supeacuterieur au nombre de points(50) Il en reacutesulte que contrairement aux trois preacuteceacutedents cas la ńărichesseă du modegravele choisi lui permet drsquoapprendrele ńăhasardă Lorsque ce cas de figure se preacutesente on dit que le reacuteseau de neurones a appris coeur son pouvoir de

21 Reacuteseaux de neurones 31

Machine Learning Statistiques et Programmation Version 035930

geacuteneacuteralisation est mauvais ou il fait de liquestoverfitting21 (voir aussi Generalization Error22) Lrsquoerreur minime estimeacutee surce nuage de points (ou base drsquoapprentissage) sera consideacuterablement accrue sur un autre nuage de points ou base de testsuivant la mecircme loi Cet exemple montre que le choix du reacuteseau de neurones le mieux adapteacute au problegraveme nrsquoest paseacutevident Il existe des meacutethodes permettant drsquoapprocher lrsquoarchitecture optimale mais elles sont geacuteneacuteralement coucircteusesen calcul

213 La classification

Comme la reacutegression la classification consiste aussi agrave trouver le lien entre une variable X et une variable aleacuteatoirediscregravete suivant une loi multinomiale23 Y

Problegraveme P1 ClassificationSoit une variable aleacuteatoire X et une variable aleacuteatoire discregravete Y isin N lrsquoobjectif est drsquoapproximer la fonctionE (Y |X) = f (X) Les donneacutees du problegraveme sont un eacutechantillon de points (Xi Yi) |1 ⩽ i ⩽ N avec foralli isin1 N Yi isin 1 C et un modegravele parameacutetreacute avec θ

foralli isin 1 middot middot middot N forallc isin 1 middot middot middot C P (Yi = c|Xi θ) = h (θXi c)

avec n isin N h est une fonction de paramegravetre θ agrave valeur dans [0 1] et veacuterifiant la contrainte sumC

c=1 h(θX c) = 1

Le premier exemple est une classification en deux classes elle consiste agrave deacutecouvrir le lien qui unit une variable aleacuteatoirereacuteelle X et une variable aleacuteatoire discregravete et Y isin 0 1 on dispose pour cela drsquoune liste

(Xi Yi) isin Rtimes 0 1 |1 ⩽ i ⩽ N

21 httpsfrwikipediaorgwikiSurapprentissage22 httpsenwikipediaorgwikiGeneralization_error23 httpsfrwikipediaorgwikiLoi_multinomiale

32 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Il nrsquoest pas facile de deacuteterminer directement une fonction h qui approxime Y |X car h et Y sont toutes deux discregravetesCrsquoest pourquoi plutocirct que de reacutesoudre directement ce problegraveme il est preacutefeacuterable de deacuteterminer la loi marginaleP (Y = c|X) = f (X θ c) f est alors une fonction dont les sorties sont continues et peut ecirctre choisie deacuterivablePar exemple f peut ecirctre un reacuteseau de neurones dont les sorties veacuterifient

f (X 0) + f (X 1) = P (0|X) + P (1|X) = 1

Le reacuteseau de neurones utiliseacute pour cette tacircche est leacutegegraverement diffeacuterent du preacuteceacutedent il sera preacutesenteacute ulteacuterieurementUn plan a eacuteteacute diviseacute en deux demi-plan par une droite deacutelimitant deux classes le reacuteseau de neurones dont la couchecacheacutee contient deux neurones lineacuteaires a retrouveacute cette seacuteparation malgreacute les quelques exemples mal classeacutes

En revanche un reacuteseau de neurones comportant trop de coefficients aura tendance agrave apprendre par coeur la classificationet les quelques erreurs de classification comme le montre la figure suivante La seacuteparation produite par le reacuteseau deneurones est de maniegravere eacutevidente non lineacuteaire puisqursquoaucune droite ne peut seacuteparer les deux classes deacutetermineacutees parcette fonction Cette classe de modegraveles permet donc de reacutesoudre des problegravemes complexes en gardant toutefois agravelrsquoesprit comme dans le cas de la reacutegression qursquoil nrsquoest pas moins de facile de deacutenicher le bon modegravele que dans le caslineacuteaire

214 Deacutemonstration du theacuteoregraveme de la densiteacute des reacuteseaux de neurones

bull Formulation du problegraveme de la reacutegression (page 34)bull Densiteacute des reacuteseaux de neurones (page 34)

21 Reacuteseaux de neurones 33

Machine Learning Statistiques et Programmation Version 035930

Formulation du problegraveme de la reacutegression

Soient deux variables aleacuteatoires continues (XY ) isin RptimesRq sim L quelconque la reacutesolution du problegraveme de reacutegression(page 28) est lrsquoestimation de la fonction E(Y |X) = F (X) Pour cela on dispose drsquoun ensemble de points A =(Xi Yi) sim L|1 ⩽ i ⩽ N

Soit f RM times Rp minusrarr Rq une fonction on deacutefinit foralli isin 1 middot middot middot N Y Wi = f (WXi) On appelle aussi Y W

i lavaleur preacutedite pour Xi On pose alors ϵWi = Yi minus Y W

i = Yi minus f (WXi)Les reacutesidus sont supposeacutes iid (identiquement et indeacutependemment distribueacutes)24 et suivant une loi normale foralli isin1 middot middot middot N ϵWi sim N (microW σW ) La vraisemblance drsquoun eacutechantillon (Zi)1⩽i⩽N ougrave les Zi sont indeacutependantes entreelles et suivent la loi de densiteacute f (z|θ) est la densiteacute du vecteur (Z1 ZN ) qursquoon exprime comme suit

L (θ Z1 ZN ) =prodN

n=1 f (Zi|θ)=rArr lnL (θ Z1 ZN ) =

sumNn=1 ln f (Zi|θ)

La log-vraisemblance de lrsquoeacutechantillon srsquoeacutecrit LW = minus 12σ2

W

sumNi=1

(Yi minus Y W

i minus microW

)2+ N ln

(σW

radic2π) Les

estimateurs du maximum de vraisemblance pour microW et σW sont (voir [Saporta1990])

microW = 1N

sumNi=1 Yi minus Y W

i

σW =

radicsumNi=1

(YiminusY W

i minusmicroW

)2

N

Lrsquoestimateur de Y = f (WX) deacutesireacutee est de preacutefeacuterence sans biais (microW = 0) et de variance minimum par conseacutequent

les paramegravetreslowastW qui maximisent la vraisemblance LW sont

lowastW = argmin

WisinRM

sumNi=1

(Yi minus Y W

i

)2= argmin

WisinRM

sumNi=1 (Yi minus f (WXi))

2(21)

Reacuteciproquement on veacuterifie que si W lowast veacuterifie lrsquoeacutequation (21) alors lrsquoestimateur deacutefini par f est sans biais Il suffitpour srsquoen convaincre de poser g = f + α avec α isin R et de veacuterifier que la valeur optimale pour α est α =minus 1

N

sumNi=1 Yi minus f (WXi) Lrsquoestimateur minimise la vraisemblance LW Cette formule peut ecirctre geacuteneacuteraliseacutee en

faisant une autre hypothegravese que celle de la normaliteacute des reacutesidus (lrsquoindeacutependance eacutetant conserveacutee) lrsquoeacutequation (21)peut geacuteneacuteraliseacutee par (22)

lowastW = argmin

WisinRM

sumNi=1 e

(Yi minus Y W

i

)= argmin

WisinRM

sumNi=1 e (Yi minus f (WXi))

(22)

Ougrave la fonction e Rq isin R est appeleacutee fonction drsquoerreur

Densiteacute des reacuteseaux de neurones

Lrsquoutilisation de reacuteseaux de neurones srsquoest consideacuterablement deacuteveloppeacutee depuis que lrsquoalgorithme de reacutetropropagationa eacuteteacute trouveacute ([LeCun1985] [Rumelhart1986] [Bishop1995]) Ce dernier permet drsquoestimer la deacuteriveacutee drsquoun reacuteseaude neurones en un point donneacute et a ouvert la voie agrave des meacutethodes classiques de reacutesolution pour des problegravemesdrsquooptimisation tels que la reacutegression non lineacuteaireComme lrsquoensemble des fonctions polynocircmiales lrsquoensemble des fonctions engendreacutees par des reacuteseaux de neuronesmulti-couches possegravede des proprieacuteteacutes de densiteacute (page 35) et sont infiniment deacuterivables Les reacuteseaux de neuronescomme les polynocircmes sont utiliseacutes pour modeacuteliser la fonction f de lrsquoeacutequation (22) Ils diffegraverent neacuteanmoins sur certainspoints

24 httpsfrwikipediaorgwikiVariables_indC3A9pendantes_et_identiquement_distribuC3A9es

34 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Si une couche ne contient que des fonctions de transfert borneacutees comme la fonction sigmoiumlde tout reacuteseau de neuronesincluant cette couche sera aussi borneacute Drsquoun point de vue informatique il est preacutefeacuterable drsquoeffectuer des calculs avec desvaleurs du mecircme ordre de grandeur Pour un polynocircme les valeurs des termes de degreacute eacuteleveacute peuvent ecirctre largementsupeacuterieurs agrave leur sommeUn autre attrait est la symeacutetrie dans lrsquoarchitecture drsquoun reacuteseau de neurones les neurones qui le composent jouent desrocircles symeacutetriques (corollaire familles libres (page 39) Pour ameacuteliorer lrsquoapproximation drsquoune fonction dans un casil suffit drsquoajouter un neurone au reacuteseau dans lrsquoautre il faut inclure des polynocircmes de degreacute plus eacuteleveacute que ceux deacutejagraveemployeacutes

Theacuteoregraveme T1 densiteacute des reacuteseaux de neurones (Cybenko1989)[Cybenko1989] Soit Eq

p lrsquoespace des reacuteseaux de neurones agrave p entreacutees et q sorties posseacutedant une couche cacheacutee dont lafonction de seuil est une fonction sigmoiumlde

(xrarr 1minus 2

1+ex

) une couche de sortie dont la fonction de seuil est lineacuteaire

Soit F qp lrsquoensemble des fonctions continues de C sub Rp minusrarr Rq avec C compact muni de la norme ∥f∥ = sup

xisinC∥f (x)∥

Alors Eqp est dense dans F q

p

La deacutemonstration de ce theacuteoregraveme neacutecessite deux lemmes Ceux-ci utilisent la deacutefinition usuelle du produit scalairesur Rp deacutefini par (x y) = (x1 xp y1 yp) isin R2p minusrarr ⟨x y⟩ =

sumpi=1 xiyi et la norme infinie x =

(x1 xp) isin Rp minusrarr ∥x∥ = maxiisin1middotmiddotmiddot p

xi Toutes les normes sont eacutequivalentes25 sur Rp

Corollaire C1 approximation drsquoune fonction creacuteneauSoit C sub Rp C = (y1 yp) isin Rp |foralli isin 1 middot middot middot p 0 ⩽ yi ⩽ 1 alors

forallε gt 0 forallα gt 0 existn isin Nlowast exist (x1 xn) isin (Rp)n exist (γ1 γn) isin Rn tels que forallx isin Rp∣∣∣∣ nsum

i=1

γi1 + e⟨xix⟩+bi

minus 11xisinC

∣∣∣∣ ⩽ 1

et infyisinFr(C)

∥xminus y∥ gt αrArr∣∣∣∣ nsumi=1

γi1 + e⟨xix⟩+bi

minus 11xisinC

∣∣∣∣ ⩽ ε

Deacutemonstration du corollairePartie 1

Soit h la fonction deacutefinie par h (x) =(

1

1 + eminuskx

)p

avec p gt 0 et 0 lt ϵ lt 1 A α ϵ fixeacute 0 lt ϵ lt 1 on cherche k

tel que

ϵ = h (α) =

(1

1 + eminuskα

)p

=rArr ϵminus1p = 1 + eminuskα

=rArr ϵminus1p minus 1 = eminuskα

=rArr ln(ϵminus

1p minus 1

)= minuskα

=rArr k = minusln(ϵminus

1p minus 1

= k0 (ϵ α p)

Partie 2Soit α gt 0 et 1 ⩾ ε gt 0 k gt 0

25 httpsfrwikipediaorgwikiNorme_C3A9quivalente

21 Reacuteseaux de neurones 35

Machine Learning Statistiques et Programmation Version 035930

On pose f (y1 yp) =pprod

i=1

1

1 + eminuskyi

pprodi=1

1

1 + eminusk(1minusyi)drsquoapregraves sa deacutefinition 0 ⩽ f (y1 yp) ⩽ 1

Pour k ⩾ k0 (ϵ α 2p) obtenu dans la partie preacuteceacutedente

infiisin1p

[min |yi| |1minus yi|] gt α =rArr∥∥f (y1 yp)minus 11xisinC

∥∥ ⩽ ε

Partie 3Soit g la fonction deacutefinie par

g (x) =

(1

1 + eminuskx

)(1

1 + eminusk(1minusx)

)=

1

1 + eminuskx + eminusk(1minusx) + eminusk

=1

1 + eminuskx + eminuskekx + eminusk=

ekx

ekx (1 + eminusk) + 1 + eminuske2kx

La fonction x minusrarr ekx(1 + eminusk

)+1+eminuske2kx est un polynocircme en ekx dont le discriminant est positif Par conseacutequent

la fraction rationnelle g (x) admet une deacutecomposition en eacuteleacutements simples du premier ordre et il existe quatre reacuteels η1η2 δ1 δ2 tels que

g (x) =η1

1 + ekx+δ1+

η21 + ekx+δ2

Par conseacutequent

f (y1 yp) =

pprodi=1

g (yi) =

pprodi=1

[ηi1

1 + ekyi+δi1+

ηi21 + ekyi+δi2

]Il existe n isin N tel qursquoil soit possible drsquoeacutecrire f sous la forme

f (y) =

nsumi=1

γi1 + eltxiygt+bi

Corollaire C2 approximation drsquoune fonction indicatriceSoit C sub Rp compact alors

forallε gt 0 forallα gt 0 exist (x1 xn) isin (Rp)n exist (b1 bn) isin Rn tels que forallx isin Rp∣∣∣∣sumn

i=1

γi1 + e⟨xix⟩+bi

minus 11xisinC

∣∣∣∣ ⩽ 1 + 2ε2

et infyisinFr(C)

∥xminus y∥ gt αrArr∣∣∣∣sumn

i=1

γi1 + e⟨xix⟩+bi

minus 11xisinC

∣∣∣∣ ⩽ ε

Deacutemonstration du corollairePartie 1Soit C1 = y = (y1 yp) isin Rp | foralli isin 1 n 0 ⩽ yi ⩽ 1 et Cj

2 =y = (y1 yp) isin Rp | foralli = j 0 ⩽ yi ⩽ 1 et 1 ⩽ yj ⩽ 2

36 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Le premier lemme suggegravere que la fonction chercheacutee pour ce lemme dans le cas particulier C1 cup Cj2 est

f (y1 yp) =prodp

i=1

1

1 + eminuskyi

prodpi=1

1

1 + eminusk(1minusyi)+(prod

i =j

1

1 + eminuskyi

)(prodi =j

1

1 + eminusk(1minusyi)

)1

1 + ek(1minusyj)

1

1 + eminusk(2minusyj)

=

(prodi =j

1

1 + eminuskyi

)(prodi=j

1

1 + eminusk(1minusyi)

)(

1

1 + eminuskyj

1

1 + eminusk(1minusyj)+

1

1 + ek(1minusyj)

1

1 + eminusk(2minusyj)

)=

(prodi =j

1

1 + eminuskyi

)(prodi=j

1

1 + eminusk(1minusyi)

)[

1

1 + eminuskyj

(1

1 + eminusk(1minusyj)+ 1minus 1

)+

(1minus 1

1 + eminusk(1minusyj)

)1

1 + eminusk(2minusyj)

]Pour k ⩾ k0 (ϵ α 2p) on a

f (y1 yp) =

(prodi=j

1

1 + eminuskyi

)(prodi =j

1

1 + eminusk(1minusyi)

) 1

1 + eminuskyj+

1

1 + eminusk(2minusyj)+

1

1 + ek(1minusyj)

1

1 + eminuskyj︸ ︷︷ ︸⩽ε2

minus 1

1 + eminusk(1minusyj)

1

1 + eminusk(2minusyj)︸ ︷︷ ︸⩽ε2

Par conseacutequent il est facile de construire la fonction chercheacutee pour tout compact connexe par arcPartie 2Si un compact C nrsquoest pas connexe par arc on peut le recouvrir par une somme finie de compacts connexes par arcs etdisjoints (Ck)1⩽k⩽K de telle sorte que

forally isinKcup

k=1Ck inf ∥xminus y∥ x isin C ⩽ α

2

Deacutemontration du theacuteoregraveme de densiteacute des reacuteseaux de neurones (page 35)Partie 1On deacutemontre le theacuteoregraveme dans le cas ougrave q = 1 Soit f une fonction continue du compact C sub Rp rarr R et soit ε gt 0On suppose eacutegalement que f est positive dans le cas contraire on pose f = f minus inf f︸ ︷︷ ︸

fonction positive

+ inf f

Si f est nulle alors crsquoest fini sinon on pose M = supxisinC

f (x) M existe car f est continue et C est compact (de mecircme

inf f existe eacutegalement)On pose Ck = fminus1 ([kεM ]) Ck est compact car il est lrsquoimage reacuteciproque drsquoun compact par une fonction continue etCk sub C compact

21 Reacuteseaux de neurones 37

Machine Learning Statistiques et Programmation Version 035930

Par construction Ck+1 sub Ck et C =

Mε⋃

k=0

Ck = C0 on deacutefinit~

forallx isin C gε (x) = ε

Mεsum

k=0

11xisinCk

Drsquoougrave~

f (x)minus gε (x) = f (x)minus ε

Mεsum

k=0

11xisinCk = f (x)minus ε

Mεsum

k=0

11f(x)⩾kε

= f (x)minus ε

[f (x)

ε

](partie entiegravere)

drsquoougrave 0 ⩽ f (x)minus gε (x) ⩽ε

4(23)

Comme f est continue sur un compact elle est uniformeacutement continue sur ce compact

existα gt 0 tel que forall (x y) isin C2 ∥xminus y∥ ⩽ α =rArr |f (x)minus f (y)| ⩽ ε2

drsquoougrave |f (x)minus f (y)| ⩾ ε =rArr ∥xminus y∥ gt α

Par conseacutequent

inf ∥xminus y∥ |x isin Fr (Ck) y isin Fr (Ck+1) gt α

38 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Drsquoapregraves le second lemme on peut construire des fonctions hk (x) =sumn

i=1

1

1 + e⟨xki x⟩+bki

telles que

(∥∥hk (x)minus 11xisinCk∥∥ ⩽ 1

)et(

infyisinFr(C)

∥xminus y∥ gt α

2rArr∥∥hk (x)minus 11xisinCk

∥∥ ⩽ ε2)

On en deacuteduit que ∣∣∣∣∣f (x)minus ε

Mεsumk=0hk (x)

∣∣∣∣∣ ⩽ |f (x)minus gε (x)|+

∣∣∣∣∣gε (x)minus ε

Mεsumk=0hk (x)

∣∣∣∣∣⩽ ε+ ε2

[M

ε

]+ 2ε2

⩽ ε (M + 3)

Comme εMεsumk=1hk (x) est de la forme deacutesireacutee le theacuteoregraveme est deacutemontreacute dans le cas q = 1

Partie 2Dans le cas q gt 1 on utilise la meacutethode preacuteceacutedente pour chacune des projections de f dans un repegravere orthonormeacute deRq Il suffit de sommer sur chacune des dimensionsCe theacuteoregraveme montre qursquoil est judicieux de modeacuteliser la fonction f dans lrsquoeacutequation (22) par un reacuteseau de neuronespuisqursquoil possible de srsquoapprocher drsquoaussi pregraves qursquoon veut de la fonction E (Y |X) il suffit drsquoajouter des neurones sur lacouche cacheacutee du reacuteseau Ce theacuteoregraveme permet de deacuteduire le corollaire suivant

Corollaire C3 famille libre de fonctionsSoit Fp lrsquoensemble des fonctions continues de C sub Rp minusrarr R avec C compact muni de la norme ∥f∥ = sup

xisinC∥f (x)∥

Alors lrsquoensemble Ep des fonctions sigmoiumldes

Ep =

x minusrarr 1minus 2

1 + eltyxgt+b|y isin Rp et b isin R

est une base de Fp

Deacutemonstration du corollaireLe theacuteoregraveme de densiteacute (page 35) montre que la famille Ep est une famille geacuteneacuteratrice Il reste agrave montrer que crsquoestune famille libre Soient (yi)1⩽i⩽N isin (Rp)

N et (bi)1⩽i⩽N isin RN veacuterifiant i = j =rArr yi = yj ou bi = bj Soit(λi)1⩽i⩽N isin RN il faut montrer que

forallx isin Rp

Nsumi=1

λi

(1minus 2

1 + eltyixgt+bi

)= 0 =rArr foralli λi = 0 (24)

Crsquoest eacutevidemment vrai pourN = 1 La deacutemonstration est baseacutee sur un raisonnement par reacutecurrence on suppose qursquoelleest vraie pour N minus 1 deacutemontrons qursquoelle est vraie pour N On suppose donc N ⩾ 2 Srsquoil existe i isin 1 N tel

que yi = 0 la fonction x minusrarr 1 minus 2

1 + eltyixgt+biest une constante par conseacutequent dans ce cas le corollaire est est

vrai pour N Dans le cas contraire foralli isin 1 N yi = 0 On deacutefinit les vecteurs Xi = (xi 1) et Yi = (yj bj)On cherche agrave reacutesoude le systegraveme de N eacutequations agrave N inconnues

sumNj=1 λj

(1minus 2

1 + eltYj X1gt

)= 0

sumNj=1 λj

(1minus 2

1 + eltYj Xigt

)= 0

sumNj=1 λj

(1minus 2

1 + eltYj XNgt

)= 0

(25)

21 Reacuteseaux de neurones 39

Machine Learning Statistiques et Programmation Version 035930

On note le vecteur Λ = (λi)1⩽i⩽N et M la matrice

M = (mij)1⩽ij⩽N =

(1minus 2

1 + eltYj Xigt

)1⩽ij⩽N

Lrsquoeacutequation (214) est eacutequivalente agrave lrsquoeacutequation matricielle MΛ = 0 On effectue une iteacuteration du pivot de Gauss(214) eacutequivaut agrave

lArrrArr

λ1m11 + λ2 m12 + + λN m1N = 0

0 + λ2 (m22m11 minusm12m21) + + λN (m2Nm11 minusm1Nm21) = 0 0 + λ2 (mN2m11 minusm12mN1) + + λN (mNNm11 minusm1NmN1) = 0

On note Λlowast = (λi)2⩽i⩽N et ∆lowast Mlowast les matrices

Mlowast = (mij)2⩽ij⩽N

∆lowast = (m1j mi1)2⩽ij⩽N

Donc (214) est eacutequivalent agrave

lArrrArr

λ1m11 + λ2m12 + + λNm1N = 00 + (m11Mlowast minus∆lowast) Λlowast = 0

(26)

Il est possible de choisir X1 (α) = (αx1 1) de telle sorte qursquoil existe une suite (sl)1⩽l⩽N isin minus1 1N avec s1 = 1 et

veacuterifiant

forallj isin (1 N) limαminusrarr+infin

[1minus 2

1 + eltYj X1(α)gt

]= lim

αminusrarr+infinm1j (α) = sj

On deacutefinit

Ulowast = (m21 mN1)prime

Vlowast = (s2 m21 sN mN1)prime

et la matrice Llowast = (Vlowast)2⩽i⩽N dont les N minus 1 colonnes sont identiques

On veacuterifie que

limαminusrarr+infin

∆(α) = Vlowast

On obtient toujours pour (214)

lArrrArr

λ1m11 (α) + λ2m12 (α) + + λNm1N (α) = 00 + [m11 (α)Mlowast minus (Llowast + (∆lowast (α)minus Llowast))] Λlowast = 0

(27)

lArrrArr

λ1m11 (α) + λ2m12 (α) + + λNm1N (α) = 00 + (m11 (α)Mlowast minus Llowast) Λlowast + (∆lowast (α)minus Llowast) Λlowast = 0

On eacutetudie la limite lorsque α minusrarr +infin

(∆lowast (α)minus Llowast) minusrarrαrarr+infin

0

=rArr (m11 (α)Mlowast minus Llowast) Λlowast minusrarrαrarr+infin

0

=rArr (Mlowast minus Llowast) Λlowast = 0

=rArr MlowastΛlowast minus(sumN

j=2 λj

)Vlowast = 0

40 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Donc

MlowastΛlowast minus

Nsumj=2

λj

Vlowast = 0

Drsquoapregraves lrsquohypothegravese de reacutecurrence (214) implique que foralli isin 2 N λi = 0 Il reste agrave montrer que λ1 estneacutecessairement nul ce qui est le cas losque α minusrarr +infin alors λ1m11 (α) minusrarr λ1 = 0 La reacutecurrence est deacutemontreacuteeA chaque fonction sigmoiumlde du corollaire famille libre (page 39) correspond un neurone de la couche cacheacutee Tous ontdes rocircles symeacutetriques les uns par rapport aux autres ce qui ne serait pas le cas si les fonctions de transfert eacutetaient despolynocircmes Crsquoest une des raisons pour lesquelles les reacuteseaux de neurones ont du succegraves Le theacuteoregraveme densiteacute (page 35)et le corollaire famille libre (page 39) sont aussi vraies pour des fonctions du type exponentielle (y b) isin RptimesR minusrarreminus(ltyxgt+b)2 Maintenant qursquoil est prouveacute que les reacuteseaux de neurones conviennent pour modeacuteliser f dans lrsquoeacutequation(22) il reste agrave eacutetudier les meacutethodes qui permettent de trouver les paramegravetres W lowast optimaux de cette fonction

215 Descente de gradient

bull Algorithme et convergence (page 42)bull Calcul du gradient ou reacutetropropagation (page 44)

Lorsqursquoun problegraveme drsquooptimisation nrsquoest pas soluble de maniegravere deacuteterministe il existe des algorithmes permettant detrouver une solution approcheacutee agrave condition toutefois que la fonction agrave maximiser ou minimiser soit deacuterivable ce qui estle cas des reacuteseaux de neurones Plusieurs variantes seront proposeacutees regroupeacutees sous le terme de descente de gradientQuelques lectures

bull An overview of gradient descent optimization algorithms26

bull Implementing a Neural Network from Scratch in Python ndash An Introduction27

26 httpsebastianrudercomoptimizing-gradient-descent27 httpwwwwildmlcom201509implementing-a-neural-network-from-scratch

21 Reacuteseaux de neurones 41

Machine Learning Statistiques et Programmation Version 035930

Algorithme et convergence

Soit g Rrarr R une fonction deacuterivable dont il faut trouver lowastx = argmin

xisinRg (x) le scheacutema suivant illustre la meacutethode de

descente de gradient dans le cas ougrave g (x) = x2

On note xt lrsquoabscisse agrave lrsquoiteacuteration t On notepartg (xt)

partxle gradient de g (x) = x2 Lrsquoabscisse agrave lrsquoiteacuteration t + 1 sera

xt+1 = xt minus εt

[partg (xt)

partx

] εt est le pas de gradient agrave lrsquoiteacuteration t

On suppose maintenant que g est une fonction deacuterivable g Rq rarr R dont il faut trouver le minimum le theacuteoregravemesuivant deacutemontre la convergence de lrsquoalgorithme de descente de gradient agrave condition que certaines hypothegraveses soientveacuterifieacutees Une geacuteneacuteralisation de ce theacuteoregraveme est preacutesenteacutee dans [Driancourt1996]

Theacuteoregraveme T1 convergence de la meacutethode de Newton[Bottou1991]Soit une fonction continue g W isin RM rarr R de classe C1 On suppose les hypothegraveses suivantes veacuterifieacutees

bull H1 argminWisinRq

g (W ) = W lowast est un singleton

bull H2 forallε gt 0 inf|WminusWlowast|gtε

[(W minusW lowast)

primenablag (W )

]gt 0

bull H3 exist (AB) isin R2 tels que forallW isin Rp ∥nablag (W )∥2 ⩽ A2 +B2 ∥W minusW lowast∥2

bull H4 la suite (εt)t⩾0 veacuterifie forallt gt 0 εt isin Rlowast+ et

sumt⩾0 εt = +infin

sumt⩾0 ε

2t lt +infin

Alors la suite (Wt)t⩾0 construite de la maniegravere suivante W0 isin RM forallt ⩾ 0 Wt+1 = Wt minus εtnablag (Wt) veacuterifielimtrarr+infin Wt = W lowast

Lrsquohypothegravese H1 implique que le minimum de la fonction g est unique et lrsquohypothegravese H2 implique que le demi-espacedeacutefini par lrsquoopposeacute du gradient contienne toujours le minimum de la fonction g Lrsquohypothegravese H3 est veacuterifieacutee pour une

42 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

fonction sigmoiumlde elle lrsquoest donc aussi pour toute somme finie de fonctions sigmoiumldes que sont les reacuteseaux de neuronesagrave une couche cacheacuteeDeacutemonstration du theacuteoregravemePartie 1Soit la suite ut = ln

(1 + ε2tx

2)

avec x isin R commesum

t⩾0 ε2t lt +infin ut sim ε2tx

2 on asum

t⩾0 ut lt +infin

Par conseacutequent si vt = eut alorsprodT

t=1 vtTrarrinfinminusrarr D isin R

Partie 2On pose ht = ∥Wt minusW lowast∥2 Donc

ht+1 minus ht = ∥Wt minus εtnablag (Wt)minusW lowast∥2 minus ∥Wt minusW lowast∥2 (28)

Par conseacutequent

ht+1 minus ht = minus2εt(Wt minusW lowast)prime nablag (Wt)︸ ︷︷ ︸

gt0

+ ε2t ∥nablaC (Wt)∥2 ⩽ ε2t ∥nablag (Wt)∥2 ⩽ ε2t(A2 +B2ht

)Drsquoougrave

ht+1 minus ht

(1 + ε2tB

2)⩽ ε2t A

2

On pose πt =prodt

k=1

(1 + ε2kB

2)minus1 alors en multipliant des deux cocircteacutes par πt+1 on obtient

πt+1ht+1 minus πtht ⩽ ε2t A2πt+1

drsquoougrave πq+1hq+1 minus πphp ⩽sumq

t=p ε2t A

2πt+1 ⩽sumq

t=p ε2t A

2Π ⩽sumq

t=p ε2t A

2Π minusrarrtminusrarrinfin

0

Comme la seacuteriesum

t (πt+1ht+1 minus πtht) veacuterifie le critegravere de Cauchy elle est convergente Par conseacutequent

limqrarrinfin

πq+1hq+1 = 0 = limqrarrinfin

Πhq+1

Drsquoougrave limqrarrinfin

hq = 0

Partie 3La seacuterie

sumt (ht+1 minus ht) est convergente car Πht sim πtht

sumt⩾0 ε

2t ∥nablag (Wt)∥2 lrsquoest aussi (drsquoapregraves H3)

Drsquoapregraves (215) la seacuteriesum

t⩾0 εt (Wt minusW lowast)prime nablag (Wt) est donc convergente Or drsquoapregraves les hypothegraveses H2 H4 elle

ne peut lrsquoecirctre que si

limtrarrinfin

Wt = W lowast (29)

Si ce theacuteoregraveme prouve la convergence de la meacutethode de Newton il ne preacutecise pas agrave quelle vitesse cette convergencesrsquoeffectue et celle-ci peut parfois ecirctre tregraves lente Plusieurs variantes ont eacuteteacute deacuteveloppeacutees regroupeacutees sous le terme demeacutethodes de quasi-Newton dans le but drsquoameacuteliorer la vitesse de convergenceCe theacuteoregraveme peut ecirctre eacutetendu dans le cas ougrave la fonction g nrsquoa plus un seul minimum global mais plusieurs minima locaux([Bottou1991]) dans ce cas la suite (Wt) converge vers un mimimum local Dans le cas des reacuteseaux de neurones lafonction agrave optimiser est

G (W ) =

Nsumi=1

e(Yi Y W

i

)=

Nsumi=1

e (Yi f (WXi))

Degraves que les fonctions de transfert ne sont pas lineacuteaires il existe une multitude de minima locaux ce nombre croissantavec celui des coefficients

21 Reacuteseaux de neurones 43

Machine Learning Statistiques et Programmation Version 035930

Calcul du gradient ou reacutetropropagation

Afin de minimiser la fonctionG deacutecrite en (215) lrsquoalgorithme de descente du gradient neacutecessite de calculer le gradientde cette fonction G qui est la somme des gradients parte

partW pour chaque couple (Xi Yi)

partG

partW(W ) =

Nsumi=1

parte (Yi f (WXi))

partW

=

Nsumi=1

CCsumk=1

parte (Yi f (WXi))

partzCk

partzCk

partW

Les notations utiliseacutees sont celles de la figure du perceptron (page 27) Les reacutesultats qui suivent sont pour Xi = Xdonneacute appartenant agrave la suite (Xi) On remarque tout drsquoabord que

parte

partwcij(WX) = zcminus1j

parte

partyci(WX)

parte

partbci(WX) =

parte

partyci(WX)

La reacutetropropagation du gradient consiste donc agrave calculer les termes parteparty

(WX) puisque le gradient srsquoen deacuteduitfacilement La derniegravere couche du reacuteseau de neurones nous permet drsquoobtenir

parte

partyCi(WX) =

CCsumk=1

parte

partzCk(WX)

partzCk

partyCi(WX)

=parte

partzCi(WX) f prime

ci (yCi)

Pour les autres couches c telles que 1 ⩽ c ⩽ C minus 1 on a

parte

partyci=

Cc+1suml=1

parte

partyc+1l

partyc+1l

partyci

=

Cc+1suml=1

parte

partyc+1l

Ccsuml=1

partyc+1l

partzcl

partzclpartyci︸ ︷︷ ︸

=0 si l =i

=

Cc+1suml=1

parte

partyc+1l

partyc+1l

partzci

partzcipartyci

Par conseacutequent

parte

partyci=

Cc+1suml=1

parte

partyc+1lwc+1li

f primeci (yci)

Cette derniegravere formule permet drsquoobtenir par reacutecurrence les deacuteriveacutees parteparty

de la derniegravere couche C agrave la premiegravere et cequel que soit le nombre de couches Cette reacutecurrence inverse de la propagation est appeleacutee reacutetropropagation Cetalgorithme se deacuteduit des eacutequations (215) (215) (215) et (215)

Theacuteoregraveme T2 reacutetropropagationCet algorithme srsquoapplique agrave un reacuteseau de neurones veacuterifiant la deacutefinition du perceptron (page 27) Il srsquoagit de calculersa deacuteriveacutee par rapport aux poids Il se deacuteduit des formules (215) (215) (215) et (215) et suppose que lrsquoalgorithmede propagation (page 28) a eacuteteacute preacutealablement exeacutecuteacute On note yprimeci =

partepartyci

wprimecij =

partepartwcij

et bprimeci = partepartbci

Initialisation

44 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

for i in 1CC

yprimeCi larrminus partepartzCi

(WX) f primeci (yCi)

Reacutecurrence

for c in 1C minus 1

for i in 1Cc

yprimeci larrminus 0

for j in 1Cc+1

yprimeci larrminus yprimeci + yprimec+1j wc+1ji

yprimeci larrminus yprimeci fprimeci

(yprimeci)

Terminaison

for c in 1C

for i in 1Cc

for j in 1Ccminus1

wprimecij larrminus zcminus1j y

primeci

bprimecij larrminus yprimeci

Ces formules sont assez indigestes pour comprendre comment la reacutetropropagation fonctionne La figure suivanteillustre comme le gradient se propage drsquoun neurone au preacuteceacutedente de faccedilon reacutecursive Je la trouve plus simple agraveexploiter lorsqursquoon deacutevie du perceptron classique pour faire des choses hors des clous Je la laisse comme ccedila sans tropdrsquoexplications

21 Reacuteseaux de neurones 45

Machine Learning Statistiques et Programmation Version 035930

Lrsquoideacutee de la reacutetropropagation en supposant connu le gradient de lrsquoerreur par rapport agrave la sortie comment en deacuteduirle gradient par rapport aux coefficients du reacuteseau puis comment le propager agrave chaque entreacutee de sorte qursquoil puisse ecirctretransmis aux neurones de la couche infeacuterieure

46 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

216 Apprentissage drsquoun reacuteseau de neurones

bull Apprentissage avec gradient global (page 48)ndash Meacutethodes du premier ordre (page 48)ndash Meacutethodes du second ordre (page 48)

bull Apprentissage avec gradient stochastique (page 52)

Le terme apprentissage est encore inspireacute de la biologie et se traduit par la minimisation de la fonction (215) ougrave f estun reacuteseau de neurone deacutefini par un perceptron (page 27) Il existe plusieurs meacutethodes pour effectuer celle-ci Chacunedrsquoelles vise agrave minimiser la fonction drsquoerreur

E (W ) = G (W ) =

Nsumi=1

e(Yi minus Y W

i

)=

Nsumi=1

e (Yi minus f (WXi))

Dans tous les cas les diffeacuterents apprentissages utilisent la suite suivante (ϵt) veacuterifiant (210) et proposent uneconvergence vers un minimum local

forallt gt 0 εt isin Rlowast+ et

sumt⩾0

εt = +infinsumt⩾0

ε2t lt +infin (210)

Il est souhaitable drsquoapprendre plusieurs fois la mecircme fonction en modifiant les conditions initiales de ces meacutethodes demaniegravere agrave ameacuteliorer la robustesse de la solution

21 Reacuteseaux de neurones 47

Machine Learning Statistiques et Programmation Version 035930

Apprentissage avec gradient global

Lrsquoalgorithme de reacutetropropagation (page 44) permet drsquoobtenir la deacuteriveacutee de lrsquoerreur e pour un vecteur drsquoentreacutee X Orlrsquoerreur E (W ) agrave minimiser est la somme des erreurs pour chaque exemple Xi le gradient global partE(W )

partW de cette erreurglobale est la somme des gradients pour chaque exemple (voir eacutequation (215)) Parmi les meacutethodes drsquooptimisationbaseacutees sur le gradient global on distingue deux cateacutegories

bull Les meacutethodes du premier ordre elles sont calqueacutees sur la meacutethode de Newton28 et nrsquoutilisent que le gradientbull Les meacutethodes du second ordre ou meacutethodes utilisant un gradient conjugueacute29 elles sont plus coucircteuses en calcul

mais plus performantes puisque elles utilisent la deacuteriveacutee seconde ou une valeur approcheacutee

Meacutethodes du premier ordre

Les meacutethodes du premier ordre sont rarement utiliseacutees Elles sont toutes baseacutees sur le principe de la descente degradient de Newton preacutesenteacutee dans la section Algorithme et convergence (page 42)

Algorithme A1 optimisation du premier ordreInitialiationLe premier jeu de coefficients W0 du reacuteseau de neurones est choisi aleacuteatoirement

t larrminus 0

E0 larrminussumN

i=1 e (Yi minus f (W0 Xi))

Calcul du gradientgt larrminus partEt

partW (Wt) =sumN

i=1 eprime (Yi minus f (Wt Xi))

Mise agrave jour

Wt+1 larrminus Wt minus ϵtgtEt+1 larrminus

sumNi=1 e (Yi minus f (Wt+1 Xi))

t larrminus t+ 1

TerminaisonSi Et

Etminus1asymp 1 (ou ∥gt∥ asymp 0) alors lrsquoapprentissage a convergeacute sinon retour au calcul du gradient

La condition drsquoarrecirct peut-ecirctre plus ou moins stricte selon les besoins du problegraveme Cet algorithme converge vers unminimum local de la fonction drsquoerreur (drsquoapregraves le theacuteoregraveme de convergence (page 42) mais la vitesse de convergenceest inconnue

Meacutethodes du second ordre

Lrsquoalgorithme apprentissage global (page 48) fournit le canevas des meacutethodes drsquooptimisation du second ordre La miseagrave jour des coefficients est diffeacuterente car elle prend en compte les derniegraveres valeurs des coefficients ainsi que les derniersgradients calculeacutes Ce passeacute va ecirctre utiliseacute pour estimer une direction de recherche pour le minimum diffeacuterente de celledu gradient cette direction est appeleacutee gradient conjugueacute (voir [Moreacute1977])Ces techniques sont baseacutees sur une approximation du second degreacute de la fonction agrave minimiser On note M le nombrede coefficients du reacuteseau de neurones (biais compris) Soit h RM rarr R la fonction drsquoerreur associeacutee au reacuteseau deneurones h (W ) =

sumi e (Yi f (WXi)) Au voisinage de W0 un deacuteveloppement limiteacute donne

h (W ) = h (W0) +parth (W0)

partW(W minusW0) + (W minusW0)

prime part2h (W0)

partW 2(W minusW0) + o ∥W minusW0∥2

28 httpsfrwikipediaorgwikiMC3A9thode_de_Newton29 httpsfrwikipediaorgwikiMC3A9thode_du_gradient_conjuguC3A9

48 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Par conseacutequent sur un voisinage de W0 la fonction h (W ) admet un minimum local si part2h(W0)partW 2 est deacutefinie positive

strictement

Rappel part2h (W0)

partW 2est deacutefinie positive strictementlArrrArr forallZ isin RN Z = 0 =rArr Z prime part

2h (W0)

partW 2Z gt 0

Une matrice symeacutetrique deacutefinie strictement positive est inversible et le minimum est atteint pour la valeur

Wmin = W0 +1

2

[part2h (W0)

partW 2

]minus1 [parth (W0)

partW

]Neacuteanmoins pour un reacuteseau de neurones le calcul de la deacuteriveacutee seconde est coucircteux son inversion eacutegalement Crsquoestpourquoi les derniegraveres valeurs des coefficients et du gradient sont utiliseacutees afin drsquoapprocher cette deacuteriveacutee seconde oudirectement son inverse Deux meacutethodes drsquoapproximation sont preacutesenteacutees

bull Lrsquoalgorithme BFGS (Broyden-Fletcher-Goldfarb-Shano)30 ([Broyden1967] [Fletcher1993]) voir aussi lesversions L-BFGS31

bull Lrsquoalgoritmhe DFP (Davidon-Fletcher-Powell)32 ([Davidon1959] [Fletcher1963])La figure du gradient conjugueacute (page 49) est couramment employeacutee pour illustrer lrsquointeacuterecirct des meacutethodes de gradientconjugueacute Le problegraveme consiste agrave trouver le minimum drsquoune fonction quadratique par exemple G (x y) = 3x2 + y2Tandis que le gradient est orthogonal aux lignes de niveaux de la fonction G le gradient conjugueacute se dirige plussucircrement vers le minimum global

Figure F1 Gradient conjugueacute

30 httpsenwikipediaorgwikiBroydenE28093FletcherE28093GoldfarbE28093Shanno_algorithm31 httpsenwikipediaorgwikiLimited-memory_BFGS32 httpsenwikipediaorgwikiDavidonE28093FletcherE28093Powell_formula

21 Reacuteseaux de neurones 49

Machine Learning Statistiques et Programmation Version 035930

Gradient et gradient conjugueacute sur une ligne de niveau de la fonction G (x y) = 3x2+y2 le gradient est orthogonal auxlignes de niveaux de la fonction G mais cette direction est rarement la bonne agrave moins que le point (x y) se situe surun des axes des ellipses le gradient conjugueacute agregravege les derniers deacuteplacements et propose une direction de rechercheplus plausible pour le minimum de la fonction Voir Conjugate Gradient Method33

Ces meacutethodes proposent une estimation de la deacuteriveacutee seconde (ou de son inverse) utiliseacutee en (216) Dans les meacutethodesdu premier ordre une iteacuteration permet de calculer les poidsWt+1 agrave partir des poidsWt et du gradientGt Si ce gradientest petit on peut supposer que Gt+1 est presque eacutegal au produit de la deacuteriveacutee seconde par Gt Cette relation est mise agraveprofit pour construire une estimation de la deacuteriveacutee seconde Cette matrice noteacutee Bt dans lrsquoalgorithme BFGS (page 50)est drsquoabord supposeacutee eacutegale agrave lrsquoidentiteacute puis actualiseacutee agrave chaque iteacuteration en tenant de lrsquoinformation apporteacutee par chaquedeacuteplacement

Algorithme A2 BFGSLe nombre de paramegravetres de la fonction f est M InitialisationLe premier jeu de coefficients W0 du reacuteseau de neurones est choisi aleacuteatoirement

t larrminus 0

E0 larrminussumN

i=1 e (Yi minus f (W0 Xi))B0 larrminus IMi larrminus 0

Calcul du gradient

gt larrminus partEt

partW (Wt) =sumN

i=1 eprime (Yi minus f (Wt Xi))

ct larrminus Btgt

Mise agrave jour des coefficients

ϵlowast larrminus arg infϵ

sumNi=1 e (Yi minus f (Wt minus ϵct Xi))

Wt+1 larrminus Wt minus ϵlowastctEt+1 larrminus

sumNi=1 e (Yi minus f (Wt+1 Xi))

t larrminus t+ 1

Mise agrave jour de la marice math`B_t`

si tminus i ⩾ M ou gprimetminus1Btminus1gtminus1 ⩽ 0 ou gprimetminus1Btminus1 (gt minus gtminus1) ⩽ 0

Bt larrminus IMilarrminus t

sinonst larrminusWt minusWtminus1

dt larrminus gt minus gtminus1

Bt larrminus Btminus1 +

(1 +

dprimetBtminus1dtdprimetst

)sts

primet

sprimetdtminus std

primetBtminus1 +Btminus1dts

primet

dprimetst

TerminaisonSi Et

Etminus1asymp 1 alors lrsquoapprentissage a convergeacute sinon retour au calcul du gradient

33 httpsenwikipediaorgwikiConjugate_gradient_method

50 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Lorsque la matrice Bt est eacutegale agrave lrsquoidentiteacute le gradient conjugueacute est eacutegal au gradient Au fur et agrave mesure des iteacuterationscette matrice toujours symeacutetrique eacutevolue en ameacuteliorant la convergence de lrsquooptimisation Neacuteanmoins la matrice Bt

doit ecirctre ńănettoyeacuteeă (eacutegale agrave lrsquoidentiteacute) freacutequemment afin drsquoeacuteviter qursquoelle nrsquoagregravege un passeacute trop lointain Elle estaussi nettoyeacutee lorsque le gradient conjugueacute semble trop srsquoeacuteloigner du veacuteritable gradient et devient plus proche drsquounedirection perpendiculaireLa convergence de cet algorithme dans le cas des reacuteseaux de neurones est plus rapide qursquoun algorithme du premierordre une preuve en est donneacutee dans [Driancourt1996]En pratique la recherche de ϵlowast est reacuteduite car le calcul de lrsquoerreur est souvent coucircteux il peut ecirctre effectueacute sur un grandnombre drsquoexemples Crsquoest pourquoi on remplace lrsquoeacutetape de mise agrave jour de lrsquoalgorithme BFGS (page 50) par celle-ci

Algorithme A3 BFGSiquestLe nombre de paramegravetre de la fonction f est M Initialisation calcul du gradientVoir BFGS (page 50)Recherche de math`epsilon^`

ϵlowast larrminus ϵ0while Et+1 ⩾ Et et ϵlowast ≫ 0

ϵlowast larrminus ϵlowast

2

Wt+1 larrminusWt minus ϵlowastct

Et+1 larrminussumN

i=1 e (Yi minus f (Wt+1 Xi))

if ϵlowast asymp 0 et Bt = IMBt larrminus IMilarrminus t

Retour au calcul du gradient

Mise agrave jour des coefficients

Wt+1 larrminus Wt minus ϵlowastctEt+1 larrminus

sumNi=1 e (Yi minus f (Wt+1 Xi))

t larrminus t+ 1

Mise agrave jour de la matrice math`B_t` temrinaisonVoir BFGS (page 50)

Lrsquoalgorithme DFP est aussi un algorithme de gradient conjugueacute qui propose une approximation diffeacuterente de lrsquoinversede la deacuteriveacutee seconde

Algorithme A4 DFPLe nombre de paramegravetre de la fonction f est M InitialisationLe premier jeu de coefficients W0 du reacuteseau de neurones est choisi aleacuteatoirement

t larrminus 0

E0 larrminussumN

i=1 e (Yi minus f (W0 Xi))B0 larrminus IMi larrminus 0

21 Reacuteseaux de neurones 51

Machine Learning Statistiques et Programmation Version 035930

Calcul du gradient

gt larrminus partEt

partW (Wt) =sumN

i=1 eprime (Yi minus f (Wt Xi))

ct larrminus Btgt

Mise agrave jour des coefficients

ϵlowast larrminus arg infϵ

sumNi=1 e (Yi minus f (Wt minus ϵct Xi))

Wt+1 larrminus Wt minus ϵlowastctEt+1 larrminus

sumNi=1 e (Yi minus f (Wt+1 Xi))

t larrminus t+ 1

Mise agrave jour de la matrice math`B_t`

si tminus i ⩾ M ou gprimetminus1Btminus1gtminus1 ⩽ 0 ou gprimetminus1Btminus1 (gt minus gtminus1) ⩽ 0

Bt larrminus IMilarrminus t

sinondt larrminusWt minusWtminus1

st larrminus gt minus gtminus1

Bt larrminus B_t-1 + dfracd_t drsquo_t drsquo_t s_t - dfracB_t-1 s_t srsquo_t B_t-1 srsquo_t B_t-1 s_t `

TerminaisonSi Et

Etminus1asymp 1 alors lrsquoapprentissage a convergeacute sinon retour agrave du calcul du gradient

Seule lrsquoeacutetape de mise agrave jour Bt diffegravere dans les algorithmes BFGS (page 50) et DFP (page 51) Comme lrsquoalgorithmeBFGS (page 50) on peut construire une version DFP (page 51)iquestinspireacutee de lrsquoalgorithme BFGSiquest (page 51)

Apprentissage avec gradient stochastique

Compte tenu des courbes drsquoerreurs tregraves accidenteacutees (page 52) dessineacutees par les reacuteseaux de neurones il existe unemultitude de minima locaux De ce fait lrsquoapprentissage global converge rarement vers le minimum global de la fonctiondrsquoerreur lorsqursquoon applique les algorithmes baseacutes sur le gradient global Lrsquoapprentissage avec gradient stochastiqueest une solution permettant de mieux explorer ces courbes drsquoerreurs De plus les meacutethodes de gradient conjugueacuteneacutecessite le stockage drsquoune matrice trop grande parfois pour des fonctions ayant quelques milliers de paramegravetres Crsquoestpourquoi lrsquoapprentissage avec gradient stochastique est souvent preacutefeacutereacute agrave lrsquoapprentissage global pour de grands reacuteseauxde neurones alors que les meacutethodes du second ordre trop coucircteuses en calcul sont cantonneacutees agrave de petits reacuteseaux Encontrepartie la convergence est plus lente La deacutemonstration de cette convergence neacutecessite lrsquoutilisation de quasi-martingales et est une convergence presque sucircre [Bottou1991]

Figure F2 Exemple de minimal locaux

52 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Algprithme A1 apprentissage stochastiqueInitialisationLe premier jeu de coefficients W0 du reacuteseau de neurones est choisi aleacuteatoirement

t larrminus 0

E0 larrminussumN

i=1 e (Yi minus f (W0 Xi))

Reacutecurrence

Wt0 larrminusW0

for tprime in 0N minus 1

ilarrminus nombre aleacuteatoire dans 1 Ng larrminus partE

partW (Wttprime) = eprime (Yi minus f (Wttprime Xi))

Wttprime+1 larrminusWttprime minus ϵtg

Wt+1 larrminusWtN

Et+1 larrminussumN

i=1 e (Yi minus f (Wt+1 Xi))

tlarrminus t+ 1

TerminaisonSi Et

Etminus1asymp 1 alors lrsquoapprentissage a convergeacute sinon retour au calcul du gradient

En pratique il est utile de converser le meilleur jeu de coefficients W lowast = argminu⩾0

Eu car la suite (Eu)u⩾0 nrsquoest pas

une suite deacutecroissante

21 Reacuteseaux de neurones 53

Machine Learning Statistiques et Programmation Version 035930

217 Classification

bull Vraisemblance drsquoun eacutechantillon de variable suivant une loi multinomiale (page 54)bull Problegraveme de classification pour les reacuteseaux de neurones (page 55)bull Reacuteseau de neurones adeacutequat (page 56)

Vraisemblance drsquoun eacutechantillon de variable suivant une loi multinomiale

Soit (Yi)1⩽i⩽N un eacutechantillon de variables aleacuteatoires iid suivant la loi multinomialeM (p1 pC) On deacutefinitforallk isin 1 middot middot middot C dk = 1

N

sumNi=1 11Yi=k La vraisemblance de lrsquoeacutechantillon est

L (Y1 YN p1 pC) =

nprodi=1

pYi

lnL (Y1 YN p1 pC) =

nsumi=1

ln pYi

lnL (Y1 YN p1 pC) =

Csumk=1

[(ln pk)

Nsumi=1

11Yi=k

]

lnL (Y1 YN p1 pC) = N

Csumk=1

dk ln pk

Cette fonction est aussi appeleacutee distance de Kullback-Leiber34 ([Kullback1951]) elle mesure la distance entre deuxdistributions de variables aleacuteatoires discregravetes Liquestestimateur de maximum de vraisemblance35 (emv) est la solution duproblegraveme suivant

Problegraveme P1 estimateur du maximum de vraisemblanceSoit un vecteur (d1 dN ) tel que sumN

k=1 dk = 1forallk isin 1 N dk ⩾ 0

On cherche le vecteur (plowast1 plowastN ) veacuterifiant

(plowast1 plowastN ) = argmax

(p1pC)isinRC

sumCk=1 dk ln pk

avecforallk isin 1 middot middot middot C pk ⩾ 0

etsumC

k=1 pk = 1

Theacuteoregraveme T1 reacutesolution du problegraveme du maximum de vraisemblanceLa solution du problegraveme du maximum de vraisemblance (page 54) est le vecteur

(plowast1 plowastN ) = (d1 dN )

34 httpsfrwikipediaorgwikiDivergence_de_Kullback-Leibler35 httpsfrwikipediaorgwikiMaximum_de_vraisemblance

54 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

DeacutemonstrationSoit un vecteur (p1 pN ) veacuterifiant les conditions sumN

k=1 pk = 1forallk isin 1 N pk ⩾ 0

La fonction x minusrarr lnx est concave drsquoougrave

∆ =

Csumk=1

dk ln pk minusCsum

k=1

dk ln dk

=

Csumk=1

dk (ln pk minus ln dk) =

Csumk=1

dk lnpkdk

⩽ ln

(Csum

k=1

dkpkdk

)= ln

(Csum

k=1

pk

)= ln 1 = 0

⩽ 0

La distance de KullBack-Leiber compare deux distributions de probabiliteacutes entre elles Crsquoest elle qui va faire le lienentre le problegraveme de classification discret (page 32) et les reacuteseaux de neurones pour lesquels il faut impeacuterativementune fonction drsquoerreur deacuterivable

Problegraveme de classification pour les reacuteseaux de neurones

Le problegraveme de classification (page 32) est un cas particulier de celui qui suit pour lequel il nrsquoest pas neacutecessaire deconnaicirctre la classe drsquoappartenance de chaque exemple mais seulement les probabiliteacutes drsquoappartenance de cet exempleagrave chacune des classesSoient une variable aleacuteatoire continue X isin Rp et une variable aleacuteatoire discregravete multinomiale Y isin 1 middot middot middot C onveut estimer la loi de

Y |X simM (p1 (WX) pC (WX)) avec W isin RM

Le vecteur (p1 (WX) pC (WX)) est une fonction f de (WX) ougrave W est lrsquoensemble des M paramegravetres dumodegravele Cette fonction possegravede p entreacutees et C sorties Comme pour le problegraveme de la reacutegression on cherche les poidsW qui correspondent le mieux agrave lrsquoeacutechantillon

A =

(Xi yi =

(ηki)1⩽k⩽C

)isin Rp times [0 1]

C tel quecsum

k=1

yki = 1

∣∣∣∣∣ 1 ⩽ i ⩽ N

On suppose que les variables (Yi|Xi)1⩽i⩽N suivent les lois respectives (M (yi))1⩽i⩽N et sont indeacutependantes entreelles la vraisemblance du modegravele veacuterifie drsquoapregraves lrsquoeacutequation (217)

LW propNprodi=1

Cprodk=1

[pk (WXi)]P(Yi=k)

lnLW propNsumi=1

Csumk=1

ηki ln [pk (WXi)]

La solution du problegravemelowastW = argmax

WisinRl

LW est celle drsquoun problegraveme drsquooptimisation sous contrainte Afin de contourner

ce problegraveme on deacutefinit la fonction f

f RM times Rp minusrarr RC

forall (Wx) isin RM times Rp f (Wx) = (f1 (Wx)) fC (Wx)

et foralli isin 1 middot middot middot N forallk isin 1 middot middot middot C pk (WXi) =efk(WXi)sumCl=1 e

fl(WXi)

21 Reacuteseaux de neurones 55

Machine Learning Statistiques et Programmation Version 035930

Les contraintes sur(pk (WXi)

)sont bien veacuterifieacutees

foralli isin 1 middot middot middot N forallk isin 1 middot middot middot C pk (WXi) ⩾ 0

foralli isin 1 middot middot middot N sumC

k=1 pk (WXi) = 1

On en deacuteduit que

lnLW propNsumi=1

Csumk=1

ηki

[fk (WXi)minus ln

[Csuml=1

efl(WXi)

]]

lnLW propNsumi=1

Csumk=1

ηki fk (WXi)minusNsumi=1

ln

[Csuml=1

efl(WXi)

]Csum

k=1

ηki︸ ︷︷ ︸=1

Drsquoougrave

lnLW propsumN

i=1

sumCk=1 η

ki fk (WXi)minus

sumNi=1 ln

[sumCl=1 e

fl(WXi)]

Ceci megravene agrave la deacutefinition du problegraveme de classification suivant

Problegraveme P2 classificationSoit A lrsquoeacutechantillon suivant

A =

(Xi yi =

(ηki)1⩽k⩽C

)isin Rp times RC tel que

csumk=1

ηki = 1

∣∣∣∣∣ 1 ⩽ i ⩽ N

yki repreacutesente la probabiliteacute que lrsquoeacuteleacutement Xi appartiennent agrave la classe k ηki = P (Yi = k|Xi)

Le classifieur chercheacute est une fonction f deacutefinie par

f RM times Rp minusrarr RC

(WX) minusrarr (f1 (WX) fp (WX))

Dont le vecteur de poids W lowast est eacutegal agrave

W lowast = argmaxW

Nsumi=1

Csumk=1

ηki fk (WXi)minusNsumi=1

ln

[Csuml=1

efl(WXi)

]

Reacuteseau de neurones adeacutequat

Dans le problegraveme preacuteceacutedent la maximisation delowastW = argmax

WisinRM

LW aboutit au choix drsquoune fonction

X isin Rp minusrarr f(lowastWX) isin RC

Le reacuteseau de neurones suivant (page 56) g (WX) isin RM times Rp minusrarr RC choisi pour modeacuteliser f aura pour sorties

X isin Rp minusrarr g(lowastWX) isin RC

forallk isin 1 middot middot middot C gk (WX) = efk(WX)

Figure F1 Reacuteseau de neurones adeacutequat pour la classification

56 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

On en deacuteduit que la fonction de transert des neurones de la couche de sortie est x minusrarr ex La probabiliteacute pour le

vecteur x isin Rp drsquoappartenir agrave la classe k isin 1 middot middot middot C est pk(lowastWx) = P (Y = k|x) = gk(

lowastWx)sumC

l=1 gl(lowastWx)

La fonction

drsquoerreur agrave minimiser est lrsquoopposeacute de la log-vraisemblance du modegravele

lowastW = argmin

WisinRM

[Nsumi=1

(minus

Csumk=1

ηki ln (gk (WXi)) + ln

[Csuml=1

gl (WXi)

])]

= argminWisinRM

[Nsumi=1

h(WXi η

ki

)]

On note Crn le nombre de couches du reacuteseau de neurones zkCrnest la sortie k avec k isin 1 middot middot middot C gk (Wx) =

zkCrn= ey

kCrn ougrave ykCrn

est le potentiel du neurone k de la couche de sortieOn calcule

parth(WXi y

ki

)partykCrn

= minusηki +ziCrnsumC

m=1 zmCrn

= pk(lowastWx)minus ηki

Cette eacutequation permet drsquoadapter lrsquoalgorithme de la reacutetropropagation (page 44) deacutecrivant reacutetropropagation pour leproblegraveme de la classification et pour un exemple

(X y =

(ηk)1⩽k⩽C

) Seule la couche de sortie change

Algorithme A1 reacutetropropagation

21 Reacuteseaux de neurones 57

Machine Learning Statistiques et Programmation Version 035930

Cet algorithme de reacutetropropagation est lrsquoadaptation de reacutetropropagation (page 44) pour le problegraveme de la classificationIl suppose que lrsquoalgorithme de propagation (page 28) a eacuteteacute preacutealablement exeacutecuteacute On note yprimeci = parte

partyci wprime

cij =parte

partwcijet bprimeci = parte

partbci

Initialiasation

for i in 1CC

yprimeCi larrminuszCisumCl=1 zCl

minus ηi

Reacutecurrence TerminaisonVoir reacutetropropagation (page 44)

On veacuterifie que le gradient srsquoannule lorsque le reacuteseau de neurones retourne pour lrsquoexemple (Xi yi) la distribution deY |Xi sim M (yi) Cet algorithme de reacutetropropagation utilise un vecteur deacutesireacute de probabiliteacutes (η1 ηCC

) veacuterifiantsumCC

i=1 ηi = 1 Lrsquoexpeacuterience montre qursquoil est preacutefeacuterable drsquoutiliser un vecteur veacuterifiant la contrainte

foralli isin 1 CC min ηi 1minus ηi gt α

avec α gt 0

Geacuteneacuteralement α est de lrsquoordre de 0 1 ou 0 01 Cette contrainte facilite le calcul de la vraisemblance et eacutevitelrsquoobtention de gradients quasi-nuls qui freinent lrsquoapprentissage lorsque les fonctions exponnetielles sont satureacutees (voir[Bishop1995])

218 Prolongements

bull Base drsquoapprentissage et base de test (page 58)bull Fonction de transfert agrave base radiale (page 60)bull Poids partageacutes (page 61)bull Deacuteriveacutee par rapport aux entreacutees (page 61)bull Reacutegularisation ou Decay (page 61)bull Problegravemes de gradients (page 62)bull Seacutelection de connexions (page 63)

Base drsquoapprentissage et base de test

Les deux exemples de reacutegression et de classification La reacutegression (page 28) et Problegraveme de classification pour lesreacuteseaux de neurones (page 55) ont montreacute que la structure du reacuteseau de neurones la mieux adapteacutee a une grandeimportance Dans ces deux cas une rapide veacuterification visuelle permet de juger de la qualiteacute du modegravele obtenu apregravesapprentissage mais bien souvent cette ńăvisionă est inaccessible pour des dimensions supeacuterieures agrave deux Le meilleurmoyen de jauger le modegravele appris est de veacuterifier si lrsquoerreur obtenue sur une base ayant servi agrave lrsquoapprentissage (ou basedrsquoapprentissage) est conserveacutee sur une autre base (ou base de test) que le modegravele deacutecouvre pour la premiegravere foisSoit B = (Xi Yi) |1 ⩽ i ⩽ N lrsquoensemble des observations disponibles Cet ensemble est aleacuteatoirement scindeacute endeux sous-ensembles Ba et Bt de telle sorte que

Ba = empty et Bt = emptyBa cupBt = B et Ba capBt = empty

Ba

BacupBt= p isin]0 1[ en regravegle geacuteneacuterale p isin

[12

34

]58 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Ce deacutecoupage est valide si tous les exemples de la base B obeacuteissent agrave la mecircme loi les deux bases Ba et Bt sont diteshomogegravenes Le reacuteseau de neurones sera donc appris sur la base drsquoapprentissage Ba et ńătesteacuteă sur la base de test BtLe test consiste agrave veacuterifier que lrsquoerreur sur Bt est sensiblement eacutegale agrave celle sur Ba auquel cas on dit que le modegravele(ou reacuteseau de neurones) geacuteneacuteralise bien Le modegravele trouveacute nrsquoest pas pour autant le bon modegravele mais il est robuste Lacourbe figure suivante illustre une deacutefinition du modegravele optimal comme eacutetant celui qui minimise lrsquoerreur sur la base detest Lorsque le modegravele choisi nrsquoest pas celui-lagrave deux cas sont possibles

bull Le nombre de coefficients est trop petit le modegravele geacuteneacuteralise bien mais il existe drsquoautres modegraveles meilleurs pourlesquels lrsquoerreur drsquoapprentissage et de test est moindre

bull Le nombre de coefficients est trop grand le modegravele geacuteneacuteralise mal lrsquoerreur drsquoapprentissage est faible et lrsquoerreurde test eacuteleveacutee le reacuteseau a appris la base drsquoapprentissage par coeur

Figure F1 Modegravele optimal pour la base de test

Ce deacutecoupage des donneacutees en deux bases drsquoapprentissage et de test est freacutequemment utiliseacute pour toute estimation demodegraveles reacutesultant drsquoune optimisation reacutealiseacutee au moyen drsquoun algorithme iteacuteratif Crsquoest le cas par exemple des modegravelesde Markov cacheacutes Elle permet de srsquoassurer qursquoun modegravele srsquoadapte bien agrave de nouvelles donneacutees

21 Reacuteseaux de neurones 59

Machine Learning Statistiques et Programmation Version 035930

Fonction de transfert agrave base radiale

La fonction de transfert est dans ce cas agrave base radiale (souvent abreacutegeacutee par RBF pour radial basis function36 Elle nesrsquoapplique pas au produit scalaire entre le vecteur des poids et celui des entreacutees mais agrave la distance euclidienne entre cesvecteurs

Deacutefinition D1 neurone distanceUn neurone distance agrave p entreacutees est une fonction f Rp+1 times Rp minusrarr R deacutefinie par

bull g Rrarr Rbull W isin Rp+1 W = (w1 wp+1) = (W prime wp+1)

bull forallx isin Rp f (Wx) = eminus∥Wprimeminusx∥2+wp+1 avec x = (x1 xp)

Ce neurone est un cas particulier du suivant qui pondegravere chaque dimension par un coefficient Toutefois ce neuronepossegravede 2p+ 1 coefficients ougrave p est le nombre drsquoentreacutee

Deacutefinition D2 neurone distance pondeacutereacuteePour un vecteur donneacute W isin Rp = (w1 wp) on note W j

i = (wi wj) Un neurone distance pondeacutereacutee agrave pentreacutees est une fonction f R2p+1 times Rp minusrarr R deacutefinie par

bull g Rrarr Rbull W isin R2p+1 W = (w1 w2p+1) = (w1 w2p+1)

bull forallx isin Rp f (Wx) = exp[minus[sump

i=1 wp+i (wi minus xi)2]+ wp+1

]avec x = (x1 xp)

La fonction de transfert est x minusrarr ex est le potentiel de ce neurone donc y = minus[sump

i=1 wp+i (wi minus xi)2]+ wp+1

Lrsquoalgorithme de reacutetropropagation (page 44) est modifieacute par lrsquoinsertion drsquoun tel neurone dans un reacuteseau ainsi que lareacutetropropagation Le plus simple tout drsquoabord

1 ⩽ i ⩽ pparty

partwi= minus2wp+i (wi minus xi)

p+ 1 ⩽ i ⩽ 2pparty

partwi= minus (wi minus xi)

2

i = 2p+ 1party

partwi= minus1

Pour le neurone distance simple la ligne (218) est superflue tous les coefficients (wi)p+1⩽i⩽2p sont eacutegaux agrave 1 Larelation (215) reste vraie mais nrsquoaboutit plus agraveeqalgo_retro_5 celle-ci devient en supposant que la couche drsquoindicec+ 1 ne contient que des neurones deacutefinie par la deacutefinition preacuteceacutedente

parte

partyci=

Cc+1suml=1

parte

partyc+1l

partyc+1l

partzci

partzcipartyci

=

Cc+1suml=1

parte

partyc+1l(2wc+1lp+i (wc+1li minus zci))

partzcipartyci

36 httpsenwikipediaorgwikiRadial_basis_function

60 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Poids partageacutes

Les poids partageacutes sont simplement un ensemble de poids qui sont contraints agrave conserver la mecircme valeur Soit G ungroupe de poids partageacutes dont la valeur est wG Soit Xk et Yk un exemple de la base drsquoapprentissage (entreacutees et sortiesdeacutesireacutees) lrsquoerreur commise par le reacuteseau de neurones est e (WXk Yk)

parte (WXk Yk)

partwG=sumwisinG

parte (WXk Yk)

partwG

partwG

partw=sumwisinG

sumparte (WXk Yk)

partwG

Par conseacutequent si un poids w appartient agrave un groupe G de poids partageacutes sa valeur agrave lrsquoiteacuteration suivante sera

wt+1 = wt minus εt

(sumwisinG

parte (WXk Yk)

partw

)

Cette ideacutee est utiliseacutee dans les reacuteseaux neuronaux convolutifs37 (deep learning38 CS231n Convolutional NeuralNetworks for Visual Recognition39)

Deacuteriveacutee par rapport aux entreacutees

On note (Xk Yk) un exemple de la base drsquoapprentissage Le reacuteseau de neurones est composeacute de C couches Ci

est le nombre de neurones sur la iegraveme couche C0 est le nombre drsquoentreacutees Les entreacutees sont appeleacutees (z0i)1⩽i⩽C0

(y1i)1⩽i⩽C1sont les potentiels des neurones de la premiegravere couche on en deacuteduit que dans le cas drsquoun neurone classique

(non distance)

parte (WXk Yk)

partz0i=

C1sumj=1

parte (WXk Yk)

party1j

party1jpartz0i

=

C1sumj=1

parte (WXk Yk)

party1jw1ji

Comme le potentiel drsquoun neurone distance nrsquoest pas lineacuteaire par rapport aux entreacutees(y =

Nsumi=1

(wi minus z0i)2+ b

) la

formule devient dans ce cas

parte (WXk Yk)

partz0i=

C1sumj=1

parte (WXk Yk)

party1j

party1jpartz0i

= minus2C1sumj=1

parte (WXk Yk)

party1j(w1ji minus z0i)

Reacutegularisation ou Decay

Lors de lrsquoapprentissage comme les fonctions de seuil du reacuteseau de neurones sont borneacutees pour une grande variationdes coefficients la sortie varie peu De plus pour ces grandes valeurs la deacuteriveacutee est quasi nulle et lrsquoapprentissage srsquoentrouve ralenti Par conseacutequent il est preacutefeacuterable drsquoeacuteviter ce cas et crsquoest pourquoi un terme de reacutegularisation est ajouteacutelors de la mise agrave jour des coefficients (voir [Bishop1995]) Lrsquoideacutee consiste agrave ajouter agrave lrsquoerreur une peacutenaliteacute fonction descoefficients du reacuteseau de neurones Ereg = E + λ

sumi w2

i

Et lors de la mise agrave jour du poids wti agrave lrsquoiteacuteration t+ 1 wt+1

i = wti minus ϵt

[partEpartwiminus 2λwt

i

]

Le coefficient λ peut deacutecroicirctre avec le nombre drsquoiteacuterations et est en geacuteneacuteral de lrsquoordre de 0 01 pour un apprentissageavec gradient global plus faible pour un apprentissage avec gradient stochastique

37 httpsfrwikipediaorgwikiRC3A9seau_neuronal_convolutif38 httpsfrwikipediaorgwikiApprentissage_profond39 httpcs231ngithubioneural-networks-1layers

21 Reacuteseaux de neurones 61

Machine Learning Statistiques et Programmation Version 035930

Problegravemes de gradients

La descente du gradient repose sur lrsquoalgorithme de reacutetropropagation (page 44) qui propoge lrsquoerreur depuis la derniegraverecouche jusqursquoagrave la premiegravere Pour peu qursquoune fonction de seuil soit satureacutee Hors la zone rouge le gradient est tregravesatteacutenueacute

import matplotlibpyplot as pltimport numpydef softmax(x)

return 10 (1 + numpyexp(-x))def dsoftmax(x)

t = numpyexp(-x)return t (1 + t)2

x = numpyarange(-1010 01)y = softmax(x)dy = dsoftmax(x)fig ax = pltsubplots(11)axplot(xy label=softmax)axplot(xdy label=deacuteriveacutee)axset_ylim([-01 11])axplot([-5 -5] [-01 11] r)axplot([5 5] [-01 11] r)axlegend(loc=2)pltshow()

62 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Apregraves deux couches de fonctions de transferts le gradient est souvent diminueacute On appelle ce pheacutenomegravene le Vanishinggradient problem40 Crsquoest drsquoautant plus probable que le reacuteseau est gros Quelques pistes pour y remeacutedier RecurrentNeural Networks Tutorial Part 3 ndash Backpropagation Through Time and Vanishing Gradients41 Why are deep neuralnetworks hard to train42 Lrsquoarticle Deep Residual Learning for Image Recognition43 preacutesente une structure de reacuteseauqui va dnas le mecircme sens De la mecircme maniegravere la norme du gradient peut exploser plus particuliegraverement dans le casdes reacuteseaux de neurones reacutecurrents44 Understanding the exploding gradient problem45

Seacutelection de connexions

Ce paragraphe preacutesente un algorithme de seacutelection de lrsquoarchitecture drsquoun reacuteseau de neurones proposeacute par Cottrel et Aldans [Cottrel1995] La meacutethode est applicable agrave tout reacuteseau de neurones mais nrsquoa eacuteteacute deacutemontreacutee que pour la classe dereacuteseau de neurones utiliseacutee pour la reacutegression (page 28) Les proprieacuteteacutes qui suivent ne sont vraies que des reacuteseaux agrave unecouche cacheacutee et dont les sorties sont lineacuteaires Soit (Xk Yk) un exemple de la base drsquoapprentissage les reacutesidus de lareacutegression sont supposeacutes normaux et iid Lrsquoerreur est donc (voir Formulation du problegraveme de la reacutegression (page 34)) e (WXk Yk) = (f (WXk)minus Yk)

2On peut estimer la loi asymptotique des coefficients du reacuteseau de neurones Des connexions ayant un rocircle peu importantpeuvent alors ecirctre supprimeacutees sans nuire agrave lrsquoapprentissage en testant la nulliteacute du coefficient associeacute On note W lespoids trouveacutes par apprentissage et

lowastW les poids optimaux On deacutefinit

la suite εk = f(W Xk

)minus Yk σ

2N =

1

N

Nsumk=1

εk2

la matrice ΣN =1

N

[nabla

We (WXk Yk)

] [nabla

We (WXk Yk)

]prime

Theacuteoregraveme T1 loi asymptotique des coefficientsSoit f un reacuteseau de neurone deacutefini par perceptron (page 27) composeacute de

bull une couche drsquoentreacuteesbull une couche cacheacutee dont les fonctions de transfert sont sigmoiumldesbull une couche de sortie dont les fonctions de transfert sont lineacuteaires

Ce reacuteseau sert de modegravele pour la fonction f dans le problegraveme de reacutegression (page 28) avec un eacutechantillon((X1 Y1) (XN YN )) les reacutesidus sont supposeacutes normaux La suite (ϵk) deacutefinie par (218) veacuterifie

1

N

Nsumi=1

ϵk = 0 = E[f(W X

)minus Y

]Et le vecteur aleacuteatoire W minusW lowast veacuterifie

radicN[W minusW lowast

]Trarr+infinminusrarr N

(0 σN

2ΣN

)Ougrave la matrice ΣN est deacutefinie par (218)endxtheorem

40 httpsenwikipediaorgwikiVanishing_gradient_problem41 httpwwwwildmlcom201510recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients42 httpneuralnetworksanddeeplearningcomchap5html43 httparxivorgpdf151203385v1pdf44 httpsenwikipediaorgwikiRecurrent_neural_network45 httparxivorgpdf12115063v1pdf

21 Reacuteseaux de neurones 63

Machine Learning Statistiques et Programmation Version 035930

Figure F2 Reacuteseau de neurones pour lequel la seacutelection de connexions srsquoapplique

La deacutemonstration de ce theacuteoregraveme est donneacutee par lrsquoarticle [Cottrel1995] Ce theacuteoregraveme megravene au corollaire suivant

Corollaire C1 nulliteacute drsquoun coefficientLes notations utiliseacutees sont celles du theacuteoregraveme sur loi asymptotique des coefficients (page 63) Soit wk un poids dureacuteseau de neurones drsquoindice quelconque k Sa valeur estimeacutee est wk sa valeur optimale wlowast

k Drsquoapregraves le theacuteoregraveme

N(wk minus wlowast

k)2

σN2(ΣN

minus1)kk

Trarr+infinminusrarr χ21

Ce reacutesultat permet agrave partir drsquoun reacuteseau de neurones de supprimer les connexions pour lesquelles lrsquohypothegravese denulliteacute nrsquoest pas reacutefuteacutee Afin drsquoaboutir agrave lrsquoarchitecture minimale adapteacutee au problegraveme Cottrel et Al proposent dans[Cottrel1995] lrsquoalgorithme suivant

Theacuteoregraveme T2 seacutelection drsquoarchitectureLes notations utiliseacutees sont celles du theacuteoregraveme loi asymptotique des coefficients (page 63) f est un reacuteseau de neuronesde paramegravetres W On deacutefinit la constante τ en geacuteneacuteral τ = 3 84 puisque P (X lt τ) = 0 95 si X sim χ2

1

64 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

InitialisationUne architecture est choisie pour le reacuteseau de neurones f incluant un nombre M de paramegravetresApprentissage

Le reacuteseau de neurones f est appris On calcule les nombre et matrice σN2 et ΣN La base drsquoapprentissage contient N

exemplesTest

for k in 1M

tk larrminus Nwk

2

σN2(ΣN

minus1)kk

Seacutelection

kprime larrminus argmink

tk

si tkprime lt τ

Le modegravele obtenu est supposeacute ecirctre le modegravele optimal Lrsquoalgorithme srsquoarrecirctesinon

La connexion kprime est supprimeacutee ou le poids wkprime est maintenue agrave zeacuteroM larrminusM minus 1

Retour agrave lrsquoapprentissage

Cet algorithme est sensible au minimum local trouveacute lors de lrsquoapprentissage il est preacutefeacuterable drsquoutiliser des meacutethodesdu second ordre afin drsquoassurer une meilleure convergence du reacuteseau de neuronesLrsquoeacutetape de seacutelection ne supprime qursquoune seule connexion Comme lrsquoapprentissage est coucircteux en calcul il peut ecirctreinteacuteressant de supprimer toutes les connexions k qui veacuterifient tk lt τ Il est toutefois conseilleacute de ne pas enlever trop deconnexions simultaneacutement puisque la suppression drsquoune connexion nulle peut reacutehausser le test drsquoune autre connexionnulle agrave cette mecircme iteacuteration mais non nulle agrave lrsquoiteacuteration suivante Dans lrsquoarticle [Cottrel1995] les auteurs validentleur algorithme dans le cas drsquoune reacutegression gracircce agrave lrsquoalgorithme suivant

Algorithme A1 validation de lrsquoalgorithme de seacutelection des coefficientsChoix aleacuteatoire drsquoun modegraveleUn reacuteseau de neurones est choisi aleacuteatoirement soit f Rp rarr R la fonction qursquoil repreacutesente Une base drsquoapprentissageA (ou eacutechantillon) de N observations est geacuteneacutereacutee aleacuteatoirement agrave partir de ce modegravele

soit (ϵi)1⩽i⩽N un bruit blancA =

(Xi Yi)1⩽i⩽N

∣∣∣ foralli isin 1 middot middot middot N Yi = f (Xi) + ϵi

Choix aleacuteatoire drsquoun modegraveleLrsquoalgorithme de seacutelection (page 64) agrave un reacuteseau de neurones plus riche que le modegravele choisi dans lrsquoeacutetape drsquoinitilisationLe modegravele seacutelectionneacute est noteacute g

ValidationSi ∥f minus g∥ asymp 0

lrsquoalgorithme de seacutelection (page 64) est valideacute

21 Reacuteseaux de neurones 65

Machine Learning Statistiques et Programmation Version 035930

219 Analyse en composantes principales (ACP) et Auto Encoders

bull Problegraveme de lrsquoanalyse en composantes principales (page 67)bull Reacutesolution drsquoune ACP avec un reacuteseau de neurones diabolo (page 67)bull Calcul de valeurs propres et de vecteurs propres (page 70)bull Analyse en Composantes Principales (ACP) (page 71)

Cet algorithme est proposeacute dans [Song1997] Autrefois reacuteseau diabolo le terme auto-encoder46 est plus utiliseacute depuislrsquoaveacutenement du deep learning Il srsquoagit de compresser avec perte un ensemble de points LiquestACP47 est une forme decompression lineacuteaire puisqursquoon cherche agrave preacuteserver lrsquoinformation en projetant un nuage de points de faccedilon agrave maximiserlrsquoinertie du nuage Les auto-encoders fonctionnent sur le mecircme principe avec des modegraveles non lineacuteairessubsectionPrincipeLrsquoalgorithme impleacutementant lrsquoanalyse en composantes principales est baseacute sur un reacuteseau lineacuteaire dit ńădiaboloă cereacuteseau possegravede une couche drsquoentreacutees agrave N entreacutees une couche cacheacutee et une couche de sortie agrave N sorties Lrsquoobjectif estdrsquoapprendre la fonction identiteacute sur lrsquoespace RN Ce ne sont plus les sorties qui nous inteacuteressent mais la couche cacheacuteeintermeacutediaire qui effectue une compression ou projection des vecteurs drsquoentreacutees puisque les entreacutees et les sorties dureacuteseau auront pour but drsquoecirctre identiques

Figure F1 Principe de la compression par un reacuteseau diabolo

vecteurX isin RN

vecteurY isin RM

et M lt N

vecteurZ asymp X

premiegravere couche du reacuteseaudiabolo projection (oucompression)

seconde couche du reacuteseaudiabolo reconstitution(ou deacutecompression)

R R

La figure suivante illustre un exemple de compression de vecteur de R3 dans R2

Figure F2 Reacuteseau diabolo reacuteduction drsquoune dimensionx1

x2

x3

z11

z12

z21

z22

z23

Ce reacuteseau possegravede 3 entreacuteeset 3 sorties Minimiser lrsquoerreur

sumNk=1 E (Xk Xk) revient agrave compresser un vecteur de dimension 3 en un vecteur de

dimension 2 Les coefficients de la premiegravere couche du reacuteseau de neurones permettent de compresser les donneacutees Lescoefficients de la seconde couche permettent de les deacutecompresser

La compression et deacutecompression ne sont pas inverses lrsquoune de lrsquoautre agrave moins que lrsquoerreur (219) soit nulle Ladeacutecompression srsquoeffectue donc avec des pertes drsquoinformation Lrsquoenjeu de lrsquoACP est de trouver un bon compromis entrele nombre de coefficients et la perte drsquoinformation tocircleacutereacutee Dans le cas de lrsquoACP la compression est ńălineacuteaireă crsquoestune projection

46 httpsenwikipediaorgwikiAutoencoder47 httpsfrwikipediaorgwikiAnalyse_en_composantes_principales

66 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Problegraveme de lrsquoanalyse en composantes principales

Lrsquoanalyse en composantes principales ou ACP est deacutefinie de la maniegravere suivante

Problegraveme P1 analyse en composantes principales (ACP)Soit (Xi)1⩽i⩽N avec foralli isin 1 N Xi isin Rp Soit W isinMpd (R) W = (C1 Cd) ougrave les vecteurs (Ci) sontles colonnes de W et d lt p On suppose eacutegalement que les (Ci) forment une base othonormeacutee Par conseacutequent

W primeW = Id

(W primeXi)1⩽i⩽N est lrsquoensemble des vecteurs (Xi) projeteacutes sur le sous-espace vectoriel engendreacute par les vecteurs (Ci)Reacutealiser une analyse en composantes principales crsquoest trouver le meilleur plan de projection pour les vecteurs (Xi)celui qui maximise lrsquoinertie de ce nuage de points crsquoest donc trouver W lowast tel que

W lowast = argmaxWisinMpd(R)W primeW=Id

E (W ) = argmaxWisinMpd(R)W primeW=Id

[Nsumi=1

∥W primeXi∥2

]

Le termeE (W ) est lrsquoinertie du nuage de points (Xi) projeteacute sur le sous-espace vectoriel deacutefini par les vecteurs colonnesde la matrice W

Reacutesolution drsquoune ACP avec un reacuteseau de neurones diabolo

Un theacuteoregraveme est neacutecessaire avant de construire le reacuteseau de neurones menant agrave la reacutesolution du problegraveme de liquestACP(page 67) afin de passer drsquoune optimisation sous contrainte agrave une optimisation sans contrainte

Theacuteoregraveme T1 reacutesolution de lrsquoACPLes notations utiliseacutees sont celles du problegraveme de liquestACP (page 67) Dans ce cas

S = argmaxWisinMpd(R)W primeW=Id

[Nsumi=1

∥W primeXi∥2

]= argmin

WisinMpd(R)

[Nsumi=1

∥WW primeXi minusXi∥2

]

De plus S est lrsquoespace vectoriel engendreacute par les d vecteurs propres de la matrice XX prime =sumN

i=1 XiXprimei associeacutees aux

d valeurs propres de plus grand module

DeacutemonstrationPartie 1Lrsquoobjectif de cette partie est de chercher la valeur de

maxWisinMpd(R)W primeW=Id

E (W )

Soit X = (X1 XN ) isin (Rp)N alors

E (W ) =

Nsumi=1

∥W primeXi∥2= tr (X primeWW primeX) = tr (XX primeWW prime)

La matrice XX prime est symeacutetrique elle est donc diagonalisable et il existe une matrice P isinMp (R) math telle qu

P primeXX primeP = DX avec DX diagonaleP primeP = Ip

(211)

21 Reacuteseaux de neurones 67

Machine Learning Statistiques et Programmation Version 035930

Soit P = (P1 Pp) les vecteurs propres de la matrice XX prime associeacutes aux valeurs propres (λ1 λp) telles que|λ1| ⩾ ⩾ |λp| Pour meacutemoire W = (C1 Cd) et on a

foralli isin 1 p XX primePi = λiPi

foralli isin 1 d Ci = Pi =rArr XX primeWW prime = DXd =

λ1 0 00 00 0 λd

Drsquoougrave

E (W ) = tr (XX primeWW prime) = tr (PDXP primeWW prime) = tr (DXP primeWW primeP )

Donc

maxWisinMpd(R)W primeW=Id

E (W ) = maxWisinMpd(R)W primeW=Id

tr (DXP primeWW primeP ) = maxY isinMpd(R)Y primeY=Id

tr (DXY Y prime) =sumi=1

dλi

Partie 2Soit Y isin max

WisinMpd(R)W primeW=Id

tr (X primeWW primeX) Y = (Y1 Yd) =(yki)1⩽i⩽d1⩽k⩽p

Chaque vecteur Yi est eacutecrit dans la base (P1 Pp) deacutefinie en (211)

foralli isin 1 d Yi =

psumk=1

yki Pp

Comme Y primeY = Id les vecteurs (Y1 Yd) sont orthogonaux deux agrave deux et normeacutes ils veacuterifient donc foralli isin 1 d

sumpk=1

(yki)2

= 1

forall (i j) isin 1 d2 sump

k=1 yki y

kj = 0

De plus

XX primeY Y prime = XX prime

(dsum

i=1

YiYprimei

)=

dsumi=1

XX primeYiYprimei

On en deacuteduit que

foralli isin 1 d XX primeYiYprimei = XX prime

(psum

k=1

yki Pk

)(psum

k=1

yki Pk

)prime

=

(psum

k=1

λkyki Pk

)(psum

k=1

yki Pk

)prime

Drsquoougrave

foralli isin 1 d tr (XX primeYiYprimei ) =

psumk=1

λk

(yki)2

Et

tr (XX primeY Y prime) =

dsumi=1

psumk=1

λk

(yki)2

tr (XX primeY Y prime) =

psumk=1

λk

(dsum

i=1

(yki)2)

=

psumk=1

λk

68 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Ceci permet drsquoaffirmer que

Y isin maxWisinMpd(R)W primeW=Id

tr (X primeWW primeX) =rArr vect (Y1 Yd) = vect (P1 Pd)

Les eacutequations (219) et (219) deacutemontrent la seconde partie du theacuteoregravemePartie 3

nsumi=1

∥WW primeXi minusXi∥2

=

nsumi=1

∥(WW prime minus IN )Xi∥2

= tr(X prime (WW prime minus Ip)

2X)

= tr(XX prime

((WW prime)

2 minus 2WW prime + Ip

))= tr (XX prime (WW primeWW prime minus 2WW prime + Ip))

= tr (XX prime (minusWW prime + Ip))

= minustr (XX primeWW prime) + tr (XX prime)

Drsquoougrave

maxWisinMpd(R)W primeW=Id

(Nsumi=1

∥W primeXi∥2

)= min

WisinMpd(R)W primeW=Id

(Nsumi=1

∥WW primeXi minusXi∥2

)

Partie 4XX prime est une matrice symeacutetrique elle est donc diagonalisable

existP isin GLN (R) telle que P primeXX primeP = Dp ougrave Dp est diagonale

On en deacuteduit que

Nsumi=1

∥WW primeXi minusXi∥2

= tr(XX prime (WW prime minus Ip)

2)

= tr(PP primeXX primePP prime (WW prime minus Ip)

2)

= tr(PDpP

prime (WW prime minus Ip)2)

= tr(Dp (P

primeWW primeP minus Ip)2)

= tr(Dp (Y Y prime minus Ip)

2)

avec Y = P primeW

Drsquoougrave

argminY

tr(Dp (Y Y prime minus Ip)

2)

= Y isinMNd (R) |Y Y prime = Id

Finalement lrsquoeacutequation (219) permet de deacutemontrer la premiegravere partie du theacuteoregraveme agrave savoir (219)

S = argmaxWisinMpd(R)W primeW=Id

[Nsumi=1

∥W primeXi∥2

]= argmin

WisinMpd(R)

[Nsumi=1

∥WW primeXi minusXi∥2

]

21 Reacuteseaux de neurones 69

Machine Learning Statistiques et Programmation Version 035930

Calcul de valeurs propres et de vecteurs propres

Le calcul des valeurs propres et des vecteurs propres drsquoune matrice fait intervenir un reacuteseau diabolo composeacute drsquouneseule couche cacheacutee et drsquoune couche de sortie avec des fonctions de transfert lineacuteaires On note sous forme de matrice(W ) les coefficients de la seconde couche du reacuteseau dont les biais sont nuls On note d le nombre de neurones sur lacouche cacheacutee et p le nombre drsquoentreacutees

foralli isin 1 d y1i =psum

j=1

wjixj

Soit X isin Rp les entreacutees Y = (y11 y1d) isin Rd on obtient que Y = W primeX Les poids de la seconde couche sont deacutefinis comme suit

forall (i j) isin 1 p times 1 d w2ji = w1ij

Par conseacutequent le vecteur des sorties Z isin Rp du reacuteseau ainsi construit est Z = WW primeX On veut minimiser lrsquoerreurpour (Xi)1⩽i⩽N

E =

Nsumi=1

∥WW primeXi minusXi∥2

Il suffit drsquoapprendre le reacuteseau de neurones pour obtenir

W lowastd = argmax

WisinMpd(R)

Nsumi=1

∥WW primeXi minusXi∥2

Drsquoapregraves ce qui preacutecegravede lrsquoespace engendreacute par les vecteurs colonnes de W est lrsquoespace engendreacute par les k premiersvecteurs propres de la matrice XX prime = (X1 XP ) (X1 XP )

prime associeacutes aux k premiegraveres valeurs propres classeacuteespar ordre deacutecroissant de moduleOn en deacuteduit que W lowast

1 est le vecteur propre de la matrice M associeacutee agrave la valeur propre de plus grand module W lowast2

est lrsquoespace engendreacute par les deux premiers vecteurs Gracircce agrave une orthonormalisation de Schmidt48 On en deacuteduit agravepartir de W lowast

1 et W lowast2 les deux premiers vecteurs propres Par reacutecurrence on trouve lrsquoensemble des vecteurs propres de

la matrice XX prime

Deacutefinition D1 orthonormalisation de SchmidtLrsquoorthonormalisation de Shmidt Soit (ei)1⩽i⩽N une base de Rp

On deacutefinit la famille (εi)1⩽i⩽p par

ε1 =e1∥e1∥

foralli isin 1 middot middot middot p εi =

ei minusiminus1sumj=1

lt ei εj gt εj∥∥∥∥∥ei minus iminus1sumj=1

lt ei εj gt εj

∥∥∥∥∥On veacuterifie que le deacutenominateur nrsquoest jamais nul ei minus

iminus1sumj=1

lt ei εj gt εj = 0 car forallk isin 1 N vect (e1 ek) =

vect (ε1 εk)

48 httpsfrwikipediaorgwikiAlgorithme_de_Gram-Schmidt

70 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Proprieacuteteacute P1 base orthonormeacuteeLa famille (εi)1⩽i⩽p est une base orthonormeacutee de Rp

Lrsquoalgorithme qui permet de deacuteterminer les vecteurs propres de la matrice XX prime deacutefinie par le theacuteoregraveme de liquestACP(page 67) est le suivant

Algorithme A1 vecteurs propresLes notations utiliseacutees sont celles du theacuteoregraveme de liquestACP (page 67) On note V lowast

d la matrice des d vecteurs propres dela matrice XX prime associeacutes aux d valeurs propres de plus grands module

for d pUn reacuteseau diabolo est construit avec les poids Wd isinMpd (R) puis apprisLe reacutesultat de cet apprentissage sont les poids W lowast

d if d gt 1

Lrsquoorthonormalisation de Schmit permet de deacuteduire V lowastd de V lowast

dminus1 et W lowastd

elseV lowastd = W lowast

d

Analyse en Composantes Principales (ACP)

Lrsquoanalyse en composantes principales permet drsquoanalyser une liste drsquoindividus deacutecrits par des variables Commeexemple il suffit de prendre les informations extraites du recensement de la population franccedilaise qui permet de deacutecrirechaque habitant par des variables telles que la cateacutegorie socio-professionnelle la salaire ou le niveau drsquoeacutetude Soit(X1 XN ) un ensemble de N individus deacutecrits par p variables

foralli isin 1 N Xi isin Rp

LrsquoACP consiste agrave projeter ce nuage de point sur un plan qui conserve le maximum drsquoinformation Par conseacutequent ilsrsquoagit de reacutesoudre le problegraveme

W lowast = argminWisinMpd(R)W primeW=Id

(Nsumi=1

∥W primeXi∥2

)avec d lt N

Ce problegraveme a eacuteteacute reacutesolu dans les paragraphes Problegraveme de lrsquoanalyse en composantes principales (page 67) et Calculde valeurs propres et de vecteurs propres (page 70) il suffit drsquoappliquer lrsquoalgorithme vecteurs propres (page 71)Soit (Xi)1⩽i⩽N avec foralli isin 1 N Xi isin Rp Soit (P1 Pp) lrsquoensemble des vecteurs propres normeacutes de lamatrice XX prime associeacutes aux valeurs propres (λ1 λp) classeacutees par ordre deacutecroissant de modules On deacutefinit foralld isin1 middot middot middot p Wd = (P1 Pd) isinMpd On deacutefinit alors lrsquoinertie Id du nuage de points projeteacute sur lrsquoespace vectorieldeacutefini par Pd On suppose que le nuage de points est centreacute alors

foralld isin 1 middot middot middot p Id =

Nsumk=1

(P primedXk)

2= tr (X primePdP

primedX) = tr (XX primePdP

primed) = λd

Comme (P1 Pp) est une base orthonormeacutee de Rp on en deacuteduit que

I =

Psumk=1

X primekXk =

Nsumd=1

Id =

psumd=1

λd

21 Reacuteseaux de neurones 71

Machine Learning Statistiques et Programmation Version 035930

De maniegravere empirique on observe freacutequemment que la courbe (d Id)1⩽d⩽p montre un point drsquoinflexion (voir figureci-dessous) Dans cet exemple le point drsquoinflexion correspond agrave d = 4 En analyse des donneacutees on considegravereempiriquement que seuls les quatres premiegraveres dimensions contiennent de lrsquoinformation

Figure F3 Courbe drsquoinertie pour lrsquoACP

Courbe drsquoinertie point drsquoinflexion pour d = 4 lrsquoexpeacuterience montre que geacuteneacuteralement seules les projections sur unou plusieurs des quatre premiers vecteurs propres reflegravetera lrsquoinformation contenue par le nuage de points

2110 Bibliographie

22 Classification agrave lrsquoaide des plus proches voisins

La figure suivante repreacutesente un problegraveme de classification classique On dispose drsquoun nuage de points reacuteparti en deuxclasses Un nouveau point semblable aux preacuteceacutedents se preacutesente sa classe est inconnue Lrsquoobjectif est de lui attribuerune classe en utilisant le fait qursquoon connaicirct la classe drsquoappartenance des autres points

72 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

A partir drsquoun nuage de points pour lesquels la classe drsquoappartenance est connue comment classer un nouveau pointpour lequel cette classe est inconnue Une meacutethode simple consiste agrave attribuer agrave ce nouveau point la mecircme classe que leplus proche des points appartenant au nuage initial Crsquoest la meacutethode des plus proches voisins (ou nearest neighbours49)Elle est facile agrave impleacutementer mais peu utiliseacutee car souvent tregraves gourmande en temps de calcul lorsque le nuage de pointsest conseacutequent Le premier paragraphe deacutecrit cette meacutethode les suivants cherchent agrave acceacuteleacuterer lrsquoalgorithme selon quele nuage de points appartient agrave un espace vectoriel ou non La derniegravere partie preacutesente lrsquoalgorithme LAESA pour le casougrave le nuage de points appartient agrave un espace meacutetrique quelconque

221 Principe

Cette meacutethode est la plus simple puisqursquoelle consiste agrave associer agrave x lrsquoeacuteleacutement agrave classer le label c (xilowast) de lrsquoeacuteleacutement leplus proche xilowast dans lrsquoensemble (x1 xN ) Ceci megravene agrave lrsquoalgorithme de classification suivant

Algorithme A1 1-PPV ou plus proche voisinSoit X = (x1 xN ) sub E un ensemble drsquoeacuteleacutements drsquoun espace meacutetrique quelconque soit (c (x1) c (xN )) lesclasses associeacutees agrave chacun des eacuteleacutements de X On note d la distance deacutefinie sur lrsquoespace meacutetrique E Soit x un eacuteleacutementagrave classer on cherche agrave deacuteterminer la classe c(x) associeacutee agrave x On deacutefinit xilowast comme eacutetant

xilowast = argminiisin1middotmiddotmiddot N

d (xi x)

Alors c(x) = c (xlowasti )

Cet algorithme est souvent appeleacute 1-PPV (ou 1-NN pour Nearest Neighbors) Il existe une version ameacutelioreacutee k-PPVqui consiste agrave attribuer agrave x la classe la plus repreacutesenteacutee parmi ses k plus proches voisins

Algorithme A2 k-PPV ou k-plus proches voisinsSoit X = (x1 xN ) sub E un ensemble drsquoeacuteleacutements drsquoun espace meacutetrique quelconque soit (c (x1) c (xN ))les classes associeacutees agrave chacun des eacuteleacutements de X On note d la distance deacutefinie sur lrsquoespace meacutetrique E ω (x y)est une fonction strictement positive mesurant la ressemblance entre x et y Soit x un eacuteleacutement agrave classer on cherche agravedeacuteterminer la classe c(x) associeacutee agrave x On deacutefinit lrsquoensemble Slowast

k incluant les k-plus proches voisins de x cet ensembleveacuterifie

cardSlowastk = 0 et max

yisinSlowastk

d (y x) ⩽ minyisinXminusSlowast

k

d (y x)

49 httpsenwikipediaorgwikiK-nearest_neighbors_algorithm

22 Classification agrave lrsquoaide des plus proches voisins 73

Machine Learning Statistiques et Programmation Version 035930

On calcule les occurrences f(i) de chaque classe i dans lrsquoensemble Slowastk

f(i) =sumyisinSlowast

k

ω (x y) 11c(y)=i (212)

On assigne alors agrave x la classe math`c(x)$ choisie dans lrsquoensemble

c(x) isin argmaxiisinN

f(i)

Dans sa version la plus simple la fonction ω (x y) utiliseacutee lors du calcul de la contribution f (212) est constante Maisil est possible de lui affecter une valeur tenant compte de la proximiteacute entre x et y La table suivante donne quelquesexemples de contributions possiblesExemple de contribution w (x y) pour lrsquoalgorithme des k-ppv (page 73) Ces fonctions sont toutes deacutecroissantes(strictement ou non) par rapport agrave la distance d Lrsquoinconveacutenient majeur de la meacutethode des plus proches voisins estsa longueur puisqursquoelle implique le calcul des distances entre x et chacun des eacuteleacutements de lrsquoensemble (x1 xN )Crsquoest pourquoi de nombreuses meacutethodes drsquooptimisation ont eacuteteacute deacuteveloppeacutees afin drsquoacceacuteleacuterer ce processus Les deuxpremiers paragraphes traitent le cas ougrave les points xi appartiennent agrave un espace vectoriel et ont donc des coordonneacuteesLes suivant traitent le cas ougrave les points xi nrsquoont pas de coordonneacutees et appartiennent agrave un espace meacutetrique quelconque

222 B+ tree

Ce premier algorithme B+ tree50 srsquoapplique dans le cas reacuteel afin drsquoordonner des nombres dans un arbre de sorte quechaque noeud ait un pegravere et pas plus de n fils

Deacutefinition D1 B+ treeSoit Bn un B+ tree51 soit N un noeud de Bn il contient un vecteur V (N) = (x1 xt) avec 0 ⩽ t ⩽ n etx1 lt lt xt Ce noeud contient aussi exactement t minus 1 noeuds fils noteacutes (N1 Ntminus1) On deacutesigne par D (Nt)

50 httpsenwikipediaorgwikiB2B_tree51 httpsenwikipediaorgwikiB2B_tree

74 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

lrsquoensemble des descendants du noeud Nt et G (Nt) = V (M) |M isin D (Nt) Le noeud N veacuterifie

forallx isin G (Nt) xt ⩽ x lt xt+1

avec par convention x0 = minusinfin et xt+1 = +infin

Cet arbre permet de trier une liste de nombres crsquoest une geacuteneacuteralisation du tri quicksort52 pour lequel n = 2 Commepour le tri quicksort lrsquoarbre est construit agrave partir drsquoune seacuterie drsquoinsertions et de cet ordre deacutepend la rapiditeacute du triLrsquoespeacuterance du coucirct (moyenne sur tous les permutations possibles de k eacuteleacutements) le coucirct de lrsquoalgorithme est enO (k logn k)

223 R-tree ou Rectangular Tree

Lrsquoarbre R-tree53 est lrsquoadaptation du meacutecanisme du B+ tree54 au cas multidimensionnel (voir [Guttman1984]) Laconstruction de cet arbre peut se faire de maniegravere globale - construction de lrsquoarbre sachant lrsquoensemble de points agraveclasser - ou de maniegravere progressive - insertion des points dans lrsquoarbre les uns agrave la suite des autres - Toutefois cesmeacutethodes sont resteintes agrave des espaces vectorielsIl nrsquoexiste pas une seule maniegravere de construire un R-tree55 les noeuds de ces arbres suivent toujours la contrainte desB+ tree56 qui est drsquoavoir un pegravere et au plus n fils Les R-tree57 ont la mecircme structure que les B+ tree58 ocircteacutee de leurscontraintes drsquoordonnancement des fils De plus ces arbres organisent spatialement des rectangles ou boicirctes en plusieursdimensions comme le suggegravere la figure preacuteceacutedente Les boicirctes agrave organiser seront nommeacutes les objets ces objets sontensuite regroupeacutes dans des boicirctes englobantes Un noeud n drsquoun R-tree59 est donc soit une feuille auquel cas la boicircteqursquoil deacutesigne est un objet dans ce cas il nrsquoa aucun fils soit le noeud deacutesigne une boicircte englobante B (n) On deacutesignepar B lrsquoensemble des boicirctes drsquoun espace vectoriel quelconque et v (b) deacutesigne son volume Pour un noeud n non feuilleA (n) deacutesigne lrsquoensemble des descendants de ce noeud B (n) est deacutefini par

B (n) = argmin v (b) |b isin B et forallnprime isin A (nprime) B (nprime) sub B (n)

La recherche dans un R-tree60 consiste agrave trouver tous les objets ayant une intersection avec une autre boicircte ou fenecirctreW soit lrsquoensemble L

L = B (n) |B (n) est un objet et B (n) capW = empty

Cet ensemble est construit gracircce agrave lrsquoalgorithme suivant

Algorithme A3 recherche dans un R-treeLes notations sont celles utiliseacutees dans ce paragraphe On deacutesigne par r le noeud racine drsquoun R-tree61 Soit n un noeudon deacutesigne par F (n) lrsquoensemble des fils de ce noeud

initialisation

Llarrminus 0 | N larrminus r

iteacuteration52 httpsfrwikipediaorgwikiTri_rapide53 httpsenwikipediaorgwikiR-tree54 httpsenwikipediaorgwikiB2B_tree55 httpsenwikipediaorgwikiR-tree56 httpsenwikipediaorgwikiB2B_tree57 httpsenwikipediaorgwikiR-tree58 httpsenwikipediaorgwikiB2B_tree59 httpsenwikipediaorgwikiR-tree60 httpsenwikipediaorgwikiR-tree61 httpsenwikipediaorgwikiR-tree

22 Classification agrave lrsquoaide des plus proches voisins 75

Machine Learning Statistiques et Programmation Version 035930

while N = empty

for n in 1N

if W capB (n) = emptyN larrminus N cup F (n)

if B (n) est un objetLlarrminus B (n)

L est lrsquoensemble chercheacute

Il reste agrave construire le R-tree62 opeacuteration effectueacutee par la reacutepeacutetition successive de lrsquoalgorithme suivant permettantdrsquoinseacuterer un objet dans un R-tree63

Algorithme A4 insertion drsquoun objet dans un R-treeLes notations utiliseacutees sont les mecircmes que celles de lrsquoalgorithme de recherche (page 75) On cherche agrave inseacuterer lrsquoobjectE deacutesigneacute par son noeud feuille e On suppose que lrsquoarbre contient au moins un noeud sa racine r On deacutesigneeacutegalement par p (n) le pegravere du noeud n Chaque noeud ne peut contenir plus de s fils On deacutesigne par vlowast (G) =min P |P isin B et cupgisinG B (g) sub Pseacutelection du noeud drsquoinsertion

nlowast larrminus r

tant que nlowast nrsquoest pas un noeud feuilleOn choisit le fils f de nlowast

qui minimise lrsquoaccroissement vf minus v (B (f))

du volume avec vf deacutefini par vf = min v (P ) |P isin B et B (f) cupB (e) sub Pnlowast larrminus f

ajout du noeudSi p (nlowast) a moins de s fils alors le noeud e devient le fils de p (nlowast) etB (p (nlowast)) est mis agrave jour drsquoapregraves lrsquoeacutetape preacuteceacutedenteLrsquoinsertion est termineacutee Dans le cas contraire on seacutepare deacutecoupe le noeud p (nlowast) en deux gracircce agrave lrsquoeacutetape suivantedeacutecoupage des noeudsLrsquoobjectif est de diviser le groupe G composeacute de s+ 1 noeuds en deux groupes G1 et G1 Tout drsquoabord on cherche lecouple (n1 n2) qui minimise le critegravere d = vlowast (n1 n2) minus v (B (n1)) minus v (B (n2)) alors G1 larrminus n1 G2 larrminus n2

et Glarrminus GminusG1 cupG2

tant que G = emptyOn choisit un noeud n isin G on deacutetermine ilowast

tel que math`vpaaccn cup G_i - vpaG_i$ soit minimalGlarrminus Gminus nGilowast larrminus Gilowast cup n

62 httpsenwikipediaorgwikiR-tree63 httpsenwikipediaorgwikiR-tree

76 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Si la recherche est identique quel que soit lrsquoarbre construit chaque variante de la construction de lrsquoarbre tente deminimiser les intersections des boicirctes et leur couverture Plus preacuteciseacutement lrsquoeacutetape qui permet de deacutecouper lesnoeuds est conccedilue de maniegravere agrave obtenir des boicirctes englobantes de volume minimale etou drsquointersection minimaleavec drsquoautres boicirctes englobantes Lrsquoalgorithme R+~Tree (voir [Sellis1987]) essaye de minimiser les intersectionsentre boicirctes et les objets agrave organiser sont supposeacutes nrsquoavoir aucune intersection commune La variante R tree64 (voir[Beckmann1990]) effectue un compromis entre lrsquointersection et la couverture des boicirctes englobantes LrsquoalgorithmeX-tree65 (voir [Berchtold1996]) conserve lrsquohistorique de la construction de lrsquoarbre ce qui lui permet de mieux eacuteviterles intersections communes entre boicirctes Ces techniques appartiennent agrave une classe plus larges drsquoalgorithmes de typeBranch and Bound66

224 LAESA

Cet algorithme permet de chercher les plus proches voisins dans un ensemble inclus dans un espace meacutetriquequelconque Il srsquoappuie sur lrsquoineacutegaliteacute triangulaire Lrsquoalgorithme LAESA67 ou Linear Approximating EliminatingSearch Algorithm (voir [Rico-Juan2003]) consiste agrave eacuteviter un trop grand nombre de calculs de distances en se servantde distances deacutejagrave calculeacutees entre les eacuteleacutements de E et un sous-ensemble B inclus dans E contenant des pivots Laseacutelection des pivots peut ecirctre aleacuteatoire ou plus eacutelaboreacutee comme celle effectueacutee par lrsquoalgorithme qui suit deacutecrit danslrsquoarticle [Moreno2003]

Algorithme A5 LAESA seacutelection des pivotsSoit E = y1 yN un ensemble de points on cherche agrave deacuteterminer un sous-ensemble de pivots B =p1 pP sub Einitialisation

B larrminus y isin E choisi arbitrairement

calcul de la fonction g

for y in E minusB

g (y)larrminus 0

for p in B

g (y)larrminus g (y) + d (y p)

mise agrave jour de B

Trouver plowast isin argmax g (p) |p isin E minusBB larrminus B cup plowastSi cardB lt P retour agrave lrsquoeacutetape preacuteceacutedente sinon fin

Lrsquoalgorithme LAESA68 utilise les pivots pour diminuer le nombre de calculs en utilisant lrsquoineacutegaliteacute triangulaire Parexemple soit x un eacuteleacutement agrave classer pj un pivot yi un point du nuage On suppose qursquoon connaicirct d (x pj) d (pj yi)et dlowast la distance du point x agrave un autre point du nuage Lrsquoineacutegaliteacute triangulaire permet drsquoaffirmer que si d (x yi) ⩾

64 httpsenwikipediaorgwikiR_tree65 httpsenwikipediaorgwikiX-tree66 httpsenwikipediaorgwikiBranch_and_bound67 httpstavianatorcomaesa68 httpstavianatorcomaesa

22 Classification agrave lrsquoaide des plus proches voisins 77

Machine Learning Statistiques et Programmation Version 035930

|d (x pj)minus d (pj yi)| gt dlowast alors il nrsquoest pas neacutecessaire de calculer la distance d (x yi) pour affirmer que d (x yi) gtdlowast Lrsquoeacuteleacutement yi ne peut ecirctre lrsquoeacuteleacutement le plus proche

Algorithme A6 LAESASoit E = y1 yN un ensemble de points B = p1 pP sub E un ensemble de pivots inclus dans E Oncherche agrave deacuteterminer le voisinage V (x) de x inclus dans E veacuterifiant

forally isin V (x) d (x y) ⩽ ρ

On suppose que la matrice M = (mij)⩽i⩽P1⩽j⩽N

a eacuteteacute calculeacutee preacutealablement comme suit

forall (i j) mij = d (pi yj)

initialisation

for i in 1P

di larrminus d (x pi)

dlowast larrminus min di|1 ⩽ i ⩽ Pdlowast est la distance du point x au pivot le plus proche

recherche du plus proche eacuteleacutement

S larrminus emptyfor i in 1N

dprime larrminus max |dj minusmji|if dprime lt dlowast

dlarrminus d (x yi)

if dprime ⩽ dlowast

dlowast larrminus dprime

S larrminus yi

225 Reacutesultats theacuteoriques

Lrsquoarticle [Farago1993] deacutemontre eacutegalement qursquoil existe une majoration du nombre moyen de calcul de distances pourpeu que la mesure de lrsquoespace contenant lrsquoensemble E et lrsquoeacuteleacutement x soit connue et que lrsquoensemble B = p1 pP des pivots veacuterifie

exist (α β) isin R+lowast tels que

forall (x y) isin E2 foralli α d (x y) ⩾ |d (x pi)minus d (pi y)|forall (x y) isin E2 max

i|d (x pi)minus d (pi y)| ⩾ β d (x y)

Lrsquoalgorithme deacuteveloppeacute dans [Farago1993] permet de trouver le point de plus proche drsquoun eacuteleacutement x dans un ensemblemath`E = ensemblex_1x_N`selon lrsquoalgorithme suivant

Algorithme A7 plus proche voisin drsquoapregraves [Farago1993]_

78 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Soit E = x1 xN et B = p1 pP sub E sub X Soit x isin X un eacuteleacutement quelconque On suppose que lesvaleurs mij = d (xi pj) ont eacuteteacute preacutealablement calculeacuteesinitialisationOn calcule preacutealablement les coefficients γ (xi)

foralli isin 1 N γ (xi)larrminus maxjisin1P

|mij minus d (x pj)|

eacutelaguageOn deacutefinit t0 larrminus min

iγ (xi) Puis on construit lrsquoensemble F (x) = xi isin E|γ (xi) ⩽ α

β t0

plus proche voisinLe plus proche xlowast voisin est deacutefini par xlowast isin argmin d (x y) |y isin F (x)

Et un petit theacuteoregraveme

Theacuteoregraveme T1 [Farago1993]_ 1Les notations sont celles de lrsquoalgorithme preacuteceacutedent Il retourne le plus proche voisin xlowast de x inclus dans E Autrementdit forallx isin X xlowast isin F (x)

Theacuteoregraveme T2 [Farago1993]_ 2Les notations sont celles du mecircme algorithme On deacutefinit une mesure sur lrsquoensemble X B (x r) deacutesigne la boule decentre x et de rayon r Z isin X une variable aleacuteatoire de plus

p (x r) = PX (B (x r)) = P (Z isin B (x r))

On suppose qursquoil existe d gt 0 et une fonction f X minusrarr R tels que

limrrarr0

p (x r)

rd= f (x) gt 0

La convergence doit ecirctre uniforme et presque sucircre On note eacutegalement FN le nombre de calculs de dissimilariteacuteeffectueacutes par lrsquoalgorithme ougrave N est le nombre drsquoeacuteleacutement de E P deacutesigne toujours le nombre de pivots alors

lim supnrarrinfin

EFN ⩽ k +

β

)2d

226 Impleacutementation

La classe NuagePoints impleacutemente les nuages de points sans optimisation Il utilise la mecircme interface quesklearnneighborsNearestNeighbors69 La second classe NuagePointsLeasaltltlt

import numpyfrom mlstatpymlkppv_laesa import NuagePointsLaesa

X = numpyarray([[0 0] [3 3] [1 1]])nuage = NuagePointsLaesa(2)

(suite sur la page suivante)

69 httpsscikit-learnorgstablemodulesgeneratedneighborsNearestNeighborshtml

22 Classification agrave lrsquoaide des plus proches voisins 79

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

nuagefit(X)dist indices = nuagekneighbors(X)print(distance dist)print(indices indices)

gtgtgt

usrlocallibpython39site-packagesscipyspatialdistancepy307rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(usrlocallibpython39site-packagesscipyspatialdistancepy307

rarrDeprecationWarning scipyspatialdistance metrics ignoring length-1 dimensions israrrdeprecated in SciPy 17 and will raise an error in SciPy 19

warningswarn(distance [0 0 0]indices [0 1 2]

80 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

227 Bilbiographie

23 Liens entre factorisation de matrices ACP k-means

La factorisation de matrice non neacutegative70 Cette meacutethode est utiliseacutee dans le cadre de la recommandation de produitsagrave des utilisateurs Lire eacutegalement [Acara2011] [Gupta2010]

bull Factorisation de matrices et rang (page 81)bull Quelques cas simples (page 82)bull Intuition geacuteomeacutetrique (page 83)bull k-means (page 85)bull Quelques reacutesultats (page 85)bull Prolongements (page 85)

ndash Factorisation non-neacutegative (page 85)ndash Preacutediction (page 85)ndash Norme (page 86)ndash Sparsiteacute (page 86)ndash Valeurs manquantes (page 86)ndash Interpreacutetation (page 86)ndash NTF (page 86)

bull Bibliographie (page 87)

231 Factorisation de matrices et rang

La factorisation drsquoune matrice71 est un problegraveme drsquooptimisation qui consiste agrave trouver pour une matrice M isin Mpq agravecoefficients positifs ou nuls

M = WH

Ougrave W et H sont de rang k et de dimension W isin Mpk et H isin Mkq On srsquointeacuteresse ici au cas ougrave les coefficients nesont pas neacutecessairement positifs Si k lt rang(M) le produit WH ne peut ecirctre eacutegal agrave M Dans ce cas on chercherales matrices qui minimise

Problegraveme P1 Factorisation de matrices positifsSoit M isinMpq on cherche les matrices agrave coefficients positifs W isinMpk et H isinMkq qui sont solution du problegravemedrsquooptimisation

minWH

∥M minusWH∥2

= min

WH

sumij

(mij minussumk

wikhkj)2

70 httpsenwikipediaorgwikiNon-negative_matrix_factorization71 httpsenwikipediaorgwikiNon-negative_matrix_factorization

23 Liens entre factorisation de matrices ACP k-means 81

Machine Learning Statistiques et Programmation Version 035930

232 Quelques cas simples

Le notebook Valeurs manquantes et factorisation de matrices (page 346) montre la deacutecroissante de lrsquoerreur en fonctiondu rang et lrsquoimpact de la correacutelation sur cette mecircme erreur Le dernier paragraphe montre qursquoil nrsquoexiste pas de solutionunique agrave un problegraveme donneacute Lrsquoexemple suivant srsquointeacuteresse agrave une matrice 3x3 Les trois points forment un triangledans un plan

import matplotlibpyplot as pltfrom mpl_toolkitsmplot3d import Axes3Dfrom numpy import identity array

M = identity(3)W = array([[05 05 0] [0 0 1]])TH = array([[1 1 0] [00 00 10]])wh = W H

fig = pltfigure()ax = figadd_subplot(111 projection=3d)

axscatter(M[0] M[1] M[2] c=b marker=o s=600 alpha=05)axscatter(wh[0] wh[1] wh[2] c=r marker=^)pltshow()

On peut voir la matrice M comme un ensemble de n = 3 points dans un espace vectoriel La matrice W est un

82 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

ensemble de k lt n points dans le mecircme espace La matrice WH de rang k est une approximation de cet ensembledans le mecircme espace crsquoest aussi n combinaisons lineacuteaires de k points de faccedilon agrave former n points les plus prochesproches de n points de la matrice M

233 Intuition geacuteomeacutetrique

Lrsquoexemple preacuteceacutedente suggegravere une interpreacutetation geacuteomeacutetrique drsquoune factorisation de matrice Sans valeur manquantece problegraveme est eacutequivalent agrave une Analyse en Composantes Principales (ACP)72 (voir aussi [Boutsidis2008](deacutecomposition en valeurs singuliegraveres comme algorithme drsquoinitialisation) Nous allons le montrer gracircce agrave quelqueslemmes et theacuteoregravemes

Lemme L1 Rang kOn note M = (mij) W k = (wk

il) Hk = (hklj) avec 1 ⩽ i ⩽ p 1 ⩽ j ⩽ q et 1 ⩽ l ⩽ k avec k lt min(p q)

On suppose que les matrices sont solution du problegraveme drsquooptimisation minWH ∥M minusWH∥2 On suppose querang(M) ⩾ k Alors les les matrices W k et Hk sont de rang k

On procegravede par reacutecurrence Ce lemme est neacutecessairement vrai pour k = 1 car la matrice M nrsquoest pas nulle Demaniegravere eacutevidente

∥∥M minusW kminus1Hkminus1∥∥2 ⩾

∥∥M minusW kHk∥∥2 Comme rang(M) ⩾ k il existe un vecteur colonne V

de la matrice M qui ne fait pas partie de lrsquoespace vectoriel engendreacute par les k minus 1 vecteurs de la matrice W kminus1 Onconstruit la matrice Y k = [W kminus1 V ] Par construction rang(Y ) = k De mecircme on construit Gk agrave partir de Hkminus1

en remplaccedilant la derniegravere colonne et en ajoutant une ligne

Gk =

[Hkminus1[1pminus 1] 0

0 1

]Par construction le dernier vecteur est de la matrice produit est identique agrave celui de la matrice M ∥∥M minus Y kminus1Gkminus1

∥∥2 =∥∥M minusW kminus1Hkminus1

∥∥2 minussumi

(miq minus wkminus1ik hkminus1

kq )2

Nous avons fabriqueacute une matrice de rang k qui fait deacutecroicirctre lrsquoerreur du problegraveme drsquooptimisation On procegravede parlrsquoabsurde pour dire que si rang(W ) = kminus 1 on peut construire une matrice de rang k qui fait deacutecroicirctre lrsquoerreur ce quiest impossible Le lemme est donc vraiCe lemme fait eacutegalement apparaicirctre la construction de q points dans un espace vectoriel engendreacute par les k vecteurscolonnes de la matrice Wk Il est donc possible de choisir nrsquoimporte quel base W prime

k de cet espace et drsquoexprimer lesq points de WkHk avec cette nouvelle base Cela signifie qursquoon peut eacutecrire la matrice Wk dans une base Bk commeWk = BkCk et WkHk = BkCkC

minus1k Gk

Lemme L2 ProjectionOn note M = (mij) W k = (wk

il) Hk = (hklj) avec 1 ⩽ i ⩽ p 1 ⩽ j ⩽ q et 1 ⩽ l ⩽ k avec k lt min(p q)

On suppose que les matrices sont solution du problegraveme drsquooptimisation minWH ∥M minusWH∥2 On considegravere que lamatrice M est un ensemble de q points dans dans un espace vectoriel de dimension p La matrice WH repreacutesente desprojections de ces points dans lrsquoespace vectoriel engendreacute par les k vecteurs colonnes de la matrice W

La figure suivante illustre ce lemme ∥M minusWH∥2 srsquoeacutecrit comme la somme des distances entre q points

∥M minusWH∥2 =

qsumj=1

∥M [j]minusWkHk[j]∥2

72 httpsfrwikipediaorgwikiAnalyse_en_composantes_principales

23 Liens entre factorisation de matrices ACP k-means 83

Machine Learning Statistiques et Programmation Version 035930

Or on sait que si Wk est fixeacute les q points de la matrice WkHk eacutevolue sur un hyperplan de dimension k Le point de ceplan le plus du vecteur M [j] est sa projection sur ce plan

Theacuteoregraveme T1 La factorisation de matrice est eacutequivalente agrave une analyse en composantes principalesOn note M = (mij) W k = (wk

il) Hk = (hklj) avec 1 ⩽ i ⩽ p 1 ⩽ j ⩽ q et 1 ⩽ l ⩽ k avec k lt min(p q)

On suppose que les matrices sont solution du problegraveme drsquooptimisation minWH ∥M minusWH∥2 On considegravere que lamatrice M est un ensemble de q points dans dans un espace vectoriel de dimension p On suppose p lt q La matriceWk deacutefinit un hyperplan identique agrave celui deacutefini par les k vecteurs propres associeacutes aux k plus grande valeurs propresde la matrice MM prime ougrave M prime est la transposeacutee de M

Une analyse en composante principale consiste agrave trouver lrsquohyperplan qui maximise lrsquoinertie de la projection drsquoun nuagesur ce plan Le theacuteoregraveme reacutesolution de lrsquoACP (page 67) a montreacute que

S = argmaxWisinMpd(R)W primeW=Id

[Nsumi=1

∥W primeXi∥2

]= argmin

WisinMpd(R)

[Nsumi=1

∥WW primeXi minusXi∥2

]

Dans notre cas chaque ligne de la matrice M est un vecteur Xi La matrice Wk est identique agrave celle chercheacutee lorsdu problegraveme de factorisation de matrices Les colonnes de la matrice Hk sont eacutegales agrave W primeXi Il reste agrave montrer quele minimum trouveacute dans les deux problegravemes est le mecircme Le notebook Factorisation et matrice et ACP (page 342)montre que cela fonctionne sur un exemple La deacutemonstration du theacuteoregraveme montre eacutegalement que W primeW = Id et dansce cas preacutecis WW primeXi repreacutesente les coordonneacutees de la projection du point Xi sur le plan deacutefini par les vecteurs W Crsquoest aussi ce que montre second lemmme (page 83) Srsquoil srsquoagit du mecircme plan cela signifie que les deux formulationsACP et factorisation de matrices aboutissent au mecircme minimum Comme lrsquoalgorithme de lrsquoACP deacutetermine le meilleurplan projecteur neacutecessairement il correspond agrave celui trouveacute par la factorisation de matrice

84 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

234 k-means

On peut construire deux matrices W et H agrave partir des reacutesultats drsquoun k-means (page 1) Celui-ci deacutetermine k centresauxquels on effecte les points du nuage de deacutepart Dans ce cas-ci la matrice W est constitueacutee des coordonneacutees de cescentres On note Cl le cluster l la matrice Hk = (hk

lj) est deacutefinie comme suit

hklj = 11XjisinCl

Les coefficients sont soit 0 ou 1 On peut alors essayer de forcer la factorisation de matrice vers une matrice H avecpas de un 1 sur chaque colonne et des zeacuteros partout ailleurs Le reacutesultat sera assez proche drsquoun clustering

235 Quelques reacutesultats

Le notebook Factorisation et matrice et ACP (page 342) illustre le lien entre ACP et factorisation de matrice en deuxdimensions

236 Prolongements

Tous les reacutesultats montreacutes ici ne sont valables que si la norme L2 est utiliseacutee Cela permet de mieux comprendre lesreacutefeacuterences proposeacutees dans la documentation de Non-negative matrix factorization (NMF or NNMF)73 Si lrsquoACP et lafactorisation de matrices sont eacutequivalentes les algorithmes pour trouver le minimum diffegraverent et sont plus ou moinsapproprieacutes dans certaines configurations Lire [Gilles2014]

Factorisation non-neacutegative

Le problegraveme le plus souvent eacutevoqueacute est celui de la factorisation non-neacutegative NMF74 Ce problegraveme est uneoptimisation avec contrainte les coefficients doivent tous ecirctre positifs ou nuls Il nrsquoest bien sucircr plus eacutequivalent agraveune ACP En revanche la factorisation de matrice est un problegraveme eacutequivalent agrave celui reacutesolu par la Deacutecomposition enValeur Singuliegravere (SVD)75 qui cherche agrave deacutecomposer une matriceM = UΣV lowast La matriceΣ est une matrice diagonaleet la matrice initiale M nrsquoest pas neacutecessairement carreacutee contrairement au cas drsquoune ACP mais SVD et ACP sont tregravessimilaires

Preacutediction

Preacutedire revient agrave supposer que la matrice M est composeacutee de vecteurs lignes X1 Xq La matrice H reste inchangeacuteeet la preacutediction revient agrave deacuteterminer les coordonneacutees de la projection drsquoun nouveau point Xq+1 dans le plan deacutefinipar les vecteurs de la matrice H Pour de nouvelles observations M2 = Xq+1 la fonction transform76 de la classesklearndecompositionNMF77 reacuteestime une matrice W2 qui projette les vecteurs lignes de M2 sur les vecteurs de H enconservant des coefficients de projection positifs

Problegraveme P2 PreacutedictionSoit M isinMpq et H isinMkq on cherche les matrices agrave coefficients positifs W isinMpk qui sont solution du problegravemedrsquooptimisation

minW

∥M minusWH∥2

= min

WH

sumij

(mij minussumk

wikhkj)2

73 httpscikit-learnorgstablemodulesdecompositionhtmlnmf74 httpswwwmathuniv-toulousefr~besseWikistatpdfst-m-explo-nmfpdf75 httpsfrwikipediaorgwikiDC3A9composition_en_valeurs_singuliC3A8res76 httpsscikit-learnorgstablemodulesgeneratedsklearndecompositionNMFhtmlsklearndecompositionNMFtransform77 httpsscikit-learnorgstablemodulesgenerateddecompositionNMFhtml

23 Liens entre factorisation de matrices ACP k-means 85

Machine Learning Statistiques et Programmation Version 035930

Les recommandations srsquoobtiennent en multipliant W2 par Xq+1 Ce produit peut ecirctre approcheacutee en relacircchant lacontrainte des poids positifs pour la matrice W Crsquoest la piste proposeacutee par le modegravele ApproximateNMFPredictor78

qui utilise une transformation SVD pour projeter sur lrsquoespace vectoriel formeacute par les vecteurs de H

Norme

LrsquoACP avec une norme L1 revient agrave trouver le plan qui minimise la somme des distances agrave la projection et non lasomme des distances au carreacutes Cela reacuteduit lrsquoimpact des points aberrants mais le problegraveme nrsquoest plus eacutequivalent agrave lafactorisation de matrices avec une norme L1

Sparsiteacute

Une ACP suppose que le calcul de valeurs propres drsquoune matrice et crsquoest fastidieux lorsque la dimension du problegravemeest tregraves grande On lui preacutefegravere alors un algorithme tel que Sparse PCA79 La factorisation de matrice est plus efficaceqursquoune ACP sur les problegravemes sparses et de grande dimension Lire Non-negative Matrix Factorization with SparsenessConstraints80

Valeurs manquantes

Contourner le problegraveme des valeurs manquantes veut souvent dire soit supprimer les enregistrements contenant desvaleurs manquantes soit choisir un modegravele capable de faire avec ou soit trouver un moyen de les remplacer On peutgeacuterer plus facilement le problegraveme des valeurs manquantes avec une factorisation de matrices On peut eacutegalement seserver de la meacutethode pour calculer une ACP avec des valeurs manquantes

bull Imputation de donneacutees manquantes81

bull Principal component analysis with missing values a comparative survey of methods82

Interpreacutetation

La factorisation de matrice peut ecirctre utiliseacutee comme outil de segmentation et drsquointerpreacutetation pour des images desvideacuteos Lire A tutorial on Non-Negative Matrix Factorisation with Applications to Audiovisual Content Analysis83

bull Gesture recognition using a NMF-based representation of motion-traces extracted from depth silhouettes84

NTF

Le problegraveme de Non-Negative Matrix Factorisation (NMF)85 est un cas particulier de Non-Negative TensorFactorisation (NTF)86 Lire aussi PARAFAC Tutorial and applications87

78 httpwwwxavierduprefrappmlinsightshelpsphinxmlinsightsmlmodelanmf_predictorhtml79 httpscikit-learnorgstablemodulesdecompositionhtmlsparsepca80 httpwwwjmlrorgpapersvolume5hoyer04ahoyer04apdf81 httpswwwmathuniv-toulousefr~besseWikistatpdfst-m-app-idmpdf82 httppbiluniv-lyon1frmembersdrayfilesarticlesdray2015apdf83 httppersotelecom-paristechfr~essidteachNMF_tutorial_ICME-2014pdf84 httpshalarchives-ouvertesfrhal-00990252document85 httpsenwikipediaorgwikiNon-negative_matrix_factorization86 httpwwwcshujiacil~shashuapapersNTF-icmlpdf87 httpswwwcscmuedu~pmuthukumlsp_pagelecturesParafacpdf

86 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

237 Bibliographie

24 Un arbre de deacutecision en reacuteseaux de neurones

Lrsquoideacutee est de convertir sous la forme drsquoun reacuteseaux de neurones un arbre de deacutecision puis de continuer lrsquoapprentissagede faccedilon agrave obtenir un assemblage de reacutegression logistique plutocirct que de deacutecision binaire

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Un exemple sur Iris (page 87)bull Mecircme exemple en reacuteseau de neurones (page 88)bull Intermegravede de simples neurones de reacutegression (page 90)bull Intermegravede de simples neurones de classification (page 94)bull Apprentissage du reacuteseau de neurones (page 98)bull Autre architecture (page 104)

matplotlib inlinefrom jyquickhelper import RenderJsDotimport numpyimport matplotlibpyplot as pltfrom matplotlibcolors import ListedColormapfrom tqdm import tqdm

241 Un exemple sur Iris

La meacutethode ne marche que sur un problegraveme de classification binaire

from sklearndatasets import load_irisdata = load_iris()X y = datadata[ 2] datatargety = y 2

from sklearnmodel_selection import train_test_splitX_train X_test y_train y_test = train_test_split(X y random_state=11)

from sklearntree import DecisionTreeClassifierdec = DecisionTreeClassifier(max_depth=2 random_state=11)decfit(X_train y_train)decscore(X_test y_test)

06052631578947368

from sklearntree import export_graphvizdot = export_graphviz(dec filled=True)dot = dotreplace(shape=box shape=box fontsize=10 )RenderJsDot(dot)print(dot)

24 Un arbre de deacutecision en reacuteseaux de neurones 87

Machine Learning Statistiques et Programmation Version 035930

digraph Tree node [shape=box fontsize=10 style=filled color=black fontname=helvetica] edge [fontname=helvetica] 0 [label=X[1] lt= 295ngini = 0454nsamples = 112nvalue = [73 39] fillcolor=rarrf3c4a3] 1 [label=X[0] lt= 705ngini = 0429nsamples = 45nvalue = [14 31] fillcolor=92c9f1]rarr0 -gt 1 [labeldistance=25 labelangle=45 headlabel=True] 2 [label=gini = 0402nsamples = 43nvalue = [12 31] fillcolor=86c3ef] 1 -gt 2 3 [label=gini = 00nsamples = 2nvalue = [2 0] fillcolor=e58139] 1 -gt 3 4 [label=X[1] lt= 325ngini = 021nsamples = 67nvalue = [59 8] fillcolor=e99254] 0 -gt 4 [labeldistance=25 labelangle=-45 headlabel=False] 5 [label=gini = 0375nsamples = 32nvalue = [24 8] fillcolor=eeab7b] 4 -gt 5 6 [label=gini = 00nsamples = 35nvalue = [35 0] fillcolor=e58139] 4 -gt 6

Lrsquoarbre de deacutecision est petit donc visuellement reacuteduit et il est perfectible aussi

242 Mecircme exemple en reacuteseau de neurones

Chaque noeud de lrsquoarbre de deacutecision est converti en deux neurones un qui le relie agrave lrsquoentreacutee et qui eacutevalue la deacutecisionil produit la valeur o1 un autre qui associe le reacutesultat du premier noeud avec celui le preacutecegravede dans la structure de lrsquoarbrede deacutecision il produit la valeur o2 La deacutecision finale est quelque chose comme sigmoid(o1 + o2 minus 1) Un neuroneagregravege le reacutesultat de toutes les feuilles

from mlstatpymlneural_tree import NeuralTreeNetnet = NeuralTreeNetcreate_from_tree(dec)RenderJsDot(netto_dot())

On considegravere une entreacutee en particulier

n = 60decpredict_proba(X[n n+1])

array([[027906977 072093023]])

Les sorties du reacuteseau de neurones

netpredict(X[n n+1])[ -2]

array([[012536069 087463931]])

Et on trace les valeurs intermeacutediaires

RenderJsDot(netto_dot(X=X[n]))

On poursuit la comparaison

decpredict_proba(X_test)[5]

88 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

array([[075 025 ][075 025 ][027906977 072093023][1 0 ][027906977 072093023]])

netpredict(X_test)[5 -2]

array([[079156817 020843183][073646978 026353022][029946111 070053889][094070094 005929906][024924737 075075263]])

decpredict_proba(X_test)[-5]

array([[1 0 ][075 025][1 0 ][075 025][075 025]])

netpredict(X_test)[-5 -2]

array([[093247891 006752109][086338585 013661415][098219036 001780964][098352807 001647193][073646978 026353022]])

numpyargmax(netpredict(X_test)[-5 -2] axis=1)

array([0 0 0 0 0] dtype=int64)

On compare visuellement les deux frontiegraveres de classification

def plot_grid(X y fct title ax=None)

cmap_light = ListedColormap([orange cyan cornflowerblue])cmap_bold = ListedColormap([darkorange c darkblue])

h = 05x_min x_max = X[ 0]min() - 1 X[ 0]max() + 1y_min y_max = X[ 1]min() - 1 X[ 1]max() + 1xx yy = numpymeshgrid(numpyarange(x_min x_max h)

numpyarange(y_min y_max h))Z = fct(numpyc_[xxravel() yyravel()])

Z = Zreshape(xxshape)if ax is None

_ ax = pltsubplots(1 1)(suite sur la page suivante)

24 Un arbre de deacutecision en reacuteseaux de neurones 89

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

axpcolormesh(xx yy Z cmap=cmap_light)

axscatter(X[ 0] X[ 1] c=y cmap=cmap_boldedgecolor=k s=20)

axset_xlim(xxmin() xxmax())axset_ylim(yymin() yymax())axset_title(title)

fig ax = pltsubplots(1 2 figsize=(12 4))plot_grid(X y decpredict dec__class____name__ ax=ax[0])plot_grid(X y

lambda x numpyargmax(netpredict(x)[ -2] axis=1)net__class____name__ ax=ax[1])

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

Le code qui produit les preacutedictions du reacuteseau de neurones est assez long agrave exeacutecuter mais il produit agrave peu pregraves les mecircmesfrontiegraveres excepteacute qursquoelles sont plus arrondies

243 Intermegravede de simples neurones de reacutegression

Avant drsquoapprendre ou plutocirct de continuer lrsquoapprentissage des coefficients du reacuteseaux de neurones voyons comment unneurone se deacutebrouille sur un problegraveme de reacutegression Le neurone nrsquoest pas converti il est appris

regX = numpyempty((150 1) dtype=numpyfloat64)regX[50 0] = numpyrandomrandn(50) - 4regX[50100 0] = numpyrandomrandn(50)regX[100 0] = numpyrandomrandn(50) + 4noise = numpyrandomrandn(regXshape[0]) 10regY = regX[ 0] -05 02 + noise

(suite sur la page suivante)

90 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

regY[regX[ 0] gt 03] = noise[regX[ 0] gt 03]

fig ax = pltsubplots(1 1 figsize=(8 4))axscatter(regX[ 0] regY)axset_title(Nuage de points lineacuteaire par morceaux)

On cale une reacutegression avec scikit-learn

from sklearnlinear_model import LinearRegressionlr = LinearRegression()lrfit(regX regY)

fig ax = pltsubplots(1 1 figsize=(8 4))axscatter(regX[ 0] regY)axscatter(regX[ 0] lrpredict(regX))axset_title(Reacutegression scikit-learn)

24 Un arbre de deacutecision en reacuteseaux de neurones 91

Machine Learning Statistiques et Programmation Version 035930

Et maintenant un neurone avec une fonction drsquoactivation iquestidentityiquest

from mlstatpymlneural_tree import NeuralTreeNodeneu = NeuralTreeNode(1 activation=identity)neu

NeuralTreeNode(weights=array([024515488]) bias=010874563175403863 activation=rarridentity)

neufit(regX regY verbose=True max_iter=20)

020 loss 1508 lr=0002 max(coef) 025 l1=0035 l2=00072120 loss 2872 lr=0000163 max(coef) 019 l1=18025 l2=210039220 loss 2774 lr=0000115 max(coef) 019 l1=03025 l2=00660041320 loss 2621 lr=942e-05 max(coef) 018 l1=016023 l2=00150036420 loss 2658 lr=816e-05 max(coef) 017 l1=19023 l2=250033520 loss 258 lr=73e-05 max(coef) 017 l1=044021 l2=013003620 loss 2611 lr=666e-05 max(coef) 016 l1=01102 l2=000960028720 loss 2542 lr=617e-05 max(coef) 016 l1=017021 l2=00180029820 loss 252 lr=577e-05 max(coef) 016 l1=041021 l2=0120029920 loss 2516 lr=544e-05 max(coef) 016 l1=01021 l2=000600281020 loss 2516 lr=516e-05 max(coef) 016 l1=024021 l2=003900281120 loss 2514 lr=492e-05 max(coef) 016 l1=048021 l2=01600281220 loss 2526 lr=471e-05 max(coef) 016 l1=002702 l2=00004100271320 loss 252 lr=453e-05 max(coef) 016 l1=032021 l2=005800281420 loss 2513 lr=436e-05 max(coef) 016 l1=02602 l2=004500271520 loss 2514 lr=422e-05 max(coef) 016 l1=0045021 l2=0001400281620 loss 2516 lr=408e-05 max(coef) 016 l1=28021 l2=600271720 loss 2513 lr=396e-05 max(coef) 016 l1=02102 l2=002700271820 loss 2516 lr=385e-05 max(coef) 016 l1=01402 l2=001300271920 loss 2517 lr=375e-05 max(coef) 016 l1=0046021 l2=000120028

(suite sur la page suivante)

92 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

2020 loss 253 lr=365e-05 max(coef) 016 l1=01202 l2=00110027

NeuralTreeNode(weights=array([-004747787]) bias=015725388033694113 activation=rarridentity)

fig ax = pltsubplots(1 1 figsize=(8 4))axscatter(regX[ 0] regY)axscatter(regX[ 0] lrpredict(regX) label=sklearn)axscatter(regX[ 0] neupredict(regX) label=NeuralTreeNode)axlegend()axset_title(Reacutegression et neurones)

Ca marche Et avec drsquoautres fonctions drsquoactivation

neus = identity neufor act in tqdm([relu leakyrelu sigmoid])

nact = NeuralTreeNode(1 activation=act)nactfit(regX regY)neus[act] = nact

100|iquest iquest iquest iquest iquest iquest iquest iquest iquest iquest | 33 [0001lt0000 173its]

neus[relu] neus[leakyrelu]

(NeuralTreeNode(weights=array([-056717432]) bias=-20796272519664116 activation=relurarr)NeuralTreeNode(weights=array([-011951102]) bias=-008125009545262747 activation=

rarrleakyrelu))

24 Un arbre de deacutecision en reacuteseaux de neurones 93

Machine Learning Statistiques et Programmation Version 035930

fig ax = pltsubplots(1 1 figsize=(8 4))axscatter(regX[ 0] regY)axscatter(regX[ 0] lrpredict(regX) label=sklearn)for k v in neusitems()

axscatter(regX[ 0] vpredict(regX) label=k)axlegend()axset_title(Reacutegression neuronenactivation)

Rien de surprenant La fonction sigmoiumlde prend ses valeurs entre 0 et 1 La fonction relu est parfois nulle sur unedemi-droite degraves que la fonction est nulle sur lrsquoensemble du nuage de points le gradient est nul partout (voir Rectifier(neural networks)91) La fonction leaky relu est deacutefinie comme suit

f(x) =

x si x gt 0x

100 sinon

Le gradient nrsquoest pas nul sur la partie la plus plate

244 Intermegravede de simples neurones de classification

Avant drsquoapprendre ou plutocirct de continuer lrsquoapprentissage des coefficients du reacuteseaux de neurones voyons comment unneurone se deacutebrouille sur un problegraveme de classification Le neurone nrsquoest pas converti mais appris

from sklearnlinear_model import LogisticRegression

clsX = numpyempty((100 2) dtype=numpyfloat64)clsX[50] = numpyrandomrandn(50 2)clsX[50] = numpyrandomrandn(50 2) + 2clsy = numpyzeros(100 dtype=numpyint64)

(suite sur la page suivante)

91 httpsenwikipediaorgwikiRectifier_(neural_networks)

94 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

clsy[50] = 1

logr = LogisticRegression()logrfit(clsX clsy)pred1 = logrpredict(clsX)

def line_cls(x0 x1 coef bias)y0 = -(coef[00] x0 + bias) coef[01]y1 = -(coef[00] x1 + bias) coef[01]return x0 y0 x1 y1

x0 y0 x1 y1 = line_cls(-5 5 logrcoef_ logrintercept_)

h = 01fig ax = pltsubplots(1 1 figsize=(8 4))axscatter(clsX[clsy == 0 0] clsX[clsy == 0 1] label=cl0)axscatter(clsX[clsy == 1 0] clsX[clsy == 1 1] label=cl1)axscatter(clsX[pred1 == 0 0] + h clsX[pred1 == 0 1] + h label=LR0)axscatter(clsX[pred1 == 1 0] + h clsX[pred1 == 1 1] + h label=LR1)axplot([x0 x1] [y0 y1] y-- lw=4 label=frontiegravere LR)axset_ylim([-3 3])axlegend()axset_title(Classification et neurones)

Un neurone de classification binaire produit deux sorties une pour chaque classe et sont normaliseacutees agrave 1 La fonctiondrsquoactivation est la fonction softmax92

clsY = numpyempty((clsyshape[0] 2) dtype=numpyfloat64)(suite sur la page suivante)

92 httpsenwikipediaorgwikiSoftmax_function

24 Un arbre de deacutecision en reacuteseaux de neurones 95

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

clsY[ 1] = clsyclsY[ 0] = 1 - clsy

softneu = NeuralTreeNode(2 activation=softmax)softneu

NeuralTreeNode(weights=array([[-208861923 018763489][ 035500659 -039231456]]) bias=array([-003589328 0383808 ]) activation=

rarrsoftmax)

softneufit(clsX clsY verbose=True max_iter=20 lr=0001)

020 loss 5106 lr=0001 max(coef) 21 l1=034 l2=048120 loss 2978 lr=995e-05 max(coef) 45 l1=3718 l2=25e+0267220 loss 2914 lr=705e-05 max(coef) 52 l1=9721 l2=2089320 loss 2807 lr=576e-05 max(coef) 54 l1=3023 l2=18e+0298420 loss 2734 lr=499e-05 max(coef) 57 l1=1523 l2=9911e+02520 loss 2654 lr=447e-05 max(coef) 59 l1=1924 l2=1e+0211e+02620 loss 2608 lr=408e-05 max(coef) 61 l1=2625 l2=16e+0212e+02720 loss 2578 lr=378e-05 max(coef) 63 l1=2826 l2=16e+0213e+02820 loss 2515 lr=353e-05 max(coef) 65 l1=3526 l2=23e+0213e+02920 loss 2478 lr=333e-05 max(coef) 66 l1=3327 l2=23e+0214e+021020 loss 2446 lr=316e-05 max(coef) 68 l1=3627 l2=26e+0214e+021120 loss 2412 lr=301e-05 max(coef) 69 l1=4328 l2=34e+0215e+021220 loss 2369 lr=289e-05 max(coef) 7 l1=3128 l2=2e+0215e+021320 loss 2332 lr=277e-05 max(coef) 72 l1=1829 l2=12e+0216e+021420 loss 2321 lr=267e-05 max(coef) 73 l1=3629 l2=27e+0216e+021520 loss 2297 lr=258e-05 max(coef) 74 l1=3430 l2=35e+0217e+021620 loss 2285 lr=25e-05 max(coef) 75 l1=2130 l2=12e+0217e+021720 loss 2245 lr=242e-05 max(coef) 76 l1=1631 l2=1e+0218e+021820 loss 2206 lr=236e-05 max(coef) 77 l1=8931 l2=1618e+021920 loss 2202 lr=229e-05 max(coef) 78 l1=3431 l2=21e+0218e+022020 loss 2176 lr=224e-05 max(coef) 79 l1=2632 l2=13e+0219e+02

NeuralTreeNode(weights=array([[239484139 403623835][541545461 701868202]]) bias=array([794607355 495768881]) activation=

rarrsoftmax)

pred = softneupredict(clsX)pred[5]

array([[989410479e-01 105895211e-02][996986932e-02 900301307e-01][997104404e-01 289559597e-03][999839780e-01 160220367e-04][962522709e-01 374772912e-02]])

pred2 = (pred[ 1] gt 05)astype(numpyint64)

96 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

x00 y00 x01 y01 = line_cls(-4 4 softneucoef[1 1] softneubias[0])x10 y10 x11 y11 = line_cls(-4 4 softneucoef[1 1] softneubias[1])xa ya xb yb = line_cls(

-5 5 softneucoef[1 1] - softneucoef[1 1]softneubias[1] - softneubias[0])

fig ax = pltsubplots(1 2 figsize=(14 6))for i in [0 1]

ax[i]scatter(clsX[clsy == 0 0] clsX[clsy == 0 1] label=cl0)ax[i]scatter(clsX[clsy == 1 0] clsX[clsy == 1 1] label=cl1)ax[i]scatter(clsX[pred1 == 0 0] + h clsX[pred1 == 0 1] + h label=LR0)ax[i]scatter(clsX[pred1 == 1 0] + h clsX[pred1 == 1 1] + h label=LR1)ax[i]scatter(clsX[pred2 == 0 0] + h clsX[pred2 == 0 1] - h label=NN0)ax[i]scatter(clsX[pred2 == 1 0] + h clsX[pred2 == 1 1] - h label=NN1)

ax[0]plot([x0 x1] [y0 y1] y-- lw=4 label=frontiegravere LR)ax[1]plot([x00 x01] [y00 y01] r-- lw=4 label=droite neurone 0)ax[1]plot([x10 x11] [y10 y11] b-- lw=4 label=droite neurone 1)ax[0]plot([xa xb] [ya yb] c-- lw=4 label=frontiegravere neurone)ax[0]set_ylim([max(-6 min([-3 y10 y11 y11 y01]))

min(6 max([3 y10 y11 y11 y01]))])ax[1]set_ylim([max(-6 min([-3 y10 y11 y11 y01]))

min(6 max([3 y10 y11 y11 y01]))])ax[0]legend()ax[1]legend()ax[0]set_title(Frontiegravere de classification)ax[1]set_title(Neurones)

Ca marche On veacuterifie en calculant le score Le neurone a deux sorties La frontiegravere est deacutefinie par lrsquoensemble despoints pour lesquels les deux sorties sont eacutegales Par conseacutequent la distance entre les deux droites deacutefinies par lescoefficients du neurone doivent ecirctre eacutegales Il existe une infiniteacute de solutions menant agrave la mecircme frontiegravere On pourraitpeacutenaliser les coefficients pour converger toujours vers la mecircme solution

from sklearnmetrics import roc_auc_scoreroc_auc_score(clsy logrpredict_proba(clsX)[ 1])

24 Un arbre de deacutecision en reacuteseaux de neurones 97

Machine Learning Statistiques et Programmation Version 035930

09924

roc_auc_score(clsy softneupredict(clsX)[ 1])

0986

La performance est quasiment identique Que ce soit la reacutegression ou la classification lrsquoapprentissage drsquoun neuronefonctionne En sera-t-il de mecircme pour un assemblage de neurones

245 Apprentissage du reacuteseau de neurones

Maintenant qursquoon a vu les diffeacuterentes fonctions drsquoactivations et leur application sur des problegravemes simples onrevient aux arbres convertis sous la forme drsquoun reacuteseau de neurones La prochaine eacutetape est de pouvoir ameacuteliorer lesperformances du modegravele issu de la conversion drsquoun arbre de classification avec un algorithme du gradient On construitpour cela un nuage de points un peu traficoteacute

clsX = numpyempty((150 2) dtype=numpyfloat64)clsX[100] = numpyrandomrandn(100 2)clsX[20 0] -= 1clsX[2040 0] -= 08clsX[100 1] = 2clsX[100 1] += clsX[100 0] 2clsX[100] = numpyrandomrandn(50 2)clsX[100 0] = 2clsX[100 1] += 25clsy = numpyzeros(Xshape[0] dtype=numpyint64)clsy[100] = 1

logr = LogisticRegression()logrfit(clsX clsy)pred1 = logrpredict(clsX)logrscore(clsX clsy)

068

x0 y0 x1 y1 = line_cls(-3 3 logrcoef_ logrintercept_)

fig ax = pltsubplots(1 1 figsize=(4 4))plot_grid(clsX clsy logrpredict logr__class____name__ ax=ax)axplot([x0 x1] [y0 y1] y-- lw=4 label=frontiegravere LR)

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

98 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Mecircme chose avec un arbre de deacutecision et le reacuteseau de neurones converti

dec = DecisionTreeClassifier(max_depth=2)decfit(clsX clsy)pred2 = decpredict(clsX)decscore(clsX clsy)

09066666666666666

On convertit de reacuteseau de neurones Le second argument deacutefinit la pente dans la fonction drsquoactivation

net = NeuralTreeNetcreate_from_tree(dec 05)net15 = NeuralTreeNetcreate_from_tree(dec 15)

from sklearnmetrics import accuracy_score

(roc_auc_score(clsy decpredict_proba(clsX)[ 1])accuracy_score(clsy decpredict(clsX)))

(09354999999999999 09066666666666666)

(roc_auc_score(clsy netpredict(clsX)[ -1])accuracy_score(clsy numpyargmax(netpredict(clsX)[ -2] axis=1)))

(09456 08333333333333334)

(roc_auc_score(clsy net15predict(clsX)[ -1])accuracy_score(clsy numpyargmax(net15predict(clsX)[ -2] axis=1)))

24 Un arbre de deacutecision en reacuteseaux de neurones 99

Machine Learning Statistiques et Programmation Version 035930

(09071 09)

Le reacuteseau de neurones est plus ou moins performant selon la pente dans la fonction drsquoactivation

fig ax = pltsubplots(1 3 figsize=(15 4))plot_grid(clsX clsy decpredict dec__class____name__ ax=ax[0])plot_grid(clsX clsy

lambda x numpyargmax(netpredict(x)[ -2] axis=1)net__class____name__ ax=ax[1])

plot_grid(clsX clsylambda x numpyargmax(net15predict(x)[ -2] axis=1)net15__class____name__ + 15 ax=ax[2])

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

Et on apprend le reacuteseau de neurones en partant de lrsquoarbre de deacutepart On choisit celui qui a la pente drsquoactivation la plusfaible

from mlstatpymlneural_tree import label_class_to_softmax_outputclsY = label_class_to_softmax_output(clsy)clsY[3]

array([[1 0][1 0][1 0]])

net2 = netcopy()net2fit(clsX clsY verbose=True max_iter=25 lr=3e-6)

025 loss 7283 lr=3e-06 max(coef) 1 l1=014 l2=095125 loss 7064 lr=244e-07 max(coef) 1 l1=24e+0214 l2=33e+0393225 loss 7048 lr=173e-07 max(coef) 1 l1=24e+0214 l2=33e+0393325 loss 7046 lr=141e-07 max(coef) 1 l1=29e+0214 l2=4e+0393425 loss 7038 lr=122e-07 max(coef) 1 l1=44e+0214 l2=14e+0493525 loss 7035 lr=109e-07 max(coef) 11 l1=25e+0214 l2=35e+0393

(suite sur la page suivante)

100 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

625 loss 7032 lr=999e-08 max(coef) 11 l1=18e+0214 l2=32e+0393725 loss 703 lr=925e-08 max(coef) 11 l1=2e+0214 l2=27e+0393825 loss 7029 lr=866e-08 max(coef) 11 l1=3e+0214 l2=41e+0393925 loss 7029 lr=816e-08 max(coef) 11 l1=19e+0214 l2=29e+03931025 loss 7028 lr=774e-08 max(coef) 11 l1=3e+0214 l2=4e+03931125 loss 7027 lr=738e-08 max(coef) 11 l1=27e+0214 l2=41e+03931225 loss 7027 lr=707e-08 max(coef) 11 l1=25e+0214 l2=35e+03931325 loss 7025 lr=679e-08 max(coef) 11 l1=19e+0214 l2=32e+03931425 loss 7025 lr=654e-08 max(coef) 11 l1=33e+0214 l2=51e+03931525 loss 7024 lr=632e-08 max(coef) 11 l1=28e+0214 l2=42e+03931625 loss 7024 lr=612e-08 max(coef) 11 l1=2e+0214 l2=28e+03931725 loss 7024 lr=594e-08 max(coef) 11 l1=19e+0214 l2=35e+03931825 loss 7024 lr=577e-08 max(coef) 11 l1=22e+0214 l2=31e+03931925 loss 7025 lr=562e-08 max(coef) 11 l1=28e+0214 l2=57e+03932025 loss 7025 lr=548e-08 max(coef) 11 l1=34e+0214 l2=54e+03932125 loss 7025 lr=534e-08 max(coef) 11 l1=27e+0214 l2=43e+03932225 loss 7025 lr=522e-08 max(coef) 11 l1=37e+0214 l2=66e+03932325 loss 7025 lr=511e-08 max(coef) 11 l1=33e+0214 l2=51e+03932425 loss 7026 lr=5e-08 max(coef) 11 l1=29e+0214 l2=44e+03932525 loss 7026 lr=49e-08 max(coef) 11 l1=3e+0214 l2=54e+0393

NeuralTreeNet(2)

fig ax = pltsubplots(1 2 figsize=(12 4))plot_grid(clsX clsy

lambda x numpyargmax(netpredict(x)[ -2] axis=1)Avant apprentissage ax=ax[0])

plot_grid(clsX clsylambda x numpyargmax(net2predict(x)[ -2] axis=1)Apregraves apprentissage ax=ax[1])

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

24 Un arbre de deacutecision en reacuteseaux de neurones 101

Machine Learning Statistiques et Programmation Version 035930

Ca ne marche pas ou pas tregraves bien Il faudrait veacuterifier que la configuration actuelle ne se trouve pas dans un minimumlocal auquel cas lrsquoapprentissage par gradient ne donnera quasiment rien

(roc_auc_score(clsy net2predict(clsX)[ -1])accuracy_score(clsy numpyargmax(net2predict(clsX)[ -2] axis=1)))

(09394 06666666666666666)

net2predict(clsX)[-5 -2]

array([[059760975 040239025][069897705 030102295][0616117 0383883 ][066792189 033207811][078813475 021186525]])

netpredict(clsX)[-5 -2]

array([[048111758 051888242][058040964 041959036][050511128 049488872][054010078 045989922][069670643 030329357]])

On peut essayer de repartir agrave zeacutero Des fois ccedila peut marcher mais il faudrait beaucoup plus drsquoessai

net3 = netcopy()dim = net3training_weightsshapenet3update_training_weights(numpyrandomrandn(dim[0]))net3fit(clsX clsY verbose=True max_iter=25 lr=3e-6)

025 loss 7964 lr=3e-06 max(coef) 26 l1=029 l2=043125 loss 7964 lr=244e-07 max(coef) 25 l1=56e+0229 l2=15e+0442225 loss 7964 lr=173e-07 max(coef) 26 l1=5e+0229 l2=14e+0442325 loss 7965 lr=141e-07 max(coef) 26 l1=58e+0229 l2=16e+0442425 loss 7965 lr=122e-07 max(coef) 26 l1=76e+0229 l2=25e+0442525 loss 7965 lr=109e-07 max(coef) 26 l1=51e+0229 l2=14e+0442

(suite sur la page suivante)

102 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

625 loss 7966 lr=999e-08 max(coef) 26 l1=62e+0229 l2=19e+0442725 loss 7966 lr=925e-08 max(coef) 26 l1=62e+0229 l2=19e+0442825 loss 7966 lr=866e-08 max(coef) 26 l1=6e+0229 l2=17e+0442925 loss 7966 lr=816e-08 max(coef) 26 l1=59e+0229 l2=16e+04421025 loss 7966 lr=774e-08 max(coef) 26 l1=56e+0229 l2=15e+04421125 loss 7966 lr=738e-08 max(coef) 26 l1=73e+0229 l2=23e+04421225 loss 7966 lr=707e-08 max(coef) 26 l1=74e+0230 l2=24e+04421325 loss 7966 lr=679e-08 max(coef) 26 l1=68e+0230 l2=21e+04421425 loss 7966 lr=654e-08 max(coef) 26 l1=61e+0230 l2=18e+04421525 loss 7967 lr=632e-08 max(coef) 26 l1=6e+0230 l2=16e+04421625 loss 7967 lr=612e-08 max(coef) 26 l1=59e+0230 l2=16e+04421725 loss 7967 lr=594e-08 max(coef) 26 l1=48e+0230 l2=13e+04421825 loss 7967 lr=577e-08 max(coef) 26 l1=56e+0230 l2=16e+04421925 loss 7967 lr=562e-08 max(coef) 26 l1=58e+0230 l2=16e+04422025 loss 7967 lr=548e-08 max(coef) 26 l1=59e+0230 l2=16e+04422125 loss 7967 lr=534e-08 max(coef) 26 l1=66e+0230 l2=19e+04422225 loss 7967 lr=522e-08 max(coef) 26 l1=59e+0230 l2=18e+04422325 loss 7967 lr=511e-08 max(coef) 26 l1=62e+0230 l2=19e+04422425 loss 7967 lr=5e-08 max(coef) 26 l1=66e+0230 l2=19e+04422525 loss 7967 lr=49e-08 max(coef) 26 l1=48e+0230 l2=12e+0442

NeuralTreeNet(2)

(roc_auc_score(clsy net3predict(clsX)[ -1])accuracy_score(clsy numpyargmax(net3predict(clsX)[ -2] axis=1)))

(06426000000000001 06666666666666666)

fig ax = pltsubplots(1 2 figsize=(12 4))plot_grid(clsX clsy

lambda x numpyargmax(netpredict(x)[ -2] axis=1)Avant apprentissage ax=ax[0])

plot_grid(clsX clsylambda x numpyargmax(net3predict(x)[ -2] axis=1)Apregraves apprentissage ax=ax[1])

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

24 Un arbre de deacutecision en reacuteseaux de neurones 103

Machine Learning Statistiques et Programmation Version 035930

246 Autre architecture

Cette fois-ci on reacuteduit le nombre de neurones Au lieu drsquoavoir deux neurones par noeud du graphe on assemble tousles neurones en deux un pour les entreacutees un autre pour le calcul des sorties

netc = NeuralTreeNetcreate_from_tree(dec 1 arch=compact)RenderJsDot(netcto_dot())

(roc_auc_score(clsy netcpredict(clsX)[ -1])accuracy_score(clsy numpyargmax(netcpredict(clsX)[ -2] axis=1)))

(09468 062)

fig ax = pltsubplots(1 2 figsize=(12 4))plot_grid(clsX clsy

lambda x numpyargmax(decpredict_proba(x) axis=1)Avant conversion ax=ax[0])

plot_grid(clsX clsylambda x numpyargmax(netcpredict(x)[ -2] axis=1)Apregraves comversion ax=ax[1])

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

104 Chapter 2 Non lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

On reacuteapprend

netc4 = netccopy()netc4fit(clsX clsY verbose=True max_iter=25 lr=1e-6)

025 loss 7911 lr=1e-06 max(coef) 11 l1=025 l2=025125 loss 4829 lr=814e-08 max(coef) 11 l1=31e+0225 l2=49e+0325225 loss 459 lr=576e-08 max(coef) 11 l1=27e+0225 l2=43e+0325325 loss 4529 lr=471e-08 max(coef) 11 l1=9e+0225 l2=58e+0425425 loss 4476 lr=408e-08 max(coef) 11 l1=54e+0225 l2=17e+0425525 loss 4429 lr=365e-08 max(coef) 11 l1=82e+0225 l2=45e+0425625 loss 4396 lr=333e-08 max(coef) 11 l1=39e+0225 l2=61e+0325725 loss 4364 lr=308e-08 max(coef) 11 l1=38e+0225 l2=62e+0325825 loss 4332 lr=289e-08 max(coef) 11 l1=86e+0225 l2=53e+0425925 loss 4295 lr=272e-08 max(coef) 11 l1=32e+0225 l2=55e+03251025 loss 4269 lr=258e-08 max(coef) 11 l1=76e+0225 l2=35e+04251125 loss 4242 lr=246e-08 max(coef) 11 l1=37e+0225 l2=64e+03251225 loss 4219 lr=236e-08 max(coef) 11 l1=8e+0225 l2=42e+04251325 loss 4205 lr=226e-08 max(coef) 11 l1=43e+0225 l2=86e+03251425 loss 4182 lr=218e-08 max(coef) 12 l1=34e+0225 l2=63e+03251525 loss 4166 lr=211e-08 max(coef) 12 l1=12e+0325 l2=11e+05251625 loss 415 lr=204e-08 max(coef) 12 l1=12e+0325 l2=18e+05251725 loss 4136 lr=198e-08 max(coef) 12 l1=44e+0225 l2=11e+04251825 loss 412 lr=192e-08 max(coef) 12 l1=3e+0225 l2=85e+03251925 loss 4104 lr=187e-08 max(coef) 12 l1=25e+0225 l2=53e+03252025 loss 4085 lr=183e-08 max(coef) 12 l1=42e+0225 l2=88e+03252125 loss 4073 lr=178e-08 max(coef) 12 l1=39e+0225 l2=82e+03252225 loss 4059 lr=174e-08 max(coef) 12 l1=74e+0225 l2=31e+04252325 loss 4041 lr=17e-08 max(coef) 12 l1=32e+0225 l2=53e+03252425 loss 4027 lr=167e-08 max(coef) 12 l1=41e+0225 l2=12e+04252525 loss 4017 lr=163e-08 max(coef) 12 l1=57e+0225 l2=2e+0425

NeuralTreeNet(2)

(roc_auc_score(clsy netc4predict(clsX)[ -1])accuracy_score(clsy numpyargmax(netc4predict(clsX)[ -2] axis=1)))

24 Un arbre de deacutecision en reacuteseaux de neurones 105

Machine Learning Statistiques et Programmation Version 035930

(09338000000000001 08866666666666667)

fig ax = pltsubplots(1 2 figsize=(12 4))plot_grid(clsX clsy

lambda x numpyargmax(netcpredict(x)[ -2] axis=1)Avant apprentissage ax=ax[0])

plot_grid(clsX clsylambda x numpyargmax(netc4predict(x)[ -2] axis=1)Apregraves apprentissage ax=ax[1])

ltipython-input-23-56151b64b872gt16 MatplotlibDeprecationWarning shading=flat when Xrarrand Y have the same dimensions as C is deprecated since 33 Either specify therarrcorners of the quadrilaterals with X and Y or pass shading=auto nearest orrarrgouraud or set rcParams[pcolorshading] This will become an error two minorrarrreleases lateraxpcolormesh(xx yy Z cmap=cmap_light)

Crsquoest mieux

106 Chapter 2 Non lineacuteaire

CHAPTER 3

Reacutegression lineacuteaire

La reacutegression lineacuteaire93 est le modegravele preacutedictif le plus simple et celui qursquoon preacutefegravere quand il marche car il est facilementinterpreacutetable agrave lrsquoinverse des modegraveles non lineacuteaires qui gardent leurs secrets si on srsquoen tient seulement agrave leurs coefficientsConcregravetement on dispose drsquoun nuage de point (Xi yi) ougrave Xi isin Rd est un vecteur de dimension d et yi isin R un reacuteelLa reacutegression lineacuteaire consiste agrave construire une fonction preacutedictive yi = f(Xi) =lt Xi β gt= Xiβ ougrave β est un vecteurde dimension d Dans le cas le plus courant on modeacutelise les donneacutees de telle sorte que yi = Xiβ + ϵi ougrave ϵi suit uneloi normale de moyenne nulle et de variance σ Sous cette hypothegravese il iquestagit de trouver le vecteur β qui minimise lavraisemblance du modegravele ce qui revient agrave reacutesoudre le problegraveme drsquooptimisation

minβ

sumi

(yi minusXiβ)2

En deacuterivant on sait exprimer explicitement la solution On note X = (X1 Xi ) la matrice ougrave chaque ligne estune observation Xi et y = (y1 yi ) X prime est la transposeacutee de X Alors

βlowast = (X primeX)minus1X primey

Les chapitres suivants explorent drsquoautres aspects de ce problegravemes comme la reacutegression quantile la reacutegression lineacuteairepar morceaux ou encore lrsquoexpression de β sans calculer de matrice inverse ni de valeurs propres

31 Reacutegression lineacuteaire

Ce notebook srsquointeacuteresse agrave la faccedilon drsquointerpreacuteter les reacutesultats drsquoune reacutegression lineacuteaire lorsque les variables sont correacuteleacuteespuis il explore une faccedilon drsquoassocier arbre de deacutecision et reacutegression lineacuteaire pour construire une reacutegression lineacuteaire parmorceaux

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Un cas simple (page 108)

93 httpsfrwikipediaorgwikiRC3A9gression_linC3A9aire

107

Machine Learning Statistiques et Programmation Version 035930

bull Evolution de R2 (page 109)bull Deux variables correacuteleacutees (page 110)bull Indicatrices (page 113)bull Reacutegression lineacuteaire par morceaux (page 115)

matplotlib inline

311 Un cas simple

Une faccedilon drsquointerpreacuteter des reacutesultats statistiques est de les calculer dans un cas ougrave la reacuteponse chercheacutee est connue Onsimule un modegravele simple Y = αX1 + 0X2 + ϵ et on cale une reacutegression lineacuteaire On suppose que X1 X2 ϵ sont desvariables aleacuteatoires gaussiennes de mecircme variance et moyenne

import numpyrandom as npreps = nprnormal(1000)X = nprnormal(size=(1000 3))alpha = 2Y = alpha X[0] + X[ 2]Xshape Yshape

((1000 3) (1000))

from numpy import corrcoefcorrcoef(XT)

array([[ 1 -00312982 005188551][-00312982 1 -000356494][ 005188551 -000356494 1 ]])

from statsmodelsregressionlinear_model import OLS

model = OLS(YX[ 2])results = modelfit()su = resultssummary()su

resultsrsquared resultsrsquared_adj

(08153831029946165 08150131292531227)

On veacuterifie que le coefficient devant X1 est non nul (P-value nulle 0 nrsquoest pas lrsquointervalle de confiance) Le coefficientdevant X2 nrsquoest pas nul mais presque la P-value est eacuteleveacutee le coefficient R2 est eacuteleveacute Dessinons

import matplotlibpyplot as pltimport seabornfig ax = pltsubplots(1 2 figsize=(104))ax[0]plot(X[ 0] Y )seabornkdeplot(X[ 0] Y cmap=Reds shade=True shade_lowest=False ax=ax[1])

(suite sur la page suivante)

108 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

ax[0]set_title(nuage de points)ax[1]set_title(estimation de la densiteacute)

cpython370_x64libsite-packagesscipystatsstatspy1713 FutureWarning Using a non-tuplerarrsequence for multidimensional indexing is deprecated use arr[tuple(seq)] instead ofrarrarr[seq] In the future this will be interpreted as an array index arr[nparray(seq)]rarr which will result either in an error or a different resultreturn npaddreduce(sorted[indexer] weights axis=axis) sumval

312 Evolution de R2

Dans la reacutegression preacuteceacutedente le coefficient R2 transcrit en quelque sorte la part du bruit ϵ par rapport au terme αX1Faisons varier α

alphas = []r2s = []for a in [01 i for i in range(0 50)]

Y = aX[0] + X[ 2]model = OLS(YX[ 2])results = modelfit()alphasappend(a)r2sappend(resultsrsquared)

fig ax = pltsubplots(1 1)axplot(alphas r2s label=observed)axplot(alphas [a2(1+a2) for a in alphas] label=theoretical)axset_xlabel(alpha)axset_ylabel(r2)axlegend()

31 Reacutegression lineacuteaire 109

Machine Learning Statistiques et Programmation Version 035930

Dans ce cas de reacutegression simple la valeur agrave preacutedire est yi la valeur preacutedite est yi = αX1i et la moyenne y = αX1+ϵ =0

R2 = 1minussumn

i=1(yi minus y)2sumni=1(yi minus y)2

= 1minus Vϵα2VX1 + Vϵ

= 1minus 1

1 + α2=

α2

1 + α2

313 Deux variables correacuteleacutees

On ne change pas le modegravele mais on fait en sorte que X2 = X1 Les deux variables sont correacuteleacutees

X[ 1] = X[ 0]Y = 2X[0] + X[ 2]model = OLS(YX[ 2])results = modelfit()resultssummary()

modelrank

1

Les variables correacuteleacutees nrsquoont pas lrsquoair de deacuteranger lrsquoalgorithme de reacutesolution car il utilise la meacutethode SVD94 pourreacutesoudre le mecircme problegraveme dans un espace de moindre dimension Le problegraveme survient que les deux variables nesont pas compleacutetement correacuteleacutees On eacutetudie le modegravele Y sim X1 +X prime

2 avec X prime2 = αX1 + (1 minus α)X2 et on reacuteduit la

variance du bruit pour en diminuer les effets

X_ = nprnormal(size=(1000 3))

94 httpsenwikipediaorgwikiSingular-value_decomposition

110 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

alphas = [09 + i 001 for i in range(011)]res = []for a in alphas

X = X_copy()X[ 1] = a X[ 0] + (1-a) X[ 1]Y = X[ 0] + X[ 1] + 01 X[ 2]model = OLS(YX[ 2])results = modelfit()resappend(dict(alpha=a r2=resultsrsquared rank=modelrank c1=resultsparams[0]

rarrc2=resultsparams[1]))

import pandasdf = pandasDataFrame(res)df = dfset_index(alpha)df

fig ax = pltsubplots(12 figsize=(104))df[[r2]]plot(ax=ax[0])df[[c1 c2]]plot(ax=ax[1])ax[0]set_title(R2)ax[1]set_title(coefficients)

Le r2 augmente quand la correacutelation augmente mais les coefficients sont moins fiables Les reacutesultats devraient ecirctresensiblement identiques en theacuteorie mais en pratique plus le deacuteterminant devient proche de zeacutero plus lrsquoordinateur estlimiteacute par sa preacutecision numeacuterique Pour en savoir plus vous pouvez lire un examen eacutecrit que jrsquoai reacutedigeacute en pythonbien sucircr Examen Programmation ENSAE premiegravere anneacutee 200695 Cette preacutecision est aux alentours de 10minus15 ce quicorrespond agrave la preacutecision numeacuterique des double96

alphas = [1 - 10(-i) for i in range(1018)]res = []for a in alphas

X = X_copy()X[ 1] = a X[ 0] + (1-a) X[ 1]

(suite sur la page suivante)

95 httpwwwxavierduprefrsite2013enseignementstdnoteecrit_2006pdf96 httpsenwikipediaorgwikiDouble-precision_floating-point_format

31 Reacutegression lineacuteaire 111

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

Y = X[ 0] + X[ 1] + X[ 2]model = OLS(YX[ 2])results = modelfit()resappend(dict(alpha_1=a-1 r2=resultsrsquared rank=modelrank c1=results

rarrparams[0] c2=resultsparams[1]))

import pandasdf = pandasDataFrame(res)df = dfset_index(alpha_1)df

On fait un dernier test avec scikit-learn97 pour veacuterifier que lrsquoalgorithme de reacutesolution donne des reacutesultats similairespour un cas ougrave le deacuteterminant est quasi-nul

from sklearnlinear_model import LinearRegressionfrom sklearnmetrics import r2_score

alphas = [09 + i 001 for i in range(011)]res = []for a in alphas

X = X_copy()X[ 1] = a X[ 0] + (1-a) X[ 1]Y = X[ 0] + X[ 1] + X[ 2]model = LinearRegression()modelfit(X[ 2] Y)r2 = r2_score(Y modelpredict(X[ 2]))resappend(dict(alpha=a c1=modelcoef_[0] c2=modelcoef_[1] r2=r2))

import pandasdf = pandasDataFrame(res)df = dfset_index(alpha)df

fig ax = pltsubplots(13 figsize=(124))df[[c1 c2]]plot(ax=ax[1])df[[c1 c2]]plot(ax=ax[2])df[[r2]]plot(ax=ax[0])ax[0]set_title(R2)ax[1]set_title(coefficients)ax[2]set_ylim([-5 5])ax[2]set_title(coefficients eacutechelle tronqueacutee)

97 httpscikit-learnorgstable

112 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Le second graphe est trompeur mais il ne faut pas oublier de regarder lrsquoeacutechelle de lrsquoaxe des ordonneacutees

314 Indicatrices

X1 est une variable aleacuteatoire gaussienne On teste maintenant un modegravele Y = X prime1 +X prime

2 + ϵ avec X prime1 = X111X1lt0 et

X prime2 = X111X1⩾0

X = nprnormal(size=(1000 3))X[ 1] = X[ 0]X[X[ 0] gt= 0 0] = 0X[X[ 1] lt 0 1] = 0Y = X[ 0] + X[ 1] + X[ 2]corrcoef(XT)

array([[ 1 047358312 -003083914][ 047358312 1 -001293737][-003083914 -001293737 1 ]])

from pandas import DataFramenames = [Xd i for i in range(Xshape[1]-1)]ax = DataFrame(X[502] columns=names)sort_values(names)reset_index(drop=True)plot()axset_title(Repreacutesentation des features tronqueacutees)

31 Reacutegression lineacuteaire 113

Machine Learning Statistiques et Programmation Version 035930

model = OLS(YX[ 3])results = modelfit()resultssummary()

On deacutecoupe en trois

import numpyX = nprnormal(size=(1000 4))for i in range(0 3)

X[ i] = X_[ 0]X[ 3] = X_[ 2]X[X_[ 0] gt -1 0] = 0X[(X_[ 0] lt -1) | (X_[ 0] gt 1) 1] = 0X[X_[ 0] lt 1 2] = 0Y = X[ 0] + X[ 1] + X[ 2] + X[ 3]corrcoef(XT)

array([[ 1 -000347584 016846101 006722762][-000347584 1 000326437 -004707208][ 016846101 000326437 1 008754832][ 006722762 -004707208 008754832 1 ]])

from pandas import DataFramenames = [Xd i for i in range(Xshape[1]-1)]ax = DataFrame(X[503] columns=names)sort_values(names)reset_index(drop=True)plot()axset_title(Repreacutesentation des features tronqueacutees)

114 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

model = OLS(YX[ 4])results = modelfit()resultssummary()

315 Reacutegression lineacuteaire par morceaux

On se place dans un cas particulier ougrave le problegraveme est lineacuteaire par morceaux

Y = minus2X111X1+ϵ1lt0 + 4X111X+ϵ1gt0 + ϵ2

La reacutegression donne de tregraves mauvais reacutesultat sur ce type de problegravemes mais on cherche une faccedilon systeacutematique dedeacutecouper le problegraveme en segments lineacuteaires

X = nprnormal(size=(10004))alpha = [4 -2]t = (X[ 0] + X[ 3] 05) gt 0switch = numpyzeros(Xshape[0])switch[t] = 1Y = alpha[0] X[ 0] t + alpha[1] X[ 0] (1-t) + X[ 2]

fig ax = pltsubplots(1 1)axplot(X[ 0] Y )axset_title(Nuage de points lineacuteaire par morceaux)

31 Reacutegression lineacuteaire 115

Machine Learning Statistiques et Programmation Version 035930

model = OLS(YX[ 1])results = modelfit()resultssummary()

yp = resultspredict(X[ 1])

fig ax = pltsubplots(1 1)axplot(X[ 0] Y label=expected)axplot(X[ 0] yp label=predicted)axlegend()axset_title(Reacutegression lineacuteaire sur un nuage lineacuteaire par morceaux)

116 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Passons agrave un arbre de deacutecision qui nrsquoest pas le meilleur modegravele mais on va deacutetourner ses reacutesultats pour revenir agrave unproblegraveme de reacutegression par morceaux

from sklearntree import DecisionTreeRegressormodel = DecisionTreeRegressor(min_samples_leaf=10 max_depth=3)modelfit(X[ 1] Y)yp = modelpredict(X[ 1])

fig ax = pltsubplots(1 1)axplot(X[ 0] Y label=expected)axplot(X[ 0] yp label=predicted)axlegend()r2 = r2_score(Y modelpredict(X[ 1]))axset_title(Arbre de deacutecision sur un nuage lineacuteaire par morceauxnR2=f r2)

31 Reacutegression lineacuteaire 117

Machine Learning Statistiques et Programmation Version 035930

from sklearntree import export_graphvizexport_graphviz(model out_file=arbredot)from pyensaegraphhelper import run_dotrun_dot(arbredot arbrepng)from IPythondisplay import ImageImage(arbrepng)

On extrait tous les seuils de lrsquoarbre et on ajoute les milieux de segments

th = list(sorted(set(modeltree_threshold)))th += [(th[i] + th[i-1])2 for i in range(1len(th))]th = list(sorted(th))th

118 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

[-20-18018612563610077-16037225127220154-1323736995458603-10437514781951904-031099767237901690421756133437156706781253740191460934494614601135310011553764343262106781613826751712776717841625214148752743005752561714784592390060419420417547225952]

On fait une reacutegression sur les variables Wigt0 = X111X1gtti W0 = X1 ougrave les (ti) sont les seuils

W = numpyzeros((Xshape[0] len(th)+1))x = X[ 0]W[ 0] = xfor i in range(len(th))

W[x gt th[i] i+1] = x[x gt th[i]]

model = OLS(YW)results = modelfit()resultssummary()

Dessinons les reacutesultats de la preacutedictions

yp = resultspredict(W)fig ax = pltsubplots(1 1)axplot(X[ 0] Y label=expected)axplot(X[ 0] yp label=predicted)axlegend()axset_title(Reacutegression lineacuteaire par morceauxnsur un nuage lineacuteaire par morceauxnR2=frarr resultsrsquared)

31 Reacutegression lineacuteaire 119

Machine Learning Statistiques et Programmation Version 035930

Le modegravele nous suggegravere de ne garder que quelques seuils En srsquoappuyant sur les p-values

keep = numpyarange(len(resultspvalues))[resultspvalues lt 005]keep

array([ 0 5 6 7 13])

W2 = W[ keep]

model = OLS(YW2)results = modelfit()resultssummary()

yp = resultspredict(W2)fig ax = pltsubplots(1 1)axplot(X[ 0] Y label=expected)axplot(X[ 0] yp label=predicted)axlegend()axset_title(Reacutegression lineacuteaire par morceauxnsur un nuage lineacuteaire par morceauxn +

reacuteduction du nombre de segmentsnR2=f resultsrsquared)

120 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Le coefficient R2 est quasiment identique pour un nombre de segments moindre Je me suis amuseacute agrave rendre ce codeplus geacuteneacuterique pour comparer la premiegravere eacutetape le deacutecoupage en morceaux via deux modegraveles un arbre de deacutecisionet le nouvel objet KBinsDiscretizer98 qui segmente une variable sans tenir compte de la cible La reacutegression nrsquoestplus neacutecessaire lineacuteaire Piecewise linear regression99 Je me suis eacutegalement amuseacute agrave faire de mecircme pour uneclassification par morceaux PiecewiseClassifier100 Celle-ci pose quelques soucis pratiques car toutes les classes nesont pas forceacutement repreacutesenteacutees dans chaque compartiment

32 Reacutegression quantile

La reacutegression quantile est moins sensible aux points aberrants Elle peut ecirctre deacutefinie comme une reacutegression avec unenorme L1 (une valeur absolue)

bull Meacutediane et valeur absolue (page 122)bull Reacutegression quantile (page 122)bull Reacutesolution drsquoune reacutegression quantile (page 123)bull Quantile et optimisation (page 123)bull Reacutegression quantile pour un quantile p quelconque (page 124)bull Reacutesolution drsquoune reacutegression quantile pour un quantile p quelconque (page 124)bull Notebook (page 125)

98 httpsscikit-learnorgstablemodulesgeneratedsklearnpreprocessingKBinsDiscretizerhtml99 httpwwwxavierduprefrappmlinsightshelpsphinxnotebookspiecewise_linear_regressionhtml

100 httpwwwxavierduprefrappmlinsightshelpsphinxmlinsightsmlmodelpiecewise_estimatorhtmlmlinsightsmlmodelpiecewise_estimatorPiecewiseClassifier

32 Reacutegression quantile 121

Machine Learning Statistiques et Programmation Version 035930

bull Bilbiographie (page 128)

321 Meacutediane et valeur absolue

On considegravere un ensemble de nombre reacuteels X1 Xn La meacutediane est le nombre M qui veacuterifie sumi

11XiltM =sumi

11XigtM

Plus simplement la meacutediane est obtenue en triant les eacuteleacutements X1 Xn par ordre croissant La meacutediane est alorsle nombre au milieu X[n2 ]

proprieacuteteacute P1 Meacutediane et valeur absolueLa meacutediane M de lrsquoensemble X1 Xn minimise la quantiteacute E =

sumi |Xi minusM |

Avant de deacutemontrer la proprieacuteteacute voyons ce qursquoil se passe entre deux reacuteels La meacutediane de AB peut ecirctre nrsquoimporteougrave sur le segment

De maniegravere eacutevidente les distances des deux cocircteacutes du point M sont eacutegales a+ b = c+ d Mais si M nrsquoest pas sur lesegment on voit de maniegravere eacutevidente que la somme des distances sera plus grande

Nrsquoimporte quel point sur le segment M minimise |AminusM |+ |B minusM | On revient aux n reacuteels trieacutes par ordre croissantX1 Xn et on considegravere les paires (X1 Xn) (X2 Xnminus1)

(X[n2 ]

X[n2 +1]

) Lrsquointersection de tous ces

intervalles est(X[n2 ]

X[n2 +1]

)et on sait drsquoapregraves la petit exemple avec deux points que nrsquoimporte quel point dans

cet intervalle minimise |X1 minusM |+ |Xn minusM |+ |X2 minusM |+ |Xnminus1 minusM |+ = E La proprieacuteteacute est deacutemontreacutee

322 Reacutegression quantile

Maintenant que la meacutediane est deacutefinie par un problegraveme de minimisation il est possible de lrsquoappliquer agrave un problegravemede reacutegression

Deacutefinition D1 Reacutegression quantileOn dispose drsquoun ensemble de n couples (Xi Yi) avec Xi isin Rd et Yi isin R La reacutegression quantile consiste agrave trouverα β tels que la somme

sumi |α+ βXi minus Yi| est minimale

122 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

323 Reacutesolution drsquoune reacutegression quantile

La premiegravere option consiste agrave utiliser une meacutethode de descente de gradient puisque la fonction E =sum

i |Xi minusM |est presque partout deacuterivable Une autre option consiste agrave utiliser lrsquoalgorithme Iteratively reweighted least squares101Lrsquoimpleacutementation est faite par la classe QuantileLinearRegression102 Lrsquoalgorithme est tireacute de [Chen2014]

Algorithme A1 Iteratively reweighted least squaresOn souhaite trouver les paramegravetres Ω qui minimise

E =sumi

|Yi minus f(XiΩ)|

Etape 1On pose foralli wt

i = 1Etape 2On calcule Ωt = argminE(Ω) avec Et(Ω) =

sumi w

ti (Yi minus f(XiΩ))

2Etape 3On met agrave jour les poids wt+1

i = 1maxδ|Yiminusf(XiΩt)| Puis on retourne agrave lrsquoeacutetape 2

Le paramegravetre δ gegravere le cas ougrave la preacutediction est identique agrave la valeur attendue pour un point Xi donneacute Il y a plusieurschoses agrave deacutemontrer On suppose que lrsquoalgorithme converge ce qursquoon nrsquoa pas encore deacutemontreacute Dans ce cas Ωt = Ωt+1

et les coefficients Ωt optimise la quantiteacute

sumi

wti (Yi minus f(XiΩ))

2=sumi

(Yi minus f(XiΩ))2

max δ |Yi minus f(XiΩt)|minusrarrδrarr0

sumi

|Yi minus f(XiΩ)|

On remarque eacutegalement que Et(Ωt) est lrsquoerreur L1 pour les paramegravetres Ω Donc si lrsquoalgorithme converge celui-cioptimise bien lrsquoerreur de la reacutegression quantile Dans le cas drsquoune reacutegression lineacuteaire on sait exprimer la solution

Ωt+1 = (X primeWtX)minus1X primeWty = g(Ωt)avec Wt = diag( 1

maxδ|yiminusΩtXi| )

Drsquoapregraves le theacuteoregraveme du point fixe103 on sait que la suite converge si la fonction g est contractante104

forallx y |f(x)minus f(y)| ⩽ k ∥xminus y∥ avec k lt 1

324 Quantile et optimisation

De la mecircme maniegravere que nous avons deacutefini la meacutediane comme la solution drsquoun problegraveme drsquooptimisation nous pouvonsdeacutefinir nrsquoimporte quel quantile comme tel

proprieacuteteacute P2 Quantile et optimisationLe quantile Qp de lrsquoensemble X1 Xn est le nombre qui veacuterifie

nsumi=1

11XiltQp = np

101 httpsenwikipediaorgwikiIteratively_reweighted_least_squares102 httpwwwxavierduprefrappmlinsightshelpsphinxmlinsightsmlmodelquantile_regressionhtmlmlinsightsmlmodelquantile_

regressionQuantileLinearRegression103 httpsfrwikipediaorgwikiPoint_fixe104 httpsfrwikipediaorgwikiApplication_contractante

32 Reacutegression quantile 123

Machine Learning Statistiques et Programmation Version 035930

Ce nombre minimise la quantiteacute

E =sumi

p |Xi minusQp|+ + (1minus p) |Xi minusQp|minus

Ougrave |a|+ = max a 0 et |a|minus = max minusa 0

On veacuterifie qursquoon retrouve bien ce qui eacutetait eacutenonceacute pour la meacutediane avec p = 12 Il faut deacutemontrer que la solution de ce

programme drsquooptimisation atterrit dans lrsquointervalle souhaiteacuteOn choisit un reacuteel P agrave lrsquointeacuterieur drsquoun intervale et on calcule E(P ) =

sumi p |Xi minus P |++(1minusp) |Xi minus P |minus On note

a(P ) =sumn

i=1 11XiltP et b(P ) =sumn

i=1 11XigtP Comme le point P est agrave lrsquointeacuterieur drsquoun intervalle a + b = nSoit dx un reacuteel tel que P + dx soit toujours dans lrsquointervalle

E(P + dx) =sum

i p |Xi minus P minus dx|+ + (1minus p) |Xi minus P minus dx|minus= minusb(P )pdx+ a(P )(1minus p)dx = (a(P )minus a(P )pminus b(P )p)dx = (a(P )minus pn)dx

On voit que si P est choisi de telle sorte que a(P ) = np la fonction E(P ) est constante sur cette intervalle et crsquoestpreacuteciseacutement le cas lorsque P = Qp Comme la fonction E est une somme positive de fonctions convexes elle lrsquoestaussi Si on a trouveacute un intervalle ougrave la fonction est constante alors celui-ci contient la solution Sinon il suffit justede trouver les intervalles (Ximinus1 Xi) et (Xi Xi+1) pour lesquelles la fonction E est respectivement deacutecroissante etcroissante On cherche donc le point P tel que a(P ) lt pn si P lt Xi et a(P ) gt pn si P gt Xi et ce point correspondau quantile Qp Ceci conclut la deacutemonstration

325 Reacutegression quantile pour un quantile p quelconque

Comme pour la meacutediane il est possible de deacutefinir la reacutegression quantile pour un quantile autre que la meacutediane

Deacutefinition D2 Reacutegression quantileOn dispose drsquoun ensemble de n couples (Xi Yi) avec Xi isin Rd et Yi isin R La reacutegression quantile consiste agrave trouverα β tels que la somme

sumi p |α+ βXi minus Yi|+ + (1minus p) |α+ βXi minus Yi|minus est minimale

326 Reacutesolution drsquoune reacutegression quantile pour un quantile p quelconque

La premiegravere option consiste encore agrave utiliser une meacutethode de descente de gradient puisque la fonction agrave minimiserest presque partout deacuterivable On peut aussi adapter lrsquoalgorithme Iteratively reweighted least squares (page 123)Lrsquoimpleacutementation est faite par la classe QuantileLinearRegression105 (voir [Koenker2017])

Algorithme A2 Iteratively reweighted least squaresOn souhaite trouver les paramegravetres Ω qui minimise

E =sumi

p |Yi minus f(XiΩ)|+ + (1minus p) |Yi minus f(XiΩ)|minus

Etape 1On pose foralli wt

i = 1Etape 2On calcule Ωt = argminE(Ω) avec Et(Ω) =

sumi w

ti (Yi minus f(XiΩ))

2105 httpwwwxavierduprefrappmlinsightshelpsphinxmlinsightsmlmodelquantile_regressionhtmlmlinsightsmlmodelquantile_

regressionQuantileLinearRegression

124 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Etape 3On met agrave jour les poids wt+1

i = 1

maxδ 1p |α+βXiminusYi|++ 11minusp |α+βXiminusYi|minus Puis on retourne agrave lrsquoeacutetape 2

On suppose que lrsquoalgorithme converge ce qursquoon nrsquoa pas encore deacutemontreacute Dans ce cas Ωt = Ωt+1 et les coefficientsΩt optimise la quantiteacute sum

i wti (Yi minus f(XiΩ))

2=

sumi

(Yiminusf(XiΩ))2

maxδ 1p |α+βXiminusYi|++ 11minusp |α+βXiminusYi|minus

minusrarrδrarr0

p |Yi minus f(XiΩ)|+ + (1minus p) |Yi minus f(XiΩ)|minus

327 Notebook

Reacutegression quantile illustreacutee

La reacutegression quantile est moins sensible aux points aberrants Elle peut ecirctre deacutefinie comme une reacutegression avec unenorme L1 (une valeur absolue) Ce notebook explore des reacutegressions avec des quantiles diffeacuterents

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Un jeu de donneacutees non symeacutetrique (page 125)bull Reacutegression lineacuteaire et reacutegression quantile (page 126)bull Diffeacuterents quantiles (page 127)

matplotlib inline

Un jeu de donneacutees non symeacutetrique

import numpyrandom as nprimport numpyn = 1000eps = nprnormal(n)X = nprrand(n 1) 5X1 = nprnormal(size=(n 1)) 1X2 = nprnormal(size=(n2 1)) 10X2 = numpyvstack([X2 numpyzeros((n2 1))])eps = - numpyabs(X1) + numpyabs(X2)Y = (05 X + eps)ravel()Xshape Yshape

((1000 1) (1000))

import matplotlibpyplot as pltfig ax = pltsubplots(1 1 figsize=(55))axplot(X Y c)

32 Reacutegression quantile 125

Machine Learning Statistiques et Programmation Version 035930

Reacutegression lineacuteaire et reacutegression quantile

from sklearnlinear_model import LinearRegressionclr = LinearRegression()clrfit(X Y)

LinearRegression(copy_X=True fit_intercept=True n_jobs=1 normalize=False)

from mlinsightsmlmodel import QuantileLinearRegressionclq = QuantileLinearRegression()clqfit(X Y)

QuantileLinearRegression(copy_X=True delta=00001 fit_intercept=Truemax_iter=10 n_jobs=1 normalize=False quantile=05verbose=False)

fig ax = pltsubplots(1 1 figsize=(55))axplot(X Y c)lin = clrpredict(X)axplot(X lin ro label=L2)qu = clqpredict(X)axplot(X qu bo label=L1)axlegend()axset_title(Reacutegression lineacuteaire et quantile)

126 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Diffeacuterents quantiles

clqs = for qu in [01 025 05 075 09]

clq = QuantileLinearRegression(quantile=qu)clqfit(X Y)clqs[q=12f qu] = clq

fig ax = pltsubplots(1 1 figsize=(55))axplot(X Y c)for k v in sorted(clqsitems())

p = vpredict(X)axplot(X p o label=k)

axlegend()axset_title(Reacutegressions quantiles)

32 Reacutegression quantile 127

Machine Learning Statistiques et Programmation Version 035930

328 Bilbiographie

Des reacutefeacuterences sont disponibles sur la page de statsmodels106 QuantReg107 ou lagrave Reacutegression quantile108

33 Reacutegression lineacuteaire par morceaux

Le paragraphe Reacutegression lineacuteaire (page 107) eacutetudie le lien entre le coefficient R2 et la correacutelation pour finalementillustrer une faccedilon de reacutealiser une reacutegression lineacuteaire par morceaux Lrsquoalgorithme srsquoappuie sur un arbre de reacutegressionpour deacutecouper en morceaux ce qui nrsquoest pas le plus satisfaisant car lrsquoarbre cherche agrave deacutecouper en segment enapproximant la variable agrave reacutegresser Y par une constante sur chaque morceaux et non une droite On peut se poserla question de comment faire pour construire un algorithme qui deacutecoupe en approximant Y par une droite et non uneconstante Le plus dur nrsquoest pas de le faire mais de le faire efficacement Et pour comprendre lagrave ougrave je veux vousemmener il faudra un peu de matheacutematiques

bull Exploration (page 129)ndash Problegraveme et regreacutession lineacuteaire dans un espace agrave une dimension (page 129)ndash Impleacutementation naiumlve drsquoune reacutegression lineacuteaire par morceaux (page 137)ndash Aparteacute sur la continuiteacute de la reacutegression lineacuteaire par morceaux (page 137)

106 httpwwwstatsmodelsorgstableindexhtml107 httpwwwstatsmodelsorgstablegeneratedstatsmodelsregressionquantile_regressionQuantReghtml108 httpswwwxavierduprefrappensae_teaching_cshelpsphinxml2atd2a_mlplus_regression_quantilehtml

128 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

ndash Reacutegression lineacuteaire et correacutelation (page 138)ndash Ideacutee de lrsquoalgorithme (page 138)ndash Un peu plus en deacutetail dans lrsquoalgorithme (page 139)

bull Synthegravese matheacutematique (page 141)bull Streaming (page 143)

ndash Streaming Gram-Schmidt (page 143)ndash Streaming Linear Regression (page 144)ndash Streaming Linear Regression version Gram-Schmidt (page 145)

bull Digressions (page 147)bull Notebooks (page 147)bull Impleacutementations (page 151)bull Bilbiographie (page 151)

Une impleacutementation de ce type de meacutethode est proposeacutee dans la pull request Model trees (M5P and co)111 qui reacutepondagrave au problegraveme poseacutee dans Model trees (M5P)112 et originellement impleacutementeacutee dans Building Model Trees113 Cettederniegravere impleacutementation reacuteestime les modegraveles comme lrsquoimpleacutementation deacutecrite au paragraphe Impleacutementation naiumlvedrsquoune reacutegression lineacuteaire par morceaux (page 137) mais eacutetendue agrave tout type de modegravele

331 Exploration

Problegraveme et regreacutession lineacuteaire dans un espace agrave une dimension

Tout drsquoabord une petite illustration du problegraveme avec la classe PiecewiseRegression114 impleacutementeacutee selon lrsquoAPI descikit-learn115

Reacutegression lineacuteaire par morceaux

La reacutegression lineacuteaire par morceaux a lrsquoavantage de produire un modegravele localement interpreacutetable Mais ce nrsquoest paseacutevident drsquoestimer un tel modegravele quand on ne connaicirct pas les morceaux par avance

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Des donneacutees artificielles (page 130)bull Quelques exemples avec un arbre de deacutecision (page 131)bull Quelques exemples avec un KBinsDiscretizer (page 132)bull Arbre de deacutecision optimiseacute pour la reacutegression lineacuteaire (page 133)

matplotlib inline

111 httpsgithubcomscikit-learnscikit-learnissues13106112 httpsgithubcomscikit-learnscikit-learnpull13732113 httpsgithubcomankonzoidLearningXtreemasteradvanced_MLmodel_tree114 httpwwwxavierduprefrappmlinsightshelpsphinxnotebookspiecewise_linear_regressionhtml115 httpsscikit-learnorg

33 Reacutegression lineacuteaire par morceaux 129

Machine Learning Statistiques et Programmation Version 035930

Des donneacutees artificielles

from numpyrandom import normalimport numpyimport matplotlibpyplot as plt

def nuage(n alpha noise=02)eps = normal(0 2 (n 2))X = eps[ 0] + 2X1 = eps[ 0]copy()X2 = eps[ 0]copy()th = 1X1[X1 lt= th] = 0X2[X2 gt th] = 0sel = numpyzeros((n))sel[X1 gt th] = 1Y = X1 alpha - X2 alpha + eps[ 1] noise - sel alpha th 2return X Y

fig ax = pltsubplots(1 2 figsize=(12 4))alpha noise = 05 02X Y = nuage(200 alpha)ax[0]plot(X Y )ax[0]set_title(alpha=12f noise=12f (alpha noise))alpha noise = 2 04X Y = nuage(200 alpha noise=04)ax[1]plot(X Y )ax[1]set_title(alpha=12f noise=12f (alpha noise))

130 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Quelques exemples avec un arbre de deacutecision

La segmentation est reacutealiseacutee drsquoabord avec un arbre de deacutecision dont on fixe la profondeur Chaque segment est choiside telle sorte agrave minimiser lrsquoapproximation de la fonction par une constante sur chaque segment

from mlinsightsmlmodel import PiecewiseRegressorfrom sklearntree import DecisionTreeRegressor

def nuage_piecewise(n alpha noise=02 max_depth=1)X Y = nuage(n alpha noise=noise)clr = PiecewiseRegressor(binner=DecisionTreeRegressor(max_depth=max_depth))Xm = Xreshape((len(X) 1))clrfit(Xm Y)mi ma = Xmin() Xmax()Xm = numpyarange(0 200) (ma - mi) 200 + miXm = Xmreshape((len(Xm) 1))return X Y Xm clrpredict(Xm)

def plot(i j alpha noise max_depth ax)X Y XX Z = nuage_piecewise(200 alpha max_depth=max_depth)ax[i j]plot(X Y )ax[i j]plot(XX Z )ax[i j]set_title(alpha=12f noise=12f max_depth=d (

alpha noise max_depth))

fig ax = pltsubplots(2 2 figsize=(12 6))

alpha noise max_depth = 05 02 1plot(0 0 alpha noise max_depth ax)

alpha noise max_depth = 2 04 1plot(0 1 alpha noise max_depth ax)

alpha noise max_depth = 05 02 2plot(1 0 alpha noise max_depth ax)

alpha noise max_depth = 2 04 2plot(1 1 alpha noise max_depth ax)

pltsuptitle(Reacutegression lineacuteaire avec DecisionTreeRegressor)

33 Reacutegression lineacuteaire par morceaux 131

Machine Learning Statistiques et Programmation Version 035930

Quelques exemples avec un KBinsDiscretizer

from mlinsightsmlmodel import PiecewiseRegressorfrom sklearnpreprocessing import KBinsDiscretizer

def nuage_piecewise2(n alpha noise=02 n_bins=2)X Y = nuage(n alpha noise=noise)clr = PiecewiseRegressor(binner=KBinsDiscretizer(n_bins=n_bins))Xm = Xreshape((len(X) 1))clrfit(Xm Y)mi ma = Xmin() Xmax()Xm = numpyarange(0 200) (ma - mi) 200 + miXm = Xmreshape((len(Xm) 1))return X Y Xm clrpredict(Xm)

def plot2(i j alpha noise n_bins ax)X Y XX Z = nuage_piecewise2(200 alpha n_bins=n_bins)ax[i j]plot(X Y )ax[i j]plot(XX Z )ax[i j]set_title(alpha=12f noise=12f n_bins=d (

alpha noise n_bins))

fig ax = pltsubplots(2 2 figsize=(12 6))

alpha noise n_bins = 05 02 2plot2(0 0 alpha noise n_bins ax)

alpha noise n_bins = 2 04 2(suite sur la page suivante)

132 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

plot2(0 1 alpha noise n_bins ax)

alpha noise n_bins = 05 02 4plot2(1 0 alpha noise n_bins ax)

alpha noise n_bins = 2 04 4plot2(1 1 alpha noise n_bins ax)

pltsuptitle(Reacutegression lineacuteaire avec KBinsDiscretizer)

Crsquoest mieux mais ce nrsquoest pas parfait La classe KBinsDiscretizer116 fonctionne simplement en segmentant les donneacuteesmais elle ne tient pas compte de la cible

Arbre de deacutecision optimiseacute pour la reacutegression lineacuteaire

Lrsquoarbre suivant reprend lrsquoalgorithme de lrsquoarbre de deacutecision agrave ceci pregraves qursquoil optimise un critegravere MSE117 en approximantle nuage de points (Xi yi) par une fonction lineacuteaire yi = Xiβ + ϵi Il faut neacuteanmoins augmenter le nombre de pointspar feuille pour eacuteviter quelques artefacts

from mlinsightsmlmodelpiecewise_tree_regression import PiecewiseTreeRegressorfrom sklearnpreprocessing import KBinsDiscretizer

def nuage_piecewise2(n alpha noise=02 min_samples_leaf=30)X Y = nuage(n alpha noise=noise)clr = PiecewiseTreeRegressor(criterion=mselin

min_samples_leaf=min_samples_leaf)(suite sur la page suivante)

116 httpsscikit-learnorgstablemodulesgeneratedsklearnpreprocessingKBinsDiscretizerhtml117 httpsscikit-learnorgstablemodulesgeneratedsklearnmetricsmean_squared_errorhtml

33 Reacutegression lineacuteaire par morceaux 133

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

Xm = Xreshape((len(X) 1))clrfit(Xm Y)mi ma = Xmin() Xmax()Xm = numpyarange(0 200) (ma - mi) 200 + miXm = Xmreshape((len(Xm) 1))return X Y Xm clrpredict(Xm)

def plot2(i j alpha noise min_samples_leaf ax)X Y XX Z = nuage_piecewise2(200 alpha

min_samples_leaf=min_samples_leaf)ax[i j]plot(X Y )ax[i j]plot(XX Z )ax[i j]set_title(alpha=12f noise=12f min_samples_leaf=d (

alpha noise min_samples_leaf))

fig ax = pltsubplots(2 2 figsize=(12 6))

alpha noise min_samples_leaf = 05 02 40plot2(0 0 alpha noise min_samples_leaf ax)

alpha noise min_samples_leaf = 2 04 40plot2(0 1 alpha noise min_samples_leaf ax)

alpha noise min_samples_leaf = 05 02 30plot2(1 0 alpha noise min_samples_leaf ax)

alpha noise min_samples_leaf = 2 04 30plot2(1 1 alpha noise min_samples_leaf ax)

pltsuptitle(Arbre de deacutecision optimiseacutenpour la reacutegression lineacuteaire par morceaux)

Cxavierdupre__home_github_forkscikit-learnsklearntree_classespy335 FutureWarningrarrThe parameter X_idx_sorted is deprecated and has no effect It will be removed in 1rarr1 (renaming of 026) You can suppress this warning by not passing any value to the X_rarridx_sorted parameterwarningswarn(

Cxavierdupre__home_github_forkscikit-learnsklearntree_classespy335 FutureWarningrarrThe parameter X_idx_sorted is deprecated and has no effect It will be removed in 1rarr1 (renaming of 026) You can suppress this warning by not passing any value to the X_rarridx_sorted parameterwarningswarn(

Cxavierdupre__home_github_forkscikit-learnsklearntree_classespy335 FutureWarningrarrThe parameter X_idx_sorted is deprecated and has no effect It will be removed in 1rarr1 (renaming of 026) You can suppress this warning by not passing any value to the X_rarridx_sorted parameterwarningswarn(

Cxavierdupre__home_github_forkscikit-learnsklearntree_classespy335 FutureWarningrarrThe parameter X_idx_sorted is deprecated and has no effect It will be removed in 1rarr1 (renaming of 026) You can suppress this warning by not passing any value to the X_rarridx_sorted parameterwarningswarn(

134 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Il faudrait ajouter des contraintes de continuiteacute

Cette reacutegression par morceaux est obtenue gracircce agrave un arbre de deacutecision Celui-ci trie le nuage de points (Xi Yi) parordre croissant selon les X soit Xi ⩽ Xi+1 Lrsquoarbre coupe en deux lorsque la diffeacuterence des erreurs quadratiques estmaximale erreur quadratique obtenue en approximant Y par sa moyenne sur lrsquointervalle consideacutereacute On note lrsquoerreurquadratique

C(i j) = 1jminusi+1

sumi⩽k⩽j Yi

D(i j) = 1jminusi+1

sumi⩽k⩽j Y

2i

E(i j) = 1jminusi+1

sumi⩽k⩽j(Yi minus C(i j))2 = 1

jminusi+1

sumi⩽k⩽j Y

2i minus C(i j)2 = D(i j)minus C(i j)2

La derniegravere ligne applique la formule VX = EX2 minus EX2 qui est facile agrave redeacutemontrer Lrsquoalgorithme de lrsquoarbre dedeacutecision coupe un intervalle en deux et deacutetermine lrsquoindice k qui minimise la diffeacuterence

∆k = E(1 n)minus (E(1 k) + E(k + 1 n))

Lrsquoarbre de deacutecision optimise la construction drsquoune fonction en escalier qui repreacutesente au mieux le nuage de points lestraits verts sur le graphe suivant alors qursquoil faudrait choisir une erreur quadratique qui corresponde aux traits oranges

33 Reacutegression lineacuteaire par morceaux 135

Machine Learning Statistiques et Programmation Version 035930

Il suffirait donc de remplacer lrsquoerreur E par celle obtenue par une reacutegression lineacuteaire Mais si crsquoeacutetait aussi simplelrsquoimpleacutementation de sklearntreeDecisionTreeRegressor118 la proposerait Alors pourquoi La raison principale estque cela coucircte trop cher en temps de calcul Pour trouver lrsquoindice k il faut calculer toutes les erreursE(1 k)E(k+1 n)ce qui coucircte tregraves cher lorsque cette erreur est celle drsquoune reacutegression lineacuteaire parce qursquoil est difficile de simplifier ladiffeacuterence

∆k minus∆kminus1 = minus(E(1 k) + E(k + 1 n)) + (E(1 k minus 1) + E(k n))= E(1 k minus 1)minus E(1 k) + E(k n)minus E(k + 1 n)

Arbre de reacutegression constanteOn srsquointeacuteresse au terme E(1 kminus1)minusE(1 k) dans le cas le nuage de points est repreacutesenteacute par une constante sur chaquesegment Crsquoest lrsquohypothegravese faite par lrsquoalgorithme classique de construction drsquoun arbre de reacutegression (segments vertssur le premier dessin)

C(1 k minus 1)minus C(1 k) = 1kminus1

sum1⩽i⩽kminus1 Yi minus 1

k

sum1⩽i⩽k Yi

= ( 1kminus1 minus

1k )sum

1⩽i⩽kminus1 Yi minus Yk

k

= 1k(kminus1)

sum1⩽i⩽kminus1 Yi minus Yk

k

= 1kC(1 k minus 1)minus Yk

k

On en deacuteduit que

E(1 k minus 1)minus E(1 k) = 1kD(1 k minus 1)minus Y 2

k

k + (C(1 k minus 1)minus C(1 k))(C(1 k minus 1) + C(1 k))

= 1kD(1 k minus 1)minus Y 2

k

k +(1kC(1 k minus 1)minus Yk

k

) (Yk

k minus1kC(1 k minus 1) + 2C(1 k minus 1)

)On voit que cette formule ne fait intervenir que C(1 kminus1) D(1 kminus1) Yk elle est donc tregraves rapide agrave calculer et crsquoestpour cela qursquoapprendre un arbre de deacutecision peut srsquoapprendre en un temps raisonnable Cela repose sur la possibiliteacute decalculer le critegravere optimiseacute par reacutecurrence On voit eacutegalement que ces formules ne font pas intervenir X elles sont doncgeacuteneacuteralisables au cas multidimensionnel Il suffira de trier les couples (Xi Yi) selon chaque dimension et deacuteterminerle meilleur seuil de coupure drsquoabord sur chacune des dimensions puis de prendre le meilleur de ces seuils sur toutes lesdimensions Le problegraveme est reacutesoluLe notebook Custom Criterion for DecisionTreeRegressor119 impleacutemente une version pas efficace du critegravere MSE120

et compare la vitesse drsquoexeacutecution avec lrsquoimpleacutementation de scikit-learn121 Il impleacutemente ensuite le calcul rapidede scikit-learn pour montrer qursquoon obtient un temps comparable Le reacutesultat est sans eacutequivoque La version rapidenrsquoimpleacutemente pas ∆k minus∆kminus1 mais plutocirct les sommes

sumk1 wiYi

sumk1 wiY

2i dans un sens et dans lrsquoautre En gros le

code stocke les seacuteries des numeacuterateurs et des deacutenominateurs pour les diviser au dernier momentArbre de reacutegression lineacuteaireLe cas drsquoune reacutegression est plus complexe Prenons drsquoabord le cas ougrave il nrsquoy a qursquoun seule dimension il faut drsquoabordoptimiser le problegraveme

E(1 n) = minab

=

nsumk=1

(aXk + bminus Yk)2

118 httpsscikit-learnorgstablemodulesgeneratedtreeDecisionTreeRegressorhtml119 httpwwwxavierduprefrappmlinsightshelpsphinxnotebookspiecewise_linear_regression_criterionhtml120 httpsscikit-learnorgstablemodulesgeneratedsklearnmetricsmean_squared_errorhtml121 httpsscikit-learnorg

136 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

On deacuterive pour aboutir au systegraveme drsquoeacutequations suivant

partE(1n)parta = 0 =

sumnk=1 Xk(aXk + bminus Yk)

partE(1n)partb = 0 =

sumnk=1 aXk + bminus Yk

Ce qui aboutit agrave

a(1 n) =sumn

k=1 XkYkminus(sumn

k=1 Xk)(sumn

k=1 Yk)sumnk=1 X2

kminus(sumn

k=1 Xk)2

b(1 n) =sumn

k=1 Yk minus a (sumn

k=1 Xk)

Pour construire un algorithme rapide pour apprendre un arbre de deacutecision avec cette fonction de coucirct il fautpouvoir calculer a(1 k) en fonction de a(1 k minus 1) b(1 k minus 1) Xk Yk ou drsquoautres quantiteacutes intermeacutediaires quine font pas intervenir les valeurs Xiltk lt Yiltk Drsquoapregraves ce qui preacutecegravede cela paraicirct tout-agrave-fait possible Maisdans le cas multidimensionnel122 il faut deacuteterminer le vecteur A qui minimise

sumnk=1 ∥Y minusXA∥2 ce qui donne

A = (X primeX)minus1X primeY Si on note M1k la matrice M tronqueacutee pour ne garder que ses k premiegraveres lignes il faudraitpouvoir calculer rapidement

Akminus1 minusAk = (X prime1kminus1X1kminus1)

minus1X prime1kminus1Y1kminus1 minus (X prime

1kX1k)minus1X prime

1kY1k

La documentation de sklearntreeDecisionTreeRegressor123 ne mentionne que deux critegraveres pour apprendreun arbre de deacutecision de reacutegression MSE pour sklearnmetricsmean_squared_error124 et MAE poursklearnmetricsmean_absolute_error125 Les autres critegraveres nrsquoont probablement pas eacuteteacute envisageacutes Lrsquoarticle[Acharya2016] eacutetudie la possibiliteacute de ne pas calculer la matrice Ak pour tous les k Le paragraphe Streaming LinearRegression (page 144) utilise le fait que la matrice A est la solution drsquoun problegraveme drsquooptimisation quadratique etpropose un algorithme de mise agrave jour de la matrice A (cas unidimensionnel) Cet exposeacute va un peu plus loin pourproposer une version qui ne calcule pas de matrices inverses

Impleacutementation naiumlve drsquoune reacutegression lineacuteaire par morceaux

On part du cas geacuteneacuteral qui eacutecrit la solution drsquoune reacutegression lineacuteaire comme eacutetant la matrice A = (X primeX)minus1X primeY et onadapte lrsquoimpleacutementation de scikit-learn126 pour optimiser lrsquoerreur quadratique obtenue Ce nrsquoest pas simple mais pasimpossible Il faut entrer dans du code cython127 et pour eacuteviter de reacuteeacutecrire une fonction qui multiplie et inverse unematrice on peut utiliser la librairie LAPACK128 Je ne vais pas plus loin ici car cela serait un peu hors sujet mais cenrsquoeacutetait pas une partie de plaisir Cela donne piecewise_tree_regression_criterion_linearpyx129 Crsquoest illustreacute toujourspar le notebook DecisionTreeRegressor optimized for Linear Regression130

Aparteacute sur la continuiteacute de la reacutegression lineacuteaire par morceaux

Approcher la fonction y = f(x) + ϵ quand x et y sont reacuteels est un problegraveme facile trop facile A voir le dessinpreacuteceacutedent il est naturel de vouloir recoller les morceaux lorsqursquoon passe drsquoun segment agrave lrsquoautre Il srsquoagit drsquouneoptimisation sous contrainte Il est possible eacutegalement drsquoajouter une contrainte de reacutegularisation qui tient comptede cela On exprime cela comme suit avec une reacutegression lineacuteaire agrave deux morceaux

E =sumXi⩽t

(a1Xi + b1 minus y)2 +sumXi⩾t

(a2Xi + b2 minus y)2 + λ(a1t+ b1 minus a2tminus b)2

122 httpsfrwikipediaorgwikiRC3A9gression_linC3A9aireEstimateur_des_moindres_carrC3A9s123 httpsscikit-learnorgstablemodulesgeneratedtreeDecisionTreeRegressorhtml124 httpsscikit-learnorgstablemodulesgeneratedmetricsmean_squared_errorhtml125 httpsscikit-learnorgstablemodulesgeneratedmetricsmean_absolute_errorhtml126 httpsscikit-learnorg127 httpscythonorg128 httpwwwnetliborglapack129 httpsgithubcomsdpythonmlinsightsblobmastermlinsightsmlmodelpiecewise_tree_regression_criterion_linearpyx130 httpwwwxavierduprefrappmlinsightshelpsphinxnotebookspiecewise_linear_regression_criterionhtml

33 Reacutegression lineacuteaire par morceaux 137

Machine Learning Statistiques et Programmation Version 035930

Le cas multidimensionnel est loin drsquoecirctre aussi simple Avec une dimension chaque zone a deux voisines En deuxdimensions chaque zone peut en avoir plus de deux La figure suivante montre une division de lrsquoespace dans laquellela zone centrale a cinq voisins

Peut-on facilement approcher une fonction z = f(x y) + ϵ par un plan en trois dimensions A moins que tous lessommets soient deacutejagrave dans le mecircme plan crsquoest impossible La zone en question nrsquoest peut-ecirctre mecircme pas convexe Unereacutegression lineacuteaire par morceaux et continue en plusieurs dimensions nrsquoest pas un problegraveme facile Cela nrsquoempecircchepas pour autant drsquoinfluencer la deacutetermination de chaque morceaux avec une contrainte du type de celle eacutevoqueacutee plushaut mais pour eacutecrire la contrainte lorsque les zones sont construites agrave partir des feuilles drsquoun arbre de deacutecision il fautdeacuteterminer quelles sont les feuilles voisines Et ccedila crsquoest un problegraveme inteacuteressant

Reacutegression lineacuteaire et correacutelation

On reprend le calcul multidimensionnel mais on srsquointeacuteresse au cas ougrave la matrice X primeX est diagonale quicorrespond au cas ougrave les variables X1 XC ne sont pas correacuteleacutees Si X primeX = diag(λ1 λC) =diag(

sumnk=1 X

2k1

sumnk=1 X

2kC) la matrice A srsquoexprime plus simplement A = Dminus1X primeY On en deacuteduit que

ac =

sumnk=1 XkcYksumnk=1 X

2kc

=

sumnk=1 XkcYk

λc

Cette expression donne un indice sur la reacutesolution drsquoune reacutegression lineacuteaire pour laquelle les variables sont correacuteleacutees Ilsuffit drsquoappliquer drsquoabord une ACP131 (Analyse en Composantes Principales) et de calculer les coefficients ac associeacutesagrave des valeurs propres non nulles On eacutecrit alors X primeX = P primeDP ougrave la matrice P veacuterifie P primeP = I

Ideacutee de lrsquoalgorithme

On srsquointeacuteresser drsquoabord agrave la recherche drsquoun meilleur point de coupure Pour ce faire les eacuteleacutements (Xi yi) sont trieacutesle plus souvent selon lrsquoordre deacutefini par une dimension On note E lrsquoerreur de preacutediction sur cette eacutechantillon E =minβ

sumk(Xkβ minus yk)

2 On deacutefinit ensuite E(i j) = minβsumj

k=i(Xkβ minus yk)2 Drsquoapregraves cette notation E = E(1 n)

La construction de lrsquoarbre de deacutecision passe par la deacutetermination de klowast qui veacuterifie

E(1 klowast) + E(klowast + 1 n) = mink E(1 k) + E(k + 1 n)

= mink

(minβ1

sumkl=1(Xlβ1 minus yl)

2 +minβ2

sumnl=k+1(Xlβ2 minus yl)

2)

Autrement dit on cherche le point de coupure qui maximise la diffeacuterence entre la preacutediction obtenue avec deuxreacutegressions lineacuteaires plutocirct qursquoune On sait qursquoil existe une matrice P qui veacuterifie

PP prime = 1 et (XP )prime(XP ) = P primeX primeXP = D = Z primeZ

131 httpsfrwikipediaorgwikiAnalyse_en_composantes_principales

138 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Ougrave D = diag(d1 dC) est une matrice diagonale On a poseacute Z = XP donc da =lt Za Za gt On peut reacuteeacutecrire leproblegraveme de reacutegression comme ceci

βlowast = argminβ

sumi

∥yi minusXiβ∥ = argminβ∥Y minusXβ∥

Comme X = ZP prime

∥Y minusXβ∥ = ∥Y minusXβ∥ = ∥Y minus ZP primeβ∥ = ∥Y minus Zγ∥

Avec γ = P primeβ Crsquoest la mecircme reacutegression apregraves un changement de repegravere et on la reacutesoud de la mecircme maniegravere

γlowast = (Z primeZ)minus1Z primeY = Dminus1Z primeY

La notation Mi deacutesigne la ligne i et M[k] deacutesigne la colonne On en deacuteduit que le coefficient de la reacutegression γk esteacutegal agrave

γk =lt Z[k] Y gt

lt Z[k] Z[k] gt=

lt (XP prime)[k] Y gt

lt (XP prime)[k] (XP prime)[k] gt

On en deacuteduit que

∥Y minusXβ∥ =

∥∥∥∥∥Y minusCsum

k=1

Z[k]

lt Z[k] Y gt

lt Z[k] Z[k] gt

∥∥∥∥∥ =

∥∥∥∥∥Y minusCsum

k=1

(XP prime)[k]lt (XP prime)[k] Y gt

lt (XP prime)[k] (XP prime)[k] gt

∥∥∥∥∥Algorithme A1 Arbre de deacutecision optimiseacute pour les reacutegressions lineacuteairesOn dipose qursquoun nuage de points (Xi yi) avec Xi isin Rd et yi isin R Les points sont trieacutes selon une dimension On noteX la matrice composeacutee des lignes X1 Xn et le vecteur colonne y = (y1 yn) Il existe une matrice P telle queP primeP = I et X primeX = P primeDP avec D une matrice diagonale On note Xab la matrice constitueacutee des lignes a agrave b Oncalcule

MSE(X y a b) =

∥∥∥∥∥Y minusCsum

k=1

(XabPprime)[k]

lt (XabPprime)[k] Y gt

lt (XabP prime)[k] (XabP prime)[k] gt

∥∥∥∥∥2

Un noeud de lrsquoarbre est construit en choisissant le point de coupure qui minimise

MSE(X y 1 t) +MSE(X y t+ 1 n)

Par la suite on verra que le fait que la matrice soit diagonale est lrsquoeacuteleacutement principal mais la matrice P ne doit pasneacutecessairement veacuterifier P primeP = I

Un peu plus en deacutetail dans lrsquoalgorithme

Jrsquoai penseacute agrave plein de choses pour aller plus loin car lrsquoideacutee est de quantifier agrave peu pregraves combien on pert en preacutecisionen utilisant des vecteurs propres estimeacutes avec lrsquoensemble des donneacutees sur une partie seulement Je me suis demandeacutesi les vecteurs propres drsquoune matrice pouvait ecirctre construit agrave partir drsquoune fonction continue de la matrice symeacutetriquede deacutepart A peu pregraves vrai mais je ne voyais pas une faccedilon de majorer cette continuiteacute Ensuite je me suis dit que lesvecteurs propres deX primeX ne devaient pas ecirctre loin de ceux deX prime

σXσ ougrave σ est un sous-eacutechantillon aleacuteatoire de lrsquoensemblede deacutepart Donc comme il faut juste avoir une base de vecteurs orthogonaux je suis passeacute agrave liquestorthonormalisation deGram-Schmidt132 Il nrsquoa pas non plus ce deacutefaut de permuter les dimensions ce qui rend lrsquoobservation de la continuiteacute a

132 httpsfrwikipediaorgwikiAlgorithme_de_Gram-Schmidt

33 Reacutegression lineacuteaire par morceaux 139

Machine Learning Statistiques et Programmation Version 035930

little bit more complicated comme le max dans liquestalgorithme de Jacobi133 Lrsquoideacutee est se servir cette orthonormalisationpour construire la matrice P de lrsquoalgortihmeLa matrice P isin MCC est constitueacutee de C vecteurs ortonormaux (P[1] P[C]) Avec les notations que jrsquoai utiliseacuteesjusqursquoagrave preacutesent X[k] = (X1k Xnk) On note la matrice identiteacute IC = I

T[1] =X[1]

∥X[1]∥P[1] =

I[1]

∥X[1]∥T[2] =

X[2]minusltX[2]T[1]gtT[1]

∥X[2]minusltX[2]T[1]gtT[1]∥P[2] =

I[2]minusltX[2]T[1]gtT[1]

∥X[2]minusltX[2]T[1]gtT[1]∥

T[k] =X[k]minus

sumkminus1i=1 ltX[k]T[i]gtT[i]

∥X[2]minussumkminus1

i=1 ltX[k]T[i]gtT[i]∥P[k] =

I[k]minussumkminus1

i=1 ltX[k]T[i]gtT[i]

∥X[2]minussumkminus1

i=1 ltX[k]T[i]gtT[i]∥

La matrice T veacuterifie T primeT = I puisque les vecteurs sont construits de faccedilon agrave ecirctre orthonormeacutes Et on veacuterifie queXP = T et donc PXX primeP prime = I Crsquoest impleacutementeacute par la fonction gram_schmidtltltlt

import numpyfrom mlstatpymlmatrices import gram_schmidt

X = numpyarray([[1 05 0] [0 04 2]] dtype=float)TU P = gram_schmidt(XT change=True)U P = UT PTm = X PD = mT mprint(D)

gtgtgt

[[1000e+00 2776e-17][2776e-17 1000e+00]]

Cela deacutebouche sur une autre formulation du calcul drsquoune reacutegression lineacuteaire agrave partir drsquoune orthornormalisation deGram-Schmidt qui est impleacutementeacutee dans la fonction linear_regressionltltlt

import numpyfrom mlstatpymlmatrices import linear_regression

X = numpyarray([[1 05 0] [0 04 2]] dtype=float)Ty = numpyarray([1 13 39])beta = linear_regression(X y algo=gram)print(beta)

gtgtgt

[1008 1952]

Lrsquoavantage est que cette formulation srsquoexprime uniquement agrave partir de produits scalaires Voir le notebook Reacutegressionsans inversion (page 147)

133 httpsenwikipediaorgwikiJacobi_eigenvalue_algorithm

140 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

332 Synthegravese matheacutematique

Algorithme A2 Orthonormalisation de Gram-SchmidtSoit une matrice X isin Mnd avec n ⩾ d Il existe deux matrices telles que XP = T ou P primeX prime = T prime P isin Mdd etT isin Mnd La matrice T est triangulaire supeacuterieure et veacuterifie T primeT = Id (Id est la matrice identiteacute) Lrsquoalgorithme sedeacutecrit comme suit

foralli isin range(1 d)xi = X[i] minus

sumjlti lt T[j] X[i] gt T[j]

pi = P[i] minussum

jlti lt T[j] X[i] gt P[j]

T[i] =xi

∥xi∥P[i] =

pi

∥pi∥

Theacuteoregraveme T1 Reacutegression lineacuteaire apregraves Gram-SchmidtSoit une matrice X isin Mnd avec n ⩾ d Et un vecteur y isin Rn Drsquoapregraves liquestalgorithme de Gram-Schmidt (page 141)il existe deux matrices telles que XP = T ou P primeX prime = T prime P isin Mdd et T isin Mnd La matrice T est triangulairesupeacuterieure et veacuterifie T primeT = Id (Id est la matrice identiteacute) Alors β = T primeyP prime = P primeX primeyP prime = (X primeX)minus1X primey β est lasolution du problegraveme drsquooptimisation minβ ∥y minusXβ∥2

La deacutemonstration est geacuteomeacutetrique et reprend lrsquoideacutee du paragraphe preacuteceacutedent La solution de la reacutegression peut ecirctrevu comme la projection du vecteur y sur lrsquoespace vectoriel engendreacute par les vecteurs X[1] X[d] Par constructioncet espace est le mecircme que celui engendreacute par T[1] T[d] Dans cette base la projection de y a pour coordooneacuteeslt y T[1] gt lt y T[d] gt= T primey On en deacuteduit que la projection de y srsquoexprimer comme

y =

dsumk=1

lt y T[k] gt T[k]

Il ne reste plus qursquoagrave expremier cette projection dans la base initial X On sait que T[k] = XP[k] On en deacuteduit que

y =sumd

k=1 lt y T[k] gt XP[k]

=sumd

k=1 lt y T[k] gtsumd

l=1 X[l]Plk

=sumd

l=1 X[l]

sumdk=1 lt y T[k] gt Plk

=sumd

l=1 X[l](TprimeyPl)

=sumd

l=1 X[l]βl

Drsquoougrave β = T primeyP prime Lrsquoimpleacutementation suit ltltlt

import numpyX = numpyarray([[1 2 3 4]

[5 6 6 6][5 6 7 8]])T

Xt = XTTt = numpyempty(Xtshape)Pt = numpyidentity(Xshape[1])for i in range(0 Xtshape[0])

Tt[i ] = Xt[i ]for j in range(0 i)

d = numpydot(Tt[j ] Xt[i ])(suite sur la page suivante)

33 Reacutegression lineacuteaire par morceaux 141

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

Tt[i ] -= Tt[j ] dPt[i ] -= Pt[j ] d

d = numpydot(Tt[i ] Tt[i ])if d gt 0

d = 05Tt[i ] = dPt[i ] = d

print(X)print(X)print(T)print(TtT)print(X P)print(X PtT)print(T T)print(Tt TtT)

y = numpyarray([01 02 019 029])beta1 = numpylinalginv(Xt X) Xt ybeta2 = Tt y Ptprint(beta1)print(beta1)print(beta2)print(beta2)

gtgtgt

X[[1 5 5][2 6 6][3 6 7][4 6 8]]

T[[ 0183 0736 0651][ 0365 0502 -067 ][ 0548 0024 -0181][ 073 -0453 0308]]

X P[[ 0183 0736 0651][ 0365 0502 -067 ][ 0548 0024 -0181][ 073 -0453 0308]]

T T[[ 1000e+00 3886e-16 9021e-16][ 3886e-16 1000e+00 -1110e-14][ 9021e-16 -1110e-14 1000e+00]]

beta1[ 0077 0037 -0032]beta2[ 0077 0037 -0032]

La librairie impleacutemente ces deux algorithmes de maniegravere un peu plus efficace dans les fonctions gram_schmidt etlinear_regression

142 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

333 Streaming

Streaming Gram-Schmidt

Je ne sais pas vraiment comment le dire en franccedilais peut-ecirctre reacutegression lineacuteaire mouvante Mecircme Google ou Binggarde le mot streaming dans leur traduction Crsquoest neacuteanmoins lrsquoideacutee qursquoil faut reacuteussir agrave mettre en place drsquoune faccedilonou drsquoune autre car pour choisir le bon point de coupure pour un arbre de deacutecision On note X1k la matrice composeacuteedes lignes X1 Xk et le vecteur colonne y1k = (y1 yk) Lrsquoapprentissage de lrsquoarbre de deacutecision faut calculer desreacutegressions pour les problegravemes (X1k y1k) (X1k+1 y1k+1) Lrsquoideacutee que je propose nrsquoest pas parfaite mais ellefonctionne pour lrsquoideacutee de lrsquoalgorithme avec Gram-Schmidt (page 139)Tout drsquoabord il faut imaginer un algorithme de Gram-Schmidt version streaming Pour la matriceX prime

1k celui-ci produitdeux matrices T1k et P1k telles que X prime

1kP1k = T1k On note d la dimension des observations Comment fairepour ajouter une observation (Xk+1 yk+1) Lrsquoideacutee drsquoun algorithme au format streaming est que le coucirct de la mise agravejour pour lrsquoiteacuteration k+1 ne deacutepend pas de kOn suppose donc que (Tk Pk) sont les deux matrices retourneacutees par lrsquoalgorithme de algo_gram_schmidt On construitla matrice Vk+1 = [Tk Xk+1Pk] on ajoute une ligne agrave la matrice Tk On applique une iteacuteration de algorithmede algo_gram_schmidt pour obtenir (Tk+1 P ) On en deacuteduit que (Tk+1 Pk+1) = (Tk+1 PkP ) Lrsquoexpression de lareacutegression ne change pas mais il reste agrave lrsquoexpression de telle sorte que les expressions ne deacutependent pas de k CommeTk = X[1k]Pk la seule matrice qui nous inteacuteresse veacuteritablement est PkMaintenant on considegravere la matrice T[1k] qui veacuterifie T prime

kTk = Id et on ajoute une ligne Xk+1Pk pour former[[Tk][Xk+1Pk]] = [[X[1k]Pk][Xk+1Pk]] La fonction streaming_gram_schmidt_update impleacutemente la mise agravejour Le coucirct de la fonction est en O(d2)ltltlt

import numpyfrom mlstatpymlmatrices import streaming_gram_schmidt_update gram_schmidt

X = numpyarray([[1 05 10 5 -2][0 04 20 4 2][0 07 20 4 2]] dtype=float)T

Xt = XT

Tk Pk = gram_schmidt(X[3]T change=True)print(k=format(3))print(Pk)Tk = X[3] PkTprint(TkT Tk)

k = 3while k lt Xshape[0]

streaming_gram_schmidt_update(Xt[ k] Pk)k += 1print(k=format(k))print(Pk)Tk = X[k] PkTprint(TkT Tk)

gtgtgt

k=3[[ 0099 0 0 ][-0953 0482 0 ]

(suite sur la page suivante)

33 Reacutegression lineacuteaire par morceaux 143

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

[-0287 -3338 3481]][[ 1000e+00 -1749e-15 -2234e-15][-1749e-15 1000e+00 1387e-14][-2234e-15 1387e-14 1000e+00]]

k=4[[ 0089 0 0 ][-0308 0177 0 ][-003 -3334 3348]]

[[ 1000e+00 -4441e-16 -1793e-15][-4441e-16 1000e+00 2377e-15][-1793e-15 2377e-15 1000e+00]]

k=5[[ 0088 0 0 ][-0212 0128 0 ][-0016 -3335 3342]]

[[ 1000e+00 -9714e-17 -6210e-15][-9714e-17 1000e+00 1978e-16][-6210e-15 1978e-16 1000e+00]]

Streaming Linear Regression

Je reprends lrsquoideacutee introduite dans lrsquoarticle Efficient online linear regression134 On cherche agrave minimiser L(β) =

∥y minusXβ∥2 et le vecteur solution annuler le gradient nabla(β) = minus2X prime(y minus Xβ) = 0 On note le vecteur βk quiveacuterifie nabla(βk) = minus2X prime

1k(y1k minusX1kβk) = 0 Qursquoen est-il de βk+1 On note βk+1 = βk + dβ

nabla(βk+1) = minus2X prime1k+1(y1k+1 minusX1k+1(βk + dβ))

= minus2[X prime1kX

primek+1]([y1kyk+1]minus [X1kXk+1]

prime(βk + dβ))= minus2X prime

1k(y1k minusX1k(βk + dβ))minus 2X primek+1(yk+1 minusXk+1(βk + dβ))

= 2X prime1kX1kdβ minus 2X prime

k+1(yk+1 minusXk+1(βk + dβ))= 2(X prime

1kX1k +X primek+1Xk+1)dβ minus 2X prime

k+1(yk+1 minusXk+1βk)

On en deacuteduit la valeur dβ qui annule le gradient On peut deacutecliner cette formule en version streaming Crsquoestce qursquoimpleacutemente la fonction streaming_linear_regression_update Le coucirct de lrsquoalgorithme est en O(d3)Lrsquoinconveacutenient de cet algorithme est qursquoil requiert des matrices inversibles Crsquoest souvent le cas et la probabiliteacute quecela ne le soit pas deacutecroicirct avec k Crsquoest un petit inconveacutenient compte tenu de la simpliciteacute de lrsquoimpleacutementation Onveacuterifie que tout fonction bien sur un exempleltltlt

import numpy

def linear_regression(X y)inv = numpylinalginv(XT X)return inv (XT y)

def streaming_linear_regression_update(Xk yk XkXk bk)Xk = Xkreshape((1 XkXkshape[0]))xxk = XkT XkXkXk += xxk

(suite sur la page suivante)

134 httpsstatsstackexchangecomquestions6920efficient-online-linear-regression

144 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

err = XkT (yk - Xk bk)bk[] += (numpylinalginv(XkXk) err)flatten()

def streaming_linear_regression(mat y start=None)if start is None

start = matshape[1]

Xk = mat[start]XkXk = XkT Xkbk = numpylinalginv(XkXk) (XkT y[start])yield bk

k = startwhile k lt matshape[0]

streaming_linear_regression_update(mat[k] y[kk + 1] XkXk bk)yield bkk += 1

X = numpyarray([[1 05 10 5 -2][0 04 20 4 2][0 07 20 4 3]] dtype=float)T

y = numpyarray([1 03 10 51 -3])

for i bk in enumerate(streaming_linear_regression(X y))bk0 = linear_regression(X[i + 3] y[i + 3])print(iteration i bk bk0)

gtgtgt

iteration 0 [ 1 0667 -0667] [ 1 0667 -0667]iteration 1 [ 103 0682 -0697] [ 103 0682 -0697]iteration 2 [ 1036 0857 -0875] [ 1036 0857 -0875]

Streaming Linear Regression version Gram-Schmidt

Lrsquoalgorithme reprend le theacuteoregraveme Reacutegression lineacuteaire apregraves Gram-Schmidt (page 141) et lrsquoalgorithme Streaming Gram-Schmidt (page 143) Tout tient dans cette formule βk = P prime

kXprime1ky1kP

primek qursquoon eacutecrit diffeacuteremment en consideacuterent

lrsquoassociativiteacute de la multiplication des matrices βk = P primek(X

prime1ky1k)P

primek La matrice centrale a pour dimension

d Lrsquoexemple suivant impleacutemente cette ideacutee Il srsquoappuie sur les fonctions streaming_gram_schmidt_update etgram_schmidtltltlt

import numpyfrom mlstatpymlmatrices import gram_schmidt streaming_gram_schmidt_update

def linear_regression(X y)inv = numpylinalginv(XT X)return inv (XT y)

(suite sur la page suivante)

33 Reacutegression lineacuteaire par morceaux 145

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

def streaming_linear_regression_gram_schmidt_update(Xk yk Xkyk Pk bk)Xk = XkTstreaming_gram_schmidt_update(Xk Pk)Xkyk += (Xk yk)reshape(Xkykshape)bk[] = Pk Xkyk Pk

def streaming_linear_regression_gram_schmidt(mat y start=None)if start is None

start = matshape[1]

Xk = mat[start]xyk = XkT y[start]_ Pk = gram_schmidt(XkT change=True)bk = Pk xyk Pkyield bk

k = startwhile k lt matshape[0]

streaming_linear_regression_gram_schmidt_update(mat[k] y[k] xyk Pk bk)

yield bkk += 1

X = numpyarray([[1 05 10 5 -2][0 04 20 4 2][0 07 20 4 3]] dtype=float)T

y = numpyarray([1 03 10 51 -3])

for i bk in enumerate(streaming_linear_regression_gram_schmidt(X y))bk0 = linear_regression(X[i + 3] y[i + 3])print(iteration i bk bk0)

gtgtgt

iteration 0 [ 1 0667 -0667] [ 1 0667 -0667]iteration 1 [ 103 0682 -0697] [ 103 0682 -0697]iteration 2 [ 1036 0857 -0875] [ 1036 0857 -0875]

Ces deux fonctions sont impleacutementeacutees dans le module par streaming_linear_regression_gram_schmidt_updateet streaming_linear_regression_gram_schmidt Le coucirct de lrsquoalgorithme est en O(d3) mais nrsquoinclut pasdrsquoinversion de matrices

146 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

334 Digressions

Lrsquoarticle An Efficient Two Step Algorithm for High DimensionalChange Point Regression Models Without GridSearch135 propose un cadre theacuteorique pour deacuteterminer une frontiegravere dans un nuage de donneacutees qui deacutelimite unchangement de modegravele lineacuteaire Le suivant eacutetudie des changements de paramegravetres Change Surfaces for ExpressiveMultidimensionalChangepoints and Counterfactual Prediction136 drsquoune faccedilon plus geacuteneacuterique

335 Notebooks

Reacutegression sans inversion

Ce notebook mesure le temps de calcul dans deux algorithmes pour reacutesoudre une reacutegression lineacuteaire le premierinverse un matrice le second le fait sans inverser une matrice le troisiegraveme reprend lrsquoideacutee du second mais utilise unedeacutecomposition QR137 puis inverse la matrice R

matplotlib inline

import numpyrandom as rndX = rndrandn(1000 7)eps = rndrandn(1000 1) 3y = Xsum(axis=1)reshape((Xshape[0] 1)) + epsy = yravel()Xshape yshape epsshape

((1000 7) (1000) (1000 1))

from mlstatpymlmatrices import linear_regression gram_schmidtbeta1 = linear_regression(X y algo=None)beta2 = linear_regression(X y algo=gram)beta1 beta2

(array([097915374 100078055 100537618 101021414 10003261 09944518 098742625])

array([097915374 100078055 100537618 101021414 10003261 09944518 098742625]))

timeit linear_regression(X y algo=None)

384 ţs plusmn 207 ţs per loop (mean plusmn std dev of 7 runs 10000 loops each)

timeit linear_regression(X y algo=gram)

310 ţs plusmn 136 ţs per loop (mean plusmn std dev of 7 runs 1000 loops each)

timeit linear_regression(X y algo=qr)

135 httpjmlrorgpapersvolume2018-46018-460pdf136 httpjmlrorgpapersvolume2017-35217-352pdf137 httpsfrwikipediaorgwikiDC3A9composition_QR

33 Reacutegression lineacuteaire par morceaux 147

Machine Learning Statistiques et Programmation Version 035930

139 ţs plusmn 829 ţs per loop (mean plusmn std dev of 7 runs 10000 loops each)

Xt = XTtimeit gram_schmidt(Xt)

210 ţs plusmn 591 ţs per loop (mean plusmn std dev of 7 runs 1000 loops each)

Un exemple avec scikit-learn138

from sklearnlinear_model import LinearRegressionclr = LinearRegression()timeit clrfit(X y)

443 ţs plusmn 483 ţs per loop (mean plusmn std dev of 7 runs 1000 loops each)

Qui utilise la fonction lstsq139

from numpylinalg import lstsqtimeit lstsq(X y rcond=None)

755 ţs plusmn 257 ţs per loop (mean plusmn std dev of 7 runs 10000 loops each)

Il serait sans doute possible drsquooptimiser les calculs en reacuteduisant le nombre de copie et de transposeacutees La versionutilisant une deacutecomposition QR140 est assez rapide Le code est lagrave matricespy141 Pour deacutepasser numpy142 il fautpasser au C++ scikit-learn ajoute des eacutetapes intermeacutediaires pour veacuterifier les donneacutees ce qui explique la longueur Onreacutesume le tout par un graphique

from cpyquickhelpernumbers import measure_time

stmts = [dict(name=lr_matrix fct=linear_regression(X y algo=None))dict(name=lr_gram fct=linear_regression(X y algo=gram))dict(name=lr_qr fct=linear_regression(X y algo=qr))dict(name=gram fct=gram_schmidt(Xt))dict(name=sklearn fct=clrfit(X y))dict(name=lstsq fct=lstsq(X y))]

memo = []for size dim in [(100 10) (1000 10) (10000 10)

(100 20) (1000 20) (10000 20)(100 50) (1000 50)]

print(size dim)X = rndrandn(size dim)eps = rndrandn(size 1) 3y = Xsum(axis=1)reshape((Xshape[0] 1)) + epsy = yravel()context = dict(linear_regression=linear_regression Xt=XT

X=X y=y gram_schmidt=gram_schmidt clr=clr(suite sur la page suivante)

138 httpsscikit-learnorgstablemodulesgeneratedsklearnlinear_modelLinearRegressionhtml139 httpsdocsscipyorgdocnumpyreferencegeneratednumpylinalglstsqhtmlhighlight=lstsq140 httpsfrwikipediaorgwikiDC3A9composition_QR141 httpsgithubcomsdpythonmlstatpyblobmastersrcmlstatpymlmatricespy142 httpswwwnumpyorg

148 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

lstsq=lambda X y lstsq(X y rcond=None))

for stmt in stmtsres = measure_time(stmt[fct] number=20 repeat=20 div_by_number=True

rarrcontext=context)resupdate(stmt)res[size] = sizeres[dim] = dimmemoappend(res)

import pandasdf = pandasDataFrame(memo)dfhead()

100 101000 1010000 10100 201000 2010000 20100 501000 50

piv = pandaspivot_table(df index=[size dim] columns=name values=average)piv

import matplotlibpyplot as pltfig ax = pltsubplots(1 2 figsize=(144))piv[6]plot(kind=bar ax=ax[0])piv[6]plot(kind=bar ax=ax[1])ax[0]set_title(Reacutegression Lineacuteaire size lt 10000)ax[1]set_title(Reacutegression Lineacuteaire size gt= 10000)

33 Reacutegression lineacuteaire par morceaux 149

Machine Learning Statistiques et Programmation Version 035930

Streaming versions

Lrsquoideacutee est diffeacuterente ici puisqursquoil srsquoagit de calculer toutes les reacutegressions lineacuteaires intermeacutediaires Les algorithmes sontdeacutecrits par lrsquoexposeacute Reacutegression lineacuteaire par morceaux143

from mlstatpymlmatrices import streaming_linear_regression streaming_linear_rarrregression_gram_schmidt

def all_linear_regression(X y)for i in range(Xshape[1] Xshape[0])

yield linear_regression(X[i] y[i])

stmts = [dict(name=lr_matrix fct=list(all_linear_regression(X y)))dict(name=lr_st_mat fct=list(streaming_linear_regression(X y)))dict(name=lr_st_gram fct=list(streaming_linear_regression_gram_schmidt(X

rarry)))]

memo = []for dim in (10 )

for size in range(100 3500 500)print(size dim)X = rndrandn(size dim)eps = rndrandn(size 1) 3y = Xsum(axis=1)reshape((Xshape[0] 1)) + epsy = yravel()context = dict(X=X y=y

all_linear_regression=all_linear_regressionstreaming_linear_regression=streaming_linear_regressionstreaming_linear_regression_gram_schmidt=streaming_linear_

rarrregression_gram_schmidt)

for stmt in stmtsif gram in stmt[name]

nn = 1if size gt= 1000

continueelse

nn = 5res = measure_time(stmt[fct] number=nn repeat=nn div_by_number=True

rarrcontext=context)resupdate(stmt)res[size] = sizeres[dim] = dimmemoappend(res)

import pandasdf = pandasDataFrame(memo)dfhead()

100 10600 10

(suite sur la page suivante)

143 httpwwwxavierduprefrappmlstatpyhelpsphinxc_mlpiecewisehtmlstreaming-linear-regression

150 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

1100 101600 102100 102600 103100 10

piv = pandaspivot_table(df index=[size] columns=name values=average)piv

fig ax = pltsubplots(1 2 figsize=(144))piv[[lr_matrix lr_st_mat]]plot(ax=ax[0])pivplot(ax=ax[1])ax[0]set_title(Reacutegression Lineacuteaire streaming (all)n10 features)ax[1]set_title(Reacutegression Lineacuteaire no Gram-Schmidtn10 features)

La version streaming devient plus inteacuteressante agrave partir de 1000 observations le coucirct en lineacuteaire en N contrairementagrave la version classique qui est en N2 La version Gram-Schmidt devrait ecirctre reacuteeacutecrite en C++ pour proposer des tempscomparables

336 Impleacutementations

bull PiecewiseTreeRegressor144

337 Bilbiographie

Voir aussi The NIPALS algorithm150144 httpwwwxavierduprefrappmlinsightshelpsphinxmlinsightsmlmodelpiecewise_tree_regressionhtmlmlinsightsmlmodelpiecewise_

tree_regressionPiecewiseTreeRegressor150 httpscranr-projectorgwebpackagesnipalsvignettesnipals_algorithmhtml

33 Reacutegression lineacuteaire par morceaux 151

Machine Learning Statistiques et Programmation Version 035930

34 Normalisation des coefficients

La reacutegression lineacuteaire est le modegravele le plus simple pour construire une fonction de preacutediction lorsque la variable agravepreacutedire est continue

f(X) =

dsumk=1

akxk

Les coefficients srsquoobtiennent en minimisant lrsquoerreur E(X a1 ad) =sum

i(sumd

k=1 akxik minus yi)2 = ∥XAminus y∥2 La

solution est explicite (a1 ad) = (X primeX)minus1X primey Lorsque le nombre de dimensions augmentent et deacutepasse lenombre drsquoobservations il existe plus drsquoune solution et la matrice (X primeX) nrsquoest plus = inversible Une des astucesconsiste agrave reacuteduire le nombre de dimension avant avec une ACP151 ou une SVD152 (Singular Value Decomposition)qui reviennent agrave trouver un espace de projection de dimension moindre et sans perte drsquoinformation La reacutegressionest effectueacutee dans cet espace puis transposeacutee dans lrsquoespace initial Une autre astuce consiste agrave imposer une contraintesuppleacutementaire sur le poids des coefficients de la reacutegression le plus souvent en les peacutenalisant

bull Reacuteduction de dimension (page 152)bull Peacutenalisation L1 et L2 (page 152)bull Bibliographie (page 153)

341 Reacuteduction de dimension

Lrsquoideacutee est abordeacutee dans le paragraphe Synthegravese matheacutematique (page 141) Une fois le problegraveme transporteacute dans une basede variables indeacutependantes chaque dimension peut ecirctre traiteacutee seacutepareacutement La reacutegression est restreinte aux vecteurspropres associeacutes agrave une valeur propre non nulle On en deacuteduit ensuite les coefficients dans la base initiale

342 Peacutenalisation L1 et L2

La peacutenalisation revient agrave minimiser une erreur de la forme

E(X a1 ad) =sumi

(dsum

k=1

akxik minus yi

)2

+ λ

dsumk=1

|ak|p = ∥XAminus y∥2 + λ

dsumk=1

|ak|p

Le paramegravetre p permet drsquoajuster le poids donneacute aux petits coefficients et celui donneacutee aux grands Lorsque p=2 crsquoestune peacutenalisation L2 lorsque p=1 crsquoest une peacutenalisation L1 Ces deux ont une incidence diffeacuterente sur la nulliteacute descoefficients La peacutenalisation L1 a tendance agrave annuler les coefficients la peacutenalisation L2 preacutefegravere des petits coefficientssur toutes les dimensions Le notebook ` ltgt`_ illustre ce fait sur un jeu de donneacutees artificiel et montre que le nombrede coefficients non nuls reste plus ou moins constant malgreacute un nombre de variables d en hausse Pour srsquoen convaincreimaginons un problegraveme agrave d variables pour lequel on connaicirct la solution (alowast1 a

lowastd) qui minimise le problegraveme

E(X alowast1 alowastd) = min

sumi

(dsum

k=1

alowastkxik minus yi

)2

+ λ

dsumk=1

|alowastk|p

Lorsqursquoon ajoute une variable cette erreur devient

E(X alowast1 alowastd ad+1) =

sumi

(dsum

k=1

akxik + ad+1xid+1 minus yi

)2

+ λ

dsumk=1

|ak|p + λ|ad+1|p

151 httpsfrwikipediaorgwikiAnalyse_en_composantes_principales152 httpsfrwikipediaorgwikiDC3A9composition_en_valeurs_singuliC3A8res

152 Chapter 3 Reacutegression lineacuteaire

Machine Learning Statistiques et Programmation Version 035930

Et sa deacuteriveacutee

dE(X alowast1 alowastd ad+1)

dad+1= 2

sumi

xid+1(

dsumk=1

alowastkxik + ad+1xid+1 minus yi) + λp|ad+1|pminus1sign(ad+1)

On srsquointeacuteresse au cas particulier ougrave les variables ne sont pas correacuteleacutees et centreacutees Cela implique quesum

i xid+1xik = 0si k = d+ 1 Et lorsque pgt1 le gradient est nul si on peut reacutesoudre lrsquoeacutequation

dE(X alowast1 alowastd ad+1)

dad+1= 2

sumi

ad+1x2id+1 minus yixid+1 + λsign(ad+1) = 0

La solution est simple

alowastd+1 =

sumi yixid+1 minus λsign(ad+1)

2sum

i x2id+1

Et en fait pour un λ assez grand on peut facilement montrer que la solution est impossible puisqursquoelle impliqueque le coefficient alowastd+1 soit de signe opposeacute agrave λsign(ad+1) Cela signifie que nrsquoimporte quelle valeur pour ad+1

augmente lrsquoerreur Sa valeur est donc nulle Ceci nrsquoest pas une deacutemonstration mais donne une intuition de pourquoiune peacutenalisation L1 annule la plupart des coefficients et est utiliseacutee comme moyen de seacutelectionner les variables Crsquoestune deacutemonstration dans le cas ougrave les variables sont indeacutependantes puisque les coefficients de la reacutegression peuvent ecirctrecalculeacutes seacutepareacutement dans ce cas (voir Reacutegression lineacuteaire et correacutelation (page 138)) La peacutenalisation L2 ne megravene pasagrave une eacutequation impossible Plus on ajoute de variables plus lrsquoerreur diminue Pour aller plus loin voir [Char] et voirson application agrave la seacuteelection drsquoarbres dans une forecirct aleacuteatoire Reacuteduction drsquoune forecirct aleacuteatoire153

343 Bibliographie

153 httpwwwxavierduprefrappensae_teaching_cshelpsphinxnotebookstd2a_tree_selection_correctionhtml

34 Normalisation des coefficients 153

Machine Learning Statistiques et Programmation Version 035930

154 Chapter 3 Reacutegression lineacuteaire

CHAPTER 4

Reacutegression logistique

La reacutegression logistique155 est le modegravele preacutedictif le plus simple et celui qursquoon preacutefegravere quand il marche car il estfacilement interpreacutetable agrave lrsquoinverse des modegraveles non lineacuteaires qui gardent leurs secrets si on srsquoen tient seulement agraveleurs coefficients Concregravetement on dispose drsquoun nuage de point (Xi yi) ougrave Xi isin Rd est un vecteur de dimensiond et yi isin 0 1 un entier binaire Le problegraveme de la reacutegression lineacuteaire consiste agrave construire une fonction preacutedictiveyi = f(Xi) =lt Xi β gt= Xiβ ougrave β est un vecteur de dimension d (voir classification156) Le signe de la fonctionf(Xi) indique la classe de lrsquoobservation Xi et la valeur 1

1+ef(X) la probabiliteacute drsquoecirctre dans la classe 1

41 Reacutegression logistique diagramme de Voronoiuml k-Means

Ce qui suit explore les liens entre une reacutegression logistique les diagrammes de Voronoiuml pour construire un classifieurqui allie la reacutegression logistique et les clustering type k-means (page 1) Le point de deacutepart est une conjecture lesreacutegions creacuteeacutees par une reacutegression logistique sont convexes

bull Diagramme de Voronoiuml (page 156)bull Reacutegression logistique (page 156)bull Diagramme de Voronoiuml et partition convexe (page 158)bull Reacutegression logistique et partition convexe (page 159)bull Voronoiuml et reacutegression logistique (page 160)bull Notebooks (page 161)

155 httpsfrwikipediaorgwikiRC3A9gression_logistique156 httpwwwxavierduprefrapppapierstathelpsphinxlecturesregclasshtmlclassification

155

Machine Learning Statistiques et Programmation Version 035930

411 Diagramme de Voronoiuml

Un diagramme de Voronoiuml157 est le diagramme issu des intersections des meacutediatrices entre n points

On deacutefinit un ensemble de points (X1 Xn) La zone drsquoinfluence de chaque point est deacutefini par V (Xi) =x|d(xXi) ⩽ d(xXj)forallj Si d est la distance euclidienne la frontiegravere entre deux points Xi Xj est un segmentsur la droite drsquoeacutequation d(xXi) = d(xXj)

∥xminusXi∥2 minus ∥xminusXj∥2 = 0

=rArr ∥x∥2 minus 2 ⟨xXi⟩+ ∥Xi∥2 minus (∥x∥2 minus 2 ⟨xXj⟩+ ∥Xj∥2) = 0

=rArr 2 ⟨xXj minusXi⟩+ ∥Xi∥2 minus ∥Xj∥2 = 0=rArr 2 ⟨xXj minusXi⟩+ 1

2 ⟨Xi +Xj Xi minusXj⟩ = 0

=rArrlangxminus Xi+Xj

2 Xi minusXj

rang= 0

Ce systegraveme constitue n(nminus1)2 droites ou hyperplans si lrsquoespace vectoriel est en dimension plus que deux Le diagramme

de Voronoiuml est formeacute par des segments de chacune de ces droites On peut retourner le problegraveme On suppose qursquoilexiste n(nminus1)

2 hyperplans existe-t-il n points de telle sorte que les hyperplans initiaux sont les frontiegraveres du diagrammede Voronoiuml formeacute par ces n points Les paragraphes qui suivent expliquent explorent cette hypothegravese

412 Reacutegression logistique

scikit-learn158 a rendu populaire le jeu de donneacutees Iris159 qui consiste agrave classer des fleurs en trois classes en fonctiondes dimensions de leurs peacutetales

ltltlt157 httpsfrwikipediaorgwikiDiagramme_de_VoronoC3AF158 httpsscikit-learnorg159 httpscikit-learnorgstableauto_exampleslinear_modelplot_iris_logistichtmlsphx-glr-auto-examples-linear-model-plot-iris-logistic-py

156 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

from sklearndatasets import load_irisdata = load_iris()X y = datadata[ 2] datatarget

from sklearnlinear_model import LogisticRegressionclr = LogisticRegression()clrfit(X y)

print(coef_ clrcoef_)print(intercept_ clrintercept_)

gtgtgt

coef_ [[-2709 2324][ 0613 -1571][ 2096 -0753]]

intercept_ [ 7913 1845 -9758]

La fonction de preacutediction est assez simple f(x) = Ax + B La classe drsquoappartenance du point x est deacutetermineacute parmaxi f(x)i La frontiegravere entre deux classes i j est deacutefinie par les deux conditions maxk f(x)k = f(x)i = f(x)j On retrouve bien n(nminus1)

2 hyperplans On deacutefinit la matrice A comme une matrice ligne (L1 Ln) ougrave n est le nombrede classes Lrsquoeacutequation de lrsquohyperplan entre deux classes devient

LiX +Bi = LjX +Bj

lArrrArr ⟨Li minus Lj X⟩+Bi minusBj = 0lArrrArr ⟨Li minus Lj X⟩+Bi minusBj = 0

lArrrArrlangLi minus Lj X minus Li+Lj

2

rang+langLi minus Lj

Li+Lj

2

rang+Bi minusBj = 0

lArrrArrlangLi minus Lj X minus Li+Lj

2

rang+ 1

2 ∥Li∥2 minus 12 ∥Lj∥2 +Bi minusBj = 0

lArrrArrlangLi minus Lj X minus Li+Lj

2

rang+ 1

2 ∥Li∥2 +Bi minus ( 12 ∥Lj∥2 +Bj) = 0

Il y a peu de chance que cela fonctionne comme cela Avant de continuer assurons-nous que les reacutegions associeacutees auxclasses sont convexes Crsquoest une condition neacutecessaire mais pas suffisante pour avoir un diagramme de VoronoiumlSoit X1 et X2 appartenant agrave la classe i On sait que forallk LiX1 +Bi ⩾ LkX1 +Bk et forallk LiX2 +Bi ⩾ LkX2 +BkOn considegravere un point X sur le segment [X1 X2] donc il existe α β ⩾ 0 tel que X = αX1 + βX2 et α+ β = 1 Onveacuterifie que

LiX +Bi = Li(αX1 + βX2) +Bi = α(LiX1 +Bi) + β(LiX2 +Bi)⩾ α(LkX1 +Bk) + β(LkX2 +Bk) = Lk(αX1 + βX2) +Bkforallk

Donc le point X appartient bien agrave classe i et celle-ci est convexe La reacutegression logistique forme une partition convexede lrsquoespace des features

Theacuteoregraveme T1 convexiteacute des classes formeacutees par une reacutegression logistiqueOn deacutefinit lrsquoapplication Rd rarr N qui associe la plus grande coordonneacutee f(X) = argmaxk(AX + B)k A est unematrice Mdc B est un vecteur de Rd c est le nombre de parties Lrsquoapplication f deacutefinit une partition convexe delrsquoespace vectoriel Rd

Revenons au cas de Voronoiuml La classe preacutedite deacutepend de maxk(Ax+B)k On veut trouver n points (P1 Pn) telsque chaque couple (Pi Pj) soit eacutequidistant de la frontiegravere qui seacutepare leurs classes Il faut eacutegalement les projections des

41 Reacutegression logistique diagramme de Voronoiuml k-Means 157

Machine Learning Statistiques et Programmation Version 035930

deux points sur la frontiegravere se confondent et donc que les vecteurs Pi minus Pj et Li minus Lj sont colineacuteaires⟨Li minus Lj Pi⟩+Bi minusBj = minus (⟨Li minus Lj Pj⟩+Bi minusBj)

Pi minus Pj minuslangPi minus Pj

LiminusLj

∥LiminusLj∥

rangLiminusLj

∥LiminusLj∥ = 0

lArrrArr

⟨Li minus Lj Pi + Pj⟩+ 2(Bi minusBj) = 0

Pi minus Pj minuslangPi minus Pj

LiminusLj

∥LiminusLj∥

rangLiminusLj

∥LiminusLj∥ = 0

La seconde eacutequation en cache en fait plusieurs puisqursquoelle est valable sur plusieurs dimensions mais elles sontredondantes Il suffit de choisir un vecteur uij non perpendiculaire agraveLiminusLj de sorte que qursquoil nrsquoest pas perpendiculaireau vecteur Li minus Lj et de consideacuterer la projection de cette eacutequation sur ce vecteur Crsquoest pourquoi on reacuteduit le systegravemeau suivant qui est eacutequivalent au preacuteceacutedent si le vecteur uij est bien choisi

=rArr

⟨Li minus Lj Pi + Pj⟩+ 2(Bi minusBj) = 0

⟨Pi minus Pj uij⟩ minuslangPi minus Pj

LiminusLj

∥LiminusLj∥

ranglangLiminusLj

∥LiminusLj∥ uij

rang= 0

413 Diagramme de Voronoiuml et partition convexe

Faisons un peu de geacuteomeacutetrie avant de reacutesoudre ce problegraveme car celui-ci a dans la plupart des cas plus drsquoeacutequations quedrsquoinconnues Chaque frontiegravere entre deux classes est la meacutediatrice drsquoun segment [Pi Pj ] Le dessin suivant trace undiagramme de Voronoiuml agrave trois points Lrsquointersection est le centre des meacutediatrices du triangle formeacute par les points deVoronoiuml Pour les trouver on trace un cercle nrsquoimporte lequel puis une droite perpendiculaire agrave lrsquoune des meacutediatriceOn obtient deux points Le troisiegraveme est obtenu en traccedilant une seconde perpendiculaire et par construsction la troisiegravemedroite est perpendiculaire agrave la troisiegraveme meacutediatrice Et on nomme les angles

158 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Les triangles formeacutes par les cocircteacutes jaunes sont isocegraveles On en deacuteduit que a+ b+ c = 2π = 2(x+ y+ z) On en deacuteduitaussi que

x+ y = ay + z = cx+ z = b

On en conclut que a+ b+ c = 2π = 2(x+ y+ z) = 2(x+ c) et x = πminus c Il existe une infiniteacute de triplets de 3 pointsqui aboutissent agrave ce diagramme de Voronoiuml Il suffit de changer la taille du cercle On montre aussi qursquoen dimension2 et 3 classes il existe toujours une solution au problegraveme poseacute Maintenant si on considegravere la configuration suivanteavec des points disposeacutes de telle sorte que le diagramme de Voronoiuml est un maillage hexagonal a = b = c = 2π

3 etx = y = z = π

3 Il nrsquoexiste qursquoun ensemble de points qui peut produire ce maillage comme diagramme de VoronoiumlMais si on ajoute une petite zone (dans le cercle vert ci-dessous) il est impossible que ce diagramme soit un diagrammede Voronoiuml bien que cela soit une partition convexe

On revient agrave la deacutetermination du diagramme de Voronoiuml associeacute agrave une reacutegression logistique On a montreacute qursquoil nrsquoexistepas tout le temps pour nrsquoimporte quelle partition convexe Mais cela ne veut pas dire que tel est le cas pour unereacutegression logistique

414 Reacutegression logistique et partition convexe

On a montreacute que la reacutegression logistique reacutealise une partition convexe de lrsquoespace vectoriel des variables On note L(n)lrsquoensemble des partitions agrave n classes Le diagramme de Voronoiuml correspondent eacutegalement agrave un sous-ensemble V(n)L(n) = V (n) that is the questionOn peut se poser la question de savoir si L(n) un sous-ensemble ou tout lrsquoensemble auquel cas la reacuteponse agrave la questionpreacuteceacutedente est triviale Consideacuterons drsquoabord deux parties voisines drsquoune partition convexe formeacutee par une fonctiontelle que celle deacutecrite par le theacuteoregraveme sur la convexiteacute des classes formeacutees par une reacutegression logistique (page 157)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 159

Machine Learning Statistiques et Programmation Version 035930

Lrsquoimage qui preacutecegravede montre une partition qui nrsquoest pas convexe La partie A lrsquoest mais pas la partie B En fait il estfacile de montrer que la seule frontiegravere admissible entre deux parties convexe est un hyperplan Si la partition contientn partie il y a au pire n(nminus1)

2 frontiegraveres ce qui correspond eacutegalement au nombre drsquohyperplans deacutefinis par la fonctionde preacutediction associeacutee agrave la reacutegression logistique

Lrsquoimage qui preacutecegravede preacutesente une classification en trois zones (droites noires) On a choisi une droite bleue au hasardEn prenant son symeacutetrique par rapport agrave une des droites noires (D) on a deux droites D1 D2 Lrsquoensemble des pointsx|d(xD1) = d(xD2) correspond agrave la droite noire Il doit ecirctre de mecircme pour les trois droites bleues autrementdit lrsquointersection des droites est le centre du cercle inscrit dans le triangle bleu ce qui nrsquoest visiblement pas le cas surlrsquoimage Il paraicirct vraisemblable de dire que les reacutegressions logisitiques ne permettent pas de former toutes les partitionsconvexes On pourrait le montrer mais cela ne permettrait pas de reacutepondre agrave la question initiale L(n) = V (n)

415 Voronoiuml et reacutegression logistique

On sait que L(2) = V (2) quelque soit la dimension que L(3) = V (3) en dimension 2 La matrice L deacutefinit unereacutegression logistique Le diagramme de Voronoiuml qui lui correspond est solution du systegraveme drsquoeacutequations qui suit

=rArr

lang

LiminusLj

∥LiminusLj∥ Pi + Pj

rang+ 2

BiminusBj

∥LiminusLj∥ = 0

⟨Pi minus Pj uij⟩ minuslangPi minus Pj

LiminusLj

∥LiminusLj∥

ranglangLiminusLj

∥LiminusLj∥ uij

rang= 0

(41)

Avec uij choisi de telle sorte que les vecteur Li minus Lj et uij ne soit pas colieacutenaires Ce systegraveme inclut des eacutequationsentre classes ou reacutegions qui ne sont pas voisines Il y a potentiellement n(nminus1)

2 eacutequations pour n inconnues Il nrsquoestpas eacutevident de dire si ce systegraveme agrave une solution Voyons plutocirct lrsquoensemble des droites formeacutees par un diagramme deVoronoiuml Un point appartient agrave un segment srsquoil est agrave eacutegale distance de deux points

foralli lt j d(XPi) = d(XPj)

lArrrArr foralli lt j ∥X minus Pi∥2 = ∥X minus Pj∥2lArrrArr foralli lt j ⟨(X minus Pi) + (X minus Pj) (X minus Pi)minus (X minus Pj)⟩lArrrArr foralli lt j

langX minus Pi+Pj

2 Pj minus Pi

rang= 0

lArrrArr foralli lt j ⟨XPj minus Pi⟩+ ∥Pi∥2

2 minus ∥Pj∥2

2 = 0

Pour une partition convexe formeacutee agrave partir de droite comme crsquoest le cas drsquoune reacutegression lineacuteaire un point appartientagrave un segment srsquoil est agrave eacutegale distance de deux droites Lrsquoensemble de ces points correspond agrave deux droites les deuxbissectrices

160 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Seule lrsquoune de ces droites est la bonne Lrsquoeacutequation drsquoune droite est donneacutee par ⟨XLi⟩+Bi = 0langX

Li

∥Li∥

rang+

Bi

∥Li∥=

langX

Lj

∥Lj∥

rang+

Bj

∥Lj∥oulangX

Li

∥Li∥

rang+

Bi

∥Li∥= minus

langX

Lj

∥Lj∥

rangminus Bj

∥Lj∥

On choisit lrsquoune de ces droites

foralli lt j

langX

Lj

∥Lj∥minus Li

∥Li∥

rang+

Bj

∥Lj∥minus Bi

∥Li∥= 0

On peut voir que si tous les points sont situeacutes sur la boule uniteacute agrave savoir ∥Pi∥ = 1 la reacutegression logistique srsquoeacutecritsimplement avec Li = Pi et Bi = minus 1

2 On revient au systegraveme drsquoeacutequations lineacuteaires (41) et on en cherche unesolution approcheacutee un peu agrave la faccedilon RANSAC160 avec une reacutegression lineacuteaire et la norme L1 Il nrsquoexiste pastoujours de diagramme de Voronoiuml eacutequivalent agrave la partition convexe reacutealiseacutee par une regreacutession logistique Il estfacile de trouver un contre-exemple en essayant de reacutesoudre le systegraveme preacuteceacutedent Crsquoest ce que fait la fonctionvoronoi_estimation_from_lr La fonction essaye avec quelques approximations et heuristiques de deacuteterminerles points du diagramme de Voronoiuml Si elle reacuteussit du premier coup crsquoest qursquoil y avait eacutequivalence ce qui arrivepeu souvent Il faudrait refaire les calculs agrave la main et non de faccedilon approcheacutee pour valider un contre exemple Uneprochaine fois peut-ecirctre Ce qursquoil faut retenir est que la reacutegression logistique reacutealise une partition convexe de lrsquoespacedes variables

416 Notebooks

Le notebook qui suit reprend les diffeacuterents eacuteleacutements theacuteoriques preacutesenteacutes ci-dessus Il continue lrsquoeacutetude drsquoune reacutegressionlogistique et donne une intuition de ce qui marche ou pas avec un tel modegravele Notamment le modegravele est plus performantsi les classes sont reacuteparties sur la boule uniteacute de lrsquoespace des features

Voronoiuml et reacutegression logistique

Le notebook eacutetudie la pertinence drsquoun modegravele de reacutegression logistique dans certaines configurations Il regarde aussi lediagramme de Voronoiuml associeacute agrave une reacutegression logistique agrave trois classes Il donne quelques intuitions sur les modegravelesque la reacutegression logistique peut reacutesoudre

from jyquickhelper import add_notebook_menuadd_notebook_menu()

matplotlib inline

160 httpscikit-learnorgstablemodulesgeneratedsklearnlinear_modelRANSACRegressorhtml

41 Reacutegression logistique diagramme de Voronoiuml k-Means 161

Machine Learning Statistiques et Programmation Version 035930

Reacutegression logistique

from sklearndatasets import load_irisdata = load_iris()X y = datadata[ 2] datatarget

from sklearnlinear_model import LogisticRegressionclr = LogisticRegression()clrfit(X y)

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovr n_jobs=1penalty=l2 random_state=None solver=liblinear tol=00001verbose=0 warm_start=False)

clrcoef_

array([[-249579289 401011301][ 049709451 -163380222][ 115921404 -177736568]])

clrintercept_

array([ 081713932 122543562 -222516119])

import numpyx = numpyarray([[1 2]])clrdecision_function(x)

array([[ 634157245 -154507432 -46206785 ]])

A = clrcoef_B = clrintercept_

On veacuterifie que la fonction de deacutecision correspond agrave la formule suivant

(AxT)Travel() + B

array([ 634157245 -154507432 -46206785 ])

import matplotlibpyplot as plt

def draw_border(clr X y fct=None incx=1 incy=1 figsize=None border=True ax=None)

voir httpssashatme20170111list-of-20-simple-distinct-colors httpsmatplotliborgexamplescolorcolormaps_referencehtml_unused_ = [Red Green Yellow Blue Orange Purple Cyan

Magenta Lime Pink Teal Lavender Brown BeigeMaroon Mint Olive Coral Navy Grey White Black]

(suite sur la page suivante)

162 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

h = 02 step size in the mesh Plot the decision boundary For that we will assign a color to each point in the mesh [x_min x_max]x[y_min y_max]x_min x_max = X[ 0]min() - incx X[ 0]max() + incxy_min y_max = X[ 1]min() - incy X[ 1]max() + incyxx yy = numpymeshgrid(numpyarange(x_min x_max h) numpyarange(y_min y_max h))if fct is None

Z = clrpredict(numpyc_[xxravel() yyravel()])else

Z = fct(clr numpyc_[xxravel() yyravel()])

Put the result into a color plotcmap = pltcmtab20Z = Zreshape(xxshape)if ax is None

fig ax = pltsubplots(1 1 figsize=figsize or (4 3))axpcolormesh(xx yy Z cmap=cmap)

Plot also the training pointsaxscatter(X[ 0] X[ 1] c=y edgecolors=k cmap=cmap)axset_xlabel(Sepal length)axset_ylabel(Sepal width)

axset_xlim(xxmin() xxmax())axset_ylim(yymin() yymax())

Draw linesx1 x2 = xxmin() xxmax()cl = 0if border

for i in range(0 clrcoef_shape[0])for j in range(i+1 clrcoef_shape[0])

delta = clrcoef_[i] - clrcoef_[j]db = clrintercept_[i] - clrintercept_[j]y1 = (-db - delta[0] x1) delta[1]y2 = (-db - delta[0] x2) delta[1]axplot([x1 x2] [y1 y2] -- color=white)cl += 1

elsefor i in range(0 clrcoef_shape[0])

delta = clrcoef_[i]db = clrintercept_[i]y1 = (-db - delta[0] x1) delta[1]y2 = (-db - delta[0] x2) delta[1]axplot([x1 x2] [y1 y2] -- color=yellow)cl += 1

return ax

fig ax = pltsubplots(1 2 figsize=(104))draw_border(clr X y ax=ax[0])draw_border(clr X y border=False ax=ax[1])

(suite sur la page suivante)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 163

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

ax[0]set_title(Frontiegravere entre 2 classes)ax[1]set_title(Frontiegravere entre 1 classe et les autres)

Quelques diagramme de Voronoiuml

points = numpyarray([[1 2] [3 4] [4 1]])

from scipyspatial import Voronoi voronoi_plot_2dvor = Voronoi(points)

fig ax = pltsubplots(figsize=(44))axishold = lambda True bug between scipy and matplotlib 30voronoi_plot_2d(vor ax=ax)axset_xlim([0 5])axset_ylim([0 5])axaxis(off)

164 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

vorpoint_region

array([3 1 2] dtype=int64)

vorvertices

array([[275 225]])

from matplotlibpatches import Circlefrom matplotlibcollections import PatchCollectionpoints = numpyarray([[1 1] [2 4] [4 1] [63]])vor = Voronoi(points)fig ax = pltsubplots(figsize=(44))cs = []for i in range(vorverticesshape[0])

v = vorvertices[i ]d = (v - points[2 ])r = (ddot(d) 05)circle = Circle((v[0] v[1]) r fill=False ls=-- edgecolor=g visible=True)axadd_artist(circle)

for i in range(pointsshape[0])for j in range(i+1 pointsshape[0])

if i == 0 and j == 3continue

axplot(points[[i j] 0] points[[i j] 1] g-)axishold = lambda True bug between scipy and matplotlib 30voronoi_plot_2d(vor ax=ax)axset_xlim([0 7])axset_ylim([0 7])axaxis(off)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 165

Machine Learning Statistiques et Programmation Version 035930

import mathn = 5a = mathpi 2 3points = []for i in range(n)

for j in range(n)pointsappend([i + j mathcos(a) j mathsin(a)])

points = numpyarray(points)

vor = Voronoi(points)

fig ax = pltsubplots(figsize=(44))axishold = lambda True bug between scipy and matplotlib 30voronoi_plot_2d(vor ax=ax)axset_xlim([-15 4])axset_ylim([-15 4])axaxis(off)

166 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Un diagramme de Voronoiuml proche

On applique la formule deacutefinie par Reacutegression logistique diagramme de Voronoiuml k-Means161 et on reacutesoud le systegravemelineacuteaire deacutefini par

⟨Li minus Lj Pi⟩+Bi minusBj = minus⟨Li minus Lj Pj⟩+Bi minusBjPi minus Pj minus

langPi minus Pj

LiminusLj

∥LiminusLj∥

rangLiminusLj

∥LiminusLj∥ = 0

lArrrArr

⟨Li minus Lj Pi + Pj⟩+ 2(Bi minusBj) = 0

Pi minus Pj minuslangPi minus Pj

LiminusLj

∥LiminusLj∥

rangLiminusLj

∥LiminusLj∥ = 0

=rArr

⟨Li minus Lj Pi + Pj⟩+ 2(Bi minusBj) = 0

⟨Pi minus Pj u⟩ minuslangPi minus Pj

LiminusLj

∥LiminusLj∥

ranglangLiminusLj

∥LiminusLj∥ urang= 0

Ougrave u est un vecteur uniteacute quelconque On cherche agrave reacutesoudre sous la forme drsquoun systegraveme lineacuteaire LP = B ougrave levecteur P est lrsquoensemble des coordonneacutees de tous les points chercheacutes Drsquoapregraves la page citeacute ci-dessus dans le cas drsquoundiagramme agrave trois classes ce systegraveme a une infiniteacute de solutions

import numpymatL = []matB = []L = clrcoef_B = clrintercept_for i in range(0 Lshape[0])

for j in range(i + 1 Lshape[0])li = L[i ]lj = L[j ]c = (li - lj)nc = (cT c) 05

(suite sur la page suivante)

161 httpwwwxavierduprefrappmlstatpyhelpsphinxc_mllr_voronoihtml

41 Reacutegression logistique diagramme de Voronoiuml k-Means 167

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

condition 1mat = numpyzeros((Lshape))mat[i] = cmat[j] = cd = -2(B[i] - B[j])matBappend(d)matLappend(matravel())

condition 2 - cache plusieurs eacutequations on ne prend que la premiegravere coordonneacuteec = ncc2 = c c[0]mat = numpyzeros((Lshape))mat[i] = -c2mat[j] = c2

mat[i0] += 1mat[j0] -= 1matBappend(0)matLappend(matravel())

matL = numpyarray(matL)matB = numpyarray(matB)matLshape matBshape numpylinalgdet(matL)

((6 6) (6) 20281820935727704e-16)

import pandaspandasDataFrame(matL)

Le deacuteterminant est tregraves faible suggeacuterant que la matrice est non inversible et on sait qursquoelle lrsquoest dans ce cas On remplacela derniegravere eacutequation en forccedilant la coordonneacutee drsquoun point

matL[-1] = 0matL[-10] = 1matB[-1] = 3numpylinalgdet(matL)

4207770646874508

On veacuterifie que le systegraveme lineacuteaire est celui attendu

import pandasdf = pandasDataFrame(matL)df[B] = matBdf

from numpylinalg import invpoints = (inv(matL) matB)reshape((32))points

168 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

array([[3 412377262][503684606 02827372 ][548745959 018503334]])

x = points[0 ]c1 = (LxT)Travel() + Bx = points[1 ]c2 = (LxT)Travel() + Bx = points[2 ]c3 = (LxT)Travel() + Bnumpyvstack([c1c2c3])

array([[ 986655487 -402070972 -607697098][-1061997713 326728747 31110941 ][-1213641872 365091377 380710713]])

ax = draw_border(clr X y incx=2 incy=2)axplot(points[ 0] points[ 1] ro)

Reacutegression logistique dans un quadrillage

On srsquointeacuteresse un problegraveme de reacutegression logistique ougrave le problegraveme est tregraves facile mais pas forceacutement eacutevident du pointde vue drsquoune reacutegression logistique

Xs = []Ys = []n = 20for i in range(0 4)

for j in range(0 3)x1 = numpyrandomrand(n) + i11x2 = numpyrandomrand(n) + j11Xsappend(numpyvstack([x1x2])T)Ysextend([i3+j] n)

(suite sur la page suivante)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 169

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

X = numpyvstack(Xs)Y = numpyarray(Ys)Xshape Yshape

((240 2) (240))

set(Y)

0 1 2 3 4 5 6 7 8 9 10 11

On veacuterifie que le nuage de points est tel qursquoindiqueacute

fig ax = pltsubplots(1 1 figsize=(64))for i in range(0 12)

axplot(X[Y==i0] X[Y==i1] o label=cldi color=pltcmtab20colors[i])axlegend()axset_title(Classification agrave neuf classesndans un quadrillage)

from sklearnlinear_model import LogisticRegressionclr = LogisticRegression()clrfit(X Y)

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovr n_jobs=1penalty=l2 random_state=None solver=liblinear tol=00001verbose=0 warm_start=False)

170 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

ax = draw_border(clr X Y incx=1 incy=1 figsize=(128) border=False)axset_title(Reacutegression logistique dans un quadrillage)

clrscore(X Y)

06958333333333333

On copie les features en les mettant au carreacute Le problegraveme est toujours aussi simple mais la reacutegression logistique a plusde variables non correacuteleacutees sur lesquelles srsquoappuyer

def create_feat(X)X2 = Xcopy()X2[ 0] = X2[ 0] X2[ 0]X2[ 1] = X2[ 1] X2[ 1]XX2 = numpyhstack([X X2])return XX2

clr2 = LogisticRegression()clr2fit(create_feat(X) Y)

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovr n_jobs=1penalty=l2 random_state=None solver=liblinear tol=00001verbose=0 warm_start=False)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 171

Machine Learning Statistiques et Programmation Version 035930

def fct_predict(clr X)return clrpredict(create_feat(X))

ax = draw_border(clr2 X Y fct=fct_predict incx=1 incy=1 figsize=(128)rarrborder=False)axset_title(Reacutegression logistique dans un quadrillage avec X2)

clr2score(create_feat(X) Y)

09583333333333334

Du fait que ce problegraveme de classification est eacutequivalent agrave un diagramme de Voronoiuml il a eacuteteacute construit comme tel lefait que la reacutegression logistique semble ecirctre provenir drsquoun problegraveme de convergence numeacuterique plutocirct que du modegraveletheacuteorique Pour veacuterfier on joue avec les paramegravetres drsquoapprentissage Tout drsquoabord lrsquoalgorithme de descente de gradient

clr_t = LogisticRegression(solver=lbfgs)clr_tfit(X Y)clr_tscore(X Y)

09

ax = draw_border(clr_t X Y incx=1 incy=1 figsize=(64) border=False)axset_title(Reacutegression logistique dans un quadrillage avec L-BFGS)

172 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Ensuite on change la faccedilon de reacutesoudre le problegraveme Plutocirct que de reacutesoudre n problegravemes de classifications binaireson reacutesoud un seul problegraveme avec une erreur de classification eacutegale agrave la Multinomial logistic regression162

clr_t = LogisticRegression(solver=lbfgs multi_class=multinomial)clr_tfit(X Y)clr_tscore(X Y)

09875

fig ax = pltsubplots(1 2 figsize=(12 4))draw_border(clr_t X Y incx=1 incy=1 figsize=(64) border=False ax=ax[0])draw_border(clr_t X Y incx=1 incy=1 figsize=(64) border=True ax=ax[1])ax[0]set_title(Reacutegression logistique dans un quadrillagenavec L-BFGS + multinomial)ax[1]set_title(Reacutegression logistique dans un quadrillagenavec L-BFGS + multinomial)

162 httpsenwikipediaorgwikiMultinomial_logistic_regression

41 Reacutegression logistique diagramme de Voronoiuml k-Means 173

Machine Learning Statistiques et Programmation Version 035930

Les frontiegraveres entre une classes et les autres nrsquoont plus lrsquoair drsquoavoir de signification geacuteomeacutetrique Lrsquoapproche une classecontre toutes les autres marchent bien si celles-ci ont des frontiegraveres convexes sans angles aigus et si elles ne sont pasborneacutees En gros cette approche rapide fonctionne bien si toutes les classes sont disposeacutees autour de la boule uniteacute oudrsquoune boule uniteacute composeacutee sur un sous-ensemble des dimensions

Reacutegression logistique autour drsquoun cercle

from math import cos sin piXs = []Ys = []n = 20for i in range(0 12)

x1 = numpyrandomrand(n) + 23cos(i 12 2 pi)x2 = numpyrandomrand(n) + 23sin(i 12 2 pi)Xsappend(numpyvstack([x1x2])T)Ysextend([i] n)

X = numpyvstack(Xs)Y = numpyarray(Ys)Xshape Yshape

((240 2) (240))

fig ax = pltsubplots(1 1 figsize=(64))for i in range(0 12)

axplot(X[Y==i0] X[Y==i1] o label=cldi color=pltcmtab20colors[i])axlegend()axset_title(Classification agrave neuf classesndans un quadrillage)

174 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

clr_c = LogisticRegression()clr_cfit(X Y)clr_cscore(X Y)

09833333333333333

ax = draw_border(clr_c X Y incx=1 incy=1 figsize=(64) border=False)axset_title(Reacutegression logistique autour dun cercle)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 175

Machine Learning Statistiques et Programmation Version 035930

Rien nrsquoest prouveacute ce ne sont que des observations On peut se poser la question si le problegraveme preacuteceacutedent nrsquoeacutetait pasjustement choisi pour montrer que dans un cas lrsquoapproche une classe contre les autres dans le cas drsquoun quadrillage estparticuliegraverement malvenue On accroicirct lrsquoespace entre les classes

Xs = []Ys = []n = 20for i in range(0 4)

for j in range(0 3)x1 = numpyrandomrand(n) + i3x2 = numpyrandomrand(n) + j3Xsappend(numpyvstack([x1x2])T)Ysextend([i3+j] n)

X = numpyvstack(Xs)Y = numpyarray(Ys)Xshape Yshape

((240 2) (240))

clr_q = LogisticRegression()clr_qfit(X Y)clr_qscore(X Y)

07875

ax = draw_border(clr_q X Y incx=1 incy=1 figsize=(64) border=False)axset_title(Reacutegression logistique autour dun cercle)

176 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

A priori non mais on preacutefegravere lrsquoapproche une classe contre les autres car elle est beaucoup plus rapide Lrsquoapprochemultinomiale requiert de changer drsquoalgorithme de descente de gradient

clr_q = LogisticRegression()timeit clr_qfit(X Y)

425 ms plusmn 148 ţs per loop (mean plusmn std dev of 7 runs 100 loops each)

clr_qmn = LogisticRegression(multi_class=multinomial solver=lbfgs)timeit clr_qmnfit(X Y)

554 ms plusmn 118 ms per loop (mean plusmn std dev of 7 runs 10 loops each)

Pousser les classes sur la boule uniteacute

Puisque le modegravele est plus facile agrave apprendre lorsque les classes sont reacuteparties sur la boule uniteacute lrsquoideacuteal serait drsquoavoirune transformation qui le fait comme drsquoajouter des dimensions La reacutegression logistique ne peut modeacuteliser que desclasses convexes Cela veut dire que le barycentre sous cette hypothegraveses appartient agrave la zone que le modegravele attribute agraveune classe donneacutee On calcule ce barycentre pour toutes les classes et on ajoute comme variables la distance agrave chacunde ces centres On reprend le problegraveme du quadrillage

Xs = []Ys = []n = 20for i in range(0 4)

for j in range(0 3)x1 = numpyrandomrand(n) + i11x2 = numpyrandomrand(n) + j11

(suite sur la page suivante)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 177

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

Xsappend(numpyvstack([x1x2])T)Ysextend([i3+j] n)

X = numpyvstack(Xs)Y = numpyarray(Ys)Xshape Yshape

((240 2) (240))

bary = []for i in range(12)

b = X[Y==i]mean(axis=0)baryappend(b)

barys = numpyvstack(bary)barysshape

(12 2)

from sklearnmetricspairwise import euclidean_distancesdist = euclidean_distances(X barys)distshape

(240 12)

Xext = numpyhstack([X dist])

clr_ext = LogisticRegression()clr_extfit(Xext Y)clr_extscore(Xext Y)

09916666666666667

def fct_predict(clr X)dist = euclidean_distances(X barys)Xext = numpyhstack([X dist])return clrpredict(Xext)

ax = draw_border(clr_ext X Y fct=fct_predict incx=1 incy=1 figsize=(64)rarrborder=False)axset_title(Reacutegression logistique dans un quadrillagenavec des distances auxrarrbarycentres)

178 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Cela reacutepond eacutegalement agrave une question Que faire lorsque les classes ne sont pas convexes Une ideacutee consiste agraveeffectuer un k-means163 par classe jusqursquoagrave ce que chaque classe soit agrave peu pregraves converte par un ensemble de clusterappris sur cette classe

Cas presque hexagonal

Pour tester quelques ideacutees et parce crsquoest joli Lrsquoideacuteal serait de se rapprocher drsquoun pavage de Penrose164

import mathn = 4a = mathpi 2 3points = []Ys = []for i in range(n)

for j in range(n)dil = ((i+1)2 + (j+1)2) 06for k in range(020)

x = i + j mathcos(a)y = j mathsin(a)pointsappend([x dil y dil])Ysappend(in+j)mi = 05for r in [01 03 mi]

nb = 6 if r == mi else 12for k in range(0 nb)

(suite sur la page suivante)

163 httpscikit-learnorgstablemodulesgeneratedsklearnclusterKMeanshtml164 httpsfrwikipediaorgwikiRoger_Penrose

41 Reacutegression logistique diagramme de Voronoiuml k-Means 179

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

x = i + j mathcos(a) + r mathcos(mathpi2nb k + mathpi6)y = j mathsin(a) + r mathsin(mathpi2nb k + mathpi6)pointsappend([x dil y dil])Ysappend(in+j)

X = numpyarray(points)Y = numpyarray(Ys)set(Y)

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

fig ax = pltsubplots(1 1 figsize=(64))for i in range(0 max(Y)+1)

axplot(X[Y==i0] X[Y==i1] o label=cldi color=pltcmtab20colors[i20])axset_title(Classification agrave 16 classesndans un quadrillage hexagonal)

clr_hex = LogisticRegression(multi_class=multinomial solver=lbfgs max_iter=200)clr_hexfit(X Y)clr_hexscore(X Y)

09919354838709677

ax = draw_border(clr_hex X Y incx=1 incy=1 figsize=(64) border=False)axset_title(Reacutegression logistique dansnun quadrillage hexagonal)

180 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Diagramme de Voronoiuml approcheacute

On pousse lrsquoideacutee impleacutementeacutee dans le cas de trois classes pour un nombre de classes quelconque Il nrsquoexiste pas defaccedilon geacuteneacuterique de diagramme de Voronoiuml eacutequivalent On reacutesoud le systegraveme lineacuteaire avec une reacutegression quantile etdrsquoautres astuces de calculs agrave deacutecouvrir dans le code de la fonction voronoi_estimation_from_lr165

Xs = []Ys = []n = 20for i in range(0 4)

for j in range(0 3)x1 = numpyrandomrand(n) + i11x2 = numpyrandomrand(n) + j11Xsappend(numpyvstack([x1x2])T)Ysextend([i3+j] n)

X = numpyvstack(Xs)Y = numpyarray(Ys)Xshape Yshape

((240 2) (240))

fig ax = pltsubplots(1 1 figsize=(64))for i in range(0 12)

axplot(X[Y==i0] X[Y==i1] o label=cldi color=pltcmtab20colors[i])(suite sur la page suivante)

165 httpwwwxavierduprefrappmlstatpyhelpsphinxmlstatpymlvoronoihtml

41 Reacutegression logistique diagramme de Voronoiuml k-Means 181

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

axlegend()axset_title(Classification agrave neuf classesndans un quadrillage)

from sklearnlinear_model import LogisticRegressionclr = LogisticRegression()clrfit(X Y)

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovr n_jobs=1penalty=l2 random_state=None solver=liblinear tol=00001verbose=0 warm_start=False)

from mlstatpyml import voronoi_estimation_from_lrpoints = voronoi_estimation_from_lr(clrcoef_ clrintercept_ max_iter=20 verbose=True)points

[voronoi_estimation_from_lr] iter=120 score=00953 tol=348e-10 del P29 d=319[voronoi_estimation_from_lr] iter=220 score=00939 tol=348e-10 del P19 d=272[voronoi_estimation_from_lr] iter=320 score=0089 tol=348e-10 del P26 d=25[voronoi_estimation_from_lr] iter=420 score=00892 tol=348e-10 del P011 d=246[voronoi_estimation_from_lr] iter=520 score=00894 tol=348e-10 del P210 d=242[voronoi_estimation_from_lr] iter=620 score=00882 tol=348e-10 del P110 d=244[voronoi_estimation_from_lr] iter=720 score=00889 tol=348e-10 del P010 d=23[voronoi_estimation_from_lr] iter=820 score=00877 tol=348e-10 del P59 d=229[voronoi_estimation_from_lr] iter=920 score=00869 tol=348e-10 del P111 d=218[voronoi_estimation_from_lr] iter=1020 score=0088 tol=348e-10 del P23 d=22[voronoi_estimation_from_lr] iter=1120 score=0089 tol=348e-10 del P08 d=214

(suite sur la page suivante)

182 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

[voronoi_estimation_from_lr] iter=1220 score=00884 tol=348e-10 del P16 d=22[voronoi_estimation_from_lr] iter=1320 score=00871 tol=348e-10 del P211 d=207[voronoi_estimation_from_lr] iter=1420 score=00874 tol=348e-10 del P05 d=21[voronoi_estimation_from_lr] iter=1520 score=00868 tol=348e-10 del P02 d=21[voronoi_estimation_from_lr] iter=1620 score=0087 tol=348e-10 del P09 d=206[voronoi_estimation_from_lr] iter=1720 score=00876 tol=348e-10 del P89 d=199[voronoi_estimation_from_lr] iter=1820 score=00878 tol=348e-10 del P27 d=193[voronoi_estimation_from_lr] iter=1920 score=00889 tol=348e-10 del P911 d=193[voronoi_estimation_from_lr] iter=2020 score=00875 tol=348e-10 del P17 d=197

array([[059042773 041675379][019276405 161586254][038750542 234848342][170510075 05341869 ][169940467 150388896][166571087 215827251][223834543 06114512 ][214600591 13636044 ][208762755 204091816][25732091 0170076 ][281087731 140217985][249984364 202978587]])

ax = draw_border(clr X Y incx=1 incy=1 figsize=(85) border=False)axplot(points[ 0] points[ 1] ro ms=10)axset_title(Diagramme de Voronoi approcheacute)

41 Reacutegression logistique diagramme de Voronoiuml k-Means 183

Machine Learning Statistiques et Programmation Version 035930

42 Reacutegression logistique par morceaux arbres de deacutecision

Ce qui suit explore une faccedilon fantaisiste de construire des reacutegressions logistiques agrave mi-chemin entre les arbres dedeacutecisions et les reacuteseaux de neurones Dans un premier temps on srsquointeacuteresse uniquement agrave une classification binaire

bull Parallegravele entre un neurone et une reacutegression logistique (page 185)bull Principe drsquoun arbre de deacutecision (page 185)bull Construction drsquoun pseudo arbre (page 187)bull Aparteacute matheacutematique (page 188)bull Approche EM et reacutegression logistique (page 189)bull Lien vers les reacuteseaux de neurones (page 189)bull Plan orthogonal (page 192)bull Interpreacutetabiliteacute (page 192)bull Bibliographie (page 192)

184 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

421 Parallegravele entre un neurone et une reacutegression logistique

Les paragraphes Classification (page 54) et La classification (page 32) preacutesente le problegraveme de la classification quiconsiste agrave trouver une fonction f qui maximise la vraisemblance du nuage de points (Xi yi)i ougraveXi isin Rd et yi isin 0 1

lnL(Θ X y) =

nsumi=1

yi ln f(Θ Xi) + (1minus yi) ln(1minus f(Θ Xi))

Dans le cas de la reacutegression logistique la fonction f est deacutefinie comme suit

f(Θ Xi) =1

1 + eminussumd

k=1 θkxik

Cela ressemble beaucoup agrave la deacutefinition drsquoun neurone (page 25) ougrave la fonction drsquoactivation f(x) = 11+eminusx est une

fonction sigmoiumlde

422 Principe drsquoun arbre de deacutecision

Un arbre de deacutecision se construit peu agrave peu en reacutepeacutetant toujours la mecircme optimisation sur des sous-ensemble de plusen plus petit Il faut drsquoabord un critegravere qui permette drsquoeacutevaluer la pertinence de la division effectueacutee par un noeud delrsquoarbre Pour un ensemble (Xi yi)1⩽i⩽n on peut estimer la probabiliteacute p(y1 yn) = p(Y ) = 1

n

sumi = 1nyi Le

critegravere de Gini G qui eacutevalue la pertinence drsquoune classification est deacutefini par G(Y ) = p(Y )(1minus p(Y )) Un autre critegravereest le gain drsquoinformation ou entropie H H(Y ) = minusp(Y ) ln p(Y )minus (1minus p(Y )) ln(1minus p(Y ))On note YS lrsquoensemble des yi|i isin S ougrave S est un sous-ensemble SC est noteacute le compleacutementairePour le premier noeud de lrsquoarbre de deacutecision on calcule pour toutes les variables et toutes les observations la diminutiondu critegravere choisi

Sik = m|xmk ⩽ xik∆ik = H(Y )minus (H(YSik

) +H(YSCik)

On choisit alors la variable k et le seuil xik qui maximise le gain Dans le cas drsquoune reacutegression logistique lavraisemblance correspond agrave

lnL(Θ X y) =

nsumi=1

yi ln f(Θ Xi) + (1minus yi) ln(1minus f(Θ Xi))

Si on suppose que la fonction f retourne une constante c cette expression devient

lnL(Θ X y) =

nsumi=1

yi ln c+ (1minus yi) ln(1minus c) = p(Y ) ln c+ (1minus p(Y )) ln(1minus c)

Or cette expression admet un maximum pour c = p(Y ) puisque la deacuteriveacutee srsquoannule de faccedilon eacutevidente pour cette valeur

part lnL(Θ X y)

partc=

p(Y )

cminus 1minus p(Y )

1minus c

On remarque que lrsquooptimisation drsquoun noeud drsquoun arbre de deacutecision correspond agrave lrsquooptimisation de la vraisemblance parune fonction constante Une reacutegression logistique calculeacutee sur une seule variable est en quelque sorte une geacuteneacuteralisationde ce modegravele On apprend un arbre de deacutecision qursquoon exporte au format dot166ltltlt

166 httpsfrwikipediaorgwikiDOT_(langage)

42 Reacutegression logistique par morceaux arbres de deacutecision 185

Machine Learning Statistiques et Programmation Version 035930

from sklearndatasets import load_irisfrom sklearntree import DecisionTreeClassifier export_graphvizds = load_iris()X y = dsdata dstargety = y 2dt = DecisionTreeClassifier(max_depth=3 criterion=entropy)dtfit(X y)print(dt) export_graphviz(dt)

gtgtgt

DecisionTreeClassifier(criterion=entropy max_depth=3)

Ce qui donne

X[3] lt= 08entropy = 0918samples = 150

value = [100 50]

entropy = 00samples = 50

value = [50 0]

True

X[3] lt= 175entropy = 10samples = 100

value = [50 50]

False

X[2] lt= 495entropy = 0445

samples = 54value = [5 49]

X[2] lt= 485entropy = 0151

samples = 46value = [45 1]

entropy = 0146samples = 48

value = [1 47]

entropy = 0918samples = 6

value = [4 2]

entropy = 0918samples = 3

value = [2 1]

entropy = 00samples = 43

value = [43 0]

186 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

423 Construction drsquoun pseudo arbre

Et si on remplaccedilait chaque noeud par une reacutegression logistique appris sur les exemples passant par ce noeud Plutocirctque de prendre une deacutecision baseacutee sur une variable donneacutee et de retourner une probabiliteacute constante on estime unereacutegression logistique et on retourne la probabiliteacute retourneacutee par la reacutegressionSrsquoil nrsquoy a theacuteoriquement aucun obstacle en pratique certains cas posent quelques problegravemes comme le montrelrsquoexemple Arbre drsquoindeacutecision (page 323) et repris ci-dessous La fonction criteria calcule les diffeacuterents gains selonles points de coupure

import matplotlibpyplot as pltfrom mlstatpymllogreg import criteria random_set_1d plot_ds

X1 y1 = random_set_1d(1000 2)X2 y2 = random_set_1d(1000 3)X3 y3 = random_set_1d(1000 4)df1 = criteria(X1 y1)df2 = criteria(X2 y2)df3 = criteria(X3 y3)

fig ax = pltsubplots(1 3 figsize=(14 5) sharey=True)plot_ds(X1 y1 ax=ax[0] title=easy)plot_ds(X2 y2 ax=ax[1] title=difficult)plot_ds(X3 y3 ax=ax[2] title=more difficult)df1plot(x=X y=[Gini Gain p1 p2] ax=ax[0] lw=5)df2plot(x=X y=[Gini Gain p1 p2] ax=ax[1] lw=5)df3plot(x=X y=[Gini Gain p1 p2] ax=ax[2] lw=5)pltshow()

Le seuil de coupure est eacutevident dans le premier cas et quasiment impossible agrave trouver de faccedilon numeacuterique dans lesecond avec les algorithmes tels qursquoils sont impleacutementeacutes Les arbres de deacutecision contournent ce problegraveme en imposantque le seuil de coupure laisse au moins quelques exemples de chaque cocircteacute ce que la reacutegression logistique ne fait pasOn peut reacuteflechir agrave drsquoautres critegraveres Le suivant explore la log-vraisemblance

import matplotlibpyplot as pltfrom mlstatpymllogreg import criteria2 random_set_1d plot_ds

X1 y1 = random_set_1d(1000 2)X2 y2 = random_set_1d(1000 3)

(suite sur la page suivante)

42 Reacutegression logistique par morceaux arbres de deacutecision 187

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

X3 y3 = random_set_1d(1000 4)df1 = criteria2(X1 y1)df2 = criteria2(X2 y2)df3 = criteria2(X3 y3)print(df3)

fig ax = pltsubplots(1 3 figsize=(14 5) sharey=True)plot_ds(X1 y1 ax=ax[0] title=easy)plot_ds(X2 y2 ax=ax[1] title=difficult)plot_ds(X3 y3 ax=ax[2] title=more difficult)df1plot(x=X y=[LL LL-10 LL-100] ax=ax[0] lw=5)df2plot(x=X y=[LL LL-10 LL-100] ax=ax[1] lw=5)df3plot(x=X y=[LL LL-10 LL-100] ax=ax[2] lw=5)pltshow()

La log-vraisemblance dans ce problegraveme agrave une dimension est assez simple agrave eacutecrire Pour avoir une expression qui nechange pas en invertissant les classes on considegravere le maxiimum des vraisemblance en consideacuterant deux classifieursopposeacutes Le graphe preacuteceacutedent fait varier x0 avec diffeacuterents θ

LL(x0 θ) = max

1

1+exp ( xminusx0θ )

1

1+exp (minus xminusx0θ )

424 Aparteacute matheacutematique

La log-vraisemblance drsquoune reacutegression logistique pour un jeu de donneacutees (Xi yi) srsquoexprime comme suit pour unereacutegression logistique de paramegravetre β

L(βX y) =sumn

i=1 yi ln f(βXi) + (1minus yi) ln(1minus f(βXi))avec f(βXi) = 1

1+exp(minus(β0+sumd

k=1 xikβk))

On remarque que

f(x) = 11+eminusx

rArr f(minusx) = 11+ex = eminusx

1+eminusx

rArr f(x) + f(minusx) = 11+eminusx + eminusx

1+eminusx = 1

188 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Cela explique pour on utilise souvent cette fonction pour transformer une distance en probabiliteacute pour unclassifieur binaire Lrsquoapprentissage drsquoun arbre de deacutecision sklearntreeDecisionTreeClassifier167 propose le paramegravetremin_samples_leaf On se propose dans le cadre de la reacutegression logistique de chercher le paramegravetre β0 qui permet deveacuterifier la contrainte fixeacutee par min_samples_leaf Cela revient agrave trounver un classifieur lineacuteaire parallegravele au premierqui veacuterifie les contraintes

425 Approche EM et reacutegression logistique

Lrsquoarticle [Scott2013] explicite un algorithme drsquoapprentissage EM pour une reacutegression logistique

Il faudrait adapter cet agorithme pour apprendre deux reacutegressions logistiques dont la combinaison sur deux partiesdisjointes serait meilleure qursquoune seule reacutegression logistique sur la reacuteunion des deux parties Cet algorithme devraittrouver agrave la fois les modegraveles et la seacuteparation entre les deux parties

A faire(ideacutee) Arbre de reacutegressions logistiques et EMChaque noeud du graphe serait modeacuteliseacute comme eacutetant la reacuteunion de trois reacutegressions logistiques une pour diviserlrsquoespace en deux deux autres apprenant agrave classifier sur chacune des partiesissue168

426 Lien vers les reacuteseaux de neurones

En remplaccedilant chaque noeud par une reacutegression logistique lrsquoarbre de deacutecision deviendrait un reacuteseau de neurones avecune structure particuliegravere certes mais un reacuteseau de neurones tout de mecircme Chaque noeud du graphe serait transformeacuteen un neurone avec une reacutegression logistique impliquant toutes les variables Il ne resterait plus qursquoagrave continuerlrsquoapprentissage avec des algorithmes agrave base de gradient stochastique Cela reviendrait agrave changer lrsquoinitialisation dureacuteseau de neurones On considegravere le petit arbre deacutecision suivant trois features trois noeuds deux classes

167 httpsscikit-learnorgstablemodulesgeneratedtreeDecisionTreeClassifierhtml168 httpsgithubcomsdpythonmlstatpyissues28

42 Reacutegression logistique par morceaux arbres de deacutecision 189

Machine Learning Statistiques et Programmation Version 035930

X1 lt 5

X2 lt 3 X3 lt 2

0 1 0 1

On souhaite le transformer en reacuteseau de neurones avec une structure qui serait celle qui suit On note tout drsquoabordla fonction sigmoiumlde f(x s h) = 1

1+eminush(xminuss) Elle vaut 12 lorsque x vaut s vaut 1 lorsque x est tregraves grand et 0lorsque x est tregraves petit Crsquoest eacutequivalent agrave la fonction f(x s h) = g(XS v0 h)

11+eh(ltXV gt+v0) ougrave X = (x1 x2 x3)

V = (minus1 0 0) et v0 = s

y1=g(X (-1 0 0) 5 h)

y4=g((y1 y2) (-1 -1) 1 h) y5=g((y1 y3) (-1 -1) 1 h)

y2=g(X (0 -1 0) 3 h) y3=g(X (0 0 -1) 2 h)

y6=g((y4 y5) (-1 -1) 1 h)

ltc0gt 0|ltc1gt 1

Le problegraveme avec la structure proposeacutee est que chaque noeud final retourne toujours une classe alors que dans un arbrede deacutecision seule une feuille reacutepond Un noeud final fait la somme de toutes les feuilles deux dans cet exemple

190 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

Lrsquoimpleacutementation de scikit-learn169 nrsquoest pas la plus facile agrave manipuler dans le sens ougrave chaque couche ne peut prendrecomme entreacutee que les sorties de la preacuteceacutedente et la fonction drsquoactivation est la mecircme pour tous les neurones On nepeut pas non plus geler certains coefficients lors de lrsquoapprentissage Crsquoest agrave ce moment-lagrave qursquoon se demande si ccedila vautle coup de se lancer dans une impleacutementation agrave la rigueur jolie mais sans doute pas porteuse drsquoune innovation majeureEt ce nrsquoest pas la premiegravere fois que quelqursquoun se lance dans la conversion drsquoun arbre en reacuteseaux de neuronesJrsquoai quand mecircme essayeacute avec le notebook Un arbre de deacutecision en reacuteseaux de neurones (page 87) et les classesNeuralTreeNode NeuralTreeNet Si lrsquoideacutee de deacutepart est seacuteduisante elle requiert une contrainte suppleacutementaire quiest de creacuteer un reacuteseau de neurones qui ne soit pas un minimum local de la fonction drsquoerreur auquel cas un apprentissageavec un algorithme agrave base de gradient ne pourra pas ameacuteliorer les performances du reacuteseau de neurones

La structure proposeacutee nrsquoest cependant pas la meilleure et elle pourrait ecirctre simplifieacutee Drsquoautres projets srsquoappuie deslibrairies existantes

bull Soft-Decision-Tree170

bull Neural-Decision-Forests171

bull hummingbird172

Ce dernier package convertit un reacuteseau de neurones en autant de couches que la profondeur de lrsquoarbre Lrsquoimage qui suitest tireacute de lrsquoarticle [Nakandalam2020] et qui reacutesume leur ideacutee

169 httpsscikit-learnorg170 httpsgithubcomkimhc6028soft-decision-tree171 httpsgithubcomjingxilNeural-Decision-Forests172 httpsgithubcommicrosofthummingbird

42 Reacutegression logistique par morceaux arbres de deacutecision 191

Machine Learning Statistiques et Programmation Version 035930

427 Plan orthogonal

Dans un espace agrave plusieurs dimensions la reacutegression logistique divise lrsquoespace agrave lrsquoaide drsquoun hyperplan La fonction dedeacutecision reste similaire puisque la probabiliteacute de classification deacutepend de la distance agrave cet hyperplan On suppose qursquoilexiste une reacutegression logistique binaire apprise sur un nuage de points (Xi yi) La probabiliteacute de bonne classificationest deacutefinie par

f(Θ Xi) =1

1 + eminusθ0+sumd

k=1 θkxik

Le vecteur Θ deacutefinit un hyperplan On choisit un vecteur Θprime de telle sorte que lt ΘΘprime gt= 0 Les deux vecteurs sontorthogonaux On deacutefinit maintenant deux autres vecteurs Θ1Θ2 pour deux autres reacutegressions logistiques Pour classerun point X on procegravede comme suit

bull si lt Θprime X gtlt 0 on classe le point en appliquant la reacutegression logistique deacutefinie par Theta1bull si lt Θprime X gt⩽ 0 on classe le point en appliquant la reacutegression logistique deacutefinie par Theta2

De maniegravere eacutevidente les performances en classification sont les mecircmes que la premiegravere reacutegression logistique On peutensuite reacuteestimer les vecteurs Θ1Θ2 pour maximiser la vraisemblance sur chacune des parties Il ne reste plus qursquoagravemontrer que la vraisemblance globale sera supeacuterieur agrave celle obtenue par la premiegravere reacutegression logistique

A faire(ideacutee) Arbre de reacutegressions logistiques en cascade orthogonaleImpleacutementer la lrsquoalgorithme suivant

bull Apprendre une reacutegression logistiquebull Choisir un hyperplan perpendiculaire en optimisation un critegravere Construction drsquoun pseudo arbre (page 187)bull Apprendre une reacutegression logistique sur chacune des partiesbull Continuer jusqursquoagrave ce lrsquoameacutelioration soit neacutegligeable

issue173

428 Interpreacutetabiliteacute

429 Bibliographie

[Scott2013] Expectation-maximization for logistic regression174 James G Scott Liang Sun[Nakandalam2020] A Tensor-based Approach for One-size-fits-all ML Prediction Serving Supun Nakandalam

Karla Saur Gyeong-In Yu Konstantinos Karanasos Carlo Curino Markus Weimer Matteo Interlandi To appearat OSDI 2020175

43 Reacuteseaux de neurones

Reacuteseaux de neurones avec scikit-learn

matplotlib inline

173 httpsgithubcomsdpythonmlstatpyissues29174 httpsarxivorgpdf13060040pdf175 httpswwwusenixorgconferenceosdi20

192 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

from sklearnlinear_model import PerceptronX = [[0 0] [1 1]]y = [0 1]clf = Perceptron()clffit(X y)

Perceptron(alpha=00001 class_weight=None eta0=10 fit_intercept=Truen_iter=5 n_jobs=1 penalty=None random_state=0 shuffle=Trueverbose=0 warm_start=False)

import matplotlibpyplot as pltimport numpydef softmax(x)

return 10 (1 + numpyexp(-x))def dsoftmax(x)

t = numpyexp(-x)return t (1 + t)2

x = numpyarange(-1010 01)y = softmax(x)dy = dsoftmax(x)fig ax = pltsubplots(11)axplot(xy label=softmax)axplot(xdy label=deacuteriveacutee)axset_ylim([-01 11])axplot([-5 -5] [-01 11] r)axplot([5 5] [-01 11] r)axlegend(loc=2)

ltmatplotliblegendLegend at 0x1b651aeacf8gt

43 Reacuteseaux de neurones 193

Machine Learning Statistiques et Programmation Version 035930

x

array([ -100000000e+01 -990000000e+00 -980000000e+00-970000000e+00 -960000000e+00 -950000000e+00-940000000e+00 -930000000e+00 -920000000e+00-910000000e+00 -900000000e+00 -890000000e+00-880000000e+00 -870000000e+00 -860000000e+00-850000000e+00 -840000000e+00 -830000000e+00-820000000e+00 -810000000e+00 -800000000e+00-790000000e+00 -780000000e+00 -770000000e+00-760000000e+00 -750000000e+00 -740000000e+00-730000000e+00 -720000000e+00 -710000000e+00-700000000e+00 -690000000e+00 -680000000e+00-670000000e+00 -660000000e+00 -650000000e+00-640000000e+00 -630000000e+00 -620000000e+00-610000000e+00 -600000000e+00 -590000000e+00-580000000e+00 -570000000e+00 -560000000e+00-550000000e+00 -540000000e+00 -530000000e+00-520000000e+00 -510000000e+00 -500000000e+00-490000000e+00 -480000000e+00 -470000000e+00-460000000e+00 -450000000e+00 -440000000e+00-430000000e+00 -420000000e+00 -410000000e+00-400000000e+00 -390000000e+00 -380000000e+00-370000000e+00 -360000000e+00 -350000000e+00-340000000e+00 -330000000e+00 -320000000e+00-310000000e+00 -300000000e+00 -290000000e+00-280000000e+00 -270000000e+00 -260000000e+00-250000000e+00 -240000000e+00 -230000000e+00-220000000e+00 -210000000e+00 -200000000e+00-190000000e+00 -180000000e+00 -170000000e+00-160000000e+00 -150000000e+00 -140000000e+00-130000000e+00 -120000000e+00 -110000000e+00-100000000e+00 -900000000e-01 -800000000e-01-700000000e-01 -600000000e-01 -500000000e-01-400000000e-01 -300000000e-01 -200000000e-01-100000000e-01 -355271368e-14 100000000e-01200000000e-01 300000000e-01 400000000e-01500000000e-01 600000000e-01 700000000e-01800000000e-01 900000000e-01 100000000e+00110000000e+00 120000000e+00 130000000e+00140000000e+00 150000000e+00 160000000e+00170000000e+00 180000000e+00 190000000e+00200000000e+00 210000000e+00 220000000e+00230000000e+00 240000000e+00 250000000e+00260000000e+00 270000000e+00 280000000e+00290000000e+00 300000000e+00 310000000e+00320000000e+00 330000000e+00 340000000e+00350000000e+00 360000000e+00 370000000e+00380000000e+00 390000000e+00 400000000e+00410000000e+00 420000000e+00 430000000e+00440000000e+00 450000000e+00 460000000e+00470000000e+00 480000000e+00 490000000e+00

(suite sur la page suivante)

194 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

500000000e+00 510000000e+00 520000000e+00530000000e+00 540000000e+00 550000000e+00560000000e+00 570000000e+00 580000000e+00590000000e+00 600000000e+00 610000000e+00620000000e+00 630000000e+00 640000000e+00650000000e+00 660000000e+00 670000000e+00680000000e+00 690000000e+00 700000000e+00710000000e+00 720000000e+00 730000000e+00740000000e+00 750000000e+00 760000000e+00770000000e+00 780000000e+00 790000000e+00800000000e+00 810000000e+00 820000000e+00830000000e+00 840000000e+00 850000000e+00860000000e+00 870000000e+00 880000000e+00890000000e+00 900000000e+00 910000000e+00920000000e+00 930000000e+00 940000000e+00950000000e+00 960000000e+00 970000000e+00980000000e+00 990000000e+00])

44 Analyse de survie

Liquestanalyse de survie176 est un sujet qursquoon commence agrave voir poindre en assurance et plus geacuteneacuteralement en assuranceCrsquoest domaine deacuteveloppeacute pour mesurer les effets drsquoune substance drsquoun meacutedicament sur un corps vivant une personne

bull Lien avec le machine learning (page 195)bull Courbe de Kaplan-Meier (page 196)bull Reacutegression de Cox (page 196)bull Notebooks (page 197)bull Liens articles (page 200)bull Modules (page 200)

441 Lien avec le machine learning

En assurance on cherche souvent agrave preacutedire si une personne aura un accident ou pas Pour cela il faut avoir des donneacuteesune base de donneacutees dans laquelle sont enregistreacutes des accidents Lrsquoaccident en question peut avoir lieu au deacutebut ducontrat quelques anneacutees plus tard ou jamais Lorsqursquoaucun accident nrsquoest associeacute agrave une personne il se peut qursquoil nese produise aucun accident ou que celui-ci ne srsquoest pas encore produit Modeacuteliser ce problegraveme de preacutediction permetdrsquointroduire le temps et prendre en compte le fait que les donneacutees sont tronqueacutees on ne sait pour une personne que siun accident srsquoest produit ou pas entre le deacutebut du contrat et aujourdrsquohui

176 httpsfrwikipediaorgwikiAnalyse_de_survie

44 Analyse de survie 195

Machine Learning Statistiques et Programmation Version 035930

442 Courbe de Kaplan-Meier

On reprend la mecircme terminologie A une date t0 on administre un traitement agrave une personne un animal une planteCet ecirctre vivant meurt agrave un temps t + d Le traitement a-t-il ameacutelioreacute sa survie On considegravere deux temps t1 et t2la probabiliteacute de deacutecegraves entre ces deux temps peut ecirctre estimeacute par nt2minusnt1

nt1ougrave nti est la population vivante au temps ti

(depuis le deacutebut du traitement)On en deacuteduit la probabiliteacute de rester vivant jusqursquoau temps ti qui est lrsquoestimateur de Kaplan-Meier177 S(ti)

S(ti) =prodi

i=1

(1minus ntiminus1

minusnti

ntiminus1

)=

prodii=1

nti

ntiminus1=prodi

i=1ni

niminus1

Par simplification on note ni = nti On suppose les ti des dates agrave intervalles plutocirct reacuteguliers et croissants La suite(ni) est deacutecroissantes (on ne rescuscite pas) Ces calculs rappellent les calculs lieacutes agrave lrsquoespeacuterance de vie (voir Evoluationdrsquoune population - eacutenonceacute178 Evoluation drsquoune population (correction)179) Lrsquoespeacuterance de vie est deacutefinie par

E(D) =

infinsumi=1

tiP (mort au temps ti) =infinsumi=1

tini minus ni+1

ni

iprodj=0

nj

njminus1=

infinsumi=1

tini minus ni+1

ni

ni

n0=

infinsumi=1

tini minus ni+1

n0

La courbe S(t) est aussi appeleacutee la fonction de survie Si T est la dureacutee de vie drsquoune personne S(t) = P (T gt t) Onappelle λ(t) le taux de deacutefaillance crsquoest la probabiliteacute que le deacutecegraves survienne au temps t

λ(t)dt = P (t ⩽ T lt t+ dt|T ⩾ T ) = minusSprime(t)

S(t)dt

443 Reacutegression de Cox

Le modegravele de Cox180 modeacutelise le risque de deacutecegraves instantaneacute au temps t selon le modegravele qui suit Une personne estdeacutecrite par les variables X1 Xk

λ(tX1 Xk) = λ0(t) exp

(ksum

i=1

βiXi

)= λ0(t) exp(βX)

La partie λ0(t) correspond agrave ce qursquoon observe sans autre informations que les deacutecegraves On lrsquoappelle aussi le risque debase Crsquoest la probabiliteacute moyenne de deacutecegraves instantaneacutee La seconde partie permet de faire varier cette quantiteacute selonce qursquoon sait de chaque personneOn dit que crsquoest un modegravele agrave risque proportionnel car si deux personnes sont quasiment identiques excepteacute sur unevariable Xi (comme la quantiteacute drsquoun poison ingeacutereacutee) alors le ratio de probabiliteacute est

λ(tX1 Xai Xk)

λ(tX1 Xbi Xk)

=exp(βiX

ai )

exp(βiXbi )

= exp(βi(X

ai minusXb

i ))

Lrsquohypothegravese des risques proportionnel est en quelque sorte intuitive Plus on ingegravere un poison plus on a de chancesdrsquoen subir les conseacutequences Mais ce nrsquoest pas toujours le cas le documentaire La fabrique de lrsquoignorance181 revientsur les effets du bispheacutenol A182 qui serait deacutejagrave pertubateur agrave tregraves petite dose Il ne prend pas en compte les effets croiseacutesnon plus (voir Les perturbateurs endocriniens Comprendre ougrave en est la recherche183)

177 httpsfrwikipediaorgwikiEstimateur_de_Kaplan-Meier178 httpwwwxavierduprefrappactuariat_pythonhelpsphinxnotebooksseance4_projection_population_enoncehtml179 httpwwwxavierduprefrappactuariat_pythonhelpsphinxnotebooksseance4_projection_population_correctionhtml180 httpsfrwikipediaorgwikiRC3A9gression_de_Cox181 httpswwwartetvfrvideos091148-000-Ala-fabrique-de-l-ignorance182 httpsfrwikipediaorgwikiBisphC3A9nol_A183 httpshal-ansesarchives-ouvertesfranses-02289024document

196 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

La fonction λ0(t) est en quelque sorte le taux de deacutefaillance moyen On peut le calculer agrave partir des formules introduitesau paragraphe preacuteceacutedent en lissant la courbe de Kaplan-Meier avec des splines On peut aussi le calculer aveclrsquoestimateur de Breslow (voir Analyse de survie Meacutethodes non parameacutetriques184 Introduction agrave lrsquoanalyse des dureacuteesde survie185) qui repose aussi la courbe de Kaplan-Meier

On sait que si g(t) = logSprime(t) alors gprime(t) = Sprime(t)S(t) On en deacuteduit que

λ0(t) = minusd(log(S(t)))

dt

Pour la suite on pose h(Xi β) = exp(βXi) et lrsquoindividu meurt au temps ti de lrsquoexpeacuterience Une expeacuterience estdeacutefinie par la liste des couples (Xi ti) On souhaite trouver les paramegravetres β qui repreacutesentent au mieux les donneacutees delrsquoexpeacuterience On deacutefinit donc

bull Rt lrsquoensemble des personnes en vie au temps tbull Dt lrsquoensemble qui deacutecegravedent au t

Par deacutefinition i isin Rti et i isin Dti On calcule le ratio

Pr(β tXi) =h(Xi β)λ0(t)sum

jisinRth(Xj β)λ0(t)

=h(Xi β)sum

jisinRth(Xj β)

Pour une personne qui deacutecegravede au temps t ce ratio devrait ecirctre proche de 1 car on souhaite que h(Xi β) soit grand ettous les autres nuls On deacutefinit la vraisemblance partielle du modegravele par

L(β) =prodi

Pr(β ti Xi) =prodi

h(Xi β)sumjisinRti

h(Xj β)

Une fois qursquoon a calculeacute les coefficients β optimaux on peut affiner la partie λ0(t) Lrsquoestimateur de Breslow est

B(t) =sumi|ti⩽t

1sumjisinRti

h(βXj)

Crsquoest un estimateur de la fonction de survie

S(t) = exp(minusB(t))

444 Notebooks

Analyse de survie

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Quelques donneacutees (page 198)bull Reacutegression de Cox (page 199)

184 httpheliosmiparisdescartesfr~obouazizKMSurvpdf185 httpwwwlstaupmcfrpspCours_Survie_1pdf

44 Analyse de survie 197

Machine Learning Statistiques et Programmation Version 035930

Quelques donneacutees

On reacutecupegravere les donneacutees disponibles sur opendatagouvfr Donneacutees hospitaliegraveres relatives agrave lrsquoeacutepideacutemie de COVID-19186 Ces donneacutees ne permettent pas de construire la courbe de Kaplan-Meier187 On sait combien de personnesrentrent et sortent chaque jour mais on ne sait pas quand une personne qui sort un 1er avril est entreacutee

import numpyrandom as rnd

import pandasdf = pandasread_csv(httpswwwdatagouvfrendatasetsr63352e38-d353-4b54-bfd1-rarrf1b3ee1cabd7 sep=)gr = df[[jour rad dc]]groupby([jour])sum()diff = grdiff()reset_index(drop=False)diffhead()

def donnees_artificielles(hosp mu=14 nu=21)dt = pandasto_datetime(hosp[jour])res = []for i in range(hospshape[0])

date = dt[i]dayofyearh = hospiloc[i 1]delay = rndexponential(mu int(h))for j in range(delayshape[0])

resappend([date - int(delay[j]) date 1])h = hospiloc[i 2]delay = rndexponential(nu int(h))for j in range(delayshape[0])

resappend([date - int(delay[j]) date 0])return pandasDataFrame(res columns=[entree sortie issue])

data = donnees_artificielles(diff[1]reset_index(drop=True))sort_values(entree)datahead()

Chaque ligne est une personne entree est le jour drsquoentreacutee agrave lrsquohocircpital sortie celui de la sortie issue 0 pour deacutecegraves1 pour en vie

datadescribe()

Il y a environ 80 de survie dans ces donneacutees

import numpyduree = datasortie - dataentreedeces = (dataissue == 0)astype(numpyint32)

import numpyimport matplotlibpyplot as pltfrom lifelines import KaplanMeierFitterfig ax = pltsubplots(1 1 figsize=(10 4))kmf = KaplanMeierFitter()kmffit(duree deces)

(suite sur la page suivante)

186 httpswwwdatagouvfrfrdatasetsdonnees-hospitalieres-relatives-a-lepidemie-de-covid-19187 httpsfrwikipediaorgwikiEstimateur_de_Kaplan-Meier

198 Chapter 4 Reacutegression logistique

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

kmfplot(ax=ax)axlegend()

Reacutegression de Cox

On reprend les donneacutees artificiellement geacuteneacutereacutees et on ajoute une variable identique agrave la dureacutee plus un bruit mais quasinul

import pandasdata_simple = pandasDataFrame(duree duree deces deces

X1 duree 057 deces + numpyrandomrandn(dureerarrshape[0])

X2 duree (-057) deces + numpyrandomrandn(dureerarrshape[0]))data_simplehead()

from sklearnmodel_selection import train_test_splitdata_train data_test = train_test_split(data_simple test_size=08)

from lifelinesfitterscoxph_fitter import CoxPHFittercox = CoxPHFitter()coxfit(data_train[[duree deces X1]] duration_col=duree event_col=deces

show_progress=True)

Iteration 1 norm_delta = 013943 step_size = 09000 log_lik = -25065836250 newton_rarrdecrement = 88993933 seconds_since_start = 00Iteration 2 norm_delta = 000660 step_size = 09000 log_lik = -24986237270 newton_rarrdecrement = 281312 seconds_since_start = 00Iteration 3 norm_delta = 000073 step_size = 09000 log_lik = -24985957376 newton_rarrdecrement = 003357 seconds_since_start = 01Iteration 4 norm_delta = 000000 step_size = 10000 log_lik = -24985954017 newton_rarrdecrement = 000000 seconds_since_start = 01Convergence success after 4 iterations

44 Analyse de survie 199

Machine Learning Statistiques et Programmation Version 035930

ltlifelinesCoxPHFitter fitted with 124826 total observations 100754 right-censoredrarrobservationsgt

coxprint_summary()

cox2 = CoxPHFitter()cox2fit(data_train[[duree deces X2]] duration_col=duree event_col=deces

show_progress=True)cox2print_summary()

Iteration 1 norm_delta = 013946 step_size = 09000 log_lik = -25065836250 newton_rarrdecrement = 88892089 seconds_since_start = 00Iteration 2 norm_delta = 000667 step_size = 09000 log_lik = -24986361089 newton_rarrdecrement = 286434 seconds_since_start = 00Iteration 3 norm_delta = 000074 step_size = 09000 log_lik = -24986076079 newton_rarrdecrement = 003426 seconds_since_start = 01Iteration 4 norm_delta = 000000 step_size = 10000 log_lik = -24986072650 newton_rarrdecrement = 000000 seconds_since_start = 01Convergence success after 4 iterations

coxpredict_cumulative_hazard(data_test[5])

coxpredict_survival_function(data_test[5])

445 Liens articles

bull Notes de lectures188

bull On the Breslow estimator189

446 Modules

bull lifelines190

bull scikit-survival191

188 httpwwwstatsoxacuk~mlunnlecturenotes2pdf189 httpsdlinwebunceduwp-contentuploadssites1568201304Lin07pdf190 httpslifelinesreadthedocsioenlatest191 httpsscikit-survivalreadthedocsioenlatest

200 Chapter 4 Reacutegression logistique

CHAPTER 5

NLP

NLP ou Natural Language Processing u traitement du langage naturel192

51 Compleacutetion

La compleacutetion193 est un meacutechanisme qui permet agrave un utilisateur de saisir les mots de sa recherche avec moins decaractegraveres qursquoelle nrsquoen contient Lrsquoutilisateur saisit plus rapidement

Si ces outils sont appreacuteciables du point de vue utilisateurs ils le sont tout autant cocircteacute site web en reacuteduisant la variabiliteacutedans le texte saisie en particulier les fautes drsquoorthographes Lrsquoutilisateur a besoin de moins de requecirctes pour trouverson produits et cela diminue drsquoautant la charge du serveur qui lui fournit ses reacutesultats

192 httpsfrwikipediaorgwikiTraitement_automatique_du_langage_naturel193 httpsfrwikipediaorgwikiComplC3A8tement

201

Machine Learning Statistiques et Programmation Version 035930

Ce chapitre aborde diffeacuterentes probleacutematiques lieacutees agrave ce genre de systegravemes qui sont preacutesents partout sur Internetmoteurs de recherches sites de ventes en ligne journaux Il existe de nombreuses librairies qui les impleacutementent Laplus connue en Python est whoosh194Quelques eacuteleacutements de codes sont disponibles dans le module completion et le notebook Compleacutetion (page 370)Vous pouvez eacutegalement lire How to Write a Spelling Corrector195 de Peter Norvig196 et deacutecouvrir le sujet avec On UserInteractions with Query Auto-Completion197 de Bhaskar Mitra Milad Shokouhi Filip Radlinski Katja Hofmann

511 Formalisation

bull Problegraveme drsquooptimisation (page 202)bull Ensemble des compleacutetions (page 203)bull Gain (page 203)

Problegraveme drsquooptimisation

Je me reacutefegravere pour cela agrave lrsquoarticle [Sevenster2013] (voir aussi [Bampoulidis2017]) qui introduit diffeacuterentes faccedilons deconstruire un systegraveme drsquoautocompeacutetion et qui les compare agrave lrsquousage Et srsquoil existe plusieurs faccedilons de faire il fautdrsquoabord mettre au point une faccedilon de les comparer Je me place dans le cadre drsquoun moteur de recherche car crsquoestlrsquousage principal que celui-ci soit un moteur de recherche ou une recherche incluse sur un site de vente A la fin de lajourneacutee on sait quelles sont les requecirctes saisies par les utilisateurs et le nombre de fois qursquoelles ont eacuteteacute saisies (qi wi)pour i isin [[1 N ]]

Sans systegraveme de compleacutetion les utilisateurs saisissent doncK =sumN

i=1 l(qi)wi ougrave l(qi) est la longueur de la compleacutetionqi Avec le systegraveme de compleacutetion les utilisateurs saisissent moins de caractegraveres crsquoest ce chiffre lagrave qursquoon cherche agraveminimiser Lrsquouniteacute est le charactegravere saisi ou keystroke en anglaisMecircme avec le mecircme systegraveme de compleacutetion il nrsquoest pas dit que tous les utilisateurs saisissent la mecircme requecircte de lamecircme faccedilon Pour simplifier on va supposer que si malgreacute tout et ne consideacuterer que la faccedilon minimale de saisir unerequecircte

Lrsquoexemple preacuteceacutedent illustrent deux faccedilons de saisir le terme autocompleacutetion (sur Wikipeacutedia) autocom + 4 touchesvers le bas ou autocomp + 1 touche vers le bas soit 7+4=11 touches dans le premier cas ou 8+1=9 touches dans lesecond cas

194 httpswhooshreadthedocsioenlatest195 httpnorvigcomspell-correcthtml196 httpnorvigcom197 httpswwwsemanticscholarorgpaperOn-user-interactions-with-query-auto-completion-Mitra-Shokouhi71e953caa2542a61b52e684649b3569c00251021

pdf

202 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

Deacutefinition D1 Minimum KeystrokeOn deacutefinit la faccedilon optimale de saisir une requecircte sachant un systegraveme de compleacutetion S comme eacutetant le minimum obtenu

M(q S) = min0⩽k⩽l(q)

k +K(q k S) (51)

La quantiteacute K(q k S) repreacutesente le nombre de touche vers le bas qursquoil faut taper pour obtenir la chaicircne q avec lesystegraveme de compleacutetion S et les k premiegraveres lettres de q

De faccedilon eacutevidente K(q l(q) S) = 0 et M(q S) ⩽ l(q) et K(q k S) gt 0 si k lt l(q) On prend eacutegalement commeconvention forallq isin S K(q k S) = infin et forallq isin S M(q S) = l(q) Certains systegravemes proposent des requecirctes avantde saisir quoique ce soit crsquoest pourquoi on inclut la valeur M(q 0) qui repreacutesente ce cas Construire un systegraveme decompleacutetion revient agrave minimiser la quantiteacute

M(S) =

Nsumi=1

M(qi S)wi

Ensemble des compleacutetions

Il nrsquoy a pas de restriction sur la fonction K(q k S) mais on se limitera dans un premier temps agrave une fonction simpleOn suppose que le systegraveme drsquoautocompleacutetion dispose drsquoun ensemble de requecirctes ordonneacutees S = (si) et la fonction

K(q k S) = position(q S(q[1k]))

Ougrave S(q[1k]) est le sous-ensemble ordonneacute de S des compleacutetions qui commencent par les k premiegraveres lettres de q etde longueur supeacuterieure strictement agrave k position(q S(q[1k])) est la position de q dans cet ensemble ordonneacute ouinfin sielle nrsquoy est pas Cette position est strictement positive K(q k S) ⩾ 1 sauf si k = l(q) auquel cas elle est nulle Celasignifie que lrsquoutilisateur doit descendre drsquoau moins un cran pour seacutelectionner une compleacutetion On note σ(q) la positionde la compleacutetion q dans lrsquoensemble S Par construction s = s2 =rArr σ(s1) = σ(s2)

K(q k S) = i|si ≻ q[1k] si isin S σ(si) lt σ(q) (52)

deacutesigne le cardinal de lrsquoensemble Trouver le meilleur systegraveme de compleacutetion S revient agrave trouver la meilleurefonction K(q k S) et dans le cas restreint lrsquoordre sur S qui minimise cette fonction Le plus souvent on se contentede trier les compleacutetions par ordre deacutecroissant de populariteacute On consideacuterera par la suite qursquoon est dans ce cas

Gain

On deacutefinit le gain en keystroke comme eacutetant le nombre de caractegraveres saisis en moins

G(q S) = l(s)minusM(q S)

Minimier M(S) ou maximiser G(S) =sumN

i=1 G(qi S)wi revient au mecircme

G(S) =

Nsumi=1

wi(l(s)minusM(q S)) =

Nsumi=1

wil(s)minusNsumi=1

wiM(q S)) = K minusM(S)

Ougrave K =sumN

i=1 l(qi)wi lrsquoensemble des caractegraveres tapeacutes par les utilisateurs G(S)K est en quelque sorte le ratio de

caractegraveres eacuteconomiseacutes par le systegraveme de compleacutetion

51 Compleacutetion 203

Machine Learning Statistiques et Programmation Version 035930

512 Fausses ideacutees reccedilues

bull Il faut trier les compleacutetions par freacutequence deacutecroissante (page 204)bull Il faut placer les compleacutetions courtes avant (page 205)bull Il faut montrer toutes les compleacutetions (page 205)bull Et si le poids de chaque compleacutetion est uniforme (page 205)

Il faut trier les compleacutetions par freacutequence deacutecroissante

En pratique cela marche plutocirct bien En theacuteorie cette assertion est fausse Prenons les quatre compleacutetions suivantes

q freacutequence ordrea 4 1ab 3 2abc 2 3abcd 1 4

Dans cet exemple si lrsquoutilisateur tape ab il verra les compleacutetions

abcabcd

Dans tous les cas K(q k S) = l(q) minus k Cela veut dire que lrsquoutilisateur ne gagnera rien En revanche avec lrsquoordresuivant

q ordrea 4ab 2abc 3abcd 1

Si lrsquoutilisateur tape ab il verra les compleacutetions

abcdabc

Le nombre de caractegraveres eacuteconomiseacutes sera

q freacutequence ordre M(q S)a 4 4 1ab 3 2 2abc 2 3 3abcd 1 1 1 = K(q 0 S)

Drsquoougrave un gain total de G(S) = 3

204 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

Il faut placer les compleacutetions courtes avant

Le cas preacuteceacutedent est deacutejagrave un contre exemple Mais drsquoun point de vue utilisateur il nrsquoest pas facile de lire des compleacutetionsde longueurs diffeacuterentes Cela veut peut-ecirctre dire aussi que la meacutetrique consideacutereacutee pour choisir le meilleur systegraveme decompleacutetion est faux Cela sera discuteacute agrave la prochaine section

Il faut montrer toutes les compleacutetions

Le premier exemple offre aussi un contre exemple Dans cet exemple lrsquoensemble Q = (qi) des requecirctes utilisateurs etlrsquoensemble S = (si) des compleacutetions ou requecirctes complegravetes est le mecircme Il suffit de la modifier un peu On enlegravevela requecircte ab de S

q freacutequence ordre M(q S)a 4 1 1ab 3 infin 2abc 2 2 2abcd 1 3 3

Drsquoougrave un gain total de G(S) = 2 En conclusion si jrsquoenlegraveve une petite compleacutetion pour laquelle le gain est nul il estpossible que le gain pour les suivantes soit positif On en retient qursquoil ne faut pas montrer trop de compleacutetions qui sedistinguent drsquoun caractegravere Plus geacuteneacuteralement il ne sert agrave rien de montrer des compleacutetions plus longue que le preacutefixedrsquoun caractegravere Par extension si une compleacutetion est plus longue que le preacutefixe de d caractegraveres il faut la montrer agrave uneposition infeacuterieure agrave d

Et si le poids de chaque compleacutetion est uniforme

On suppose que les compleacutetions ont toutes le mecircme poids wi = 1 Dans quel ordre faut-il ranger les compleacutetionspour eacuteconomiser le plus de caractegraveres On aurait tendance agrave dire la plus longue drsquoabord ce qursquoon peut veacuterifier dans lenotebook Compleacutetion (page 370)

q freacutequence ordre M(q S)a 1 4 1ab 1 3 2abc 1 2 2abcd 1 1 1

Ajouter deux autres compleacutetions disjointes edf edfh Le gain maximum est 6 et il y a plusieurs ordres

edf edfh abc abcd a ababcd abc edfh edf ab a

On a presque lrsquoimpression qursquoon peut traiter chaque bloc seacutepareacutement a ab abc abcd drsquoun cocircteacute et edf edfh de lrsquoautreA lrsquointeacuterieur des blocs les regravegles seront les mecircmes

51 Compleacutetion 205

Machine Learning Statistiques et Programmation Version 035930

En reacutesumeacute si on connaicirct le meilleur ordre pour toutes les mots sur les noeuds terminaux dans les bulles rouges dansla bulle verte le meilleur ordre sera une fusion des deux listes ordonneacuteesQuelques essais sur le notebook ont tendance agrave montrer que lrsquoordre a peu drsquoimpact sur le reacutesultat final lorsque lescompleacutetions ont le mecircme poids Avec quatre mots la somme des gains est identique quelque soit lrsquoordre

p=poids g=gain

200 - actuellement p=10 g=110 | acte p=10 g=20 | actes p=10 g=20 | actualiteacute p=1rarr0 g=50200 - acte p=10 g=30 | actuellement p=10 g=100 | actualiteacute p=10 g=60 | actes p=1rarr0 g=10200 - acte p=10 g=30 | actes p=10 g=30 | actualiteacute p=10 g=60 | actuellement p=10rarrg=80

Mais si on change le poids de lrsquoune drsquoelles elle se retrouve en premiegravere position

192 - actes p=20 g=40 | actuellement p=10 g=100 | acte p=10 g=10 | actualiteacute p=1rarr0 g=50192 - actes p=20 g=40 | actuellement p=10 g=100 | actualiteacute p=10 g=60 | acte p=1rarr0 g=00

206 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

513 Nouvelle meacutetrique

bull Intuitions (page 207)bull Formalisation (page 208)bull Quelques reacutesultats (page 208)bull Deacutefinition avanceacutee (page 208)bull Questions (page 209)

Intuitions

1 La meacutetrique actuelle nrsquoest pas la meilleure2 Si les mots nrsquoont pas de long preacutefixes en commun il vaut mieux placer le mot le plus freacutequent en premiegravere

position Pour les mots de freacutequence identique lrsquoordre a peu drsquoimportance3 Srsquoil existe une seacutequence de mots emboicircteacutes les gains sont minimes agrave moins drsquoenlever des mots ou de poser les

grandes compleacutetions drsquoabordLes intuitions 2 et 3 seront sans doute remise en question en consideacuterant une nouvelle meacutetrique On considegraverelrsquoensemble des compleacutetions S composeacute de deux mots actuellement actualiteacute Le gain moyen par mots est de 9caractegraveres eacuteconomiseacutes Si on ajoute le grand preacutefixe commun agrave la liste actu ce gain moyen tombe agrave 633 (voirCompleacutetion (page 370)) quelque soit lrsquoordre choisi pour les compleacutetions Toutefois si on ne prend pas en comptele gain sur le mot actu car ce nrsquoest pas un mot correct mais plus un mot qui aide la lecture de la liste ce gain moyentombe agrave 8 seulement En conclusion si lrsquoutilisateur tape la lettre a et qursquoon lui montre ceci

actuactualiteacuteactuellement

Au lieu de

actualiteacuteactuellement

Il doit taper en moyenne un caractegravere de plus pour obtenir le mot qursquoil cherche Et la meacutetrique ne montre pas reacuteellementde preacutefeacuterence pour lrsquoordre drsquoaffichage des compleacutetions Pourtant lrsquoutilisateur pourrait tregraves bien utiliser la seacutequence detouches suivantes

touche mot composeacutea abas actu (compleacutetion)e actuebas actuellement

Dans cet exemple aussi petit on ne gagnerait pas grand-chose mais cela vaut le coup drsquoeacutetudier cette piste pour desvocabulaires plus grand se servir des preacutefixes commun comme tremplin pour les mots plus grand Lrsquoeffect positionperdrait un peu de son influence

51 Compleacutetion 207

Machine Learning Statistiques et Programmation Version 035930

Formalisation

On reprend la premiegravere meacutetrique (51)

M(q S) = min0⩽k⩽l(q)

k +K(q k S)

La fonction K(q k S) est deacutefinie par (52)

Deacutefinition D1 Dynamic Minimum KeystrokeOn deacutefinit la faccedilon optimale de saisir une requecircte sachant un systegraveme de compleacutetion S comme eacutetant le minimum obtenu

M prime(q S) = min0⩽kltl(q)

M prime(q[1k] S) + min(K(q k S) l(q)minus k)

On prend comme convention M prime(empty S) = 0 Le calcul de la meacutetrique se construit comme une suite qui part des chaicircnesles plus courtes aux plus longues La meacutetrique est donc bien deacutefinie Contrairement agrave la premiegravere meacutetrique le calculdeacutepend du reacutesultat pour tous les preacutefixes drsquoune compleacutetion

proprieacuteteacute P1 meacutetriquesforallq M prime(q S) ⩽ M(q S)

Si q isin S crsquoest eacutevident puisque M prime(q S) ⩽ M prime(empty S) + l(q) Si q isin S cela deacutecoule de la constation preacuteceacutedentepuisque M prime(q S) ⩽ M prime(q[[1k]] S) +K(q k S) ⩽ k +K(q k S)

Quelques reacutesultats

On considegravere la liste des mots actuellement actualiteacute actuel On compare les ordres qui maximisent la premiegravereet la seconde meacutetriques ainsi que le gain obtenu Premiegravere meacutetrique

70 - actuellement p=10 g=110 | actuel p=10 g=40 | actualiteacute p=10 g=6070 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actuel p=10 g=3070 - actuel p=10 g=50 | actuellement p=10 g=100 | actualiteacute p=10 g=60

Seconde meacutetrique

7333 - actuel p=10 g=50 | actualiteacute p=10 g=70 | actuellement p=10 g=10070 - actuellement p=10 g=110 | actuel p=10 g=40 | actualiteacute p=10 g=60

On note que la seconde meacutetrique propose un meilleur gain ce qui est attendu mais aussi que le mot actuel sera placeacutedevant le mot actuellement plus long sans que cela souffre drsquoambiguiumlteacute

Deacutefinition avanceacutee

Dans les faits le Dynamic Minimum Keystroke sous-estime le nombre de caractegraveres neacutecessaires Lorsqursquoon utilise unmot comme tremplin on peut aiseacutement le compleacuteter mais il faut presser une touche ou attendre un peu pour voir lesnouvelles compleacutetions associeacutees agrave la premiegravere compleacutetion choisie et maintenant consideacutereacute comme preacutefixe Crsquoest ceque prend en compte la deacutefinition suivante

Deacutefinition D2 Dynamic Minimum Keystroke modifieacute

208 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

On deacutefinit la faccedilon optimale de saisir une requecircte sachant un systegraveme de compleacutetion S comme eacutetant le minimum obtenu

Mrdquo(q S) = min

min1⩽k⩽l(q) Mrdquo(q[1k minus 1] S) + 1 +min(K(q k S) l(q)minus k)min0⩽k⩽l(q) Mrdquo(q[1k] S) + δ +min(K(q k S) l(q)minus k)

Si on prend comme exemple la requecircte machine learning le premier cas correspond agrave la seacutequence bull seacutelection de la compleacutetion machinebull pression de la touche espacebull seacutelection de la compleacutetion machine learning

Et le second cas agrave la seacutequence bull seacutelection de la compleacutetion machinebull pression de la touche droite pour afficher les nouvelles compleacutetionsbull seacutelection de la compleacutetion machine learning

Le coucirct de la pression de la touche droite est noteacute δ ⩽ 1 qursquoon prendra infeacuterieur agrave 1 On remarque eacutegalement qursquoaveccette nouvelle meacutetrique il est possible de diminuer le nombre minimum de touches agrave presser pour des requecirctes en dehorsde lrsquoensemble S agrave partir du moment ougrave elles prolongent une compleacutetion existante Crsquoest lagrave un point tregraves inteacuteressant decette meacutetrique De maniegravere eacutevidente forallq M prime(q S) ⩽ Mrdquo(q S)

Questions

Gracircce agrave cette meacutetrique on peut envisager de trouver des reacuteponses agrave certaines questions 1 Les diffeacuterences entre les trois meacutetriques sont-elles neacutegligeables ou non 2 Ajouter des compleacutetions non preacutesentes dans le corpus ameacuteliore-t-elle la meacutetrique Mecircme question pour la

suppression 3 Existe-t-il un moyen de construire de faccedilon iteacuterative lrsquoensemble des compleacutetions ou plutocirct lrsquoordre qui minimise

la meacutetrice M prime(q S) 4 Comment calculer rapidement les meacutetriques pour les requecirctes dans lrsquoensemble S et en dehors

Pour la premiegravere question une expeacuterience devrait donner une piste agrave deacutefaut drsquoy reacutepondre Pour la seconde il nrsquoestpas neacutecessaire drsquoenvisager la suppression de compleacutetions car celles-ci devraient naturellement se positionner en fin deliste Lrsquoajout correspond agrave la situation ougrave beaucoup de compleacutetions partagent le mecircme preacutefixe sans pour autant que cepreacutefixe fasse partie de la liste des compleacutetions

maceacuterermalinemachineriemachinerie infernalemachinerie infernalissimemachine artistiquemachine automatiquemachine chaplinmachine intelligentemachine learning

Lrsquoideacutee consiste agrave ajouter la compleacutetion machine qui sert de preacutefixe commun agrave beaucoup de compleacutetions et cela ameacuteliorele gain moyen dans le cas preacutesent (sans compter le gain sur la requecircte machine) Enfin la troisiegraveme et la quatriegravemequestion la reacuteponse requiert la deacutemonstration de quelques proprieacuteteacutes matheacutematiques Mais avant jrsquoajouterai que lapremiegravere meacutetrique M correspond agrave la ligne de commande Windows et la meacutetrique M prime correspond agrave la ligne decommande Linux

51 Compleacutetion 209

Machine Learning Statistiques et Programmation Version 035930

514 Proprieacuteteacutes matheacutematiques

On srsquointeacuteresse principalement agrave la meacutetrique M prime deacutefinie par Dynamic Minimum Keystroke mais les reacutesultats seronteacutetendues aux autres quand cela est possible

bull Calcul pour une compleacutetion (page 210)bull Calcul pour une requecircte en dehors (page 211)bull Compleacutetions emboicircteacutees (page 211)bull Listes tronqueacutees de compleacutetions (page 212)

Calcul pour une compleacutetion

On a besoin drsquoune proprieacuteteacute pour calculer eacuteleacutegamment les meacutetriques pour lrsquoensemble des compleacutetions

Lemme L1 Dynamic Minimum KeystrokeOn note d(q S) la longueur du plus long preacutefixe de q inclus dans S

d(q S) = max l(p)|p ≺ q p isin S p = q

M prime(q S) = mind(qS)⩽kltl(q)

M prime(q[1k] S) + min(K(q k S) l(q)minus k)

Il nrsquoest pas neacutecessaire de regarder tous les preacutefixes mais seulement ceux entre le plus long preacutefixe qui est aussi unecompleacutetion et la requecircte q La deacutemonstration est identique agrave la deacutemonstration du lemme qui suit Lrsquoideacutee de cetteproprieacuteteacute est de pouvoir reacuteduire le coucirct de lrsquoalgorithme de calcul des meacutetriques Ce nrsquoest pas la seule eacutecriture qursquoonpuisse en faitLe calcul de la meacutetrique M prime suggegravere qursquoon doit faire ce calcul dans le sens des preacutefixes croissants mais il serait plussimple de le faire dans le sens des compleacutetions de poids croissant (les compleacutetions de moindre poids sont toujoursafficheacutees avant)

Si lrsquoalgorithme est plus simple (sens de la fleacuteche dans le figure preacuteceacutedente) il faut parfois plusieurs iteacuterations pourobtenir la valeur finale

210 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

Calcul pour une requecircte en dehors

Mais il est faux de dire que pour deux requecirctes en dehors de lrsquoensemble des compleacutetions q1 ⪯ q2 =rArr M prime(q1 S) ⩽M prime(q2 S) Le lemme suivant preacutecise pourquoi

Lemme L2 calcul de Miquest(q S)On suppose que p(q S) est la compleacutetion la plus longue de lrsquoensemble S qui commence q

klowast = max k|q[[1k]] ≺ q et q isin Sp(q S) = q[[1klowast]]

La meacutetrique M prime(q S) veacuterifie la proprieacuteteacute suivante

M prime(q S) = M prime(p(q S) S) + l(q)minus l(p(q S))

La meacutetrique M prime(q S) est eacutegale agrave celle du plus long preacutefixe inclus dans lrsquoensemble les compleacutetions agrave laquelle on ajoutela diffeacuterence des longueurs Cela correspond aux caractegraveres que lrsquoutilisateur doit saisir La deacutemonstration est assezsimple On suppose que cela nrsquoest pas vrai et qursquoil existe un existe k lt klowast tel que

M prime(q[[1k]] S) + l(q)minus l(q[[1k]]) lt M prime(q[[1klowast]] S) + l(q)minus l(q[[1klowast]])

=rArr M prime(q[[1k]] S)minus k lt M prime(q[[1klowast]] S)minus klowast

=rArr M prime(q[[1k]] S) + (klowast minus k) lt M prime(q[[1klowast]] S)

Cela signifie qursquoon a reacuteussi une faccedilon plus efficace drsquoeacutecrire le preacutefixe q[[1klowast]] Or par deacutefinition M prime(q[[1klowast]] S) estcenseacutee ecirctre le nombre de caractegraveres minimal pour obtenir q[[1klowast]] Ce nrsquoest donc pas possible Cette proprieacuteteacute estimportante puisque pour calculer M prime(q[[1klowast]] S) il suffit de regarder le plus long preacutefixe appartenant agrave lrsquoensembledes compleacutetions et seulement celui-ci Cet algorithme et impleacutementeacute par la meacutethode enumerate_test_metric Ence qui concerne la meacutetrique M par deacutefinition forallq isin S M(q S) = 0 La meacutetrique Mrdquo mrsquoeacutevoque la cocircte anglaise198Lrsquoiteacuterationn fonctionne de la mecircme maniegravere agrave partir du moment ougrave la requecircte consideacutereacutee ne fait pas partie de lrsquoensembledes compleacutetions mais il y a lrsquoeacutetage drsquoen dessous qui pose un doute Il y a un brin de poeacutesie dans ce +1 Lrsquoapplicationde lrsquoimpleacutementation du calcul de la meacutetrique montre que M prime et Mrdquo sont tregraves souvent eacutegales Je vais laisser ce δ sousforme de poeacutesie pour le moment

A faire terminer la deacutemonstration pour MLa cocircte anglaise

Compleacutetions emboicircteacutees

On considegravere les compleacutetions suivantes

actuactualiteacuteactualiteacutesactuelactuellement

Pour le preacutefixe actue on suggegravere actuel at actuellement Pour le preacutefixe actua on suggegravere actualiteacute at actualiteacutes Pourle preacutefixe actu on suggegravere la concateacutenation de ces deux listes Par conseacutequent pour construire les listes de compleacutetionsassocieacutees agrave chaque preacutefixe il paraicirct de partir des feuilles de lrsquoarbre puis de fusionner les listes de compleacutetions jusqursquoau

198 httpswwwyoutubecomwatchv=YV54e3R-rLg

51 Compleacutetion 211

Machine Learning Statistiques et Programmation Version 035930

noeud racine Plus concregravetement si deux compleacutetions veacuterifie q1 ⪯ q2 alors lrsquoensemble des compleacutetions veacuterifieC(q1) supC(q2) On peut mecircme dire que C(q) = cupC(s)|s ≻ q isin S Cela signifie qursquoune fois qursquoon a construit un trierepreacutesentant lrsquoensemble des compleacutetions il suffit de partir des feuilles de lrsquoarbre jusqursquoagrave la racine pour construire laliste des compleacutetions agrave chaque eacutetape et que pour un noeud preacutecis la liste des compleacutetions est lrsquounion des listes decompleacutetions des noeuds fils

Listes tronqueacutees de compleacutetions

On reprend la premiegravere meacutetrique (51) qui utilise la fonction K(q k S) deacutefinie en (52)

M(q S) = min0⩽k⩽l(q)

k +K(q k S)

Etant donneacute que le nombre minimum de caractegraveres pour obtenir une compleacutetion dans le trie ne peut pas ecirctre supeacuterieuragrave la longueur si K(q k S) gt l(q)minus k on sait deacutejagrave que que le preacutefixe q[1k] ne sera pas le minimum Cette remarqueest applicable aux meacutetriques M prime et Mrdquo

515 Problegraveme drsquooptimisation

bull Enonceacute 1 (page 212)bull Enonceacute 2 (page 213)bull Une ideacutee (page 213)

Enonceacute 1

Problegraveme P1 Optimiser un systegraveme de compleacutetionOn suppose que lrsquoensemble des compleacutetions C = cj est connu On souhaite ordonner cet ensemble pour obtenirlrsquoensemble ordonneacute des compleacutetions S = (si) qursquoon considegravere comme une permutation σ de lrsquoensemble de deacutepart S(σ) = (si) = (cσ(j)) Ce systegraveme de compleacutetion est destineacute agrave un des utilisateurs qui forment des recherches ourequecirctesQ = (qi wi)1⩽i⩽NQ

qi est la requecircte wi est la freacutequence associeacutee agrave cette requecircte On deacutefinit lrsquoeffort demandeacuteaux utilisateurs par ce systegraveme de compleacutetion

E(CQ σ) =

NQsumi=1

wiMprime(qi S(σ))

Deacuteterminer le meilleur systegraveme de compleacutetion revient agrave trouver la permutation σ qui minimise E(CQ σ)

La meacutetrique M prime peut ecirctre remplaceacutee par Mrdquo La diffeacuterence peut paraicirctre insignifiante mais elle ne lrsquoest pas tant queccedila Le systegraveme de compleacutetion peut se concevoir comme une compression le systegraveme de compleacutetion permet de coderlrsquoensemble des recherches drsquoun utilisateur Q avec moins de caractegraveres que celui-ci en a besoin pour les taper Onajoute les caractegraveres rightarrow et darr aux lettres de lrsquoalphabet et cela permet de coder plus rapidement une requecirctesLa quantiteacute suivante peut ecirctre consideacutereacutee comme le taux de compression

t(CQ σ) =E(CQ σ)sumNQ

i=1 wil(qi)

Lrsquoideacutee derriegravere cette meacutetaphore est le fait drsquoavoir une ideacutee de la borne infeacuterieure pour ce taux de compression Onsrsquoinspirer de la complexiteacute de Lempel-Ziv199 (calculating Lempel-Ziv (LZ) complexity (aka sequence complexity) of

199 httpsfrwikipediaorgwikiComplexitC3A9_de_Lempel-Ziv

212 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

a binary string200) ou du codage de Huffman201 M prime permet une compression avec perte et Mrdquo sans perte Le calculde M prime autorise deux jumps de suite

abb(darrdarrdarrdarrdarr)

Mais les deux derniegraveres touches darr peuvent srsquoappliquer au premier preacutefixe ou aux suggestions montreacutees par la compleacutetionobtenue apregraves trois darr

abb(darrdarrdarr)(darrdarr)

La meacutetrique Mrdquo interdit ce cas

Enonceacute 2

Problegraveme P2 Optimiser un systegraveme de compleacutetion filtreacuteOn suppose que lrsquoensemble des compleacutetions C = cj est connu On souhaite ordonner cet ensemble pour obtenirlrsquoensemble ordonneacute des compleacutetions S = (si) qursquoon considegravere comme une permutation σ de lrsquoensemble de deacutepart S(σ) = (si) = (cσ(j)) On utilise aussi une fonction f qui filtre les suggestions montreacutees agrave lrsquoutilisateur elle ne changepas lrsquoordre mais peut cacher certaines suggestions si elles ne sont pas pertinentes Ce systegraveme de compleacutetion est destineacuteagrave un des utilisateurs qui forment des recherches ou requecirctes Q = (qi wi)1⩽i⩽NQ

qi est la requecircte wi est la freacutequenceassocieacutee agrave cette requecircte On deacutefinit lrsquoeffort demandeacute aux utilisateurs par ce systegraveme de compleacutetion

E(CQ σ f) =

NQsumi=1

wiMprime(qi S(σ) f)

Deacuteterminer le meilleur systegraveme de compleacutetion revient agrave trouver la permutation σ qui minimise E(CQ σ f)

Comme suggeacutereacute au paragraphe Il faut montrer toutes les compleacutetions (page 205) le filtre f peut rejetter une suggestionsi elle est montreacutee agrave une position qui ne permet aucun gain agrave lrsquoutilisateur crsquoest-agrave-dire que la diffeacuterence des longueurscompleacutetion - preacutefixe est plus petite que la position ougrave elle est montreacutee

Une ideacutee

On aimerait bien pouvoir trouver lrsquoordre optimal par morceau supposer que lrsquoordre optimal pour lrsquoensemble descompleacutetions correspond agrave lrsquoordre des compleacutetions sur un sous-ensemble partageant le mecircme preacutefixe

Lemme L1 Miquestet sous-ensembleOn suppose que la compleacutetion q est preacutefixe pour la requecircte qprime et σ(q) lt σ(qprime) ce qui signifie que la compleacutetionq est toujours afficheacutee avant la compleacutetion qprime si elles apparaissent ensemble Alors M prime(q S) lt M prime(qprime S) Plusspeacutecifiquement si on considegravere lrsquoensemble Sprime(q) = sminus q isin S|q ≺ s (sminus q est la compleacutetion s sans son preacutefixe q)

M prime(qprime S) = M prime(qprime minus q Sprime) +M prime(q S)

On sait deacutejagrave par construction que M prime(qprime S) ⩽ M prime(qprimeminusq Sprime)+M prime(q S) Par lrsquoabsurde on suppose que M prime(qprime S) ltM prime(qprimeminusq Sprime)+M prime(q S) comme la requecircte qminusqprime est toujours afficheacutee avant la requecircte qprime cela voudrait dire qursquoon auraittrouveacute une faccedilon plus optimale drsquoeacutecrire la requecircte qminus qprime avec le systegraveme S ce qui impossible drsquoapregraves la deacutefinition de lameacutetrique M prime Cette proprieacuteteacute nrsquoaide pas forcmeacutement agrave trouver un algorithme pour optimiser lrsquoordre des compleacutetionsdans la mesure ougrave la proprieacuteteacute suppose qursquoune compleacutetion soit afficheacute avant toutes celles dont elle est le preacutefixe La

200 httpstackoverflowcomquestions4946695calculating-lempel-ziv-lz-complexity-aka-sequence-complexity-of-a-binary-str201 httpsfrwikipediaorgwikiCodage_de_Huffman

51 Compleacutetion 213

Machine Learning Statistiques et Programmation Version 035930

proprieacuteteacute suivante est eacutevidemment vraie pour le cas particulier qursquoon vient de mentionner Si elle est vraie cela devraitpermettre de proceacuteder par sous-ensemble pour trouver lrsquoordre optimal

Theacuteoregraveme T1 Miquest ordre et sous-ensembleSoit q une requecircte de lrsquoensemble de compleacutetion S ordonneacutees selon sigma Si cet ordre veacuterifie

forallk σ(q[1k]) ⩽ σ(q[1k + 1]) (53)

On note lrsquoensemble Sprime(q[1k]) = q[k + 1len(q)] isin S alors

forallk M prime(q[1k] S) = M prime(q[k + 1l(q)] Sprime(q[1k]) +M prime(q[1k] S)

Ceci deacutecoule de lrsquoapplication du lemme preacuteceacutedent Ce theacuteoregraveme permet presque de deacuteterminer le meilleur ordre sigmaparmi ceux qui veacuterifie la contrainte (53) agrave savoir une requecircte courte est toujours afficheacutee avant celles qui la complegravetentOn procegravede par reacutecurrence on suppose connu les ordres σ(q) pour lrsquoensemble des compleacutetions qui commencent par lepreacutefixe p = q[1k] Sprime(q[1k]) = q|q[1k] = p q isin S Pour i = kminus 1 le meilleur ordre σ revient agrave fusionner leslistes ordonneacutees obtenues pour chaque preacutefixe de longueur k Il faut deacutemontrer la possibiliteacute de traiter les compleacutetionspar ordre croissant

516 Impleacutementation

bull Notion de trie (page 214)bull Algorithme eacuteleacutegant (page 215)

Jrsquoallais vous raconter en deacutetail ce qursquoest un trie202 et le paragraphe suivant vous en dira sans doute un peu plus agrave cesujet Le trie203 est le moyen le plus efficace de trouver un mot aleacuteatoire ou un preacutefixe aleacuteatoire dans une liste Mais il ya mieux et plus simple dans notre cas ougrave il faut trouver une longue liste de mots connue agrave lrsquoavance - donc pas aleacuteatoire- Et puis crsquoeacutetait sous mes yeux Il y a plus simple et aussi efficace quand les listes des mots et des compleacutetions sontconnues agrave lrsquoavance

Notion de trie

Une impleacutementation des tries est deacutecrites dans deux notebooks Arbre et Trie204 Les reacutesultats de ce chapitre onteacuteteacute produits avec le module completion et le notebook Compleacutetion (page 370) Le notebook Completion profiling(page 363) montre les reacutesultats du profiling Lrsquoimpleacutementation Python est tregraves gourmande en meacutemoire et elle seraitplus efficace en C++utilisation ou rechercheCrsquoest diffeacuterent de construire toutes les compleacutetions pour un preacutefixe plutocirct que toutes les compleacutetions pour tous lespreacutefixes Le premier cas correspond agrave un utilisateur qui cherche quelque chose Il faut ecirctre rapide quitte agrave retourner unreacutesultat tronqueacuteLe second cas correspond agrave objectif de recherche des drsquooptimisation Les enjeux sont plus de reacuteussir agrave calculer toutesles compleacutetions en un temps raisonnable et avec une utilisation meacutemoire raisonnable eacutegalementmeacutemoireDrsquoapregraves la remarque preacuteceacutedente il nrsquoest pas utile de conserver pour un preacutefixe donneacute lrsquointeacutegraliteacute des compleacutetions quicommencent par ce preacutefixe Dans le pire des cas cette liste a besoin de contenir autant de compleacutetions que le nombrede caractegraveres de la plus longue compleacutetioms

202 httpsfrwikipediaorgwikiTrie_(informatique)203 httpsfrwikipediaorgwikiTrie_(informatique)204 httpwwwxavierduprefrappensae_teaching_cshelpsphinxnotebooks_gs1a_A_arbre_triehtml

214 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

Algorithme eacuteleacutegant

Il faut relire le premier problegraveme diquestoptimisation (page 212) pour commencer agrave se poser la question comment calculerla quantiteacute E(CC σ) lorsque σ correspond agrave lrsquoordre alphabeacutetique La reacuteponse est simple il suffit de parcourir lescompleacutetions une et une seule fois Supposons qursquoau cours de ce parcours on est agrave la compleacutetion drsquoindice i On conserveun compteur p(k i) = K(c(i) k C) qui repreacutesente la position de la compleacutetion c(i) dans la liste des compleacutetionsafficheacutees par le systegraveme de compleacutetion pour le preacutefixe c(i)[[1k]] Le coucirct de lrsquoalgorithme est en O(N lnN +LN) ougraveN est le nombre de compleacutetions et L la longueur maximale drsquoune compleacutetionDans le cas ougrave σ est quelconque et C = Q on procegravede en deux eacutetapes Dans un premier temps on utilise une variantede lrsquoalgorithme preacuteceacutedent pour calculer M prime(q C) pour les requecirctes q dans lrsquoensemble des compleacutetionsDans un second temps on effectue une sorte de fusion entre les deux listes trieacutees alphabeacutetiquement Le coucirct delrsquoalgorithme est en O(ILN + 2N lnN +M lnM +max(NM)) ougrave M est le nombre de requecirctes dans lrsquoensembleQ Cette partie repose sur le lemme (page 211) lieacute au calcul des meacutetriques pour les reacutequecirctes hors de lrsquoensembledes compleacutetions I est un nombre drsquoiteacuteration neacutecessaires pour que les meacutetriques M prime convergent pour lrsquoensemble descompleacutetions En pratique crsquoest tregraves petitLrsquoalgorithme est impleacutementeacute dans le module completion_simple et plus particuliegraverement la fonctionCompletionSystemcompute_metrics

517 Digressions

bull Synonymes Contexte (page 215)bull Source (page 216)bull Fonction de gain (page 216)bull Minuscules majuscules (page 216)bull Suppression de caractegraveres (page 216)bull Coucirct drsquoun caractegravere (page 216)bull Compleacutetion partielle (page 216)bull Utilisateurs (page 217)bull Revenir en arriegravere (page 217)

Synonymes Contexte

On utilise dabord les preacutefixes pour chercher les mots dans un trie mails il est tout agrave fait possible de consideacuterer dessynonymes Avec les preacutefixes un noeud a au plus 27 (26 lettres + espaces) caractegraveres suivant possibles Si le preacutefixea des synonymes rien nrsquoempecircche de relier ce noeud avec les successeurs de ses synonymes A ce sujet voir Context-Sensitive Query Auto-Completion205 de Ziv Bar-Yossef et Naama Kraus

205 httptechnionacil~nkrauspapersfr332-bar-yossefpdf

51 Compleacutetion 215

Machine Learning Statistiques et Programmation Version 035930

Source

Dans le cas drsquoun moteur de recherche le trie ou lrsquoensemble S des requecirctes complegravetes est construit agrave partir des requecirctesdes utilisateurs Lorsque le systegraveme de compleacutetion est mise en place la distribution des requecirctes changent Les requecirctesles plus utiliseacutees vont ecirctre encore plus utiliseacutees car les utilisateurs vont moins srsquoeacutegarer en chemin comme srsquoeacutegarer versune faute drsquoorthographe Comment corriger la distribution des requecirctes malgreacute lrsquointervention du systegraveme de compleacutetion Cela pourrait faire lrsquoobjet drsquoun sujet de recherche

Fonction de gain

Jusqursquoagrave preacutesent on a consideacutereacute uniquement le nombre de caractegraveres eacuteconomiseacutes pour deacuteterminer le meilleur ordreRien nrsquoempecircche drsquoajouter une coucirct suppleacutemenaires lieacute agrave lrsquoordre des compleacutetions Une requecircte est peacutenaliseacutee si lescompleacutetions associeacutees sont loin de lrsquoordre alphabeacutetique On peut peacutenaliser un ordre eacuteloigneacute agrave chaque caractegravere ajouteacute

Minuscules majuscules

Crsquoest bien connu on fait peu de ces des accents sur internet De fait mecircme si lrsquoaccent apparaicirct agrave lrsquoeacutecran le systegravemede compleacutetion verra peut de diffeacuterences entre le e et eacute Sur Wikpeacutedia les homonymes sont distingueacutes par un sous-titreentre parenthegravese lrsquoanneacutee pour un eacuteveacutenement sportif reacutegulier On peut imaginer que plusieurs seacutequences de caractegraveresaboutissent agrave la mecircme entreacutee

Suppression de caractegraveres

Nous pourrions consideacuterer le fait de pouvoir supprimer des caractegraveres afin de trouver le chemmin le plus court pourobtenir une requecircte

Coucirct drsquoun caractegravere

Jusqursquoagrave preacutesent la pression drsquoune touche a le mecircme coucirct quelque soit la source un caractegravere une touche vers le basPourtant plus il y a de lettres dans lrsquoalphabet plus le systegraveme de compleacutetion sera performant agrave supposer que les motssoient plus ou moins eacutequireacutepartis selon les caractegraveres (la probabiliteacute du prochain caractegravere est uniforme) On peutconcevoir que chercher une touche lorsque lrsquoalphabet est grand peut prendre un certain temps Le cas du chinois estinteacuteressant car la saisie des caractegraveres206 peut prendre plusieurs touches Faut-il consideacuterer un caractegravere chinois commeuniteacute de deacutecomposition drsquoun mot ougrave la seacutequence des touches qui le construisent Dans le premier cas il faudrait sansdoute peacutenaliser la saisie drsquoun caractegravere en fonction du nombre de touches neacutecessaires pour le former par rapport agrave laseacutelection drsquoune compleacutetion

Compleacutetion partielle

On rappelle la meacutetrique (513) (voir aussi (52))

M prime(q S) = min0⩽k⩽l(q)

M prime(q[1k] S) +K(q k S)

Si on note L(p S) lrsquoensemble des compleacutetions pour le preacutefixe p Que dire de la deacutefinition suivante

M primep(q S) = min

0⩽k⩽l(q)

11L(q[1k]S)=empty

[M prime

p(q[1k] S) +K(q k S)]+

11L(q[1k]S)=empty[minj M

primep(q[1j] S) +M prime

p(q[j + 1] S)]

Cela revient agrave consideacuterer que si le systegraveme de compleacutetion ne propose aucune compleacutetion avec le preacutefixe en cours onpropose des compleacutetions avec un preacutefixe qui ne tient compte que des derniegraveres lettres

206 httpsfrwikipediaorgwikiSaisie_du_chinois_sur_ordinateur

216 Chapter 5 NLP

Machine Learning Statistiques et Programmation Version 035930

Utilisateurs

La modeacutelisation matheacutematique aboutit agrave lrsquooptimisation drsquoune meacutetrique qui ne coiumlncide pas forceacutement agrave la logique delrsquoutilisateur Le fait de montrer une suggestion dans la liste donne en quelques sortes un signal qui indique que cetterequecircte a une bonne drsquoaboutir Crsquoest en particulier vrai si elle est identique agrave celle que lrsquoutilisateur est en train de saisirquand mecircme mecircme elle nrsquoaurait aucun sens La preacutesence drsquoune suggestion conforte lrsquoutilisateur dans le chemin qursquoilchoisitUn autre aspect est le fait qursquoune suggestion la premiegravere par exemple doit rester agrave lrsquoeacutecran si celle-ci inclut le preacutefixesaisit par lrsquoutilisateur Supposons que ce dernier saisisse fac le moteur de suggestions lui montrera en premier facebookIl faudra que facebook demeure en premiegravere position jusqursquoagrave ce lrsquoutilisateur ait soit cliqueacute dessus soit saisi quelquechose de plus long Enlever la suggestion facebook alors que le preacutefixe en cours est faceboo perturbe

Revenir en arriegravere

On pourrait eacutegalement imaginer une meacutetrique qui calcule le meilleur chemin en donnant la possibiliteacute de revenir enarriegravere Par exemple pour saisir eacuteleacutephant un utilisateur pourrait utiliser la suggestion eacuteleacutephants puis enlever le derniers On note la meacutetrique M prime

b

Deacutefinition D1 Dynamic Minimum Keystroke arriegravereOn deacutefinit la faccedilon optimale de saisir une requecircte sachant un systegraveme de compleacutetion S comme eacutetant le minimum obtenu

M primeb(q S) = min

min0⩽kltl(q) M prime

b(q[1k] S) + min(K(q k S) l(q)minus k)mins≻q M prime

b(s S) + l(s)minus l(q)

Le second terme de la meacutetrique neacutecessite de consideacuterer toutes les suggestions dans S qui commencent par le preacutefixe qLe calcul de la meacutetrique peut ecirctre fait en adaptant lrsquoalgorithme reprend les ideacutees du paragraphe Formalisation (page 208)mais il faudra parcourir les suggestions dans lrsquoordre alphabeacutetique puis mettre agrave jour la meacutetrique en les parcourant danslrsquoautre sens On recommence jusqursquoagrave convergenceNotebooks associeacutes

bull Compleacutetion (page 370)bull Completion profiling (page 363)bull Completion Trie and metrics (page 355)bull Compleacutetion Simple (page 376)

51 Compleacutetion 217

Machine Learning Statistiques et Programmation Version 035930

218 Chapter 5 NLP

CHAPTER 6

Meacutetriques

61 Courbe ROC

bull Deacutefinitions (page 220)bull Aire sous la courbe (page 222)

ndash Expression (page 222)ndash Intervalles de confiance (page 223)

bull Intervalles de confiance sur la courbe (page 224)ndash Construction de la courbe ROC (page 224)ndash Meacutethode boostrap (page 225)ndash Aire sous la courbe (page 226)

bull Distribution des scores mauvais et bons (page 226)bull Variantes (page 227)

ndash Taux de lecture ou de reconnaissance (page 227)bull Classification multi-classe (page 228)bull Exemple (page 229)

Ce document introduit la courbe ROC207 (Receiving Operator Characteristic) qui est communeacutement utiliseacutee pourmesurer la performance drsquoun classifieur Il introduit aussi des termes comme preacutecision rappel AUC208 qui sontpreacutesents dans la plupart des articles qui traitent de machine learning Le module roc impleacutemente les calculs ci-dessousqursquoon peut tester avec le notebook ROC (page 332)

207 httpsenwikipediaorgwikiReceiver_operating_characteristic208 httpsenwikipediaorgwikiReceiver_operating_characteristicArea_under_the_curve

219

Machine Learning Statistiques et Programmation Version 035930

611 Deacutefinitions

Supposons que nous avons un classifieur qui classe des observations en un ensemble de classes De plus il donne cettereacuteponse accompagneacutee drsquoun score de pertinence Deux cas sont possibles soit la reacuteponse est bonne (1) soit la reacuteponseest fausse (0) Pour chaque observation on associe un couple (r x) ougrave r est eacutegal agrave 0 ou 1 x est le score de pertinenceOn cherche agrave deacuteterminer agrave partir de quel seuil de pertinence la reacuteponse du classifieuur est fiable En faisant varier xon obtient une courbe (source wikipedia209)

Cette courbe sert eacutegalement agrave comparer diffeacuterents classifieurs Plus une courbe a des valeurs eacuteleveacutees plus lrsquoaire sousla courbe est grande moins le classifieur fait drsquoerreurDrsquoune maniegravere simplifieacutee le classifieur retourne une reacuteponse qui est soit mauvaise (-) soit bonne (+) On peut lrsquoeacutevaluercar pour construire un classifier on dispose toujours drsquoune base contenant les reacuteponses attendues En fonction du scorex et drsquoun seuil s on deacutefinit quatre cas

cas reacuteponse preacutedite est bonne (+) reacuteponse preacutedite est mauvaise (-)x ⩾ s TP vrai (true) positif FP faux positifx lt s TN vrai (true) neacutegatif FN faux neacutegatif

Ces reacutesultats sont souvent preacutesenteacutes selon une matrice confusion

reacuteponse attendue 0 10 TN FP1 FN TP

A partir de ces deacutefinitions on deacutefinit bull la preacutecision210 TP

TP+FP

bull le rappel ou recall211 TPTP+TN

En choisissant un seuil relatif au score de pertinence x au-dessus on valide la reacuteponse du classifieur en-dessous onne la valide pas On peut toujours calculer la preacutecision et le rappel pour toutes les reacuteponses dont le score est au-dessusdrsquoun seuil s La courbe ROC srsquoobtient en faisant varier s

209 httpenwikipediaorgwikiFileRoccurvespng210 httpsenwikipediaorgwikiInformation_retrievalPrecision211 httpsenwikipediaorgwikiInformation_retrievalRecall

220 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

Deacutefinition D1 Courbe ROCOn suppose que Y est la variable aleacuteatoire des scores des expeacuteriences qui ont reacuteussi X est celle des scores desexpeacuteriences qui ont eacutechoueacute On suppose eacutegalement que tous les scores sont indeacutependants On note FY et FX lesfonctions de reacutepartition de ces variables FY (s) = P (Y ⩽ s) et FX(s) = P (X ⩽ s) On deacutefinit en fonction drsquounseuil s isin R

bull R(s) = 1minus FY (s) = P (Y gt s)

bull E(s) = 1minus FX(s) = P (X gt s)

La courbe ROC est le graphe (E(s) R(s)) lorsque s varie dans R

TP (s) deacutesigne les true positifs au-dessus du seuil s avec les notations TP FP FN TN cela revient agrave

E(s) = 1minus TP (s)

TP (s) + TN(s)

R(s) = 1minus FN(s)

FP (s) + FN(s)

On remarque que foralls TP (s) + TN(s) est constant De mecircme pour FP (s) + FN(s)

On remarque que les fonctions s minusrarr E(s) et s minusrarr R(s) sont deacutecroissantes toutes deux Elles sont donc inversiblesDans le cas ougrave la variable aleacuteatoire θ est indeacutependante de la variable X la courbe ROC est une droite reliant les points(0 0) et (1minus p p) ougrave p = P (θ = 1) Ceci signifie que la connaissance du score X nrsquoapporte pas drsquoinformation quantagrave la reacuteussite de lrsquoexpeacuterienceIl peut paraicirctre complexe de distinguer la reacuteponse et le score du classifieur Crsquoest pourtant neacutecessaire dans le cas ougravele classifieur retourne un entier qui deacutesigne une classe parmi n Un cas positif est lorsque la classe preacutedite est eacutegale agravela classe attendue il est neacutegatif dans le cas contraire La courbe peut ecirctre adapteacutee pour drsquoautres problegravemes tels que leranking (voir [Agarwal2005])

61 Courbe ROC 221

Machine Learning Statistiques et Programmation Version 035930

Une autre faccedilon de lrsquoexprimer car je ne retiens jamais la deacutefinition des FP TP FN TN Pour quelqursquoun qui doitreacutefleacutechir trois secondes agrave chaque fois qursquoon me demande ougrave est la gauche ce nrsquoest jamais eacutevident

N+ =sumn

i=1 11yi==1TPR(s) = 1

N+

sumni=1 11score(Xi)⩾s11yi==1

FPR(s) = 11minusN+

sumni=1 11score(Xi)⩾s11yi =1

x = FPR(s) y = TPR(s) (FPR = False Positive Rate TPR = True Positive Rate)

612 Aire sous la courbe

Expression

Lrsquoaire sous la courbe (AUC) correspond agrave lrsquointeacutegrale de la fonction ROC Elle se calcule agrave partir du theacuteoregraveme suivant

Theacuteoregraveme T1 Aire sous la courbe (AUC)On utilise les notations de la deacutefinition de la Courbe ROC (page 221) Lrsquoaire sous la courbe ROC est eacutegale agrave P (Y gt X)

RappelSoit X une variable aleacuteatoire de densiteacute f et de fonction de reacutepartition F Si U = F (X) alors

P (U ⩽ t) = P (F (X) ⩽ t) = P(X ⩽ Fminus1(t)

)= F

(Fminus1(t)

)= t

La variable U est de loi uniforme sur [0 1] De plus soit g une fonction inteacutegrable quelconque on pose u = F (x) et intRg(x) f(x) dx =

int[01]

g(Fminus1(u)) du

DeacutemonstrationOn note fX la densiteacute de la variable X et fY celle de la variable Y On peut alors deacutefinir la probabiliteacute P (Y gt X) parune inteacutegrale

P (Y gt X) =

intx

inty

fX(x) fY (y) 11ygtxdxdy

On note FX la fonction de reacutepartition de X soit FX(x) =int x

minusinfin fX(u)du On pose comme changement de variable u = FX(x) On en deacuteduit que du = fX(x)dx La variable aleacuteatoire U = FX(X) est uniforme et comprise dans [0 1]

P (Y gt X) =

intx

fX(x)dx

inty

fY (y) 11ygtxdy

=

intu

du

inty

fY (y) 11ygtFminus1X (u)dy

=

intu

du P(Y gt Fminus1

X (u))

222 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

Or si u = FX(s) = E(s) alors Fminus1X (u) = s et P

(Y gt Fminus1

X (u))= Rprime(s) Par conseacutequent

P (Y gt X) =

intu

du P(Y gt Fminus1

X (u))=

intu

du Rprime(Fminus1X (u))

Cette derniegravere expression est lrsquoaire rechercheacutee Ce theacuteoregraveme nous permet de deacutefinir un estimateur pour lrsquoaire sous lacourbe ROC agrave lrsquoaide des U-statistiques212 de Mann-Whitney213 (voir [Saporta1990])

Corollaire C1 Estimateur de lrsquoaire sous la courbe ROCOn dispose des scores (Y1 Yn) des expeacuteriences qui ont reacuteussi et (X1 Xm) les scores des expeacuteriences qui onteacutechoueacute On suppose eacutegalement que tous les scores sont indeacutependants Les scores (Yi) sont identiquement distribueacutesil en est de mecircme pour les scores (Xi) Un estimateur de lrsquoaire A sous la courbe ROCiquestest

A =1

nm

msumi=1

nsumj=1

(11YjgtXi +

1

211Yj=Xi

)(61)

DeacutemonstrationLa deacutemonstration est eacutevidente

E(A)=

1

nm

msumi=1

nsumj=1

(P (Yj gt Xi) +

1

2P (Xi = Yj)

)= P (Y gt X) +

1

2P (Y = X)

Dans le cas ougrave X ou Y sont continues P (X = Y ) = 0

Intervalles de confiance

Il est possible de deacuteterminer un intervalle de confiance pour cet estimateur Le theacuteoregraveme central limite nous permet dedire que cet estimateur tend vers une loi normale lorsque n et m tendent vers lrsquoinfini

Corollaire C2 Variance de lrsquoestimateur AUCOn note PX = P (X lt min Yi Yj) et PY = P (max Xi Xj lt Y ) Xi et Xj sont de mecircme loi que X Yi Yj

sont de mecircme loi que Y La variance de lrsquoestimateur A deacutefinie par (61) est

VA =A(1minus A)

nm

[1 + (nminus 1)

PY minus A2

A(1minus A)+ (mminus 1)

PX minus A2

A(1minus A)

]

DeacutemonstrationCette deacutemonstration nrsquoest vraie que dans le cas continu Par conseacutequent P (X = Y ) = 0 On calcule tout drsquoabordEA2 et on utilise le fait que VA = E

(A2)minus A2

A2 =1

n2m2

msumi=1

nsumj=1

11XiltYj

2

=1

n2m2

msumi=1

nsumj=1

msumk=1

nsuml=1

11XiltYj11XkltYl

A2 = 1n2m2

summi=1

sumnj=1 11XiltYj

+ 1n2m2

summi=1

sumnj=1

sumk =i 11XiltYj11XkltYj

+ 1n2m2

summi=1

sumnj=1

suml =j 11XiltYj11XiltYl

+ 1n2m2

summi=1

sumnj=1

sumk =i

suml =j 11XiltYj11XkltYl

212 httpsenwikipediaorgwikiU-statistic213 httpsfrwikipediaorgwikiTest_de_Wilcoxon-Mann-Whitney

61 Courbe ROC 223

Machine Learning Statistiques et Programmation Version 035930

On en deacuteduit que

EA2 =A

nm+

nminus 1

nmP (max Xi Xk lt Yj) +

mminus 1

nmP (Xi lt min Yj Yl) +

nmminus nminusmminus 1

nmA2

VA2 =1

nm

[A+ (nminus 1)PY + (mminus 1)PX minus (n+m+ 1)A2

]=

1

nm

[A+ (nminus 1)

(PY minus A2

)+ (mminus 1)

(PX minus A2

)+ A2

]On retrouve lrsquoexpression chercheacutee

613 Intervalles de confiance sur la courbe

Les systegravemes de reconnaissance sont souvent ajusteacutes de telle maniegravere que le taux drsquoerreur soit constant par exemple1 Crsquoest la proportion de documents reconnus qui deacutetermine la performance de ce systegraveme Lrsquoobjectif ce paragrapheest de deacuteterminer un intervalle de confiance du taux de reconnaissance pour un taux drsquoerreur fixeacute

Construction de la courbe ROC

Ce premier paragraphe deacutetaille la maniegravere dont est construite une courbe ROC (voir Courbe ROC (page 221))

Algorithme A1 Courbe ROCOn suppose qursquoon dispose drsquoun ensemble de points (Xi θi) isin Rtimes0 1 pour i isin 1 n X_i est le score obtenupour lrsquoexpeacuterience i theta_i vaut 1 si elle a reacuteussi et 0 si elle a eacutechoueacute On suppose eacutegalement que cette liste est trieacuteepar ordre croissant forall i X_i infegal X_i+1 On souhaite eacutegalement tracer k points sur la courbe on deacuteterminepour cela k seuils ensembles_1s_k deacutefinis par forallj sk = X j k

n

On construit ensuite les points (Rj Ej) deacutefinis par

Rj =1

n

nsumi=1

θi11Xi⩾sj et Ej =1

n

nsumi=1

(1minus θi) 11Xi⩾sj

La courbe ROC est composeacutee de lrsquoensemble ROC = (Ej Rj) |1 ⩽ j ⩽ k

Les deux suites (Rj)j et (Ej)j sont toutes les deux deacutecroissantes drsquoapregraves leur deacutefinition La courbe peut ecirctre renduecontinue par interpolation

Deacutefinition D2 taux de classification agrave erreur fixeOn cherche un taux de reconnaissance pour un taux drsquoerreur donneacute On dispose pour cela drsquoune courbe ROC obtenuepar lrsquoalgorithme de la courbe ROC (page 224) et deacutefinie par les points ROC = (ej rj) |1 ⩽ j ⩽ k On suppose icique (e1 r1) = (1 1) et (ek rk) = (0 ) Si ce nrsquoest pas le cas on ajoute ces valeurs agrave lrsquoensemble ROC Pour un taux drsquoerreur donneacute elowast on cherche jlowast tel que

ejlowast+1 ⩽ elowast ⩽ ejlowast

Le taux de reconnaissance ρ chercheacute est donneacute par

ρ =elowast minus xjlowast

xjlowast+1 minus xjlowast[rjlowast+1 minus rjlowast ] + rjlowast

Il ne reste plus qursquoagrave deacutetailler la meacutethode bootstrap

224 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

Meacutethode boostrap

Une seule courbe ROC ne permet drsquoobtenir qursquoun seul taux On cherche ici agrave construire plusieurs courbes ROC agravepartir de la mecircme expeacuterience de faccedilon agrave obtenir plusieurs taux de reconnaissance pour le mecircme taux drsquoerreur De cettemaniegravere il sera possible de deacuteterminer un intervalle de confiance On srsquoinspire pour cela des meacutethodes de bootstrap214

Algorithme A2 Courbe ROC meacutethode boostrapOn dispose toujours du nuage de points E = (Xi θi) isin Rtimes 0 1 avec i isin 1 n On choisit C isin N le nombrede courbes ROC qursquoon deacutesire tracer Pour chaque courbe c isin 1 C

bull On construit un nouvel ensemble (X primei θ

primei)1⩽i⩽n construit par un tirage aleacuteatoire dans lrsquoensemble E avec remise

bull Lrsquoalgorithme de la courbe ROC (page 224) permet de constuire la courbe RkOC

bull Lrsquoalgorithme de taux de classification agrave erreur fixe (page 224) permet ensuite de deacuteterminer un taux dereconnaissance ρk pour le taux drsquoerreur elowast

La liste (ρ1 ρC) est trieacutee par ordre croissant Les quantiles sont ensuite utiliseacutes pour deacuteterminer lrsquointervalle deconfiance [ρ1 ρ2] du taux de reconnaissance pour le taux drsquoerreur elowast de telle sorte que

P (ρ isin [ρ1 ρ2]) = 1minus α

On prend geacuteneacuteralement α = 005

Cet algorithme aboutit aux reacutesultats suivants

La premiegravere image est celle drsquoune courbe ROC (lrsquoaxe des abscisses est inverseacute) la seconde repreacutesente toutes cellesobtenues par la meacutethode bootstrap pour trois courbes La troisiegraveme image superpose cent courbes Moins il y a depoints pour estimer une partie de la courbe plus les courbes sont espaceacutees Ces courbes ont eacuteteacute construites avec 12000points Le taux de lecture pour 1 drsquoerreur est eacutegal agrave 6809 Lrsquointervalle de confiance agrave 95 est [6610 7016](construit avec 500 courbes) Moyenne (6825) et meacutediane (6812) sont sensiblement eacutegales au taux calculeacute sur lapremiegravere courbe construite sans tirage aleacuteatoire Lrsquoeacutecart-type est 1 10 cela donne un intervalle de confiance eacutequivalentau preacuteceacutedent si on considegravere que la moyenne des taux suit asymptotiquement une loi normale Cette expeacuterience a eacuteteacutereproduite plusieurs fois et ces bornes sont assez stables contrairement (pm 005 ) aux extremas (pm 1)

214 httpsfrwikipediaorgwikiBootstrap_(statistiques)

61 Courbe ROC 225

Machine Learning Statistiques et Programmation Version 035930

Aire sous la courbe

La meacutethode bootstrap peut elle aussi ecirctre appliqueacutee pour calculer un intervalle de confiance pour lrsquoaire sous la courbe(AUC)

Courbe ROC (lrsquoaxe des abscisse est inverseacute) obtenue pour 100 tirages aleacuteatoires Lrsquoaire sous la courbe est eacutegale agrave080 et lrsquointervalle de confiance agrave 95 mesureacutee par la meacutethode bootsrap est [079 080] Les extremas sont presqueidentiques agrave ces chiffres

614 Distribution des scores mauvais et bons

On appelle un mauvais score un score associeacute agrave un mauvais reacutesultat de mecircme un bon score est le score drsquoun bonreacutesultat Si le score est une probabiliteacute on srsquoattend agrave trouver les bons scores regroupeacutes autour de la valeur 1 Si le scoreest un mauvais score il devrait ecirctre plus proche de zeacutero La figure qui suit montre des distributions obtenues pour deuxproblegravemes diffeacuterents Dans les deux cas le but rechercheacute est la deacutetermination drsquoun seuil seacuteparant le score drsquoun bonreacutesultat de celui drsquoun mauvais reacutesultat Lorsque ceci nrsquoest pas possible le score ne peut correspondre agrave un quelconquecritegravere confiance

La premiegravere courbe montre deux distributions qui se chevauchent mecircme si les bons scores semblent plus concentreacutes

226 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

autour des grandes valeurs Le seconde courbe montre un problegraveme mieux seacuteparable Lrsquoexistence drsquoun seuil entre unbon et un mauvais score est plus plausible

615 Variantes

Taux de lecture ou de reconnaissance

Il nrsquoexiste pas une grande diffeacuterence lorsque le taux drsquoerreur est faible Le taux de lecture est simplement la proportionde documents pour lesquels le score est aussi drsquoun seuil s que la reacuteponse du classifieur soit bonne ou mauvaise Parexemple pour un taux de substitution de 1 si on a 70 en taux de lecture cela signifie que sur 100 documents lesystegraveme va en accepter 70 et parmi ces 70 1 seront mal traiteacutes Le taux de substitution est un taux drsquoerreur rapporteacuteagrave un taux de lecture donneacute Lrsquoinconveacutenient du taux de lecture rapporteacute au taux de substitution est que la meacutethodedeacuteveloppeacutee au paragraphe Intervalles de confiance sur la courbe (page 224) ne srsquoapplique plus aussi bien car pour untaux de substitution donneacute il peut exister plusieurs taux de lecture

La premiegravere image montre 5 courbes taux de lecture taux de substitutions Les courbes ne sont pas monotones etmontre qursquoil existe parfois plusieurs taux de lecture pour un mecircme taux de substitution Comme le calcul des intervallesde confiance fait intervenir une interpolation lineacuteaire lorsque les courbes sont trop cahotiques le calcul retourne desvaleurs faussesOn peut deacutemontrer que la courbe taux de lecture taux de substitution nrsquoest pas une courbe ni monotone ni inversiblePour cela on dispose drsquoune suite de couple (Xi θi) croissante selon les Xi θi vaut 1 si lrsquoexpeacuterience a reacuteussi 0 sinonPour un seuil donneacute s on note Eprime(s) le taux de substitution et Rprime(s) le taux de lecture on obtient

Rprime(s) =1

n

nsumi=1

11Xi⩾s

Eprime(s) =1

nRprime(s)

nsumi=1

(1minus θi) 11Xi⩾s

61 Courbe ROC 227

Machine Learning Statistiques et Programmation Version 035930

On eacutecrit diffeacuteremment ces expressions en supposant que Xi(s1)minus1 lt s1 ⩽ Xi(s1) math

Rprime(s1) =nminus i(s1)

n

Eprime(s1) =1

nminus i(s1)

nsumi=i(s1)

(1minus θi)

On suppose maintenant que Xi(s2)minus1 lt s2 ⩽ Xi(s2) math et i(s1) + 1 = i(s2)

Rprime(s2) =nminus i(s2)

nlt Rprime(s1)

Eprime(s2) =1

nminus i(s2)

nsumi=i(s2)

(1minus θi) =1

nminus i(s2)

nminus i(s1)

nminus i(s1)

minus (1minus θi(s1))+

nsumi=i(s1)

(1minus θi)

= minus

(1minus θi(s1)

)nminus i(s2)

+

sumni=i(s1)

(1minus θi)

nminus i(s1)

nminus i(s1)

nminus i(s2)= minus

(1minus θi(s1)

)nminus i(s2)

+ Eprime(s1)nminus i(s1)

nminus i(s2)

Si on suppose que θi(s1) = 1 autrement dit lrsquoexpeacuterience s1 a reacuteussi on en deacuteduit que

Eprime(s2) = Eprime(s1)nminus i(s1)

nminus i(s2)= Eprime(s1)

nminus i(s2) + 1

nminus i(s2)gt Eprime(s1)

En revanche si θi = 0

Eprime(s2) = Eprime(s1)

(1 +

1

nminus i(s2)

)minus 1

nminus i(s2)= Eprime(s1) +

E(s1)minus 1

nminus i(s2)lt Eprime(s1)

Il nrsquoexiste donc pas toujours une fonction f reliant Rprime(s) agrave Eprime(s) agrave moins de construire cette courbe de telle sorteqursquoelle soit monotone en ne choisissant qursquoune sous-suite (Eprime(Xi) R

prime(Xi))i qui veacuterifie cette hypothegravese

616 Classification multi-classe

Une courbe ROC se construit avec deux informations une reacuteponse binaire et un score Que signifie cette reacuteponsebinaire Elle peut ecirctre

1 Le fait que le preacutedicteur ait bien preacutedit une classe en particulier Le score associeacute est celui que le preacutedicteurdonne pour cette classe

2 Le fait que le preacutedicteur ait bien preacutedit crsquoest-agrave-dire que la reacuteponse binaire signifie que la classe preacutedite est laclasse attendue le score associeacute est celui de la classe preacutedite crsquoest-agrave-dire le score maximum obtenu pour lrsquounedes classes

Plus formellement le preacutedicteur retourne un vecteur Si qui contient les probabiliteacutes drsquoappartenance agrave toutes les classesaussi appeleacutees plus geacuteneacuteralement score de confiance ou juste score Si(c) est la probabiliteacute de preacutedire la classe c Laclasse attendue est noteacutee yi crsquoest celle que le preacutedicteur doit preacutedire Dans le premier cas on construit le couple (bi si)de telle sorte que

bi = 1 si yi = c sinon 0si = Si(c)

Dans le second cas bi = 1 si maxSi = Si(yi) sinon 0si = maxSi

Le premier cas correspond par exemple agrave des problegravemes de deacutetection de fraude215 Le second cas correspond agrave tauxde classification global La courbe ROC pour ce cas est en regravegle geacuteneacuteral moins bonne que la plupart des courbes ROCobtenues pour chacune des classes prise seacutepareacutement (voir Reacutegression logistique216)

215 httpsenwikipediaorgwikiPredictive_analyticsFraud_detection216 httpwwwxavierduprefrapppapierstathelpsphinxnotebookswines_colorhtml

228 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

617 Exemple

Voir ROC217

62 Confidence Interval and p-Value

bull Introduction (page 229)bull p-value (page 230)bull Significant difference between samples mean (page 230)bull Application on binomial variables (page 231)bull Estimate a p-value by using the distribution function (page 231)bull Correlated variables (page 232)bull Multiple comparisons problem (page 234)bull Algorithm Expectation-Maximization (page 235)bull Notebooks (page 235)bull Bibliographie (page 246)

This document explains the relationship between p-value and confidence intervals It goes on with the specific caseof a binamial law Assuming we want to determine whether or not two binomial laws are significantly different howmany observations we need to get the p-value under a given threshold

621 Introduction

The term p-value218 is very popular in the world of search engines I usually prefer confidence interval 95 I think itis easier to understand Plus because p-Value are real values we could be tempted to compare them and it is usuallywrong On the other hand it is more difficult to compare confidence intervals especially if they are related to completedifferent variables Their nature prevents you from doing that Howerver p-Values and confidence interval are similarthey tell you whether or not a metric difference is significantUsually it starts from a set of identically distributed random variables (Xi)1⩽i⩽N We then estimate the averageθN = 1

N

sumNi=1 Xi and we ask the question is θN null In others terms we want to know if the average is significantly

different from zero If the random variable X follows a random law which has a standard deviation we can use thecentral limit theorem219 which tells us

radicNθN minusrarr

NrarrinfinN (0 σ)

Not all of them have a standard deviation For example if X follows a Cauchy law220 EX2 simint

x2

1+x2 dx which doesnot exist This remark also concerns every distribution known as heavy tail distributionIf Y sim N (0 σ) then we have P (|Y | ⩽ 196) = 095 That is why we can say

θN is not null with 95 confidence ifradicN|θN |σ

gt 196

217 httpwwwxavierduprefrappensae_teaching_cshelpsphinxantisechesml_basicplot_regressionhtmlsphx-glr-antiseches-ml-basic-plot-roc-py218 httpsfrwikipediaorgwikiValeur_p219 httpsenwikipediaorgwikiCentral_limit_theorem220 httpsenwikipediaorgwikiCauchy_distribution

62 Confidence Interval and p-Value 229

Machine Learning Statistiques et Programmation Version 035930

And the confidence intervalle at 95 would be[minus196σradic

N196σradic

N

]When EθN = θ0 = 0 it becomes

radicN[θN minus θ0

]minusrarrNrarrinfin

N (0 σ)

We usually want to check if the mean is equal to a specific value using a statistical test

H0 θN = θ0

H1 θN = θ0

We validate H0 if

θN isin[θ0 minus

196σradicN

θ0 +196σradic

N

]

622 p-value

With confidence intervals you first choose a confidence level and then you get an interval You then check if your valueis inside or outside your interval Inside the gain is not significant outside it is

With a p-value we consider the problem the other way given θN what is the probability that the difference∣∣∣θN minus θ0

∣∣∣is significant Letrsquos consider Y following a normal law N (0 1) We are looking for

P

(|Y | gt

radicN|θN |σ

)= α

α is the p-value

α = 1minusint βN

minusβN

1radic2π

eminusx2

2 dx = 2

int infin

βN

1radic2π

eminusx2

2 dx

where βN =radicN|θN |σ

At this point we should not forget that we use a theorem which tells us thatradicN |θN |

σ sim N (0 1) when N rarrinfin whichmeans everything we said is true when N is great enough

623 Significant difference between samples mean

Usually we do not want to test if an average is null but if the difference between two averages is null We consider tworandom samples having the same size each of them described by (Xi) and (Yi) All variables are independant (Xi)are distributed according the same law we assume the same for (Yi) We expect the following difference to be null

ηN =1

N

Nsumi=1

Xi minus1

N

Nsumi=1

Yi =1

N

[Nsumi=1

Xi minus Yi

]Considering expression (623) we can applying the central limit theorem on variable Z = X minus Y we get (η0 = 0)

radicNηN minusrarr

NrarrinfinN

(η0

radicVZN

)If both samples do not have the same number of observations this expression becomes

radicNηN minusrarr

N1rarrinfinN2rarrinfinN1N2

rarrx

N

(η0

radicVXN1

+VYN2

)

230 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

624 Application on binomial variables

A binomial variable X sim B (p) is defined by

P (X = 0) = 1minus p

P (X = 1) = p

Letrsquos consider two series of observations (Xi) sim B (p) and (Yi) sim B (q) We assume p = q and we want to determinehow many observations we need to get a p-value below 5 We know that V (Xi) = p(1minus p) and V (Yi) = q(1minus q)Next table shows the values First column contains values for p first row contains values for qminus p We also assume wehave the same number N of random observations for each variable The statistical test cen be defined like following

H0 p = q = p0

H1 p = q

If H0 is true thenradicNθN minusrarr

NrarrinfinN(0radic

p0(1minus p0)

radic1

N1+

1

N2

)(62)

pd -0200 -0100 -0020 -0010 -0002 -0001 0001 0002 0010 0020 0100 0200005 913 3650 91235 364939 364939 91235 3650 913 37 10010 70 1729 6915 172866 691463 691463 172866 6915 1729 70 18015 98 2449 9796 244893 979572 979572 244893 9796 2449 98 25020 31 123 3074 12293 307317 1229267 1229267 307317 12293 3074 123 31025 37 145 3602 14406 360137 1440548 1440548 360137 14406 3602 145 37030 41 162 4034 16135 403354 1613413 1613413 403354 16135 4034 162 41035 44 175 4370 17479 436966 1747864 1747864 436966 17479 4370 175 44040 47 185 4610 18440 460976 1843901 1843901 460976 18440 4610 185 47045 48 191 4754 19016 475381 1901523 1901523 475381 19016 4754 191 48050 49 193 4802 19208 480183 1920730 1920730 480183 19208 4802 193 49055 48 191 4754 19016 475381 1901523 1901523 475381 19016 4754 191 48060 47 185 4610 18440 460976 1843901 1843901 460976 18440 4610 185 47065 44 175 4370 17479 436966 1747864 1747864 436966 17479 4370 175 44070 41 162 4034 16135 403354 1613413 1613413 403354 16135 4034 162 41075 37 145 3602 14406 360137 1440548 1440548 360137 14406 3602 145 37080 31 123 3074 12293 307317 1229267 1229267 307317 12293 3074 123 31085 25 98 2449 9796 244893 979572 979572 244893 9796 2449 98090 18 70 1729 6915 172866 691463 691463 172866 6915 1729 70095 10 37 913 3650 91235 364939 364939 91235 3650 913

Given a binomial law with parameter p and a difference d this table gives the number of observations needed on bothsides to get a significant difference assuming p is the expected pourcentage

625 Estimate a p-value by using the distribution function

Expression (622) gives a way to estimate the p-value Computing the integral is not always possible but there is a wayto do it using Monte Carlo method221 Letrsquos assume X sim N (0 1) We denote fX as the density function of X Wealso consider an interval I = [minusa a] Then we have f(a) = f(minusa) and

P (X isin I) = P (|X| ⩽ a) = P (f(X) ⩾ f(a))

This is true because f is decreasing for x gt 0 The p-value α for a estimator β using Monte Carlo method is

1

N

Nsumi=1

11f(Xi)ltf(β) minusrarr α (63)

221 httpsenwikipediaorgwikiMonte_Carlo_method

62 Confidence Interval and p-Value 231

Machine Learning Statistiques et Programmation Version 035930

Assuming every (Xi)i follows a normal law N (0 1)

626 Correlated variables

Letrsquos assume we now have a vector a correlated variables X = (X1 Xd) drawn following a law N (θ0Σ)The central limit theorem is still valid

radicNθN minusrarr

NrarrinfinN (θ0Σ)

We know estimators for the average and the covariance matrix defined as follows

θN =1

n

Nsumi=1

Xi

ΣN =1

n

Nsumi=1

(Xi minus θN )(Xi minus θN )prime

We usually want to check if

H0 θN = θ0

H1 θN = θ0

If Λ is diagonal matrix of Σ (diagonal matrix with eigen values) All eigen values are real and positive we then define

Σ = PΛP prime and Σ12 = PΛ

12P prime

We consider Zi = (Xi minus θN )Σminus 12 We then have EZi = 0 and VZi = I2 where I2 is the identity matrix We could

now consider each dimension of Zi independently as illustrated in next figure it shows the difference on an example

if we consider the correlation of two variables correlated such as Σ =

(01 005005 02

)

232 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

We assume we observe two Bernouilli222 variables correlated Red points represents the area for which we would accepthypothesis H0 in case both variables are independant Blue area represents the same but with the correlation But thatwould not be the best way to do it The confidence interval for a couple of indenpendant gaussian (N1 N2) variables isan ellipse Two independent normal variables N2

1 +N22 with a null mean and standard deviation equal to one follows

a χ2 law Based on that we can deduce a boundary for the confidence zone at 95 Next figure shows this zone for a

non-correlated couple and a correlated couple (Σ =

(01 005005 02

))

222 httpsenwikipediaorgwikiBernoulli_distribution

62 Confidence Interval and p-Value 233

Machine Learning Statistiques et Programmation Version 035930

We assume we observe two Bernouilli variables correlated Red points represents the area for which we would accepthypothesis H0 in case both variables are independant Blue area represents the same but with the correlation

627 Multiple comparisons problem

The problem of Multiple comparisons223 happens when dealing with many metrics measyring a change Thatrsquos allwaysthe case when two version of the sam websire are compared in a test AB224 The metrics are correlated but it is unlikelythat all metrics differences will be significant or not The HolmndashBonferroni method225 proposes a way to define anhypthesis on the top of the existing ones

223 httpsenwikipediaorgwikiMultiple_comparisons_problem224 httpsfrwikipediaorgwikiTest_AB225 httpsenwikipediaorgwikiHolmE28093Bonferroni_method

234 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

628 Algorithm Expectation-Maximization

We here assume there are two populations mixed defined by random variable C Letrsquos X be a mixture of two binomiallaws of parameters p and q It is for example the case for a series draws coming from two different coins

P (X) = P (X|C = a)P (C = a) + P (X|X = b)P (C = b)

The likelihood of a random sample (X1 Xn) the class we do not observe are (C1 Cn)

L(θ) =prodi

[pXi(1minus p)(1minusXi)π

]1minusCi[qXi(1minus q)(1minusXi)(1minus π)

]Ci

(64)

The parameters are θ = (π p q) We use an algorithm Expectation-Maximization (EM)226 to determine the parametersWe define at iteration t

wi = ECi|Xiθt (Xi)

=pXit (1minus pt)

1minusXiπt

pXit (1minus pt)1minusXiπt + qXi

t (1minus qt)1minusXi(1minus πt)

We then update the parameters

π =1

n

nsumi=1

wi

p =

sumni=1 wiXisumni=1 wi

q =

sumni=1(1minus wi)Xisumni=1(1minus wi)

See also Applying the EM Algorithm Binomial Mixtures227

629 Notebooks

The following notebook produces the figures displayed in this document

p-values

Compute p-values and heavy tails estimators

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull p-value table (page 236)bull p-values in 2D (page 237)bull p-value ratio (page 239)bull p-values and EM (page 240)bull p-value and heavy tail (page 243)

226 httpsenwikipediaorgwikiExpectationE28093maximization_algorithm227 httpstatisticalrecipesblogspotfr201204applying-em-algorithm-binomial-mixtureshtml

62 Confidence Interval and p-Value 235

Machine Learning Statistiques et Programmation Version 035930

matplotlib inline

p-value table

from scipystats import normimport pandasfrom pandas import DataFrameimport numpy

def pvalue(p q N)theta = abs(p-q)var = p(1-p)bn = (2N)05 theta var05ret = (1 - normcdf(bn))2return ret

def pvalue_N(p q alpha)theta = abs(p-q)var = p(1-p)rev = abs(normppf (alpha2))N = 2 (rev var05 theta) 2return int(N+1)

def alphatable(ps dps alpha)values = []for p in ps

row=[]for dp in dps

q = p+dpr = pvalue_N(pqalpha) if 1 gt= q gt= 0 else numpynanrowappend (r)

valuesappend (row)return values

def dataframe(psdpstable)columns = dpsdf = pandasDataFrame(data=table index=ps)dfcolumns = dpsreturn df

print (normppf(0025)normppf (0025)) -19599639845400545ps = [0001 0002] + [ 005i for i in range (120) ]dps = [ -02 -01 -002 -001 -0002 -0001

02 01 002 001 0002 0001 ]dpssort()t = alphatable(ps dps 005)dataframe (ps dps t)

236 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

normppf(0025) -19599639845400545

p-values in 2D

import numpy matplotlib random mathimport matplotlibpyplot as pylab

def matrix_square_root(sigma) eigen vect = numpylinalgeig(sigma)dim = len(sigma)res = numpyidentity(dim)for i in range(0dim)

res[ii] = eigen[i]05return vect res vecttranspose()

def chi2_level (alpha = 095) N = 1000x = [ randomgauss(01) for _ in range(0N) ]y = [ randomgauss(01) for _ in range(0N) ]r = map ( lambda c (c[0]2+c[1]2)05 zip(xy))r = list(r)rsort()res = r [ int (alpha N) ]return res

def square_figure(mat a) x = [ ]y = [ ]for i in range (0100)

xappend( a mat[0][0]05 )yappend( (randomrandom ()-05) a mat[1][1]052 )xappend( -a mat[0][0]05 )yappend( (randomrandom ()-05) a mat[1][1]052 )

yappend( a mat[1][1]05 )xappend( (randomrandom ()-05) a mat[0][0]052 )yappend( -a mat[1][1]05 )xappend( (randomrandom ()-05) a mat[0][0]052 )

pylabplot(xy ro)

x = [ ]y = [ ]for i in range (0100)

xappend( a )yappend( (randomrandom ()-05) a2 )xappend( -a )yappend( (randomrandom ()-05) a2 )

yappend( a )(suite sur la page suivante)

62 Confidence Interval and p-Value 237

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

xappend( (randomrandom ()-05) a2 )yappend( -a )xappend( (randomrandom ()-05) a2 )

xsys = [][]for ab in zip (xy)

ar = numpymatrix( [ [a] [b] ] )transpose()we = ar rootxsappend( we [00] )ysappend( we [01] )

pylabplot(xsys bo)pylabshow()

def circle_figure (mat a) x = [ ]y = [ ]for i in range (0200)

z = randomrandom() mathpi 2i = a mat[0][0]05 mathcos(z)j = a mat[0][0]05 mathsin(z)xappend ( i )yappend ( j )

pylabplot(xy ro)

x = [ ]y = [ ]for i in range (0200)

z = randomrandom() mathpi 2i = a mathcos(z)j = a mathsin(z)xappend ( i )yappend ( j )

xsys = [][]for ab in zip (xy)

ar = numpymatrix( [ [a] [b] ] )transpose()we = ar rootxsappend( we [00] )ysappend( we [01] )

pylabplot(xsys bo)pylabshow()

level = chi2_level ()mat = [ [01 005] [005 02] ]npmat = numpymatrix(mat)root = matrix_square_root (npmat)square_figure (mat 196)circle_figure (mat level)

238 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

p-value ratio

import random math

def densite_gauss (mu sigma x) e = -(x - mu)2 (sigma2 2)d = 1 ((2mathpi)05 sigma)return d mathexp (e)

(suite sur la page suivante)

62 Confidence Interval and p-Value 239

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

def simulation_vector (N mu sigma) return [ randomgauss(musigma) for n in range(N) ]

def ratio (vector x fdensite) under = 0above = 0fx = fdensite(x)for u in vector

f = fdensite (u)if f gt= fx

above += 1else

under += 1return float(above) float (above + under)

x = 196N = 10000mu = 0sigma = 1

v = simulation_vector(N mu sigma)g = ratio(v x lambda y densite_gauss (mu sigma y) )print (g)

09487

p-values and EM

See Applying the EM Algorithm Binomial Mixtures228

from scipystats import normimport random math

def average_std_deviation(sample)mean = 0var = 0for x in sample

mean += xvar += xx

mean = len(sample)var = len(sample)var -= meanmeanreturn meanvar 05

def bootsample(sample)n = len(sample)-1return [ sample[ randomrandint(0n) ] for _ in sample ]

(suite sur la page suivante)

228 httpstatisticalrecipesblogspotfr201204applying-em-algorithm-binomial-mixtureshtml

240 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

def bootstrap_difference(sampleX sampleY draws=2000 confidence=005)diff = [ ]for n in range (0draws)

if n 1000 == 0print(n)

sx = bootsample(sampleX)sy = bootsample(sampleY)px = sum(sx) 10 len(sx)py = sum(sy) 10 len(sy)diffappend (px-py)

diffsort()n = int(len(diff) confidence 2)av = sum(diff) len(diff)return av diff [n] diff [len(diff)-n]

generation of a sample

def generate_obs(p)x = randomrandom()if x lt= p return 1else return 0

def generate_n_obs(p n)return [ generate_obs(p) for i in range (0n) ]

std deviation

def diff_std_deviation(px py)s = px(1-px) + py(1-py)return px py s05

def pvalue(diff std N)theta = abs(diff)bn = (2N)05 theta stdpv = (1 - normcdf(bn))2return pv

def omega_i (X pi p q) np = p pi if X == 1 else (1-p)pinq = q (1-pi) if X == 1 else (1-q)(1-pi)return np (np + nq)

def likelihood (X pi p q) np = p pi if X == 1 else (1-p)pinq = q (1-pi) if X == 1 else (1-q)(1-pi)return mathlog(np) + mathlog(nq)

def algoEM (sample)p = randomrandom()q = randomrandom()pi = randomrandom()iter = 0

(suite sur la page suivante)

62 Confidence Interval and p-Value 241

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

while iter lt 10 lk = sum ( [ likelihood (x pi p q) for x in sample ] )wi = [ omega_i (x pi p q) for x in sample ]sw = sum(wi)pin = sum(wi) len(wi)pn = sum([ x w for xw in zip (samplewi) ]) swqn = sum([ x (1-w) for xw in zip (samplewi) ]) (len(wi) - sw)

pipq = pinpnqniter += 1

lk = sum ( [ likelihood (x pi p q) for x in sample ] )return pipq lk

mixpq = 020 080pi = 07N = 1000na = int(N pi)nb = N - na

print(------- sample)sampleX = generate_n_obs(p na) + generate_n_obs (q nb)randomshuffle(sampleX)print(ave p pi + q(1-pi))print(mea sum(sampleX)1len(sampleX))

lk = sum ( [ likelihood (x pi p q) for x in sampleX ] )print (min lk lk sum (sampleX)1 len(sampleX))res = []for k in range (0 10)

r = algoEM (sampleX)resappend ( (r[-1] r) )

ressort ()

rows = []for r in res

pipqlk = r[1]rowsappend( [p pi + q(1-pi)] + list(r[1]))

df = pandasDataFrame(data=rows)dfcolumns = [average pi p q likelihood]df

------- sampleave 038mea 0373min lk -33932292120130046 0373

242 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

p-value and heavy tail

from scipystats import norm zipfimport sys

def generate_n_obs_zipf (tail_index n) return list(zipfrvs(tail_index size=n))

def hill_estimator (sample) sample = list(sample)samplesort(reverse=True)end = len(sample)10end = min(end100)s = 0res = []for k in range (0end)

s += mathlog(sample[k])h = (s - (k+1)mathlog(sample[k+1]))(k+1)h = 1hresappend( [k h] )

return res

mixtail_index = 105N = 10000

sample = generate_n_obs_zipf(tail_index N)sample[5]

[357621 148 18 1812876449 36150]

import pandas

def graph_XY(curves xlabel=None ylabel=None marker=Truelink_point=False title=None format_date=Y-m-dlegend_loc=0 figsize=None ax=None)

if ax is Noneimport matplotlibpyplot as plt pylint disable=C0415fig ax = pltsubplots(1 1 figsize=figsize)

smarker = (True True) o- (True False) o (False True) - (False False) [marker link_point]

has_date = Falsefor xf yf label in curves

axplot(xf yf smarker label=label)axlegend(loc=legend_loc)return ax

(suite sur la page suivante)

62 Confidence Interval and p-Value 243

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

def draw_variance(sample) avg = 0std = 0n = 0w = 1add = []for ix in enumerate(sample)

x = float (x)avg += x wstd += xx wn += wval = (stdn - (avgn)2)05addappend ( [ i avgn val] )

print(add[-1])table = pandasDataFrame(add columns=[index avg(n) std(n)])return graph_XY([

[table[index] table[avg(n)] avg(n)][table[index] table[std(n)] std(n)]

] marker=False link_point=True)

draw_variance(sample)

[9999 551868710339 23334255446156308]

def draw_hill_estimator (sample) res = hill_estimator(sample)table = DataFrame(res columns=[d hill])return graph_XY(

(suite sur la page suivante)

244 Chapter 6 Meacutetriques

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

[[table[d] table[hill] Hill]]marker=False link_point=True)

draw_hill_estimator(sample)

def draw_heavy_tail (sample) table = DataFrame([[_] for _ in sample ] columns=[obs])std = 1

normal = normrvs(size = len(sample))normal = [ xstd for x in normal ]nortbl = DataFrame([ [_] for _ in normal ] columns=[obs])nortbl[iobs] = (nortbl[obs] 10)astype(numpyint64)

histon = nortbl[[iobs obs]]groupby(iobs as_index=False)count()histoncolumns = [iobs nb]histon = histonsort_values(nb ascending=False)reset_index(drop=True)

table[one] = 1histo = tablegroupby(obs as_index=False)count()histocolumns = [obs nb]histo = histosort_values(nb ascending=False)reset_index(drop=True)historeset_index(drop=True inplace=True)histo[index] = histoindex + 1

vec = list(histon[nb])vec += [0] len(histo)histo[nb_normal] = vec[len(histo)]

histo[log(index)] = numpylog(histo[index]) numpylog(10)(suite sur la page suivante)

62 Confidence Interval and p-Value 245

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

histo[log(nb)] = numpylog(histo[nb]) numpylog(10)histo[log(nb_normal)] = numpylog(histo[nb_normal]) numpylog(10)return graph_XY ([

[histo[log(index)] histo[log(nb)] Zipf][histo[log(index)] histo[log(nb_normal)] Gauss] ]

marker=False link_point=True)

draw_heavy_tail(sample)

cpython372_x64libsite-packagespandascoreseriespy679 RuntimeWarning divide by zerorarrencountered in logresult = getattr(ufunc method)(inputs kwargs)

6210 Bibliographie

bull p-Value and Statistical Practice229

bull An investigation of the false discovery rate and the misinterpretation of p-values230

bull HolmndashBonferroni method231

229 httpwwwstatcolumbiaedu~gelmanresearchpublishedpvalues3pdf230 httprsosroyalsocietypublishingorgcontentroyopensci13140216fullpdf231 httpsenwikipediaorgwikiHolmE28093Bonferroni_method

246 Chapter 6 Meacutetriques

CHAPTER 7

Algorithmes

Le machine learning propose un grand nombre de modegraveles pour des problegravemes standardiseacutes Au delagrave il faut savoir ecirctreinventifs crsquoest-agrave-dire la grande majoriteacute des cas

71 Distance drsquoeacutedition

Les distances drsquoeacutedition permettent de comparer deux mots entre eux ou plus geacuteneacuteralement deux seacutequences de symbolesentre elles Lrsquousage le plus simple est de trouver pour un mot mal orthographieacute le mot le plus proche dans undictionnaire crsquoest une option proposeacutee dans la plupart des traitements de texte La distance preacutesenteacutee est la distancede Levenshtein232 (voir [Levenstein1966]) Elle est parfois appeleacutee Damerau Levenstein Matching (DLM)233 (voireacutegalement [Damerau1964]) Cette distance fait intervenir trois opeacuterations eacuteleacutementaires

bull comparaison entre deux caractegraveresbull insertion drsquoun caractegraverebull suppression drsquoun caractegravere

Pour comparer deux mots il faut construire une meacutethode associant ces trois opeacuterations afin que le premier mot setransforme en le second mot Lrsquoexemple suivant utilise les mots idstzance et distances il montre une meacutethodepermettant de passer du premier au second La distance sera la somme des coucircts associeacutes agrave chacune des opeacuterationschoisies La comparaison entre deux lettres identiques est en geacuteneacuteral de coucirct nul toute autre opeacuteration eacutetant de coucirctstrictement positif

232 httpsfrwikipediaorgwikiDistance_de_Levenshtein233 httpsfrwikipediaorgwikiDistance_de_Damerau-Levenshtein

247

Machine Learning Statistiques et Programmation Version 035930

Table1 distance drsquoeacuteditionmot 1 mot 2 opeacuteration coucircti d comparaison entre i et d 1d i comparaison entre d et i 1s s comparaison entre s et s 0t t comparaison entre t et t 0z suppression de z 1a a comparaison entre a et a 0n n comparaison entre n et n 0c c comparaison entre c et c 0e e comparaison entre e et e 0

s insertion de s 1somme 4

Pour cette distance drsquoeacutedition entre les mots idstzance et distances La succession drsquoopeacuterations proposeacutee nrsquoest pasla seule qui permettent de construire le second mot agrave partir du premier mais crsquoest la moins coucircteuse

711 Deacutefinition et proprieacuteteacutes

Deacutefinition

Tout drsquoabord il faut deacutefinir ce qursquoest un mot ou une seacutequence

Deacutefinition D1 motOn note C lrsquoespace des caractegraveres ou des symboles Un mot ou une seacutequence est une suite finie de C On note SC =cupinfink=1C

k lrsquoespace des mots formeacutes de caractegraveres appartenant agrave C

On peut deacutefinir la distance drsquoeacutedition

Deacutefinition D2 distance drsquoeacuteditionLa distance drsquoeacutedition d sur SC est deacutefinie par

d SC times SC minusrarr R+

(m1m2) minusrarr minO seacutequencedrsquoopeacuterations

d (m1m2 O)

La distance est le coucirct de la transformation du mot m1 en m2 la moins coucircteuse Il reste agrave deacutemontrer que cette distanceen est bien une puis agrave proposer une meacutethode de calcul plus rapide que celle suggeacutereacutee par cette deacutefinition

Proprieacuteteacutes

Ce paragraphe a pour objectif de deacutemontrer que la distance (page 248) en est bien une

Deacutefinition D3 distance entre caractegraveresSoit Cprime = C

⋃ lrsquoensemble des caractegraveres ajouteacute au caractegravere vide On note c (Cprime)2 minusrarr R+ la fonction coucirct

deacutefinie comme suit

forall (x y) isin (Cprime)2 c (x y) est le coucirct

drsquoune comparaison si (x y) isin (C)2drsquoune insertion si (x y) isin (C)times drsquoune suppression si (x y) isin times (C)0 si (x y) = ( )

248 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

On note S2Cprime = cupinfinn=1

(Cprime2)n

lrsquoensemble des suites finies de Cprime

Pour modeacuteliser les transformations drsquoun mot vers un autre on deacutefinit pour un mot m un mot acceptable

Deacutefinition D4 mot acceptableSoit m = (m1 mn) un mot tel qursquoil est deacutefini preacuteceacutedemment Soit M = (Mi)i⩾1 une suite infinie de caractegravereson dit que M est un mot acceptable pour m si et seulement si la sous-suite extraite de M contenant tous les caractegraveresdiffeacuterents de est eacutegal au mot m On note acc (m) lrsquoensemble des mots acceptables pour le mot m

Par conseacutequent tout mot acceptable mprime pour le mot m est eacutegal agrave m si on supprime les caractegraveres du mot mprime Enparticulier agrave partir drsquoun certain indice mprime est une suite infinie de caractegraveres Il reste alors agrave exprimer la deacutefinitionde la distance drsquoeacutedition en utilisant les mots acceptables

Deacutefinition D5 distance drsquoeacuteditionSoit c la distance drsquoeacutedition (page 248) d deacutefinie sur SC est deacutefinie par

d SC times SC minusrarr R+

(m1m2) minusrarr minsum+infin

i=1 c(M i

1Mi2

)| (M1M2) isin acc (m1)times acc (m2)

(71)

Il est eacutevident que la seacuteriesum+infin

i=1 c(M i

1Mi2

)est convergente La ref`distance de caractegraveres

ltedition_distance_definition_1gt` implique que les distance drsquoeacutedition deacutefinies en 1 (page 248) et 2 (page 249)sont identiques

Theacuteoregraveme T1 distance drsquoeacuteditionSoit c et d les fonctions deacutefinies respectivement par (711) et (711) alors

c est une distance sur C lArrrArr d est une distance sur SC

On cherche drsquoabord agrave deacutemontrer quec est une distance sur Cprime lArr= d est une distance sur SC

Cette assertion est eacutevidente car si (m1m2) sont deux mots de un caractegravere la distance d sur SC deacutefinit alors la distancec sur CprimeOn deacutemontre ensuite que

c est une distance sur Cprime =rArr d est une distance sur SCSoient deux mots (m1m2) soit (M1M2) isin acc (m1) times acc (m2) comme c est une distance sur Cprime alorsd (M1M2) = d (M2M1)Drsquoougrave drsquoapregraves la deacutefinition 2 (page 249)

d (m1m2) = d (m2m1) (72)

Soit (N1 N2) isin acc (m1)times acc (m2) tels que d (m1m2) = d (N2 N1) alors

d (m1m2) = 0 =rArr d (N1 N2) = 0

=rArr+infinsumi=1

c(N i

1 Ni2

)= 0

=rArr foralli ⩾ 1 N i1 = N i

2

=rArr N1 = N2

d (m1m2) = 0 =rArr m1 = m2

71 Distance drsquoeacutedition 249

Machine Learning Statistiques et Programmation Version 035930

Il reste agrave deacutemontrer lrsquoineacutegaliteacute triangulaire Soient trois mots (m1m2m3) on veut deacutemontrer que d (m1m3) ⩽d (m1m2) + d (m2m3) On deacutefinit

(N1 N2) isin acc (m1)times acc (m2) tels que d (m1m2) = d (N1 N2)

(P2 P3) isin acc (m2)times acc (m3) tels que d (m2m3) = d (P2 P3)

(O1 O3) isin acc (m1)times acc (m3) tels que d (m1m3) = d (O1 O3)

Mais il est possible drsquoapregraves la deacutefinition drsquoun mot acceptable (page 249) drsquoinseacuterer des caractegraveres dans les motsN1 N2 P2 P3 O1 O3 de telle sorte qursquoil existe (M1M2M3) isin acc (m1)times isin acc (m2)times isin acc (m3) tels que

d (m1m2) = d (M1M2)

d (m2m3) = d (M2M3)

d (m1m3) = d (M1M3)

Or comme la fonction c est une distance sur Cprime on peut affirmer que d (M1M3) ⩽ d (M1M2)+ d (M2M3) Drsquoougrave

begineqnarray dpam_1m_3 infegal dpam_1m_2 + d pam_2m_3 labeledit_demo_eq_3endeqnarray

Les assertions 1 2 3 montrent que d est bien une distance Le tableau suivant illustre la deacutemonstration pour les suitesM1M2M3 pour les mots et les mots idtzance tonce distances

M1 i d t z a n c eM2 t o n c eM3 d i s t a n c e s

La distance drsquoeacutedition 2 (page 249) ne tient pas compte de la longueur des mots qursquoelle compare On serait tenteacute dedeacutefinir une nouvelle distance drsquoeacutedition inspireacutee de la preacuteceacutedente

Deacutefinition D6 distance drsquoeacutedition eacutetendueSoit d^ la distance drsquoeacutedition deacutefinie en 2 (page 249) pour laquelle les coucircts de comparaison drsquoinsertion et desuppression sont tous eacutegaux agrave 1 La distance drsquoeacutedition dprime sur SC est deacutefinie par

dprime SC times SC minusrarr R+

(m1m2) minusrarr dprime (m1m2) =dlowast (m1m2)

max l (m1) l (m2)

ougrave l (m) est la longueur du mot m

Le tableau suivant donne un exemple pour lequel lrsquoineacutegaliteacute triangulaire nrsquoest pas veacuterifieacutee La fonction dlowast nrsquoest doncpas une distance

mot 1 mot 2 distance dlowast distance dprime

APPOLLINE APPOLINE 1 1 9APPOLLINE APOLLINE 1 1 9APOLLINE APPOLINE 2 2 8

Par conseacutequent d (APOLLINEAPPOLINE) gt d (APOLLINEAPPOLLINE) +d (APPOLLINEAPPOLINE) et la la fonction dlowast ne veacuterifie pas lrsquoineacutegaliteacute triangulaire

250 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

712 Factorisation des calculs

La deacutefinition de la distance drsquoeacutedition ne permet pas drsquoenvisager le calcul de la distance dans un temps raisonnable Il estpossible neacuteanmoins drsquoexprimer cette distance drsquoune autre maniegravere afin de reacutesoudre ce problegraveme (voir [Wagner1974])On deacutefinit la suite suivante

Deacutefinition D7 distance drsquoeacutedition tronqueacuteeSoient deux mots (m1m2) on deacutefinit la suite (

dm1m2

ij

)0⩽i⩽n10⩽j⩽n2

(= (dij)0⩽i⩽n1

0⩽j⩽n2

pour ne pas alourdir les notations)

Par d00 = 0

dij = min

diminus1jminus1 + comparaison

(mi

1mj2

)

dijminus1 + insertion(mj

2

)

diminus1j + suppression(mi

1

)

Cette suite tronqueacutee permet drsquoobtenir le reacutesultat de la proprieacuteteacute suivante

Proprieacuteteacute P1 calcul rapide de la distance drsquoeacuteditionLa suite deacutefinie par 3 (page 251) veacuterifie d (m1m2) = dn1n2 ougrave d est la distance drsquoeacutedition deacutefinie en 1 (page 248) ou2 (page 249)

Cette factorisation des calculs est illustreacutee par les tableaux de cette figure La deacutemonstration srsquoeffectue par reacutecurrencela deacutefinition 3 (page 251) est bien sucircr eacutequivalente 1 (page 248) pour des mots de longueur un On suppose donc quece reacutesultat est vrai pour un couple de mots (m1m2) de longueur (l1 l2) veacuterifiant l1 ⩽ i et l_2 infegal j avec au plusune eacutegaliteacute Soit m un mot on note n le nombre de lettres qursquoil contient On note m (l) le mot formeacute des l premiegravereslettres de m Alors

dm1m2

ij = d (m1 (i) m2 (j))

d (m1 (i) m2 (j)) = min

d (m1 (iminus 1) m2 (j minus 1)) + comparaison (m1im2j) d (m1 (i) m2 (j minus 1)) + insertion (m2j) d (m1 (iminus 1) m2 (j)) + suppression (m1i)

Le calcul factoriseacute de la distance drsquoeacutedition entre deux mots de longueur l1 et l2 a un coucirct de lrsquoordre O (l1l2) Ilest souvent illustreacute par un tableau comme celui de la figure suivante qui permet eacutegalement de retrouver la meilleureseacutequence drsquoopeacuterations permettant de passer du premier mot au second

dans ce sens

crsquoest unecomparaison

minusrarr jdans ce sens crsquoest une insertion

dans ce sensdarr crsquoest unei suppression

d i s t a n c e s0

i 1d 2s 2t 2z 3a 3n 3c 3e 3 4

d i s t a n c e s0

i 1d 2 3 4s 4t 4z 5a 5 6 7n 8c 9e 9 10

71 Distance drsquoeacutedition 251

Machine Learning Statistiques et Programmation Version 035930

Chaque case (i j) contient la distance qui seacutepare les i premiegraveres lettres du mot 1 des j premiegraveres lettres du mot 2 selonle chemin ou la meacutethode choisie La derniegravere case indique la distance qui seacutepare les deux mots quel que soit le cheminchoisi

713 Extension de la distance drsquoeacutedition

Jusqursquoagrave preacutesent seuls trois types drsquoopeacuterations ont eacuteteacute envisageacutes pour constuire la distance drsquoeacutedition tous trois portentsur des caractegraveres et aucunement sur des paires de caractegraveres Lrsquoarticle [Kripasundar1996] (voir aussi [Seni1996]suggegravere drsquoeacutetendre la deacutefinition 3 (page 251) aux permutations de lettres

Deacutefinition D8 distance drsquoeacutedition tronqueacutee eacutetendueSoit deux mots (m1m2) on deacutefinit la suite

(dm1m2

ij

)0⩽i⩽n10⩽j⩽n2

(= (dij)0⩽i⩽n1

0⩽j⩽n2

pour ne pas alourdir les notations)

par

d00 = 0

dij = min

diminus1jminus1 + comparaison

(mi

1mj2

)

dijminus1 + insertion(mj

2 i)

diminus1j + suppression(mi

1 j)

diminus2jminus2 + permutation((

miminus11 mi

1

)(mjminus1

2 mj2

))

La distance drsquoeacutedition chercheacutee est toujours d (m1m2) = dn1n2

mais la deacutemonstration du fait que d est bien unedistance ne peut pas ecirctre copieacutee sur celle du theacuteoregraveme 1 (page 249) mais sur les travaux preacutesenteacutes dans lrsquoarticle[Wagner1974]

714 Apprentissage drsquoune distance drsquoeacutedition

Lrsquoarticle [Waard1995] suggegravere lrsquoapprentissage des coucircts des opeacuterations eacuteleacutementaires associeacutees agrave une distance drsquoeacutedition(comparaison insertion suppression permutation ) On note lrsquoensemble de ces coucircts ou paramegravetres Θ =(θ1 θn) On considegravere deux mots X et Y la distance drsquoeacutedition d (XY ) est une fonction lineacuteaire des coucirctsSoit D = ((X1 Y1) (XN YN )) une liste de couple de mots pour lesquels le reacutesultat de la distance drsquoeacutedition estconnu et noteacute (c1 cN ) il est alors possible de calculer une erreur srsquoexprimant sous la forme

E =

Nsumi=1

(d (Xi Yi)minus ci)2=

Nsumi=1

(nsum

k=1

αik (Θ) θk minus ci

)2

Les coefficients αik (Θ) deacutependent des paramegravetres Θ car la distance drsquoeacutedition correspond au coucirct de la transformationde moindre coucirct drsquoapregraves la deacutefinition ref`2 ltdefition_distance_edition_2gt` αik (Θ) correspond au nombre de fois quele paramegravetre θk intervient dans la transformation de moindre coucirct entre Xi et Yi Cette expression doit ecirctre minimaleafin drsquooptenir les coucircts Θ optimaux Toutefois les coucircts θk sont tous strictement positifs et plutocirct que drsquoeffectuer uneoptimisation sous contrainte ces coucircts sont modeacuteliseacutes de la faccedilon suivante

E =

Nsumi=1

(nsum

k=1

αik (Ω)1

1 + eminusωkminus ci

)2

Les fonctions αik (Ω) ne sont pas deacuterivable par rapport Ω mais il est possible drsquoeffectuer une optimisation sanscontrainte par descente de gradient Les coucircts sont donc appris en deux eacutetapes

252 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

Algorithme A1 Apprentissage drsquoune distance drsquoeacuteditionLes notations sont celles utiliseacutes pour lrsquoeacutequation (714) Les coucircts Ω sont tireacutes aleacuteatoirementestimationLes coefficients αik (Ω) sont calculeacuteescalcul du gradientDans cette eacutetape les coefficients αik (Ω) restent constants Il suffit alors de minimiser la fonction deacuterivable E (Ω) surRn ceci peut ecirctre effectueacute au moyen drsquoun algorithme de descente de gradient similaire agrave ceux utiliseacutes pour les reacuteseauxde neuronesTant que lrsquoerreurE (Ω) ne converge pas on continue Lrsquoerreur E diminue jusqursquoagrave converger puisque lrsquoeacutetape qui reacuteestimeles coefficients αik (Ω) les minimise agrave Ω = (ω1 ωn) constant

715 Bibliographie

72 Distance between two graphs

This page gathers some thoughts about comparing two graphs without any cycle This problem is known as graphsimilarity or graph matching234 One of the solution is the Graph Edit Distance235 a better solution is described in[Blondel2004] You can also read Graph similarity236

bull Definitions (page 254)bull Problem (page 254)bull First approach (page 255)

ndash Step 1 edit distance (page 255)ndash Step 2 Kruskal kind (bijection on paths) (page 256)ndash Step 3 Matching (page 256)ndash Step 4 Kruskal kind the return (bijection on edges and vertices) (page 256)ndash Step 5 Merging the two graphs (page 257)

bull Distance between graphs (page 257)bull Second approach faster (page 258)bull Bibliography (page 258)

234 httpsenwikipediaorgwikiGraph_matching235 httpsenwikipediaorgwikiGraph_edit_distance236 httpwwwcsuoigr~pvassildownloadsGraphDistanceLauraZagerpdf

72 Distance between two graphs 253

Machine Learning Statistiques et Programmation Version 035930

721 Definitions

The first approach is implemented in module graph_distance Example of use

graph1 = [ (ab) (bc) (bd) (de) (ef) (bf) (bg) (f g)(ag) (ag) (cd) (d g)(dh) (aah) (aac) (f h) ]

graph2 = copydeepcopy(graph1) + [ (h m) (m l) (l C) (C r)(a k) (k l) (k C)]

graph1 = Graph(graph1)graph2 = Graph(graph2)

distance graph = graph1distance_matching_graphs_paths(graph2 use_min=Falserarrstore=store)

graph is the merged graph mentioned below

722 Problem

This graph distance aims at computing a distance between graphs but also to align two graphs and to merge them intoa single one For example letrsquos consider the following graphs

We would like to merge them and to know which vertices were merged which ones were added and deleted Thefollowing ideas and algorithm are only applicable on graphs without cycles To simplify we assume there are only oneroot and one leave If there are mulitple we then create a single root we connect to all the existing ones We do the

254 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

same for the unique leave we create if there are multiple It will have all the existing ones as predecessors We alsoassume each vertex and each edge holds a label used during the matching It is better to match vertices or edges holdingthe same label A weight can be introduced to give more important to some elements (vertex edge)

723 First approach

Step 1 edit distance

The main idea consists in using Levensteinrsquos edit distance237 This algorithm applies on sequences but not on graphsBut because both graphs do not contain any cycle we can extract all paths from them Every path starts with the samevertex - the only root - and ends with the same one - the only leave - We also consider each edge or vertex as an elementof the sequence Before describing the edit distance letrsquos denote p1 as a path from the first graph p2 as a path from thesecond one pk(i) is the element i of this sequence Following Levenstein description we denote d(ij) as the distancebetween the two subsequences p1(1i) p2(1j) Based on that we use an edit distance defined as follows

d(i j) = min

d(iminus 1 j) + insertion(p1(i))d(i j minus 1) + insertion(p2(j))d(iminus 1 j minus 1) + comparison(p1(i) p2(j))

First of all we are not only interested in the distance but also in the alignment which would imply to keep which elementwas chosen as a minimum for each d(ij) If we denote nk the length of path k then d(n1 n2) is the distance we arelooking forSecond if two paths do not have the same length it implies some elements could be compared between each otherseven if one is an edge and the other one is a vertex This case is unavoidable if two paths have different lengthsThird the weight we use for the edit distance will be involved in a kind of tradeof do we prefer to boost the structureor the label when we merge the graphs Those weights should depend on the task whether or not it is better to alignvertices with the same label or to keep the structure Here are the chosen weights

operation weight conditioninsertion(c) w(c) weight held by the edge or the vertexcomparison(ab) 0 if vertices a and b share the same labelcomparison(ab) 0 if edges a and b share the same label and if vertices at both ends share the same

labelcomparison(ab) w(a) +

w(b)if edges a and b share the same label and if vertices at both ends do not share thesame label

comparison(ab) w(a)+w(b)2 if a and b do not share the same kind

comparison(ab) 3(w(a)+w(b))2 if a and b share the same kind but not the label

Kind means in this context edge or vertex In that case we think that sharing the same kind but not the same labelis the worst case scenario Those weights avoid having multiples time the same distance between two random pathswhich will be important during the next step In fact because the two graphs do not contain cycles they have a finitenumber of paths We will need to compute all distances between all possible pairs The more distinct values we havefor a distance between two paths the better it is

237 httpsenwikipediaorgwikiLevenshtein_distance

72 Distance between two graphs 255

Machine Learning Statistiques et Programmation Version 035930

Step 2 Kruskal kind (bijection on paths)

Among all possible distances we compute between two paths some of them might be irrelevant If for some reasonsthere is an edge which connects the root to the leave computing the edit distance between this short path and any otherone seems weird Thatrsquos why we need to consider a kind of paths association We need to associate a path from a graphto another from the other graph and the association needs to be a bijection assuming two close paths will have a lowdistanceAfter the first step we ended up with a matrix containing all possible distances We convert this matrix into a graphwhere each path is a vertex each distance is a weighted edge We use a kind of Kruskal algorithm to remove heavyweighted edges until we get a kind of bijection

bull We sort all edges by weight (reverse order)bull We remove the first ones until we get an injection on both sides a path from a graph must be associated to only

one pathBasically some paths from the bigger graph will not be teamed up with another path

Step 3 Matching

Now that we have a kind of bijection between paths it also means we have a series of alignments between paths onefrom the first graph one from the second graph and an alignment between them computed during the step We buildtwo matrices one for the edges Me one for the vertices Mv defined as follows

bull Me(i j) contains the number of times edge i from graph 1 is associated to edge j from graph 2 among all pathsassociated by the previous step

bull Mv(i j) contains the same for the vertices

Step 4 Kruskal kind the return (bijection on edges and vertices)

We now have two matrices which contains pretty much the same information as we have in step 2 each element isthe number of times an edge or a vertex was associated with an edge or a vertex of the other graph We use the samealgorithm until we get a kind of bijection between vertices or edges from both matrices

256 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

Step 5 Merging the two graphs

Once we finalized the previous steps we know which vertices and edges will be associated with vertices and edgesfrom the other graph Whatrsquos left is to add the left over to the picture which is shown by next Figure

Red and symbol - means deleted from graph~1 and not present in graph 2 Green and symbol + means not present ingraph 1 and added in graph 2 The black pieces remains unchangedThe main drawback of this algorithm is its speed It is very time consuming We need to compute distances between allpaths which is ok when graphs are small but very long when graphs are bigger Many paths share the same beginningand we could certainly avoid wasting time computing edit distances between those paths

724 Distance between graphs

We defined a distance between two sequences based on the sum of operations needed to switch from the first sequenceto the second one we can follow the same way here The alignment we were able to build between two graphs showsinsertions deletions and comparisons of different edges of vertices By giving a weight of each kind we can sum themto build the distance we are looking for We use the same weights we defined to compute the alignment between twopaths from both graphs Letrsquos defined an aligned graph G = (ab) G is the set of edges and vertices of the finalgraph a b are an edge of a vertex from the first graph for a and from the second graph for b a or b can be null Wealso defined insertion(a) = comparison(empty a)

d(G1 G2) =sum

aisinG1cupemptybisinG2cupempty

comparison(a b)11(ab)isinG

It is obvioulsy symmetric To proove it verifies d(G1 G2) = 0 lArrrArr G1 = G2 we could proove that every path fromG1 will be associated to itself during the first step It is not necessarily true because two different paths could share the

72 Distance between two graphs 257

Machine Learning Statistiques et Programmation Version 035930

same sequence of labels Letrsquos consider the following example

begin

FFF

FFFF

F 1 a 2 b

end

3 a 4 b

==

This graph contains three paths

path1 1 2 abpath2 3 4 abpath3 1 2 3 4 abab

The matrix distance between paths will give (xgt 0) 0 0 x0 0 xx x 0

The bolded values 0 represent one possible association between paths which could lead to the possible associationbetween vertices

1 0 1 00 1 0 11 0 1 00 1 0 1

In that particular case the algorithm will not return a null distance mostly because while aligning sequences we do notpay too much attention to the local structure One edge could be missing from the alignment We could try to correctthat by adding some cost when two vertices do not have the number of input or output edges instead of consideringonly the labels

725 Second approach faster

No implemented yet

726 Bibliography

73 Deacutetection de segments

bull Lrsquoideacutee (page 259)bull Illustration (page 261)bull Explications (page 266)

ndash Bibliographie (page 266)

258 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

731 Lrsquoideacutee

Une image aleacuteatoire ressemble agrave la mire en un temps ougrave la teacuteleacutevision ne rediffusait pas les programmes diurne la nuit

Dans ce brouillard aleacuteatoire la probabiliteacute drsquoavoir des points aligneacutes est tregraves faible si faible que le simple fait drsquoen voirest un eacuteveacutenement extraordinaire Trois points aligneacutes ne sont pas rares quatre un peu plus cinq encore plus A partirdrsquoun certain seuil on peut consideacuterer que trop de points aligneacutes forme une droite et un eacuteveacutenement trop rare pour ecirctreignoreacute On cherche agrave deacutetecter les arecirctes dans une image comme la suivante

On calcule le gradient drsquoune image en noir et blanc

73 Deacutetection de segments 259

Machine Learning Statistiques et Programmation Version 035930

Puis on extrait les segments en les consideacuterant comme des anomalies par rapport agrave un champ de pixels aleacuteatoire

260 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

732 Illustration

Deacutetection de segments dans une image

Crsquoest une technique assez vieille et qui consiste agrave deacutetecter des segments comme des anomalies lrsquoalignement de pointsest un eacuteveacutenement assez rare dans un nuage de points mais rare comment Cette ideacutee megravene agrave la probabilisation drsquouneimage pour quantifier ce qursquoest un alignement de points neacutecessairement rare

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Une image aleacuteatoire (page 261)bull Gradient (page 263)bull Deacutetection de segments (page 263)bull Deacutetection de segments sur une image (page 264)

Une image aleacuteatoire

On considegravere un bruit aleacuteatoire uniforme dans une image et on ajoute des points aleacuteatoires tireacutes le long drsquoune ligneselon une loi gaussienne uniforme sur la ligne gaussien autour du segment

from mlstatpyimagedetection_segment import random_noise_image convert_array2PILimg = random_noise_image((100 100))convert_array2PIL(img mode=binary)

from mlstatpyimagedetection_segment import random_segment_imagerandom_segment_image(img density=3 lmin=03)

size 36angle 2285619160431492x1 23597410654261072y1 40x2 0y2 6718753777770554nbpoints 108

convert_array2PIL(img mode=binary)

73 Deacutetection de segments 261

Machine Learning Statistiques et Programmation Version 035930

random_segment_image(img density=5 lmin=03)random_segment_image(img density=5 lmin=03)convert_array2PIL(img mode=binary)

pilimg = convert_array2PIL(img mode=binary)convert(RGB)pilimg

from PIL import ImageFilter

pilimg = pilimgfilter(ImageFilterBLUR)filter(ImageFilterBLUR)filter(ImageFilterrarrBLUR)filter(ImageFilterBLUR)pilimg

from PIL import ImageEnhanceenh = ImageEnhanceSharpness(pilimg)

(suite sur la page suivante)

262 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

final_img = enhenhance(4)final_img

Gradient

La deacutetection des segments est baseacutee sur le gradient

from mlstatpyimagedetection_segment import compute_gradient plot_gradientgrad = compute_gradient(final_img color=0)

plot_gradient(pilimgcopy() grad direction=-2)

Deacutetection de segments

from mlstatpyimagedetection_segment import detect_segmentsseg = detect_segments(final_img verbose=1 seuil_nfa=1e-1)len(seg)

n = 1000 82 temps 027 sec nalign 298n = 2000 82 temps 052 sec nalign 671n = 3000 164 temps 083 sec nalign 964n = 4000 164 temps 110 sec nalign 1357n = 5000 249 temps 139 sec nalign 1544n = 6000 252 temps 166 sec nalign 1924n = 7000 374 temps 195 sec nalign 2183n = 8000 375 temps 223 sec nalign 2460n = 9000 379 temps 256 sec nalign 2728

379

73 Deacutetection de segments 263

Machine Learning Statistiques et Programmation Version 035930

from mlstatpyimagedetection_segment import plot_segmentsplot_segments(final_imgcopy() seg)

Deacutetection de segments sur une image

from PIL import Imageegl = Imageopen(eglise_zoom2jpg)egl

On reacuteduit la taille de lrsquoimage

egl2 = eglcrop((0 0 eglsize[0]3 3eglsize[1]4))egl2

264 Chapter 7 Algorithmes

Machine Learning Statistiques et Programmation Version 035930

grad2 = compute_gradient(egl2 color=0)plot_gradient(egl2copy() grad2 direction=-2)

seg2 = detect_segments(egl2)len(seg2)

490

from mlstatpyimagedetection_segment import plot_segmentsres = plot_segments(egl2copy() seg2)res

73 Deacutetection de segments 265

Machine Learning Statistiques et Programmation Version 035930

Il faudrait fusionner les segments mais cela a lrsquoair de marcherLa fonction detect_segments lance la deacutetection des segments

733 Explications

La preacutesentation Deacutetection des images dans les images digitales239 deacutetaille le principe de lrsquoalgorithme Lrsquoideacutee delrsquoalgorithme est assez proche de la transformeacutee de Hough240 Celle-ci est impleacutementeacutee dans le module scikit-image241

ou opencv242

Bibliographie

bull From Gestalt Theory to Image Analysis243 Agnegraves Desolneux Lionel Moisan Jean-Michel Morelbull Learning Equivariant Functions with Matrix Valued Kernels244

bull The Hough Transform Estimator245

bull An Extension to Hough Transform Based on Gradient Orientation246

239 httpsgithubcomsdpythonmlstatpyblobmaster_todosegment_detectionpresentationpdf240 httpsfrwikipediaorgwikiTransformC3A9e_de_Hough241 httpscikit-imageorgdocsdevapiskimagetransformhtml242 httpsdocsopencvorg24136doctutorialsimgprocimgtranshough_lineshough_lineshtmlhighlight=hough243 httpwwwmath-infouniv-paris5fr~moisanpapers2006-9pdf244 httpwwwjmlrorgpapersvolume8reisert07areisert07apdf245 httpsarxivorgpdfmath0503668pdf246 httpsarxivorgftparxivpapers1510151004863pdf

266 Chapter 7 Algorithmes

CHAPTER 8

Peacutereacutegrinations

Ce sont quelques notebooks sur des points particuliers qui surgissent au quotidien quand on traite des donneacutees Souventplus pratiques que theacuteoriques crsquoest lrsquooccasion de deacutecouvrir quelques poussiegraveres sous le tapis

81 Reacutepartir en base drsquoapprentissage et de test

Crsquoest un problegraveme plutocirct facile puisqursquoil srsquoagit de reacutepartir aleacuteatoirement les lignes drsquoune base de donneacutees drsquoun cocircteacute oude lrsquoautre Lorsque le problegraveme de machine learning agrave reacutesoudre est un problegraveme de classification il faut srsquoassurer quechaque cocircteacute contient une proportion raisonnable de chaque classe

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Reacutepartition naiumlve (page 268)bull Reacutepartition stratifieacutee (page 271)bull Streaming splitting (page 276)bull Streaming distribueacute (page 282)

import matplotlibpyplot as pltmatplotlib inline

267

Machine Learning Statistiques et Programmation Version 035930

811 Reacutepartition naiumlve

On considegravere une base de donneacutees qursquoon divise en 23 apprentissage 13 test On note cette proportion t Deux classes0 et 1 la proportion de la classe 1 est de p qursquoon choisit petit

import randomdef generate_dataset(n t)

return [1 if randomrandom() lt t else 0 for i in range(0n)]

ens = generate_dataset(4000 001)sum(ens)

40

Et on divise en base drsquoapprentissage et de test

def custom_split_train_test(ens p)choice = generate_dataset(len(ens) p)train = [x for x c in zip(ens choice) if c == 1]test = [x for x c in zip(ens choice) if c == 0]return train test

train test = custom_split_train_test(ens 066)print(len(train) sum(train) sum(train)len(train))print(len(test) sum(test) sum(test)len(test))

2683 27 0010063361908311591317 13 0009870918754745633

On recommence un grand nombre de fois et on repreacutesente la proportion obtenue dans la base de test

tirages = [sum(test)len(test) for train test in [custom_split_train_test(ens 066)rarrfor i in range(0100)]]

pltplot(tirages o)pltylabel(proportion classe 1)pltxlabel(tirages)

268 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

On considegravere maintenant la moyenne les valeurs extrecircmes de la proportion en faisant varier p

ps = [0001 i for i in range(1 50)]tmin tmax tmean = [] [] []for p in ps

ens = generate_dataset(4000 p)tirages = [sum(test)len(test) for train test in [custom_split_train_test(ens 0

rarr66) for i in range(0200)]]tiragessort()tminappend(tirages[int(len(tirages)005)])tmaxappend(tirages[-int(len(tirages)005)])tmeanappend(sum(tirages) len(tirages))

fig ax = pltsubplots(1 1)axplot(ps ps -- label=expected proportion)axplot(ps tmin label=min)axplot(ps tmax label=max)axplot(ps tmean label=mean)axlegend()

81 Reacutepartir en base drsquoapprentissage et de test 269

Machine Learning Statistiques et Programmation Version 035930

Et train_test_split247

from sklearnmodel_selection import train_test_splitimport pandas

ps = [0001 i for i in range(1 50)]tmin tmax tmean = [] [] []for p in ps

ens = pandasSeries(generate_dataset(4000 p))tirages = [sum(test)len(test) for train test in [train_test_split(ens test_size=0

rarr66) for i in range(0200)]]tiragessort()tminappend(tirages[int(len(tirages)005)])tmaxappend(tirages[-int(len(tirages)005)])tmeanappend(sum(tirages) len(tirages))

fig ax = pltsubplots(1 1)axplot(ps ps -- label=expected proportion)axplot(ps tmin label=min)axplot(ps tmax label=max)axplot(ps tmean label=mean)axset_title(train_test_split from sklearn)axlegend()

247 httpscikit-learnorgstablemodulesgeneratedsklearnmodel_selectiontrain_test_splithtml

270 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Lrsquoeacutecart entre les extrecircmes paraicirct plus petit Le geacuteneacuterateur pseudo aleacuteatoire utiliseacute par scikit-learn248 paraicirct de meilleurqualiteacute Nous y reviendront peut-ecirctre un jour

812 Reacutepartition stratifieacutee

Nous utilisons maintenant le paramegravetre stratify qui permet de srsquoassurer que les deux classes sont eacutequitablement reacutepartiesentre les deux ensembles train et test

from sklearnmodel_selection import train_test_splitimport pandas

ps = [0001 i for i in range(1 50)]tmin tmax tmean = [] [] []for p in ps

ens = pandasSeries(generate_dataset(4000 p))

traintest = []excs = []for i in range(0 200)

trytrain test = train_test_split(ens test_size=066 stratify=ens)traintestappend((traintest))

except ValueError as eprint(Skipping small class too small in one side e)excsappend(e)

if len(traintest) lt 100ex = excs[0] if len(excs) gt 0 else no exceptionraise Exception(Too few you should check the implementation is okn0

rarrformat(ex))(suite sur la page suivante)

248 httpscikit-learnorg

81 Reacutepartir en base drsquoapprentissage et de test 271

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

tirages = [sum(test)len(test) for train test in traintest]tiragessort()tminappend(tirages[int(len(tirages)005)])tmaxappend(tirages[-int(len(tirages)005)])tmeanappend(sum(tirages) len(tirages))

fig ax = pltsubplots(1 1)axplot(ps ps -- label=expected proportion)axplot(ps tmin label=min)axplot(ps tmax label=max)axplot(ps tmean label=mean)axset_title(stratified train_test_split from sklearn)axlegend()

La proportion initiale est bien respecteacutee Comment faire cela en pratique Le plus simple est sans doute de bull De trier les observations qui appartiennent agrave chaque classebull De les permuter de faccedilon aleacuteatoirebull Puis de prendre les premiers eacuteleacutements pour la base drsquoapprentissage dans chaque classe et les derniers pour la

base de test

def custom_statitied_split_train_test(ens p stratify)strat = set(stratify)train = []test = []for st in strat

cl = [e for e s in zip(ens stratify) if s == st]randomshuffle(cl)i = int(len(cl) p)trainextend(cl[i])

(suite sur la page suivante)

272 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

testextend(cl[i])return train test

ps = [0001 i for i in range(1 50)]tmin tmax tmean = [] [] []for p in ps

ens = generate_dataset(4000 p)tirages = [sum(test)len(test) for train test in [custom_statitied_split_train_

rarrtest(ensp=066 stratify=ens) for i in range(0200)]]

tiragessort()tminappend(tirages[int(len(tirages)005)])tmaxappend(tirages[-int(len(tirages)005)])tmeanappend(sum(tirages) len(tirages))

fig ax = pltsubplots(1 1)axplot(ps ps -- label=expected proportion)axplot(ps tmin label=min)axplot(ps tmax label=max)axplot(ps tmean label=mean)axset_title(custom stratified train_test_split)axlegend()

La meacutethode est simple mais plus coucircteuse puisqursquoelle neacutecessite un tri

import time

ns = []tn = []

(suite sur la page suivante)

81 Reacutepartir en base drsquoapprentissage et de test 273

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

ts = []

ii = 5for N in [10000 20000 50000 100000 200000 500000 int(1e6)

int(2e6) int(5e6)]print(N)ens = pandasSeries(generate_dataset(N 005))nsappend(N)

tt = []for i in range(0ii)

t = timeperf_counter()train_test_split(ens test_size=066)d = 10 (timeperf_counter()-t) iittappend(d)

ttsort()tnappend(tt[len(tt)2])

tt = []for i in range(0ii)

t = timeperf_counter()train_test_split(ens test_size=066 stratify=ens)d = 10 (timeperf_counter()-t) iittappend(d)

ttsort()tsappend(tt[len(tt)2])

100002000050000100000200000500000100000020000005000000

import mathfig ax = pltsubplots(1 1)dd = tn[-1] - (ts[-1] - tn[-1])13axplot(ns [x dd ns[-1] for x in ns] label=O(x))axplot(ns [x mathlog(x) ns[0] dd ns[-1] (ns[0] mathlog(ns[0])) for x inrarrns] label=O(x ln x))axplot(ns tn label=split)axplot(ns ts label=stratified split)axset_title(processing time for train_test_split)axgrid(True)axset_xscale(log nonposx=clip)axset_yscale(log nonposy=clip)axset_xlabel(N)axset_ylabel(time(s))axlegend()

274 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Le coucirct de la fonction train_test_split249 semble ecirctre entre O(n) et O(n lnn) Regardons

import mathfig ax = pltsubplots(1 1)axplot(ns [(x tn[-1]) (n mathlog(n) (ns[-1] mathlog(ns[-1]))) for x n inrarrzip(tn ns)]

label=split n ln s)axplot(ns [(x ts[-1]) (n mathlog(n) (ns[-1] mathlog(ns[-1]))) for x n inrarrzip(ts ns)]

label=stratified n ln s)axplot(ns [(x tn[-1]) (n ns[-1]) for x n in zip(tn ns)] label=split n)axplot(ns [(x ts[-1]) (n ns[-1]) for x n in zip(ts ns)] label=stratified nrarr)

axset_title(processing time for train_test_split)axgrid(True)axset_xscale(log nonposx=clip)axset_xlabel(N)axset_ylabel(time(s) (s ln s))axset_ylim([0515])axlegend()

249 httpscikit-learnorgstablemodulesgeneratedsklearnmodel_selectiontrain_test_splithtml

81 Reacutepartir en base drsquoapprentissage et de test 275

Machine Learning Statistiques et Programmation Version 035930

Crsquoest difficile agrave voir sur ce scheacutema Il faudrait tirer plus drsquoexemple regader les quantiles plutocirct que la seule meacutedianeLe code de scikit-learn250 est plus explicite une permutation preacutecegravede la reacutepartition en train test

813 Streaming splitting

Streaming veut dire qursquoon traite les donneacutees sous la forme drsquoun flux et qursquoon ne sait pas combien il y en Concregravetementil faut commencer la reacutepartition train test au moment sans savoir quand elle srsquoarrecirctera Par conseacutequent il faut qursquoagravetout instant on soit capable drsquointerrompre la reacutepartition et celle-ci doit ecirctre valideLe premier algorithme qui consiste agrave tirer un nombre aleacuteatoire et agrave le reacutepartir en train ou test selon le nombre tireacuteChaque observation est traiteacutee indeacutependamment A tout moment la reacutepartition peut ecirctre interrompue En pratique onimpleacutemente ce type de processus sous la forme drsquoiteacuterateur ou de mapper Crsquoest une fonction qui accepte un iteacuterateursur un ensemble et qui retourne un iteacuterateur sur les valeurs transformeacutees Dans notre cas on retourne lrsquoobservationsuivi de 0 si elle est classeacutee en train et 1 en test

def streaming_split_train_test(stream p)for obs in stream

x = randomrandom()yield obs 0 if x lt= p else 1

def iterate_data(n t)while n gt 0

yield 1 if randomrandom() lt t else 0n -= 1

for obs s in streaming_split_train_test(iterate_data(10 005) 066)print(obs=0 traintest=1format(obs s))

250 httpsgithubcomscikit-learnscikit-learnblobmastersklearnmodel_selection_splitpyL1048

276 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

obs=0 traintest=1obs=0 traintest=0obs=0 traintest=0obs=0 traintest=1obs=0 traintest=0obs=1 traintest=0obs=0 traintest=0obs=0 traintest=0obs=0 traintest=0obs=0 traintest=0

La reacutepartition stratifieacutee repose sur une permutation aleacuteatoire et cela implique drsquoavoir accegraves agrave lrsquointeacutegraliteacute des donneacuteesau preacutealable En streaming ce nrsquoest pas possible Il faut donc penser agrave autre chose pour obtenir une version stratifieacuteede la version streaming Rien nrsquoempecircche en version streaming de garder les derniegraveres observations en meacutemoire pourfaire une mini-permutation Nous allons introduire quelques changements

1 Le stream est maintenant un flux sur deux valeurs lrsquoobservation et la classe agrave laquelle il appartient2 La fonction va conserver les derniegraveres valeurs pour chaque classe3 La fonction va produire des observations de temps en temps quand elle sera sucircre que les observations seront

stratifieacutees4 Nuos allons compter les observations distribueacutees dans chaque base

def streaming_stratified_split_train_test(stream p)n = max(1p 1(1-p))if n gt 10000

raise Exception(Cette reacutepartition train test est vraiment deacuteseacutequilibreacutee)memory = for obs strat in stream

if strat not in memorymemory[strat] = []

memory[strat]append(obs)

for k in memoryv = memory[k]if len(v) gt= n

on permute aleacuteatoirementrandomshuffle(v)i = int(len(v) p + 05)for j in range(0i)

yield v[j] 0 apprentissagefor j in range(ilen(v))

yield v[j] 1 test on efface de la meacutemoire les informations produitesmemory[k] = []

lorsquon a fini il faut tout de mecircme reacutepartir les observations stockeacuteesfor k in memory

v = memory[k] on permute aleacuteatoirementrandomshuffle(v)i = int(len(v) p)for j in range(0i)

(suite sur la page suivante)

81 Reacutepartir en base drsquoapprentissage et de test 277

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

yield v[j] 0 apprentissagefor j in range(ilen(v))

yield v[j] 1 test

iter = streaming_stratified_split_train_test( ((ii) for i in iterate_data(10000 005))rarr 066)df = pandasDataFrame(iter)dfcolumns = [obs train_test]print(dfshape)dfhead()

(10000 2)

df2 = dfcopy()df2[un] = 1piv = df2groupby([obs train_test] as_index=False)count()pivot(train_test obsrarr un)piv

Il y a juste un petit problegraveme avec cette impleacutementation On multiplie la taille du buffer par un reacuteel Je suggegravere drsquoenleverle nombre 05 dans le code pour voir ce qursquoil se passe La somme des arrondis est loin drsquoecirctre un arrondi mecircme si Nchoisi tel que N = max( 1p

11minusp )

piv[sum] = piv[0] + piv[1]piv[ratio] = piv[1] piv[sum]piv

Il faut corriger ces erreurs drsquoarrondi On srsquoinspire de lrsquoalgorithme de Bresenham251 et meacutemoriser les eacuteleacutements reacutepartis

def streaming_stratified_split_train_test2(stream p)n = max(1p 1(1-p))if n gt 10000

raise Exception(Cette reacutepartition train test est vraiment deacuteseacutequilibreacutee)counts = memory = for obs strat in stream

if strat not in memorymemory[strat] = []

memory[strat]append(obs)

for k in memoryv = memory[k]if len(v) gt= n

on permute aleacuteatoirementrandomshuffle(v)if (0k) in counts

tt = counts[1k] + counts[0k]delta = - int(counts[0k] - ttp + 05)

elsedelta = 0

(suite sur la page suivante)

251 httpsfrwikipediaorgwikiAlgorithme_de_tracC3A9_de_segment_de_Bresenham

278 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

i = int(len(v) p + 05)i += deltai = max(0 min(len(v) i))for j in range(0i)

yield v[j] 0 apprentissagefor j in range(ilen(v))

yield v[j] 1 testif (0k) not in counts

counts[0k] = icounts[1k] = len(v)-i

elsecounts[0k] += icounts[1k] += len(v)-i

on efface de la meacutemoire les informations produitesmemory[k] = []

lorsquon a fini il faut tout de mecircme reacutepartir les observations stockeacuteesfor k in memory

v = memory[k] on permute aleacuteatoirementrandomshuffle(v)if (0k) in counts

tt = counts[1k] + counts[0k]delta = - int(counts[0k] - ttp + 05)

elsedelta = 0

i = int(len(v) p + 05)i += deltai = max(0 min(len(v) i))for j in range(0i)

yield v[j] 0 apprentissagefor j in range(ilen(v))

yield v[j] 1 testif (0k) not in counts

counts[0k] = icounts[1k] = len(v)-i

elsecounts[0k] += icounts[1k] += len(v)-i

iter = streaming_stratified_split_train_test2( ((ii) for i in iterate_data(10000 0rarr05)) 066)df = pandasDataFrame(iter)dfcolumns = [obs train_test]df2 = dfcopy()df2[un] = 1piv = df2groupby([obs train_test] as_index=False)count()pivot(train_test obsrarr un)piv[sum] = piv[0] + piv[1]piv[ratio] = piv[1] piv[sum]print(ratio de classe 1 dans leacutechantillon entier 15f

(suite sur la page suivante)

81 Reacutepartir en base drsquoapprentissage et de test 279

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

((piviloc[11] + piviloc[01]) (piviloc[01] + piviloc[00] + piviloc[11]rarr+ piviloc[10]) ))piv

ratio de classe 1 dans leacutechantillon entier 004980

Pas trop mal Le dernier inconveacutenient est la taille de la fenecirctre Dans lrsquoexemple qui suit elle sera de 3 Lrsquoalgorithme vadonc grouper les eacuteleacutements par trois les permuter aleacuteatoirement et les laisser filer Nous ne pourrons jamais avoir troiseacuteleacutements de suite du mecircme cocircteacute train ou test On peut bidouiller comme suit (ligne marqueacutees changement) Lafonction qui suit ne permet toujours pas drsquoavoir de grandes seacutequences reacutepartie du mecircme cocircteacute mais ce sera lrsquoinconveacutenientde ce type drsquoalgorithme La taille du buffer limite cette possibiliteacute

def streaming_stratified_split_train_test3(stream p)n = 2 max(1p 1(1-p)) changementif n gt 10000

raise Exception(Cette reacutepartition train test est vraiment deacuteseacutequilibreacutee)counts = memory = for obs strat in stream

if strat not in memorymemory[strat] = []

memory[strat]append(obs)

for k in memoryv = memory[k]if len(v) gt= n + randomrandint(0 10) changement

on permute aleacuteatoirementrandomshuffle(v)if (0k) in counts

tt = counts[1k] + counts[0k]delta = - int(counts[0k] - ttp + 05)

elsedelta = 0

i = int(len(v) p + 05)i += deltai = max(0 min(len(v) i))for j in range(0i)

yield v[j] 0 apprentissagefor j in range(ilen(v))

yield v[j] 1 testif (0k) not in counts

counts[0k] = icounts[1k] = len(v)-i

elsecounts[0k] += icounts[1k] += len(v)-i

on efface de la meacutemoire les informations produitesmemory[k] = []

lorsquon a fini il faut tout de mecircme reacutepartir les observations stockeacuteesfor k in memory

(suite sur la page suivante)

280 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

v = memory[k] on permute aleacuteatoirementrandomshuffle(v)if (0k) in counts

tt = counts[1k] + counts[0k]delta = - int(counts[0k] - ttp + 05)

elsedelta = 0

i = int(len(v) p + 05)i += deltai = max(0 min(len(v) i))for j in range(0i)

yield v[j] 0 apprentissagefor j in range(ilen(v))

yield v[j] 1 testif (0k) not in counts

counts[0k] = icounts[1k] = len(v)-i

elsecounts[0k] += icounts[1k] += len(v)-i

iter = streaming_stratified_split_train_test3( ((ii) for i in iterate_data(10000 0rarr05)) 066)df = pandasDataFrame(iter)dfcolumns = [obs train_test]df2 = dfcopy()df2[un] = 1piv = df2groupby([obs train_test] as_index=False)count()pivot(train_test obsrarr un)piv[sum] = piv[0] + piv[1]piv[ratio] = piv[1] piv[sum]print(ratio de classe 1 dans leacutechantillon entier 15f

((piviloc[11] + piviloc[01]) (piviloc[01] + piviloc[00] + piviloc[11]rarr+ piviloc[10]) ))piv

ratio de classe 1 dans leacutechantillon entier 005000

81 Reacutepartir en base drsquoapprentissage et de test 281

Machine Learning Statistiques et Programmation Version 035930

814 Streaming distribueacute

Crsquoest possible mais crsquoest un peu plus compliqueacute parce que le hasard en distribueacute crsquoest compliqueacute On nrsquoest jamais sucircrque des seacuteries pseudo-aleacuteatoires soient tout-agrave-fait indeacutependantes lorsqursquoelles sont geacuteneacutereacutees en parallegraveles

82 Correacutelations non lineacuteaires

Les correacutelations indiquent si deux variables sont lineacuteairement eacutequivalentes Comment eacutetendre cette notion agrave desvariables lieacutees mais pas de faccedilon lineacuteaire

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Un exemple (page 282)bull Un peu de theacuteorie (page 284)bull Veacuterifications (page 284)bull Overfitting (page 285)bull Correacutelations de variables cateacutegorielles (page 290)bull Maximal information coefficient (page 298)

matplotlib inline

821 Un exemple

from sklearn import datasets

iris = datasetsload_iris()X = irisdataY = iristargetimport pandasdf = pandasDataFrame(X)dfcolumns = [X1 X2 X3 X4]dfhead()

import seaborn as snssnsset()snspairplot(df)

282 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Et les correacutelations

dfcorr()

82 Correacutelations non lineacuteaires 283

Machine Learning Statistiques et Programmation Version 035930

822 Un peu de theacuteorie

Le coefficient de correacutelation252 de Pearson est calculeacute comme suit

cor(Xi Xj) =cov(Xi Yi)

σ(Xi)σ(Xj)

Lorsque les variables sont centreacutees EXi = EXj = 0 cette formule devient

cor(Xi Xj) =E(XiXj)radicEX2

i EX2j

Lorsque les variables sont reacuteduites EX2i = EX2

j = 1 cette formule devient cor(Xi Xj) = E(XiXj) Admettonsmaintenant que lrsquoon cherche agrave trouver le coefficient αij qui minimise la variance du bruit ϵij

Xj = αijXi + ϵij

Le coefficient αij est le reacutesultat drsquoune reacutegression lineacuteaire qui minimise E(Xj minus αijXi)2 Si les variables Xi Xj

sont centreacutees et reacuteduites αlowastij = E(XiXj) = cor(Xi Xj) On eacutetend cette deacutefinition dans le cas drsquoune fonction

parameacutetrable f f(ωX) rarr R et drsquoune reacutegression non lineacuteaire On suppose que les paramegravetres ωlowast minimisentla quantiteacute minω(Xj minus f(ωXi))

2 On eacutecrit alors Xj = αijf(ωlowastXi)

αij+ ϵij et on choisit αij de telle sorte que

E(

f(ωlowastXi)2

α2ij

)= 1 On deacutefinit la correacutelation non lineacuteaire au sens de f

corf (Xi Xj) =radic

E(f(ωXi)2)

On veacuterifie que ce coefficient est compris entre [0 1] Il est positif de maniegravere eacutevidente Il est eacutegalement infeacuterieur agrave1 si cela nrsquoeacutetait pas le cas nous pourrions construire une fonction f(ωlowast X) + c qui est une meilleur solution pour leprogramme de minimisation Ce nombre ressemble agrave une correacutelation agrave ceci pregraves qursquoelle ne peut ecirctre neacutegative

823 Veacuterifications

Tout drsquoabord le cas lineacuteaire

from sklearnpreprocessing import scaleimport numpy

def correlation_etendue(df model params)cor = dfcorr()df = scale(df)for i in range(corshape[0])

xi = df[ ii+1]for j in range(corshape[1])

mod = model(params)xj = df[ j]modfit(xi xj)v = modpredict(xi)c = numpystd(v)coriloc[ij] = c

return cor

from sklearnlinear_model import LinearRegressioncor = correlation_etendue(df LinearRegression fit_intercept=False)cor

252 httpsfrwikipediaorgwikiCorrC3A9lation_(statistiques)

284 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

On affiche agrave nouveau les correacutelations qui sont identiques au signe pregraves

dfcorr()

Et le cas non lineacuteaire

from sklearntree import DecisionTreeRegressorcor = correlation_etendue(df DecisionTreeRegressor)cor

from sklearnensemble import RandomForestRegressorcor = correlation_etendue(df RandomForestRegressor n_estimators=10)cor

824 Overfitting

Ces chiffres sont beaucoup trop optimistes Les modegraveles de machine learning peuvent tout agrave fait faire de lrsquooverfittingIl faut ameacuteliorer la fonction en divisant en apprentissage et test plusieurs fois Il faut eacutegalement tenir compte de lrsquoerreurde preacutediction On rappelle que

Xj = αijf(ωlowast Xi)

αij+ ϵij = corf (Xi Xj)

f(ωlowast Xi)radicE(f(ωXi)2)

+ ϵij

Or E(X2j ) = 1 et on suppose que les bruits ne sont pas correacuteleacutees lineacuteairement aux f(ωlowast Xi) On en deacuteduit que

corf (Xi Xj) =radic1minus Eϵ2ij

from sklearnmodel_selection import train_test_splitimport numpy

def correlation_cross_val(df model draws=5 params)cor = dfcorr()df = scale(df)for i in range(corshape[0])

xi = df[ ii+1]for j in range(corshape[1])

xj = df[ j]mem = []for k in range(0 draws)

xi_train xi_test xj_train xj_test = train_test_split(xi xj test_rarrsize=05)

mod = model(params)modfit(xi_train xj_train)v = modpredict(xi_test)c = (1 - numpyvar(v - xj_test))memappend(max(c 0) 05)

coriloc[ij] = sum(mem) len(mem)return cor

cor = correlation_cross_val(df LinearRegression fit_intercept=False draws=20)cor

cor = correlation_cross_val(df DecisionTreeRegressor)cor

82 Correacutelations non lineacuteaires 285

Machine Learning Statistiques et Programmation Version 035930

cor = correlation_cross_val(df RandomForestRegressor n_estimators=10)cor

Les reacutesultats sont assez fluctuants lorsque les donneacutees sont mal correacuteleacutees On remarque eacutegalement que la matrice nrsquoestplus neacutecessairement symmeacutetrique

import matplotlibpyplot as plt

def pairplot_cross_val(data model=None ax=None params)if ax is None

fig ax = pltsubplots(datashape[1] datashape[1] figsize=paramsget(figsizerarr (1010)))if figsize in params

del params[figsize]if model is None

from sklearnlinear_model import LinearRegressionmodel = LinearRegression

df = scale(data)cor = numpycorrcoef(dfT)for i in range(corshape[0])

xi = df[ ii+1]for j in range(corshape[1])

xj = df[ j]mem = []xi_train xi_test xj_train xj_test = train_test_split(xi xj test_size=0

rarr5)mod = model(params)modfit(xi_train xj_train)v = modpredict(xi_test)mod = model(params)modfit(xi_test xj_test)v2 = modpredict(xi_train)ax[ij]plot(xj_test v )ax[ij]plot(xj_train v2 )if j == 0

ax[ij]set_ylabel(datacolumns[i])if i == datashape[1]-1

ax[ij]set_xlabel(datacolumns[j])mi = min(min(xj_test) min(v) min(xj_train) min(v2))ma = max(max(xj_test) max(v) max(xj_train) max(v2))ax[ij]plot([mi ma] [mi ma] --)

return ax

ax = pairplot_cross_val(df)ax

286 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

ax = pairplot_cross_val(df model=DecisionTreeRegressor)ax

82 Correacutelations non lineacuteaires 287

Machine Learning Statistiques et Programmation Version 035930

ax = pairplot_cross_val(df model=RandomForestRegressor n_estimators=10)ax

288 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

from sklearnneighbors import KNeighborsRegressorax = pairplot_cross_val(df model=KNeighborsRegressor)ax

82 Correacutelations non lineacuteaires 289

Machine Learning Statistiques et Programmation Version 035930

825 Correacutelations de variables cateacutegorielles

Crsquoest le problegraveme eacutepineux si on se restreint au lineacuteaire Cela nrsquoa pas trop de sens drsquoaffecter une valeur agrave chaque cateacutegorieet la correacutelation de deux variables binaires (des modaliteacutes) est toujours eacutetrange car il nrsquoy a que deux valeurs possibles

cov(XY ) = E [(X minus EX)(Y minus EY )] = E(XY )minus EXEY = P(X = 1 et Y = 1)minus EXEY

Dans le cas de variables binaires geacuteneacutereacutees de modaliteacutes de la mecircme variables cateacutegorielles le premier terme est toujoursnul puisque les modaliteacutes sont exclusives et la correacutelation est toujours neacutegative

import randomex = numpyzeros((100 2))for i in range(0 exshape[0])

h = randomrandint(0 exshape[1]-1)(suite sur la page suivante)

290 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

ex[i h] = 1ex[5]

array([[1 0][0 1][1 0][1 0][1 0]])

numpycorrcoef(exT)

array([[ 1 -1][-1 1]])

import randomex = numpyzeros((100 3))for i in range(0 exshape[0])

h = randomrandint(0 exshape[1]-1)ex[i h] = 1

ex[5]numpycorrcoef(exT)

array([[ 1 -051449576 -051449576][-051449576 1 -047058824][-051449576 -047058824 1 ]])

Supposons maintenant que nous avons deux variables cateacutegorielles tregraves proches bull X1 est une couleur rouge bleu grisbull X2 est une nuance rose orange cyan magenta blanc noir

c1 = [rouge bleu gris]c2 = [rose orange cyan magenta blanc noir]ind = [randomrandint(0 2) for i in range(0 100)]x1 = [c1[i] for i in ind]x2 = [c2[i2 + randomrandint(01)] for i in ind]df = pandasDataFrame(dict(X1=x1 X2=x2))dfhead()

On peut eacutevidemment transformer en entier

dummies = pandasget_dummies(df)dummieshead()

dummiescorr()

Ca ne dit pas grand-chose

from sklearnpreprocessing import LabelEncoderenc = LabelEncoder()df[X1e] = encfit_transform(df[X1])

(suite sur la page suivante)

82 Correacutelations non lineacuteaires 291

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

df[X2e] = encfit_transform(df[X2])dfhead()

dfcorr()

Ca ne veut toujours pas dire grand-chose Et si on change la premiegravere colonne en permutant les lables

df[X1e] = df[X1e]apply(lambda i (i+1)3)dfhead()

dfcorr()

La correacutelation lineacuteaire sur des variables cateacutegorielles nrsquoa pas de sens Essayons avec un arbre de deacutecision Crsquoest lemodegravele adeacutequat pour ce type de valeur discregravetes

cor = correlation_cross_val(df[[X1e X2e]] DecisionTreeRegressor)cor

Et si on permute le premier label

df[X1e] = df[X1e]apply(lambda i (i+1)3)correlation_cross_val(df[[X1e X2e]] DecisionTreeRegressor)

Mecircme reacutesultat qui srsquointerpregravete de la sorte bull La variable X1e se deacuteduit de X2e (car cor(X2e X1e) = 1)bull La variable X2e et fortement lieacute agrave X2e

La valeur numeacuterique choisie pour repreacutesente la variable cateacutegorielle nrsquoa pas drsquoimpact sur les reacutesultats

ax = pairplot_cross_val(df[[X1e X2e]] model=DecisionTreeRegressor)ax

292 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Et sur un jeu de donneacutees plus complet

from sklearndatasets import load_bostondf = load_boston()df = pandasDataFrame(dfdata columns=dffeature_names)dfhead()

Cxavierdupre__home_github_forkscikit-learnsklearnutilsdeprecationpy87 FutureWarningrarrFunction load_boston is deprecated load_boston is deprecated in 10 and will berarrremoved in 12

The Boston housing prices dataset has an ethical problem You can refer tothe documentation of this function for further detailsThe scikit-learn maintainers therefore strongly discourage the use of thisdataset unless the purpose of the code is to study and educate aboutethical issues in data science and machine learningIn this special case you can fetch the dataset from the original

82 Correacutelations non lineacuteaires 293

Machine Learning Statistiques et Programmation Version 035930

sourceimport pandas as pdimport numpy as np

data_url = httplibstatcmuedudatasetsbostonraw_df = pdread_csv(data_url sep=s+ skiprows=22 header=None)data = nphstack([raw_dfvalues[2 ] raw_dfvalues[12 2]])target = raw_dfvalues[12 2]

Alternative datasets include the California housing dataset (iefetch_california_housing()253) and the Ames housingdataset You can load the datasets as follows

from sklearndatasets import fetch_california_housinghousing = fetch_california_housing()

for the California housing dataset andfrom sklearndatasets import fetch_openmlhousing = fetch_openml(name=house_prices as_frame=True)

for the Ames housing datasetwarningswarn(msg category=FutureWarning)

dfcorr()

On dessine les 5 premiegraveres variables On voit que la variable CHAS est binaire

snspairplot(df[dfcolumns[6]])

253 httpsscikitunhboxvoidbxkernzcharlsquoprotectdiscretionarycharhyphencharfontlearnorgstablemodulesgeneratedsklearndatasetsfetch_california_housinghtmlsklearndatasetsfetch_california_housing

294 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

correlation_cross_val(df DecisionTreeRegressor)

pairplot_cross_val(df[dfcolumns[6]] model=DecisionTreeRegressor figsize=(1616))

82 Correacutelations non lineacuteaires 295

Machine Learning Statistiques et Programmation Version 035930

On regarde en pariculier les variables TAX RAD PTRATIO

snspairplot(df[[RAD TAX PTRATIO]])

296 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

df[[RAD TAX PTRATIO]]corr()

pairplot_cross_val(df[[RAD TAX PTRATIO]] model=DecisionTreeRegressor)

82 Correacutelations non lineacuteaires 297

Machine Learning Statistiques et Programmation Version 035930

correlation_cross_val(df[[RAD TAX PTRATIO]] DecisionTreeRegressor)

Les variables sont toutes trois lieacutees de faccedilon non lineacuteaire

826 Maximal information coefficient

Cette approche est plutocirct pragmatique mais peut se reacuteveacuteler coucircteuse en terme de calculs Elle permet aussi decomprendre qursquoun coefficient de correacutelation deacutepend des hypothegraveses qursquoon choisi pour les donneacutees On peut toujoursconstruire un coefficient de correacutelation qui soit eacutegal agrave 1 mais il correspond agrave toujours agrave un pheacutenomegravene qursquoon souhaiteeacutetudier La correacutelation lineacuteaire recherche des relations lineacuteaires On peut chercher une relation polynomiale Les arbresde deacutecision recherche une correacutelation construite agrave partir de fonction en escalier Plus la relation a de degreacute de liberteacuteplus le coefficient a de chance de tendre vers 1 moins il a de chance drsquoecirctre aussi eacuteleveacute sur de nouvelles donneacuteesCela permet neacuteanmoins de mieux comprendre les avantages et les inconveacutenients de meacutetriques du type MIC254 ouMaximal information coefficient Plus de deacutetails sont disponibles dans cet article Equitability mutual information

254 httpsenwikipediaorgwikiMaximal_information_coefficient

298 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

and the maximal information coefficient255 Le module minepy256 impleacutemente cette meacutetrique ainsi que drsquoautres quipoursuivent le mecircme objectif Lrsquoinformation mutuelle est deacutefinie comme ceci pour deux variables discregravetes

MI(XY ) =sumxisinX

sumyisinY

p(x y) ln2p(x y)

p(x)p(y)

La fonction p(x y) deacutefinit la distribution conjointe des deux variables p(x) p(y) les deux probabiliteacutes marginales Ilexiste une extension pour les variables continues

MIC(XY ) =

intxisinXisinyisinY p(x y) ln2

p(x y)

p(x)p(y)dxdy

Une faccedilon de calculer une approximation du coefficient MIC(x y) est de discreacutetiser les deux variables X et Y ceqursquoon fait en appliquant un algorithme similaire agrave celui utiliseacute pour construire un arbre de deacutecision agrave ceci pregraves que qursquoilnrsquoy a qursquoune seule variable et que la variable agrave preacutedire est elle-mecircmeLrsquoinformation mutuelle est inspireacute de la distance de Kullback-Leiber257 qui est une distance entre deux probabiliteacutes quisont ici la disribution du couple (XY ) et la distribution que ce couple aurait si les deux variables eacutetaient indeacutependantescrsquoest agrave dire le produit de leur distribution

matplotlib inline

import numpy as npimport matplotlibpyplot as plt

rs = nprandomRandomState(seed=0)

def mysubplot(x y numRows numCols plotNumxlim=(-4 4) ylim=(-4 4))

r = nparound(npcorrcoef(x y)[0 1] 1)

deacutebut ajoutdf = pandasDataFrame(dict(x=x y=y))cor = correlation_cross_val(df DecisionTreeRegressor)dt = max(coriloc[10] coriloc[01])

ax = pltsubplot(numRows numCols plotNumxlim=xlim ylim=ylim)

axset_title(Pearson r=1fnDT=1f (r dt)fontsize=10)axset_frame_on(False)axaxesget_xaxis()set_visible(False)axaxesget_yaxis()set_visible(False)axplot(x y )axset_xticks([])axset_yticks([])return ax

def rotation(xy t)return npdot(xy [[npcos(t) -npsin(t)] [npsin(t) npcos(t)]])

(suite sur la page suivante)

255 httpsarxivorgabs13017745v1256 httpminepyreadthedocsioenlatestpythonhtml257 httpsfrwikipediaorgwikiDivergence_de_Kullback-Leibler

82 Correacutelations non lineacuteaires 299

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

def mvnormal(n=1000)cors = [10 08 04 00 -04 -08 -10]for i cor in enumerate(cors)

cov = [[1 cor][cor 1]]xy = rsmultivariate_normal([0 0] cov n)mysubplot(xy[ 0] xy[ 1] 3 7 i+1)

def rotnormal(n=1000)ts = [0 nppi12 nppi6 nppi4 nppi2-nppi6

nppi2-nppi12 nppi2]cov = [[1 1][1 1]]xy = rsmultivariate_normal([0 0] cov n)for i t in enumerate(ts)

xy_r = rotation(xy t)mysubplot(xy_r[ 0] xy_r[ 1] 3 7 i+8)

def others(n=1000)x = rsuniform(-1 1 n)y = 4(x2-05)2 + rsuniform(-1 1 n)3mysubplot(x y 3 7 15 (-1 1) (-13 1+13))

y = rsuniform(-1 1 n)xy = npconcatenate((xreshape(-1 1) yreshape(-1 1)) axis=1)xy = rotation(xy -nppi8)lim = npsqrt(2+npsqrt(2)) npsqrt(2)mysubplot(xy[ 0] xy[ 1] 3 7 16 (-lim lim) (-lim lim))

xy = rotation(xy -nppi8)lim = npsqrt(2)mysubplot(xy[ 0] xy[ 1] 3 7 17 (-lim lim) (-lim lim))

y = 2x2 + rsuniform(-1 1 n)mysubplot(x y 3 7 18 (-1 1) (-1 3))

y = (x2 + rsuniform(0 05 n)) nparray([-1 1])[rsrandint(0 1 size=n)]

mysubplot(x y 3 7 19 (-15 15) (-15 15))

y = npcos(x nppi) + rsuniform(0 18 n)x = npsin(x nppi) + rsuniform(0 18 n)mysubplot(x y 3 7 20 (-15 15) (-15 15))

xy1 = nprandommultivariate_normal([3 3] [[1 0] [0 1]] int(n4))xy2 = nprandommultivariate_normal([-3 3] [[1 0] [0 1]] int(n4))xy3 = nprandommultivariate_normal([-3 -3] [[1 0] [0 1]] int(n4))xy4 = nprandommultivariate_normal([3 -3] [[1 0] [0 1]] int(n4))xy = npconcatenate((xy1 xy2 xy3 xy4) axis=0)mysubplot(xy[ 0] xy[ 1] 3 7 21 (-7 7) (-7 7))

pltfigure(figsize=(147))mvnormal(n=800)

(suite sur la page suivante)

300 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

rotnormal(n=200)others(n=800) plttight_layout() pltshow()

83 File drsquoattente un petit exemple

Psychokinegravese les ampoules grillent agrave distance

bull Petite histoire (page 302)bull Un peu de theacuteorie (page 302)

ndash File drsquoattente cas MM1 (page 303)ndash File drsquoattente cas MMS (page 304)ndash Retour aux ampoules (page 305)ndash Application numeacuterique (page 306)

bull Programme informatique (page 306)bull Bibliographie (page 308)

83 File drsquoattente un petit exemple 301

Machine Learning Statistiques et Programmation Version 035930

831 Petite histoire

Cet eacutenonceacute srsquoinspire du livre Devenez sorciers devenez savants258 de Georges Charpak et Henri Broch dont est tireacutelrsquoextrait suivant

Le preacutesentateur se tourne vers la cameacutera principale et drsquoun air tregraves seacuterieux et enjocircleur regarde leteacuteleacutespectateur droit dans les yeux en deacuteclarant Allez-y Allumez cinq ou six lampes agrave cocircteacute de vousPuis il se tourne vers le meacutedium et demande Vous pensez reacuteellement pouvoir le faire Apregraves quelquesmoments drsquoheacutesitation le mage se prononce Jrsquoespegravere avoir suffisamment de concentration ce soir maisje ne suis pas dans les conditions vraiment ideacuteales pour produire ce genre de pheacutenomegravene agrave distancedrsquohabitude je me retire pendant plusieurs jours dans une solitude totale et une profonde obscuriteacute apregravesun jeucircne strict

Si jamais il eacutechoue le public le mettra au compte des circonstances et non pas de ces compeacutetences Et pourtant lemeacutedium nrsquoeacutechoue pas Des ampoules grillent chez les teacuteleacutespectateurs qui regardent cette eacutemission Ils font part austandard teacuteleacutephonique de la chaicircne qui diffuse en direct cet extraordinaire moment de culture Le meacutedium a donc bienreacuteussi - comme il le preacutetendait - en concentrant sa puissance spirituelle sur la matiegravere agrave griller des ampoules eacutelectriquesagrave distanceSupposons que cette eacutemission soit suivie par environ un million de teacuteleacutespectateurs et qursquoelle dure une heure ou plusCela signifie qursquoenviron cinq agrave six millions drsquoampoules ont eacuteteacute allumeacutees pendant une heure ou plus Supposons que cenombre soit de deux millionsLa dureacutee de vie moyenne drsquoune ampoule agrave incandescence est de mille heures Ce qui signifie que pendant la dureacutee delrsquoeacutemission il y aura environ deux milles lampes grilleacutees

832 Un peu de theacuteorie

Ce problegraveme ressemble agrave un problegraveme de files drsquoattente Ce dernier consiste agrave deacuteterminer un nombre adeacutequat deguichets en fonction de la vitesse de remplissage drsquoune file drsquoattente afin de limiter le temps drsquoattente On deacutesignesouvent cette probleacutematique par un sigle du type MMS Le premier M signifie qursquoon suppose que la probabiliteacute quen personnes arrivent pendant une dureacutee t suit une loi de Poisson de paramegravetre λt Le second M signifie qursquoon supposeque le temps de traitement drsquoune personne par un guichetier suit une loi exponentielle de paramegravetre micro S deacutesigne lenombre de guichets Pour de tels problegravemes on cherche agrave deacuteterminer la probabiliteacute que le systegraveme (file drsquoattente +guichets) contienne n personnes De cette probabiliteacute on peut deacuteduire par exemple le temps drsquoattente moyen pour unepersonne qui entre dans la file drsquoattente On suppose que le systegraveme est stationnaire les probabiliteacutes ne deacutependent pasdu temps

Deacutefinition D1 loi de Poisson et loi exponentielleSi une variable X suit une loi de Poisson de paramegravete λt elle a pour densiteacute

P (X = n) =(λt)n

neminusλt (81)

Si une variable X suit une loi exponentielle de paramegravetre micro elle a pour densiteacute

f(t) = micro eminusmicrot et P (X ⩽ t) =

int t

0

micro eminusmicroxdx = 1minus eminusmicrot (82)

258 httpsfrwikipediaorgwikiDevenez_sorciers_devenez_savants

302 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

File drsquoattente cas MM1

On srsquointeacuteresse drsquoabord agrave un systegraveme MM1 Il nrsquoy a donc qursquoun seul guichet λ est le nombre moyen drsquoarriveacutee paruniteacute de temps tandis que micro est le nombre moyen de clients traiteacutes par uniteacute de temps On suppose eacutegalement queλ lt micro Dans le cas contraire la file drsquoattente devient infinie On deacutesigne par pn(t) la probabiliteacute que la file drsquoattentecontiennent n personne Que vaut cette probabiliteacute agrave lrsquoinstant t+ dt On considegravere que pendant la dureacutee t+dt au plus une personne peut srsquoajouter agrave la file drsquoattente et au plus une personnepeut ecirctre traiteacutee par un guichetier Les autres cas sont neacutegligeables On deacutesigne par B(x t dt) le fait qursquoune personnequitte un guichet pendant les instants t et t + dt sachant qursquoelle est arriveacutee au guichet agrave lrsquoinstant x On chercheagrave deacuteterminer la probabiliteacute P (B(x t dt)) On peut dire aussi que P (B(x t dt) est la probabiliteacute que le temps detraitement drsquoune personne est infeacuterieur agrave t+ dtminus x sachant qursquoil est supeacuterieur agrave tminus x Si D est une variable de dureacuteesuivant une loi exponentielle alors

P (B(x t dt)) = P (D ⩽ t+ dtminus x|D gt tminus x)

=P (t+ dtminus x ⩾ D gt tminus x)

P (D gt tminus x)

=

int t+dtminusx

tminusxmicroeminusmicrouduintinfin

tminusxmicroeminusmicroudu

=eminusmicro(tminusx) minus eminusmicro(tminusx+dt)

eminusmicro(tminusx)

= 1minus eminusmicrodt

P (B(x t dt)) = minusmicrodt+ o(dt)

Cette probabiliteacute ne deacutepend ni de x ni de t En ce qui concerne les arriveacutees la probabiliteacute qursquoune personne arrivependant les instants t et t + dt ne deacutepend pas du passeacute et suit une loi de Poisson de paramegravetre λ Cette constation etlrsquoeacutequation (832) nous permettent drsquoeacutecrire que

P (une personne arrive pendant dt) = λdt eminusλdt sim λdt+ o(dt) (83)P (une personne part pendant dt) = 1minus eminusmicrodt sim microdt+ o(dt) (84)

De plus pendant la dureacutee dt quatre cas sont possibles bull Une personne peut arriver sans qursquoaucune ne parte drsquoun guichetbull Une personne peut partir drsquoun guichet sans qursquoaucune autre nrsquoarrivebull Une personne peut arriver et une autre partir drsquoun guichetbull Aucune personne nrsquoarrive et aucune ne part drsquoun guichet

Ces quatre cas permettent drsquoeacutecrire la relation suivante

pn(t+ dt) = pnminus1(t) λdt+ pn+1(t) microdt+

pn(t) (microdtλdt) + pn(t) (1minus microdt) (1minus λdt)

On neacuteglige les termes du second degreacute en (dt)2

pn(t+ dt) = pnminus1(t) λdt+ pn+1(t) microdt+ pn(t) (1minus microdtminus λdt)

lArrrArr pn(t+ dt)minus pn(t)

dt= λpnminus1(t) + micropn+1(t)minus (micro+ λ) pn(t)

Cette relation nrsquoest vraie que lorsque n gt 0 lorsque n = 0 aucune personne deacutejagrave preacutesente ne peut ecirctre traiteacutee par unguichetier on a donc

p0(t+ dt)minus p0(t)

dt= microp1(t)minus λp0(t)

Comme le systegraveme est stationnaire toutes les deacuteriveacutees sont nulles Les probabiliteacutes ne deacutependent pas du temps Cecidonne les relations suivantes

λpnminus1 + micropn+1 minus (micro+ λ) pn = 0microp1 minus λp0 = 0

lArrrArr

micropn+1 = (micro+ λ) pn minus λ pnminus1

microp1 = λp0

83 File drsquoattente un petit exemple 303

Machine Learning Statistiques et Programmation Version 035930

On veacuterifie par reacutecurrence que

pn =

micro

)n

p0

Il reste agrave deacuteterminer p0 Or commesuminfin

0 pn = 1 = p0suminfin

0

(λmicro

)n on obtient que fracp_0 1 - fraclambdamu

= 1 Longleftrightarrow p_0 = 1 - fraclambdamuExemple On suppose qursquoun meacutedecin traite en moyenne quatre patients par heure tandis qursquoil accepte trois rendez-vous par heureDonc λ = 3 et micro = 4 Le nombre moyen n de patients dans sa salle drsquoattente est donneacute par

n =

infinsum0

npn =

(1minus λ

micro

) infinsum0

n

micro

)n

=

λmicro

1minus λmicro

microminus λ

Il y a donc en moyenne trois personnes dans la salle drsquoattente de ce meacutedecin Comme le temps moyen de traitement dechacun est 1

micro le temps moyen drsquoattente drsquoun patient arrivant dans la salle drsquoattente est λmicromicrominusλ Ce temps est eacutegal agrave trois

quarts drsquoheure pour cet exemple

File drsquoattente cas MMS

Le systegraveme contient doreacutenavant S guichets on suppose que la vitesse micro de traitement des clients est commune agrave tousles guichets On cherche tout drsquoabord la probabiliteacute qursquoune personne srsquoen aille parmi les k qui occupent un guichet Ondeacutesigne par (D1 Dk) k variables indeacutependantes suivant une loi exponentielle de paramegravetre micro pendant un tempsdt la probabiliteacute qursquoune personne parmi k quitte un guichet est

P (min D1 Dk ⩽ dt) = 1minus P (min D1 Dk gt dt)

= 1minus

[kprod

n=1

P (Dn gt dt)

]

= 1minus

[kprod

n=1

1minus P (Dn ⩽ dt)

]

= 1minus

[kprod

n=1

eminusmicrodt

]= 1minus eminuskmicrodt sim kmicrodt+ o(dt)

Pour deacuteterminer les probabiliteacutes (pn)n on applique le mecircme raisonnement que pour un systegravemeMM1 en distinguantles cas n ⩽ S et n gt S On adapte la reacutecurrence donneacutee par le systegraveme drsquoeacutequations (832) au cas MMS microp1 minus λp0 = 0

λpnminus1 + (n+ 1)micropn+1 minus (nmicro+ λ) pn = 0 si 1 ⩽ n lt Sλpnminus1 + Smicropn+1 minus (Smicro+ λ) pn = 0 si n ⩾ S

On suppose que λSmicro lt 1 afin que la file drsquoattente ne devienne infinie Comme pour un systegraveme MM1 ces formules

de reacutecurrences et le fait quesuminfin

0 pn = 1 permet de deacuteduire que

p0 =1

(λmicro )

S

S(1minus λSmicro )

+sumSminus1

k=1(λ

micro )n

n

pn =1

n

micro

)n

p0 si n lt S

pn =1

SnminusSS

micro

)n

p0 si n ⩾ S

304 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Ces calculs sont utiliseacutes pour optimiser le nombre de guichets Chaque guichetier a un coucirct qui doit ecirctre compareacute avecle coucirct associeacute au temps drsquoattente des clients Ces reacutesultats sont extraits du livre [Faure2000]

La theacuteorie des files drsquoattente remonte aux premiers travaux de K Erlang (1917) sur le calcul dunombre drsquoorganes de chaque type agrave installer dans un central teacuteleacutephonique automatique Deacuteveloppeacuteeaussi par Engset (1918) cette theacuteorie srsquoest amplifieacutee sous lrsquoimpulsion de nombreux chercheurs (E BorelD Kendall A Kolmogorov Khintchine LC Palm F Pollaczek L Feller ) Les informaticienslrsquoutilisent notamment pour lrsquoeacutevaluation de performances agrave titre preacutevisionnel des systegravemes ou des reacuteseauxinformatiques

Retour aux ampoules

La dureacutee de traitement drsquoun client fait penser agrave la dureacutee de vie drsquoune ampoule Les lampes font office de guichetstandis que le rocircle des clients est joueacute par des lumiegraveres Toutefois ce nrsquoest pas le temps drsquoattente moyen ni la longueurmoyenne de la file drsquoattente qui nous inteacuteresse mais en quelque sorte le nombre de clients qui sont traiteacutes pendant unedureacutee T En fait plus exactement crsquoest le nombre de guichets qui auront traiteacutes au moins un client pendant une dureacuteeT qui nous inteacuteresse Il correspond exactement au nombre drsquoampoules qui vont griller pendant cette mecircme peacuteriode T Il reste agrave deacutefinir ce qursquoest une file drsquoattente drsquoampoules et surtout son paramegravetre λLorsqursquoune ampoule grille elle est a priori changeacutee dans les plus brefs deacutelais comme si la file drsquoattente des ampouleseacutetait infinie Ceci signifie que λ gtgt micro configuration qui sort du champ drsquoapplication des files drsquoattente MMSLe paramegravetre λ nrsquoa a priori aucun rocircle agrave jouer On peut neacuteanmoins srsquoinspirer de la meacutethode deacuteveloppeacutee dans lesparagraphes preacuteceacutedants pour aborder le problegraveme des ampoulesOn suppose que la dureacutee de vie drsquoune ampoule suit toujours une loi exponentielle de paramegravetre micro et qursquoil y en aexactement S qui brillent en mecircme temps On note pn(t) la probabiliteacute que n ampoules aient grilleacutees agrave lrsquoinstant t SiN(t) est le nombre drsquoampoules grilleacutees agrave lrsquoinstant t pn(t) = P (N(t) = n) Cette fonction nrsquoest plus stationnaire etdeacutecroicirct avec le temps agrave partir drsquoun certain moment Plus on avance dans le temps plus le nombre drsquoampoules grilleacuteesaugmente Par conseacutequent la probabiliteacute qursquoil y ait n ampoules grilleacutees augmente tout drsquoabord puis agrave partir drsquounmoment t elle diminue On utilise un raisonnement similaire agrave celui qui a permis drsquoeacutecrire les eacutequations (832)(832) pour obtenir

pn(t+ dt) = (1minus Smicrodt) pn(t) + Smicropnminus1(t)dt

lArrrArr pn(t+ dt)minus pnminus1(t)

dt= minusSmicropn(t) + Smicropnminus1(t)

lArrrArr pprimen(t) = minusSmicropn(t) + Smicropnminus1(t)

On connaicirct la fonction p0(t) puisqursquoelle correspond agrave la probabiliteacute qursquoaucune des S ampoules nrsquoait grilleacute depuislrsquoinstant~0 jusqursquoagrave lrsquoinstant t par conseacutequent

p0(t) = P ( dureacutee de vie des S ampoules soient toutes supeacuterieures agrave t)

=rArr p0(t) =

[int infin

t

microeminusmicroudu

]S=rArr p0(t) = eminusSmicrot

Lrsquoeacutequation (832) permet de deacutefinir une suite drsquoeacutequations diffeacuterentielles du premier degreacute

p0(t) = eminusSmicrot

pprime1(t) = minusSmicrop1(t) + SmicroeminusSmicrot

pprime2(t) = minusSmicrop2(t) + p1(t)

pprimen(t) = minusSmicropn(t) + Smicropnminus1(t)

On peut donc calculer par reacutecurrence la suite de fonction (pn(t))n La solution de lrsquoeacutequation diffeacuterentielle homogegraveneest eminusSmicrot On utilise la meacutethode de la variation de la constante en posant pn(t) = Cn(t)e

minusSmicrot On aboutit agrave lrsquoeacutequation

83 File drsquoattente un petit exemple 305

Machine Learning Statistiques et Programmation Version 035930

pprimen(t) = minusSmicropn(t) + Smicropnminus1(t) = minusSmicropn(t) + C primen(t)e

minusSmicrot

=rArr C primen(t)e

minusSmicrot = Smicropnminus1(t)

=rArr C primen(t) = Smicropnminus1(t)e

Smicrot

Pour n = 1 on obtient C prime1(t) = Smicro =rArr C prime

1(t) = Smicrot + A1 Par conseacutequent p1(t) = (Smicrot+A1) eminusSmicrot On

sait que foralltsuminfin

0 pn(t) = 1 mais cela ne permet pas de deacuteterminer la constante A1 Neacuteanmoins en faisant tendret minusrarr 0 neacutecessairement p1(t) minusrarr 0 Par conseacutequent A1 = 0 et p1(t) = Smicrot eminusSmicrot On pose maintenantp2(t) = C2(t)e

minusSmicrot La reacutesolution de lrsquoeacutequation diffeacuterentielle (832) pour n = 2 aboutit agrave

C prime2(t) = Smicrop1(t)e

Smicrot = (Smicrot)2

=rArr C2(t) =1

2S2micro2t2 +A2

=rArr p2(t) =

(1

2S2micro2t2 +A2

)eminusSmicrot

De mecircme en faisant tendre t minusrarr 0 on deacutemontre que A2 = 0 En poursuivant ce raisonnement par reacutecurrence ondeacutemontre que

pn(t) =(Smicrot)

n

neminusSmicrot (85)

pn(t) = P (N(t) = n) et drsquoapregraves lrsquoeacutequation (85) la variable aleacuteatoire N(t) suit une loi de Poisson de paramegravetre SmicrotN est aussi appeleacute processus de Poisson259 Lrsquoespeacuterance de N est eacutegale agrave EN(t) = Smicrot Pendant une dureacutee T lenombre moyen drsquoampoules grilleacutees est

EN(t)minusN(tminus T ) = EN(T )minus EN(tminus T ) = SmicroT

Ce nombre est indeacutependant du temps t

Application numeacuterique

Pour des ampoules drsquoune dureacutee de 1000 heures le paramegravetre micro = 11000 T = 1 Srsquoil y a deux millions drsquoampoules le

nombre moyen drsquoampoules grilleacutees par heure est SmicroT = 2000 On retrouve le reacutesultat eacutenonceacute

833 Programme informatique

La dureacutee de vie de chaque ampoule suit une loi exponentielle de paramegravetre micro Il faut donc simuler une telle variabledont la fonction de reacutepartition est Fmicro(x) = 1 minus emicrox On utilise pour cela une proprieacuteteacute qui deacutecoule de la fonction dereacutepartition On note Fminus1

micro (x) = minus ln(1minusx)micro Cette fonction veacuterifie Fminus1

micro (Fmicro(x)) = 1 Or si U est une variable aleacuteatoireuniforme sur [0 1] alors la variable V = Fminus1

micro (U) suit la loi exponentielle avec micro pour paramegravetre EffectivementP (V ⩽ t) = P

(Fminus1micro (U) ⩽ t

)= P (U ⩽ Fmicro(t)) = Fmicro(x) La fonction de reacutepartition de la variable V est Fmicro V est

donc une loi exponentielle de paramegravetre micro La premiegravere fonction simule une variable exponentielle de paramegravetre micro ltltlt

import mathimport random

def generate_expo(mu)(suite sur la page suivante)

259 httpsfrwikipediaorgwikiProcessus_de_Poisson

306 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

x = 0while x == 0

x = randomrandom()y = - mathlog(1 - x) mureturn y

print(generate_expo(2))

gtgtgt

0760195985951345

Le module random260 propose aussi une fonction qui simule automatiquement une variable exponentielleltltlt

import random

def generate_expo(mu)return randomexpovariate(mu)

print(generate_expo(2))

gtgtgt

01480834222333039

Pour reacutealiser cette simulation on suppose qursquoon a un tableau de S ampoules Chaque case de ce tableau contient ladureacutee de vie restante drsquoune ampoule simuleacutee selon une loi exponentielle Au deacutepart toutes les dureacutees de vie sontnulles On considegravere qursquoagrave chaque iteacuteration une heure passe Lors de chaque iteacuteration pour chaque ampoule on veacuterifiesa dureacutee de vie restante Si celle-ci est nulle on la remplace par une autre dont on choisit aleacuteatoirement la dureacutee de vie(arrondie agrave lrsquoentier le plus proche) Si la dureacutee de vie nrsquoest pas nulle on la diminue drsquoune heure A chaque iteacuteration oncompte le nombre drsquoampoules grilleacutees pour en faire la moyenne au bout de n iteacuterations Pour effectuer cette simulationles valeurs choisies sont

S = 10000 micro =1

100 n = 500

Le programme suivant reacutealise cette simulation On calcule la moyenne du nombre drsquoampoules grilleacutees par heure surles 500 iteacuterations excepteacute la premiegravere pour laquelle toutes les ampoules sont grilleacutees - configuration aberrante ou toutdu moins tregraves peu probable - La valeur obtenue est proche de Smicro = 100

260 httpsdocspythonorg3libraryrandomhtml

83 File drsquoattente un petit exemple 307

Machine Learning Statistiques et Programmation Version 035930

834 Bibliographie

84 Optimisation avec donneacutees aleacuteatoires

bull Un problegraveme simple (page 308)bull Modeacutelisation de la demande (page 310)bull Variations saisonniegraveres et prolongations (page 312)bull Bibliographie (page 313)

841 Un problegraveme simple

Un supermarcheacute pourrait vendre en moyenne 80 poulets par semaine srsquoil pouvait savoir agrave lrsquoavance combien de pouletsagrave acheter pour satisfaire la demainde En reacutealiteacute le magasin se reacuteapprovisionne une fois par semaine et lorsque la fin dela semaine arrive tous les poulets invendus sont soldeacutes et supposeacutes vendus Le geacuterant du supermarcheacute voudrait savoirquel est le nombre optimal de poulets agrave commander chaque semaine On suppose que le prix drsquoun poulet agrave lrsquoachat estp son prix agrave la vente est q gt p son prix soldeacute est s Admettons que le supermarcheacute achegravete X poulets en vende aumieux N non soldeacutes et X minusN soldeacutes srsquoil en reste Pour calculer son beacuteneacutefice B il faut tenir compte de deux cas et dufait que le supermarcheacute ne peut pas vendre plus de poulets qursquoil nrsquoen a acheteacute

B = X(q minus p) si N ⩾ XB = N(q minus p) + (X minusN)(sminus p) = X(sminus p) +N(q minus s) si N lt X

On peut reacuteduire ces deux expressions agrave une seule en utilisant la fonction indicatrice

B = f(NX p q s) = X(q minus p)11N⩾X + [X(sminus p) +N(q minus s)] 11NltX

Si N eacutetait connu avec certitude il suffirait de choisir X = N ce serait la reacuteponse optimale mais le nombre de pouletsN vendus est inconnu car il varie chaque semaine Pour avoir une ideacutee plus preacutecise le geacuterant du supermarcheacute adeacutelibeacutereacutement acheteacute trop de poulets pendant plusieurs semaines Il srsquoest aperccedilu que la variable aleacuteatoire N suit une loide Poisson261 de paramegravetre λ = 80 On connaicirct seulement la probabiliteacute que N soit eacutegale agrave une valeur fixeacutee La figuresuivante montre lrsquoallure de cette distribution

P (X = i) = eminusλλi

i

Comme le nombre de poulets acheteacutes varie drsquoune semaine agrave lrsquoautre le beacuteneacutefice du supermarcheacute varie aussi drsquounesemaine agrave lrsquoautre Ce que le geacuterant veut optimiser crsquoest la somme de ses profits sur une anneacutee ce qui est eacutequivalentagrave maximiser la moyenne de ses profits chaque semaine Il faut donc chercher agrave maximiser lrsquoespeacuterence de la variablealeacuteatoire B agrave p q s constant puis agrave obtenir la valeur X ayant meneacute agrave ce maximum

maxX

EB = maxX

Ef(NX p q s) = maxX

infinsumi=0

f(NX p q s)P (N = i)

Etant donneacute la forme de la fonction f il nrsquoest pas eacutevident de construire une expression exacte de Xlowast deacutefini parmaxX Ef(NX p q s) = f(NXlowast p q s) Comme l = 80 drsquoapregraves la figure preacuteceacutedente on cherche Xlowast danslrsquoensemble 0 2l = 180 aller au delagrave de 180 est inutile tant la probabiliteacute est faible Il suffit de calculer f pourchacune de ces valeurs et de prendre celle qui permet drsquoobtenir le maximum Ces calculs longs et reacutepeacutetitifs vont ecirctreeffectueacutes par un programme informatique qui sera deacutecoupeacute en fonctions comme ceci

261 httpsfrwikipediaorgwikiLoi_de_Poisson

308 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Figure1 Ce graphe reacutepresente la fonction de densiteacute drsquoune loi de Poisson de paramegravetre 80 On observe que le pic estobtenu pour une valeur proche de 80 crsquoest la valeur la plus probable Ceci signifie que le nombre de poulets acheteacutes leplus probable est 80

fonction objectiffactorielle(x) calcule xprofit(NXpqs) calcule la fonction fproba_poisson(l i) calcule la probabiliteacute de Poisson connaissant λ et iesperance(Xpqsl) calcule lrsquoespeacuterance (sa moyenne) de la fonction fmaximum(pqsl) construit une liste de toutes les valeurs de ffind_maximum (res) cherche le maximum dans la liste retourneacutee par la fonction maximum

Le programme obtenu ressemble agrave pouletpy les derniegraveres lignes servent agrave tracer la courbe preacutesenteacutee par la figurequi suitltltlt

from mlstatpygardenpoulet import maximumres = maximum(2 5 1 80) res est la courbe afficheacutee plus basprint(res[4])

gtgtgt

[(0 00) (1 29999999999999942) (2 59999999999999885) (3 8999999999999975)]

84 Optimisation avec donneacutees aleacuteatoires 309

Machine Learning Statistiques et Programmation Version 035930

842 Modeacutelisation de la demande

La repreacutesentation de la demande est essentielle crsquoest elle qui deacutetermine le reacutesultat Il est possible de lrsquoaffiner commepar exemple supposer que certaines personnes achegravetent deux ou trois poulets et que la somme des poulets acheteacutes peutecirctre deacutecomposeacutee comme N = N1 + 2N2 + 3N3 ougrave Ni est le nombre de personnes achetant i poulets Dans ce casce nrsquoest plus N qui suit une loi de Poisson mais N1 N2 N3 qui suivent chacune des lois de Poisson de paramegravetresdiffeacuterents dont il faudra estimer les paramegravetresCette modification implique lrsquoeacutecriture drsquoune fonction proba_poisson_melange au lieu de proba_poisson Lademande nrsquoest plus une loi connue mais un meacutelange de lois connues dont la densiteacute nrsquoa pas drsquoexpression connue ilfaut la tabuler Pour cela on utilise deux proprieacuteteacutes sur les lois exponentielles

Theacuteoregraveme T1 simulation drsquoune loi quelconqueSoit F =

intf une fonction de reacutepartition de densiteacute f veacuterifiant f gt 0 soit U une variable aleacuteatoire uniformeacutement

distribueacutee sur [0 1] alors Fminus1(U) est variable aleacuteatoire de densiteacute f

La deacutemonstration est courte Soit X une variable aleacuteatoire de densiteacute f par deacutefinition P (X ⩽ x) = F (x) Soit Uune variable aleacuteatoire uniformeacutement distribueacute sur [0 1] alors

forallu isin [0 1] P (U ⩽ u) = u

lArrrArr P(Fminus1(U) ⩽ Fminus1(u)

)= u

lArrrArr P(Fminus1(U) ⩽ Fminus1(F (t))

)= F (t)

lArrrArr P(Fminus1(U) ⩽ t

)= F (t)

Si la fonction F nrsquoest pas strictement croissante on pourra prendre Fminus1(t) = inf u|F (u) ⩾ t Ce theacuteoregraveme seraappliqueacute agrave une loi exponentielle de paramegravetre λ La densiteacute drsquoune telle loi est f(x) = λ expminusλx F (x) =

int x

0f(t)dt =

1minus expminusλx On en deacuteduit que Fminus1(t) = minus ln(1minust)λ par conseacutequent minus ln(1minusU)

λ suit une loi exponentielle de paramegravetreλ si U est une loi uniforme sur [0 1]

Theacuteoregraveme T2 simulation drsquoune loi de PoissonOn deacutefinit une suite infinie (Xi)i gt 0 de loi exponentielle de paramegravetre λ On deacutefinit ensuite la seacuterie de variablesaleacuteatoires Si =

sumik=1 Xk et enfin N(t) = inf i|Si gt t Alors la variable aleacuteatoire N(t) suit une loi de Poisson de

paramegravetre λt

La loi exponentielle est souvent utiliseacutee pour modeacuteliser le temps drsquoattente drsquoun eacuteveacutenement comme le temps drsquoattentedrsquoun meacutetro une fois sur le quai On lrsquoutilise aussi pour modeacuteliser la dureacutee de vie drsquoun outil drsquoune ampoule parexemple La loi de Poisson peut par exemple modeacuteliser le nombre drsquoampoules neacutecessaire pour eacuteclairer une piegravecesur une certaine dureacutee Avant de deacutemontrer le theacuteoregraveme il faut deacutefinir drsquoabord la loi Gamma262 On pose aupreacutealable Γ(α) =

intinfin0

uαminus1eminusudu Une variable aleacuteatoire de loi Gamma de paramegravetres (α λ) a pour densiteacute f(x) = λα

Γ(α) tαminus1eminusλt La fonction Γ veacuterifie une proprieacuteteacute utile par la suite foralln isin Nlowast Γ(n) = (nminus 1)

Theacuteoregraveme T3 somme de loi exponentielle iidSoit X1 Xn n variables aleacuteatoires indeacutependantes et identiquement distribueacutees de loi Exp(λ) alors la sommesumn

k=1 Xk suit une loi Gamma(n λ)

La deacutemonstration utilise lrsquouniciteacute de la fonction caracteacuteristique EeiX Il suffit de deacutemonstrer que la fonctioncaracteacuteristique de la somme est celle drsquoune loi Gamma On suppose que X1 Xn suivent des lois exponentielles

262 httpsfrwikipediaorgwikiLoi_Gamma

310 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

de paramegravetre λ et Y suit une loi Gamma(n λ)

Eexp

(i

nsumk=1

Xk

)=

nprodk=1

EeiXk

=

[int infin

0

λeixeminusλxdx

]n= λn

[int infin

0

e(iminusλ)xdx

]n= λn

[minus 1

(iminus λ)

]n=

λminus i

]nEeiY =

int infin

0

λn

Γ(n)tnminus1eminusλteitdt =

int infin

0

λn

Γ(n)tnminus1e(iminusλ)tdt

=λn

Γ(n)

Γ(n)

(iminus λ)n=

λminus i

]nCes lignes deacutemontrent le theacuteoregraveme On deacutemontre maintenant simulation drsquoune loi de Poisson (page 310) Ladeacutemonstration repose sur le fait que P (N(t) ⩾ n)lArrrArr P (Sn ⩽ t) On en deacuteduit que

P (N(t) = n) = P (N(t) ⩾ n)minus P (N(t) ⩾ n+ 1) = P (Sn ⩽ t)minus P (Sn+1 ⩽ t)

Or drsquoapregraves le theacuteoregraveme somme de loi exponentielle iid (page 310) Sn suit une loi Gamma(n λ)

P (N(t) = n) =

int t

0

λn

Γ(n)unminus1eminusλuduminus

int t

0

λn+1

Γ(n+ 1)uneminusλudu

=

int t

0

[λn

(nminus 1)unminus1eminusλu minus λn+1

nuneminusλu

]du

=

[λn

nuneminusλu

]t0

= eminusλt (λt)n

n

Il suffit drsquoutiliser ce theacuteoregraveme pour simuler une loi de Poisson de paramegravetre λ ce que fait la fonction poisson suivanteltltlt

import randomimport math

def exponentielle(l)u = randomrandom()return -10 l mathlog(10 - u)

def poisson(l)s = 0i = 0while s lt= 1

s += exponentielle(l)i += 1

return i - 1

print(poisson(2))

gtgtgt

84 Optimisation avec donneacutees aleacuteatoires 311

Machine Learning Statistiques et Programmation Version 035930

2

On veacuterifie que cette meacutethode de simulation permet de retrouver les reacutesultats theacuteoriques Pour cela on effectue 1000tirages drsquoune variable suivant une loi de Poisson avec λ = 10 puis on compte le nombre de fois qursquoon obtient chaqueentier compris entre 0 et 40 La figure qui suit permet de comparer les reacutesultats obtenus

Figure2 Comparaison entre une fonction de densiteacute estimeacutee empiriquement pour la loi de Poisson de paramegravetre λ = 10

et sa densiteacute theacuteorique f(i) = eminusλ λi

i

On cherche maintenant agrave calculer les probabiliteacutes P (N = i) sachant que N = N1 + 2N2 + 3N3 et N1 sim P(48)N2 sim P(10) N3 sim P(4) Lrsquoaddition de deux lois de Poisson indeacutependantes est une loi de Poisson En revanchesi N1 suit une loi de Poisson 2N1 ne suit pas une loi de Poisson 2N1 est une variable paire crsquoest une proprieacuteteacute quinrsquoest jamais veacuterifieacutee par une loi de Poisson Il nrsquoexiste pas drsquoexpression eacutevidente pour la densiteacute du meacutelange N ilfaut donc simuler cette variable Crsquoest lrsquoobjectif de la fonction poisson_melange De la mecircme maniegravere on estimelrsquohistogramme du meacutelange avec cette fois-ci un plus grand nombre de tirages (10000) pour aboutir agrave la figure suivanteOn utilise ces eacuteleacutements pour modeacuteliser la demande de poulets selon ce meacutelange de lois Poisson Le premier programmeest modifieacute pour aboutir au suivant

843 Variations saisonniegraveres et prolongations

Les paragraphes preacuteceacutedents supposent que la demande est constante et ne deacutepend pas des saisons Cette affirmation estpeut-ecirctre vraie en ce concerne les poulets mais ce nrsquoest certainement pas le cas des huicirctres qui sont traditionnellementconsommeacutees en deacutecembre Appliqueacute agrave lrsquoexemple des poulets deacutecrits dans cet eacutenonceacute la loi de Poisson appliqueacutee agrave laconsommation deacutepend maintenant de la semaineTenir compte de la saisonnaliteacute nrsquoest pas forceacutement un problegraveme de modeacutelisation mais plutocirct drsquoestimation Au lieudrsquoavoir une seule consommation moyenne il y a en aura maintenant 52 Ceci implique drsquoavoir des donneacutees ennombre suffisant pour estimer les paramegravetres du modegravele la preacutecision des reacutesultats deacutepend de celle de lrsquoestimationIl est possible drsquoestimer seacutepareacutement les variations saisonniegraveres et la demande elle-mecircme mais la preacutesentation de cestechniques deacutepassent le cadre de ce livre il est preacutefeacuterable de se reporter agrave [Gourieacuteroux1983] ou [Saporta2006]Les poulets soldeacutes ne sont pas plus mauvais que les poulets non soldeacutes bien que la date de peacuteremption soit certainementplus rapprocheacutee de la date drsquoachat On suppose qursquoun geacuterant concurrent de ce supermarcheacute a eu vent de la techniquedrsquooptimisation du magasin il connaicirct eacutegalement le prix du poulet et son prix soldeacute Il a eacutegalement accegraves au prixdrsquoachat puisqursquoil se fournit chez les mecircmes agriculteurs Il lui reste agrave connaicirctre le nombre de poulets commandeacutes etune estimation de la demande pour savoir si les poulets de son concurrents se vendent mieux que les siens Il se renddans le supermarcheacute concurrent tous les jours ougrave les poulets sont soldeacutes et les comptent Il voudrait pouvoir en deacuteduirele nombre de poulets vendus

312 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

Figure3 Dans le cas du meacutelange de lois Poisson le maximum est cette-fois ci obtenu pour 87 poulets et est de 225euros Ces reacutesultats sont leacutegegraverement diffeacuterents de ceux obtenus par une simple loi Poisson (80)

844 Bibliographie

85 Le gradient et le discret

Les meacutethodes drsquooptimisation agrave base de gradient srsquoappuie sur une fonction drsquoerreur deacuterivable qursquoon devrait appliquer depreacutefeacuterence sur des variables aleacuteatoires reacuteelles Ce notebook explore quelques ideacutees

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Un petit problegraveme simple (page 314)bull Multiplication des observations (page 314)bull Introduire du bruit (page 316)bull Comparaisons de plusieurs modegraveles (page 317)bull Avec une ACP (page 318)bull Base drsquoapprentissage et de test (page 319)bull Petite explication (page 322)

85 Le gradient et le discret 313

Machine Learning Statistiques et Programmation Version 035930

851 Un petit problegraveme simple

On utilise le jeu de donneacutees iris disponible dans scikit-learn263

from sklearn import datasets

iris = datasetsload_iris()X = irisdata[ 2] we only take the first two featuresY = iristarget

On cale une reacutegression logistique On ne distingue pas apprentissage et test car ce nrsquoest pas le propos de ce notebook

from sklearnlinear_model import LogisticRegressionclf = LogisticRegression(multi_class=ovr solver=liblinear)clffit(X Y)

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovrn_jobs=None penalty=l2 random_state=None solver=liblineartol=00001 verbose=0 warm_start=False)

Puis on calcule la matrice de confusion

from sklearnmetrics import confusion_matrixpred = clfpredict(X)confusion_matrix(Y pred)

array([[49 1 0][ 2 21 27][ 1 4 45]] dtype=int64)

852 Multiplication des observations

Le paramegravetre multi_class=ovr stipule que le modegravele cache en fait lrsquoestimation de 3 reacutegressions logistiques binaireEssayons de nrsquoen faire qursquoune seule en ajouter le label Y aux variables Soit un couple (Xi isin R Yi isin N) qui correspondagrave une observation pour un problegraveme multi-classe Comme il y a C classes on multiplie cette ligne par le nombre declasses C pour obtenir

forallc isin [1 C]

X primei = (Xi1 Xid Yi1 YiC)

Y primei = 11Yi=c

Yik = 11c=k

Voyons ce que cela donne sur un exemple

import numpyimport pandas

def multiplie(X Y classes=None)if classes is None

classes = numpyunique(Y)XS = []YS = []

(suite sur la page suivante)

263 httpscikit-learnorgstableauto_examplesdatasetsplot_iris_datasethtml

314 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

for i in classesX2 = numpyzeros((Xshape[0] 3))X2[i] = 1Yb = Y == iXSappend(numpyhstack([X X2]))Yb = Ybreshape((len(Yb) 1))YSappend(Yb)

Xext = numpyvstack(XS)Yext = numpyvstack(YS)return Xext Yext

x y = multiplie(X[1] Y[1] [0 1 2])df = pandasDataFrame(numpyhstack([x y]))dfcolumns = [X1 X2 Y0 Y1 Y2 Y]df

Trois colonnes ont eacuteteacute ajouteacutees cocircteacute X la ligne a eacuteteacute multiplieacutee 3 fois la derniegravere colonne est Y qui ne vaut 1 quelorsque le 1 est au bon endroit dans une des colonnes ajouteacutees Le problegraveme de classification qui eacuteteacute de preacutedire labonne classe devient est-ce la classe agrave preacutedire est k On applique cela sur toutes les lignes de la base et cela donne

Xext Yext = multiplie(X Y)numpyhstack([Xext Yext])df = pandasDataFrame(numpyhstack([Xext Yext]))dfcolumns = [X1 X2 Y0 Y1 Y2 Y]dfiloc[numpyrandompermutation(dfindex) ]head(n=10)

from sklearnensemble import GradientBoostingClassifierclf = GradientBoostingClassifier()clffit(Xext Yextravel())

GradientBoostingClassifier(criterion=friedman_mse init=Nonelearning_rate=01 loss=deviance max_depth=3max_features=None max_leaf_nodes=Nonemin_impurity_decrease=00 min_impurity_split=Nonemin_samples_leaf=1 min_samples_split=2min_weight_fraction_leaf=00 n_estimators=100n_iter_no_change=None presort=auto random_state=Nonesubsample=10 tol=00001 validation_fraction=01verbose=0 warm_start=False)

pred = clfpredict(Xext)confusion_matrix(Yext pred)

array([[278 22][ 25 125]] dtype=int64)

85 Le gradient et le discret 315

Machine Learning Statistiques et Programmation Version 035930

853 Introduire du bruit

Un des problegravemes de cette meacutethode est qursquoon ajoute une variable binaire pour un problegraveme reacutesolu agrave lrsquoaide drsquouneoptimisation agrave base de gradient Crsquoest moyen Pas de problegraveme changeons un peu la donne

def multiplie_bruit(X Y classes=None)if classes is None

classes = numpyunique(Y)XS = []YS = []for i in classes

X2 = numpyrandomrandn((Xshape[0] 3))reshape(Xshape[0] 3) 01X2 = numpyrandomrandom((Xshape[0] 3)) 02X2[i] += 1Yb = Y == iXSappend(numpyhstack([X X2]))Yb = Ybreshape((len(Yb) 1))YSappend(Yb)

Xext = numpyvstack(XS)Yext = numpyvstack(YS)return Xext Yext

x y = multiplie_bruit(X[1] Y[1] [0 1 2])df = pandasDataFrame(numpyhstack([x y]))dfcolumns = [X1 X2 Y0 Y1 Y2 Y]df

Le problegraveme est le mecircme qursquoavant excepteacute les variables Yi qui sont maintenant reacuteel Au lieu drsquoecirctre nul on prend unevaleur Yi lt 04

Xextb Yextb = multiplie_bruit(X Y)df = pandasDataFrame(numpyhstack([Xextb Yextb]))dfcolumns = [X1 X2 Y0 Y1 Y2 Y]dfiloc[numpyrandompermutation(dfindex) ]head(n=10)

from sklearnensemble import GradientBoostingClassifierclfb = GradientBoostingClassifier()clfbfit(Xextb Yextbravel())

GradientBoostingClassifier(criterion=friedman_mse init=Nonelearning_rate=01 loss=deviance max_depth=3max_features=None max_leaf_nodes=Nonemin_impurity_decrease=00 min_impurity_split=Nonemin_samples_leaf=1 min_samples_split=2min_weight_fraction_leaf=00 n_estimators=100n_iter_no_change=None presort=auto random_state=Nonesubsample=10 tol=00001 validation_fraction=01verbose=0 warm_start=False)

predb = clfbpredict(Xextb)confusion_matrix(Yextb predb)

316 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

array([[299 1][ 10 140]] dtype=int64)

Crsquoest un petit peu mieux

854 Comparaisons de plusieurs modegraveles

On cherche maintenant agrave comparer le gain en introduisant du bruit pour diffeacuterents modegraveles

def error(model x y)p = modelpredict(x)cm = confusion_matrix(y p)return (cm[10] + cm[01]) cmsum()

def comparaison(model X Y)

if isinstance(model tuple)clf = model[0](model[1])clfb = model[0](model[1])model = model[0]

elseclf = model()clfb = model()

Xext Yext = multiplie(X Y)clffit(Xext Yextravel())err = error(clf Xext Yext)

Xextb Yextb = multiplie_bruit(X Y)clfbfit(Xextb Yextbravel())errb = error(clfb Xextb Yextb)return dict(model=model__name__ err1=err err2=errb)

from sklearnlinear_model import LogisticRegressionfrom sklearntree import DecisionTreeClassifier ExtraTreeClassifierfrom sklearnensemble import RandomForestClassifier ExtraTreesClassifierrarrAdaBoostClassifierfrom sklearnneural_network import MLPClassifierfrom sklearnnaive_bayes import GaussianNBfrom sklearnneighbors import KNeighborsClassifier RadiusNeighborsClassifierfrom xgboost import XGBClassifier

models = [(LogisticRegression dict(multi_class=ovr solver=liblinear))GradientBoostingClassifier(RandomForestClassifier dict(n_estimators=20))DecisionTreeClassifierExtraTreeClassifierXGBClassifier(ExtraTreesClassifier dict(n_estimators=20))(MLPClassifier dict(activation=logistic))GaussianNB KNeighborsClassifier(AdaBoostClassifier dict(base_estimator=LogisticRegression(multi_class=ovr

rarrsolver=liblinear)(suite sur la page suivante)

85 Le gradient et le discret 317

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

algorithm=SAMME))]

res = [comparaison(model X Y) for model in models]df = pandasDataFrame(res)dfsort_values(model)

err1 correspond agrave Y0 Y1 Y2 binaire err2 aux mecircmes variables mais avec un peu de bruit Lrsquoajout ne semble pasfaire deacutecroicirctre la performance et lrsquoameacuteliore dans certains cas Crsquoest une piste agrave suivre Reste agrave savoir si les modegravelesnrsquoapprennent pas le bruit

855 Avec une ACP

On peut faire varier le nombre de composantes jrsquoen ai gardeacute qursquoune LrsquoACP est appliqueacutee apregraves avoir ajouteacute les variablesbinaires ou binaires bruiteacutees Le reacutesultat est sans eacutequivoque Aucun modegravele ne parvient agrave apprendre sans lrsquoajout debruit

from sklearndecomposition import PCA

def comparaison_ACP(model X Y)

if isinstance(model tuple)clf = model[0](model[1])clfb = model[0](model[1])model = model[0]

elseclf = model()clfb = model()

axes = 1solver = fullXext Yext = multiplie(X Y)Xext = PCA(n_components=axes svd_solver=solver)fit_transform(Xext)clffit(Xext Yextravel())err = error(clf Xext Yext)

Xextb Yextb = multiplie_bruit(X Y)Xextb = PCA(n_components=axes svd_solver=solver)fit_transform(Xextb)clfbfit(Xextb Yextbravel())errb = error(clfb Xextb Yextb)return dict(modelACP=model__name__ errACP1=err errACP2=errb)

res = [comparaison_ACP(model X Y) for model in models]dfb = pandasDataFrame(res)pandasconcat([ dfsort_values(model) dfbsort_values(modelACP)] axis=1)

318 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

856 Base drsquoapprentissage et de test

Cette fois-ci on srsquointeacuteresse agrave la qualiteacute des frontiegraveres que les modegraveles trouvent en veacuterifiant sur une base de test quelrsquoapprentissage srsquoest bien passeacute

from sklearnmodel_selection import train_test_split

def comparaison_train_test(models X Y mbruit=multiplie_bruit acp=None)

axes = acpsolver = full

ind = numpyrandompermutation(numpyarange(Xshape[0]))X = X[ind]Y = Y[ind]X_train X_test Y_train Y_test = train_test_split(X Y test_size=13)

res = []for model in models

if isinstance(model tuple)clf = model[0](model[1])clfb = model[0](model[1])model = model[0]

elseclf = model()clfb = model()

Xext_train Yext_train = multiplie(X_train Y_train)Xext_test Yext_test = multiplie(X_test Y_test)if acp

Xext_train_ = Xext_trainXext_test_ = Xext_testacp_model = PCA(n_components=axes svd_solver=solver)fit(Xext_train)Xext_train = acp_modeltransform(Xext_train)Xext_test = acp_modeltransform(Xext_test)

clffit(Xext_train Yext_trainravel())

err_train = error(clf Xext_train Yext_train)err_test = error(clf Xext_test Yext_test)

Xextb_train Yextb_train = mbruit(X_train Y_train)Xextb_test Yextb_test = mbruit(X_test Y_test)if acp

acp_model = PCA(n_components=axes svd_solver=solver)fit(Xextb_train)Xextb_train = acp_modeltransform(Xextb_train)Xextb_test = acp_modeltransform(Xextb_test)Xext_train = acp_modeltransform(Xext_train_)Xext_test = acp_modeltransform(Xext_test_)

clfbfit(Xextb_train Yextb_trainravel())

errb_train = error(clfb Xextb_train Yextb_train)errb_train_clean = error(clfb Xext_train Yext_train)

(suite sur la page suivante)

85 Le gradient et le discret 319

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

errb_test = error(clfb Xextb_test Yextb_test)errb_test_clean = error(clfb Xext_test Yext_test)

resappend(dict(modelTT=model__name__ err_train=err_train err2_train=errb_rarrtrain

err_test=err_test err2_test=errb_test err2b_test_clean=errb_test_cleanerr2b_train_clean=errb_train_clean))

dfb = pandasDataFrame(res)dfb = dfb[[modelTT err_train err2_train err2b_train_clean err_test

rarrerr2_test err2b_test_clean]]dfb = dfbsort_values(modelTT)return dfb

dfb = comparaison_train_test(models X Y)dfb

Les colonnes err2b_train_clean et err2b_test_clean sont les erreurs obtenues par des modegraveles appris sur des colonnesbruiteacutees et testeacutees sur des colonnes non bruiteacutees ce qui est le veacuteritable test On srsquoaperccediloit que les performances sonttregraves deacutegradeacutees sur la base drsquotest Une raison est que le bruit choisi ajouteacute nrsquoest pas centreacute Corrigeons cela

def multiplie_bruit_centree(X Y classes=None)if classes is None

classes = numpyunique(Y)XS = []YS = []for i in classes

X2 = numpyrandomrandn((Xshape[0] 3))reshape(Xshape[0] 3) 01X2 = numpyrandomrandom((Xshape[0] 3)) 02 - 01X2[i] += 1Yb = Y == iXSappend(numpyhstack([X X2]))Yb = Ybreshape((len(Yb) 1))YSappend(Yb)

Xext = numpyvstack(XS)Yext = numpyvstack(YS)return Xext Yext

dfb = comparaison_train_test(models X Y mbruit=multiplie_bruit_centree acp=None)dfb

Crsquoest mieux mais on en conclut que dans la plupart des cas la meilleure performance sur la base drsquoapprentissage avecle bruit ajouteacute est due au fait que les modegraveles apprennent par coeur Sur la base de test les performances ne sont pasmeilleures Une erreur de 33 signifie que la reacuteponse du classifieur est constante On multiplie les exemples

def multiplie_bruit_centree_duplique(X Y classes=None)if classes is None

classes = numpyunique(Y)XS = []YS = []for i in classes

(suite sur la page suivante)

320 Chapter 8 Peacutereacutegrinations

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

for k in range(05)X2 = numpyrandomrandn((Xshape[0] 3))reshape(Xshape[0] 3) 03X2 = numpyrandomrandom((Xshape[0] 3)) 08 - 04X2[i] += 1Yb = Y == iXSappend(numpyhstack([X X2]))Yb = Ybreshape((len(Yb) 1))YSappend(Yb)

Xext = numpyvstack(XS)Yext = numpyvstack(YS)return Xext Yext

dfb = comparaison_train_test(models X Y mbruit=multiplie_bruit_centree_dupliquerarracp=None)dfb

Cela fonctionne un peu mieux le fait drsquoajouter du hasard ne permet pas drsquoobtenir des gains significatifs agrave part pour lemodegravele SVC264

def multiplie_bruit_centree_duplique_rebalance(X Y classes=None)if classes is None

classes = numpyunique(Y)XS = []YS = []for i in classes

X2 = numpyrandomrandom((Xshape[0] 3)) 08 - 04X2[i] += 1 ((i 2) 2 - 1)Yb = Y == iXSappend(numpyhstack([X X2]))Yb = Ybreshape((len(Yb) 1))YSappend(Yb)

Xext = numpyvstack(XS)Yext = numpyvstack(YS)return Xext Yext

dfb = comparaison_train_test(models X Y mbruit=multiplie_bruit_centree_duplique_rarrrebalance)dfb

264 httpscikit-learnorgstablemodulesgeneratedsklearnsvmSVChtml

85 Le gradient et le discret 321

Machine Learning Statistiques et Programmation Version 035930

857 Petite explication

Dans tout le notebook le score de la reacutegression logistique est nul Elle ne parvient pas agrave apprendre tout simplementparce que le problegraveme choisi nrsquoest pas lineacuteaire seacuteparable Srsquoil lrsquoeacutetait cela voudrait dire que le problegraveme suivant lrsquoestaussi

M = numpyzeros((9 6))Y = numpyzeros((9 1))for i in range(0 9)

M[i i3] = 1M[i i3+3] = 1Y[i] = 1 if i3 == i3 else 0

MY

(array([[1 0 0 1 0 0][1 0 0 0 1 0][1 0 0 0 0 1][0 1 0 1 0 0][0 1 0 0 1 0][0 1 0 0 0 1][0 0 1 1 0 0][0 0 1 0 1 0][0 0 1 0 0 1]]) array([[1][0][0][0][1][0][0][0][1]]))

clf = LogisticRegression(multi_class=ovr solver=liblinear)clffit(M Yravel())

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovrn_jobs=None penalty=l2 random_state=None solver=liblineartol=00001 verbose=0 warm_start=False)

clfpredict(M)

array([0 0 0 0 0 0 0 0 0])

A revisiter

322 Chapter 8 Peacutereacutegrinations

CHAPTER 9

Galleries

91 Gallery of examples

911 Arbre drsquoindeacutecision

La construction drsquoun arbre de deacutecision appliqueacute agrave une classification binaire suppose qursquoon puisse deacuteterminer un seuilqui seacutepare les deux classes ou tout du moins qui aboutisse agrave deux sous-ensemble dans lesquels une classe est majoritaireMais certains cas crsquoest une chose compliqueacutee

bull Un cas simple et un cas compliqueacute (page 323)ndash Seuil de deacutecision (page 324)

Un cas simple et un cas compliqueacute

Il faut choisir un seuil sur lrsquoaxe des abscisses qui permette de classer le jeu de donneacutees

import numpyimport matplotlibpyplot as pltfrom pandas import DataFrame

def random_set_1d(n kind)x = numpyrandomrand(n) 3 - 1if kind

y = numpyempty(xshape dtype=numpyint32)y[x lt 0] = 0y[(x gt= 0) amp (x lt= 1)] = 1y[x gt 1] = 0

elsey = numpyempty(xshape dtype=numpyint32)

(suite sur la page suivante)

323

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

y[x lt 0] = 0y[x gt= 0] = 1

x2 = numpyrandomrand(n)return numpyvstack([x x2])T y

def plot_ds(X y ax=None title=None)if ax is None

ax = pltgca()axscatter(X[ 0] X[ 1] c=y s=20 edgecolor=k lw=05)if title is not None

axset_title(title)return ax

X1 y1 = random_set_1d(1000 False)X2 y2 = random_set_1d(1000 True)

fig ax = pltsubplots(1 2 figsize=(12 6) sharey=True)plot_ds(X1 y1 ax=ax[0] title=easy)plot_ds(X2 y2 ax=ax[1] title=difficult)

Out

ltAxesSubplottitle=centerdifficultgt

Seuil de deacutecision

Les arbres de deacutecision utilisent comme critegravere le critegravere de Gini265 ou liquestentropie266 Lrsquoapprentissage drsquoune reacutegressionlogistique srsquoappuie sur la log-vraisemblance (page 185) du jeu de donneacutees On regarde lrsquoeacutevolution de ces critegraveres enfonction des diffeacuterents seuils possibles

def plog2(p)if p == 0

return 0return p numpylog(p) numpylog(2)

def logistic(x)return 1 (1 + numpyexp(-x))

def likelihood(x y theta=1 th=0)lr = logistic((x - th) theta)return y lr + (1 - y) (1 - lr)

def criteria(X y)res = numpyempty((Xshape[0] 8))

(suite sur la page suivante)

265 httpsfrwikipediaorgwikiArbre_de_dC3A9cision_(apprentissage)Cas_des_arbres_de_classification266 httpsfrwikipediaorgwikiEntropie_de_Shannon

324 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

res[ 0] = X[ 0]res[ 1] = yorder = numpyargsort(res[ 0])res = res[order ]copy()x = res[ 0]copy()y = res[ 1]copy()

for i in range(1 resshape[0] - 1) ginip1 = numpysum(y[i]) ip2 = numpysum(y[i]) (yshape[0] - i)res[i 2] = p1res[i 3] = p2res[i 4] = 1 - p12 - (1 - p1)2 + 1 - p22 - (1 - p2)2res[i 5] = - plog2(p1) - plog2(1 - p1) - plog2(p2) - plog2(1 - p2)th = x[i]res[i 6] = logistic(th 10)res[i 7] = numpysum(likelihood(x y 10 th)) resshape[0]

return DataFrame(res[1-1] columns=[X y p1 p2 Gini Gain lr LL-10])

X1 y1 = random_set_1d(1000 False)X2 y2 = random_set_1d(1000 True)

df = criteria(X1 y1)print(dfhead())

Out

X y p1 p2 Gini Gain lr LL-100 -0997743 00 00 0660661 0448376 0924185 0000046 06869061 -0991923 00 00 0661323 0447950 0923547 0000049 06880352 -0987839 00 00 0661986 0447521 0922906 0000051 06888473 -0987460 00 00 0662651 0447090 0922260 0000051 06889234 -0987248 00 00 0663317 0446655 0921610 0000052 0688965

Et visuellement

def plot_ds(X y ax=None title=None)if ax is None

ax = pltgca()axscatter(X[ 0] X[ 1] c=y s=20 edgecolor=k lw=05)if title is not None

axset_title(title)return ax

df1 = criteria(X1 y1)df2 = criteria(X2 y2)

fig ax = pltsubplots(1 2 figsize=(12 6) sharey=True)plot_ds(X1 y1 ax=ax[0] title=easy)

(suite sur la page suivante)

91 Gallery of examples 325

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

plot_ds(X2 y2 ax=ax[1] title=difficult)df1plot(x=X y=[Gini Gain LL-10 p1 p2] ax=ax[0] lw=5)df2plot(x=X y=[Gini Gain LL-10 p1 p2] ax=ax[1] lw=5)

Out

ltAxesSubplottitle=centerdifficult xlabel=Xgt

Le premier exemple est le cas simple et tous les indicateurs trouvent bien la fontiegravere entre les deux classes comme unextremum sur lrsquointervalle consideacutereacute Le second cas est lineacuteairement non seacuteparable Aucun des indicateurs ne sembletrouver une des deux frontiegraveres La log-vraisemblance montre deux maxima Lrsquoun est bien situeacute sur une frontiegraverele second est situeacute agrave une extreacutemiteacute de lrsquointervalle ce qui revient agrave construire un classifier qui retourneacute une reacuteponseconstante Crsquoest donc inutileTotal running time of the script ( 0 minutes 2776 seconds)

92 Galleries

Notebooks Coverage (page 380)

bull Le petit coin des data scientists (page 326)bull Images (page 332)bull Meacutetriques (page 332)bull Machine Learning (page 339)bull NLP - Natural Language Processing (page 355)

921 Le petit coin des data scientists

Ce sont quelques notebooks sur des points particuliers qui surgissent au quotidien quand on traite des donneacutees

Classification multiple

Explorations autour drsquoun problegraveme de classification multiple

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Deacutebut de lrsquohistoire (page 327)ndash Confusions (page 327)ndash Clustering (page 327)

bull Mise en pratique (page 328)

326 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Deacutebut de lrsquohistoire

11yi

Confusions

Un des premiers reacuteflexes apregraves avoir appris une classification multi-classe est de regarder la matrice de confusion267Certaines classes sont difficiles agrave classer drsquoautres non Je me demandais srsquoil existait un moyen de deacuteterminer cela sansapprendre un classifieur On souhaite apprendre la classification des points (Xi yi) Xi est un vecteur yi la classeattendue Si yi est la classe preacutedite lrsquoerreur de classification est

E =sumi

11yi =yi

On note cij = 11yi=j et cij = 11yi=j On note le vecteur Cj = (cij)i et Cj = (cij)i On peut reacuteeacutecrire lrsquoerreur comme

E =sumij

11yi=j11yi =j =sumij

11yi=j(1minus 11yi=j) =sumij

cij(1minus cij) =sumj

lt Cj 1minus Cj gt

Crsquoest aussi eacutegal agrave

E =sumk =j

lt Cj Ck gt

Et lt Cj Ck gt correspond au nombre drsquoerreurs de confusion le nombre drsquoeacuteleacutements de la classe j classeacutes dans laclasse k lt Cj Ck gt est le nombre drsquoeacuteleacutements correctement classeacutes dans la classe j On peut montrer quesum

kj

lt Cj Ck gt= N

ougrave N est le nombre drsquoobservations

Clustering

Et si nous introduisions un clustering intermeacutediaire On construit Q cluster qi est le cluster du point Xi et on notedil = 11qi=l et le vecteur Dl = (dil)i

E =sumk =j

lt Cj Ck gt

On note XY le produit terme agrave terme de deux vecteurs

E =sumk =jl

lt Cj Dl Ck gt=sumk =jl

lt Cj Dl CkDl gt

Le nombre drsquoerreurs est la somme des erreurs faites sur chaque cluster Supposons maintenant qursquoun classifieur retourneune reacuteponse constante sur chacun des clusters on choisit la classe plus repreacutesenteacutee Ca ressemble beaucoup agrave unclassifieur bayeacutesien268 On note f(l) cette classe la plus repreacutesenteacutee Elle veacuterifie

f(l) = argmaxj

lt Cj Dl gt

267 httpsfrwikipediaorgwikiMatrice_de_confusion268 httpscikit-learnorgstablemodulesnaive_bayeshtml

92 Galleries 327

Machine Learning Statistiques et Programmation Version 035930

Cela signifie que cij =sum

l 11j=f(l)dil Si on note l(i) le cluster associeacute agrave i On continue cij = 11j=f(l(i)) On deacutefinitlrsquoerreur e(l) lrsquoerreur de classification faite sur chaque cluster l

e(l) =sumi

dilsumj

cij(1minus 11j=f(l)) =sumi

dil

sumj

cij minussumj

cij11j=f(l)

=sumi

dil(1minus cif(l)

)=sumi

dil minussumi

dilcif(l)

Pour reacutesumer lrsquoerreur est le nombre drsquoeacuteleacutements moins le nombre drsquoeacuteleacutements dans la classe majoritaire du cluster Sile nombre de clusters Q devient supeacuterieur ou eacutegal au nombre drsquoobservations cette erreur devient nulle

Mise en pratique

Lrsquoideacutee est de voir comment eacutevolue cette erreur de classification naiumlve en fonction du nombre de clusters La diffeacuterencepar rapport agrave un classifieur est qursquoon sait comment sont fabriqueacutes les clusters et qursquoon peut imaginer les classes commeun assemblage de clusters drsquoune forme connue

File drsquoattente un exemple simple

Cet exemple vient illustrer le paragraphe sur les files drsquoattente et lrsquoespeacuterance de vie des ampoules

matplotlib inline

import mathimport random

def generate_expo(mu)return randomexpovariate(mu)

generate_expo(2)

00749720223112896

Les paramegravetres de la simulation

S = 10000iteration = 500mu = 10 100

On creacutee un tableau de S ampoules qui contient la dureacutee de vie restante de chaque ampoule

ampoule = [0 for a in range(0S)]moyenne_grille = 0stats = []

for i in range(0iteration)grille = 0mean = 0

for n in range(0S)mean += ampoule[n]if ampoule[n] == 0

remplacement dune ampoule grilleacutee(suite sur la page suivante)

328 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

grille += 1 on deacutetermine la dureacutee de vie de cette ampoule on arrondit agrave lentier le plus procheampoule[n] = int (generate_expo(mu))

else on enlegraveve une heure agrave la dureacutee de vie de lampouleampoule[n] -= 1

mean = S

statsappend(dict(i=i mean=mean grille=grille))

if i gt 0moyenne_grille += grille

if i 100 == 0print(iteacuteration i moyenne dureacutee mean grilleacutees grille)

moyenne_grille = float (moyenne_grille) float (iteration - 1)print(nombre moyen dampoules grilleacutees moyenne_grille)

iteacuteration 0 moyenne dureacutee 00 grilleacutees 10000iteacuteration 100 moyenne dureacutee 997184 grilleacutees 95iteacuteration 200 moyenne dureacutee 987154 grilleacutees 93iteacuteration 300 moyenne dureacutee 992155 grilleacutees 101iteacuteration 400 moyenne dureacutee 989101 grilleacutees 108nombre moyen dampoules grilleacutees 9988577154308618

import pandasdf = pandasDataFrame(stats)df = df[[i mean grille]]df[grille_sum] = df[grille]cumsum() - 10000dfhead()

import matplotlibpyplot as pltfig ax = pltsubplots(3 1 figsize=(148))df[1]plot(x=i y=mean label=dureacutee de vie moyenne restante ax=ax[0])df[1]plot(x=i y=grille label=ampoules grilleacutees ce jour ax=ax[1])df[2]plot(x=i y=grille_sum label=total des ampoules grilleacutees ax=ax[2])ax[0]set_xlabel(dureacutee)

ltmatplotlibtextText at 0x1e2155ce4a8gt

92 Galleries 329

Machine Learning Statistiques et Programmation Version 035930

330 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Classification multiple(page 326)

Explorations autour drsquoun problegraveme de classification multiple

Correacutelations nonlineacuteaires (page 282)

Les correacutelations indiquent si deux variables sont lineacuteairementeacutequivalentes Comment eacutetendre cette notion agrave des variables lieacuteesmais pas de faccedilon lineacuteaire

File drsquoattente unexemple simple(page 328)

Cet exemple vient illustrer le paragraphe sur les files drsquoattente etlrsquoespeacuterance de vie des ampoules

Le gradient et lediscret (page 313)

Les meacutethodes drsquooptimisation agrave base de gradient srsquoappuie sur une fonctiondrsquoerreur deacuterivable qursquoon devrait appliquer de preacutefeacuterence sur des variablesaleacuteatoires reacuteelles Ce notebook explore quelques ideacutees

Reacutegression lineacuteaire(page 107)

Ce notebook srsquointeacuteresse agrave la faccedilon drsquointerpreacuteter les reacutesultats drsquounereacutegression lineacuteaire lorsque les variables sont correacuteleacutees puis il explore unefaccedilon drsquoassocier arbre de deacutecision et reacutegression lineacuteaire pour construireune reacutegression lineacuteaire par morceaux

Reacutegression quantileillustreacutee (page 125)

La reacutegression quantile est moins sensible aux points aberrants Elle peutecirctre deacutefinie comme une reacutegression avec une norme L1 (une valeur absolue)Ce notebook explore des reacutegressions avec des quantiles diffeacuterents

Reacutepartir en basedrsquoapprentissage et detest (page 267)

Crsquoest un problegraveme plutocirct facile puisqursquoil srsquoagit de reacutepartir aleacuteatoirement leslignes drsquoune base de donneacutees drsquoun cocircteacute ou de lrsquoautre Lorsque le problegravemede machine learning agrave reacutesoudre est un problegraveme de classification il fautsrsquoassurer que chaque cocircteacute contient une proportion raisonnable de chaqueclasse

92 Galleries 331

Machine Learning Statistiques et Programmation Version 035930

922 Images

Deacutetection de segmentsdans une image(page 261)

Crsquoest une technique assez vieille et qui consiste agrave deacutetecter des segmentscomme des anomalies lrsquoalignement de points est un eacuteveacutenement assezrare dans un nuage de points mais rare comment Cette ideacutee megravene agrave laprobabilisation drsquoune image pour quantifier ce qursquoest un alignement depoints neacutecessairement rare

923 Meacutetriques

ROC

A few graphs about ROC on the iris datasets

matplotlib inlineimport matplotlibpyplot as pltpltstyleuse(ggplot)

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Iris datasets (page 332)bull ROC with scikit-learn (page 333)bull ROC - TPR FPR (page 334)bull ROC - score distribution (page 337)bull ROC - recall precision (page 338)

Iris datasets

from sklearn import datasetsiris = datasetsload_iris()X = irisdata[ 2]y = iristarget

from sklearnmodel_selection import train_test_splitX_train X_test y_train y_test = train_test_split(X y test_size=033)

from sklearnlinear_model import LogisticRegressionclf = LogisticRegression()clffit(X_train y_train)

LogisticRegression(C=10 class_weight=None dual=False fit_intercept=Trueintercept_scaling=1 max_iter=100 multi_class=ovr n_jobs=1

(suite sur la page suivante)

332 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

penalty=l2 random_state=None solver=liblinear tol=00001verbose=0 warm_start=False)

import numpyypred = clfpredict(X_test)yprob = clfpredict_proba(X_test)score = numpyarray(list(yprob[iypred[i]] for i in range(len(ypred))))

data = numpyzeros((len(ypred) 2))data[0] = scoreravel()data[ypred==y_test1] = 1data[5]

array([[ 070495209 1 ][ 056148737 0 ][ 056148737 1 ][ 077416227 1 ][ 058631799 0 ]])

ROC with scikit-learn

We use the following example Receiver Operating Characteristic (ROC)269

from sklearnmetrics import roc_curvefpr tpr th = roc_curve(y_test == ypred score)

import matplotlibpyplot as pltpltplot(fpr tpr label=ROC curve)pltplot([0 1] [0 1] linestyle=--)pltxlim([00 10])pltylim([00 10])pltxlabel(False Positive Rate)pltylabel(True Positive Rate)pltlegend(loc=lower right)

ltmatplotliblegendLegend at 0x268373a2128gt

269 httpscikit-learnorgstableauto_examplesmodel_selectionplot_rochtmlsphx-glr-auto-examples-model-selection-plot-roc-py

92 Galleries 333

Machine Learning Statistiques et Programmation Version 035930

import pandasdf = pandasDataFrame(dict(fpr=fpr tpr=tpr threshold=th))df

ROC - TPR FPR

We do the same with the class this module provides ROC270bull TPR = True Positive Ratebull FPR = False Positive Rate

You can see as TPR the distribution function of a score for a positive example and the FPR the same for a negativeexample

from mlstatpymlroc import ROC

roc = ROC(df=data)

roc

Overall precision 063 - AUC=0850594--------------

score label weight0 0375573 00 101 0385480 00 102 0412314 00 103 0412703 10 10

(suite sur la page suivante)

270 httpwwwxavierduprefrappmlstatpyhelpsphinxmlstatpymlrochtmlhighlight=rocmodule-mlstatpymlroc

334 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

4 0417941 00 10--------------

score label weight45 0863174 10 1046 0863174 10 1047 0869794 10 1048 0903335 10 1049 0910712 10 10--------------

False Positive Rate True Positive Rate threshold0 0000000 0032258 09107121 0000000 0193548 08286172 0000000 0354839 07909093 0000000 0516129 07370004 0052632 0645161 06275895 0157895 0741935 06079756 0263158 0838710 05614877 0526316 0838710 05422118 0684211 0903226 05208359 0842105 0967742 041794110 1000000 1000000 0375573--------------

error recall threshold0 0000000 002 09107121 0000000 012 08286172 0000000 022 07909093 0000000 032 07370004 0047619 042 06275895 0115385 052 06079756 0161290 062 05614877 0277778 072 05422118 0317073 082 05208359 0347826 092 041794110 0380000 100 0375573

rocauc()

085059422750424452

rocplot(nb=10)

ltmatplotlibaxes_subplotsAxesSubplot at 0x2683ff2b668gt

92 Galleries 335

Machine Learning Statistiques et Programmation Version 035930

This function draws the curve with only 10 points but we can ask for more

rocplot(nb=100)

ltmatplotlibaxes_subplotsAxesSubplot at 0x2683feba240gt

We can also ask to draw bootstropped curves to get a sense of the confidence

336 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

rocplot(nb=10 bootstrap=10)

ltmatplotlibaxes_subplotsAxesSubplot at 0x26840008748gt

ROC - score distribution

This another representation for the metrics FPR and TPRP (x lt s) is the probability that a score for a positive exampleto be less than s P (minus gt s) is the probability that a score for a negative example to be higher than s We assume inthis case that the higher the better for the score

rocplot(curve=ROCCurveTypePROBSCORE thresholds=True)

ltmatplotlibaxes_subplotsAxesSubplot at 0x268410618d0gt

92 Galleries 337

Machine Learning Statistiques et Programmation Version 035930

When curves intersects at score slowast error rates for positive and negative examples are equal If we show the confusionmatrix for this particular score slowast it gives

conf = rocconfusion()conf[P(+lts)] = 1 - conf[True Positive] confloc[len(conf)-1True Positive]conf[P(-gts)] = 1 - conf[True Negative] confloc[0True Negative]conf

ROC - recall precision

In this representation we show the score

import matplotlibpyplot as pltfig axes = pltsubplots(ncols=2 nrows=1 figsize=(144))rocplot(curve=ROCCurveTypeRECPREC thresholds=True ax=axes[0])rocplot(curve=ROCCurveTypeRECPREC ax=axes[1])

ltmatplotlibaxes_subplotsAxesSubplot at 0x2684151d3c8gt

338 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

ROC (page 332) A few graphs about ROC on the iris datasets

p-values (page 235) Compute p-values and heavy tails estimators

924 Machine Learning

Benchmark

Ce notebook compare diffeacuterents modegraveles depuis un notebook

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Petit bench sur le clustering (page 340)ndash Deacutefinition du bench (page 340)ndash Lancer le bench (page 340)ndash Reacutecupeacuterer les reacutesultats (page 341)ndash Dessin Graphs (page 341)

Si le message Widget Javascript not detected It may not be installed or enabled properly apparaicirct vous devriezexeacutecuter la commande jupyter nbextension enable --py --sys-prefix widgetsnbextension depuis laligne de commande Le code suivant vous permet de veacuterifier que cela a eacuteteacute fait

from tqdm import tnrange tqdm_notebookfrom time import sleep

for i in tnrange(3 desc=1st loop)for j in tqdm_notebook(range(20) desc=2nd loop)

sleep(001)

92 Galleries 339

Machine Learning Statistiques et Programmation Version 035930

matplotlib inline

Petit bench sur le clustering

Deacutefinition du bench

import dillfrom tqdm import tnrangefrom sklearncluster import AgglomerativeClustering KMeansfrom sklearndatasets import make_blobsfrom mlstatpyml import MlGridBenchMark

params = [dict(model=lambda KMeans(n_clusters=3) name=KMeans-3 shortname=km-3)dict(model=lambda AgglomerativeClustering() name=AgglomerativeClustering

rarrshortname=aggclus)]

datasets = [dict(X=make_blobs(100 centers=3)[0] Nclus=3name=blob-100-3 shortname=b-100-3 no_split=True)

dict(X=make_blobs(100 centers=5)[0] Nclus=5name=blob-100-5 shortname=b-100-5 no_split=True) ]

bench = MlGridBenchMark(TestName datasets fLOG=None clog=Nonecache_file=cachepickle pickle_module=dillrepetition=3 progressbar=tnrangegraphx=[_time time_train Nclus]graphy=[silhouette Nrows])

Lancer le bench

benchrun(params)

0|2017-03-19 201111 [BenchMarkrun] number of cached run 4 0|| 04 [0000lt rarrits]

3|2017-03-19 201113 [BenchMarkrun] done 75|| 34 [0002lt0000 110its] rarr 11its]_train 002142968022685221 time_test 0rarr0025012412126208527 _btry aggclus-b-100-5 _iexp 2 model_namerarrAgglomerativeClustering ds_name blob-100-5 Nrows 100 Nfeat 2 Nclusrarr5 no_split True _date datetimedatetime(2017 3 19 20 11 11 647355) _rarrtime 01007650830318858 _span datetimetimedelta(0 0 112581) _i 3 _namerarr TestName 75|| 34 [0000lt0000 422its]]000 353its]]

340 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Reacutecupeacuterer les reacutesultats

df = benchto_df()df

dfplot(x=time_train y=silhouette kind=scatter)

ltmatplotlibaxes_subplotsAxesSubplot at 0x122b8004748gt

Dessin Graphs

benchplot_graphs(figsize=(1212))

array([[ltmatplotlibaxes_subplotsAxesSubplot object at 0x00000122B8269A90gtltmatplotlibaxes_subplotsAxesSubplot object at 0x00000122B82E1DA0gt][ltmatplotlibaxes_subplotsAxesSubplot object at 0x00000122B83512E8gtltmatplotlibaxes_subplotsAxesSubplot object at 0x00000122B83A1828gt][ltmatplotlibaxes_subplotsAxesSubplot object at 0x00000122B8409D68gtltmatplotlibaxes_subplotsAxesSubplot object at 0x00000122B8462588gt]]

rarrdtype=object)

92 Galleries 341

Machine Learning Statistiques et Programmation Version 035930

Factorisation et matrice et ACP

Un exemple pour montrer lrsquoeacutequivalence entre lrsquoACP et une factorisation de matrice

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Factorisation de matrices (page 343)bull ACP analyse en composantes principales (page 344)

matplotlib inline

342 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Factorisation de matrices

def erreur_mf(M W H)d = M - W Ha = dravel()e = a aTe 05 (Mshape[0] Mshape[1])return e

On creacutee un nuage de points avec que des coordonneacutees positives pour satisfaire les hypothegraveses de la factorisation dematrices

from numpyrandom import randM = rand(2 20)M[1] += 3 M[0]M

array([[ 081960047 063887134 074019269 096110175 00685406 011103301 006033529 067913157 010460611 098860048050497448 026893866 073143267 032617974 01332449 083328515 03775355 069163261 053095348 015601268]

[ 248031078 22279066 285929872 327833973 027323095053806662 048019992 209428487 040521666 394539474236639105 166857684 314027534 194032092 122602705309679803 1696636 269144798 184350664 116862532]])

from sklearndecomposition import NMFmf = NMF(1)W = mffit_transform(M)H = mfcomponents_erreur_mf(M W H)

019729615330190822

wh = W H

import matplotlibpyplot as pltfig ax = pltsubplots(1 1)axplot(M[0] M[1] ob)axplot(wh[0] wh[1] or)axset_xlim([01])axset_ylim([04])

(0 4)

92 Galleries 343

Machine Learning Statistiques et Programmation Version 035930

ACP analyse en composantes principales

from sklearndecomposition import PCApca = PCA(n_components=1)pcafit(MT)

PCA(copy=True iterated_power=auto n_components=1 random_state=Nonesvd_solver=auto tol=00 whiten=False)

projected_points = pcainverse_transform(pcatransform(MT))pj = projected_pointsT

import matplotlibpyplot as pltfig ax = pltsubplots(1 1)axplot(M[0] M[1] ob)axplot(wh[0] wh[1] or)axplot(pj[0] pj[1] og)axset_xlim([01])axset_ylim([04])

(0 4)

344 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Les reacutesultats ne sont pas exactement identiques car lrsquoACP271 centre le nuage de points par deacutefaut On utilise celui destatsmodels272 pour eacuteviter cela

from statsmodelsmultivariatepca import PCApca = PCA(MT ncomp=1 standardize=False demean=False normalize=False)pca

Principal Component Analysis(nobs 20 nvar 2 transformation None normalizationrarrFalse number of components 1 SVD id 0x1c01a2861d0)

pj2 = pcaprojectionT

import matplotlibpyplot as pltfig ax = pltsubplots(1 1)axplot(M[0] M[1] ob)axplot(wh[0] wh[1] or)axplot(pj[0] pj[1] og)axplot(pj2[0] pj2[1] oy)axset_xlim([01])axset_ylim([04])

(0 4)

271 httpscikit-learnorgstablemodulesgeneratedsklearndecompositionPCAhtml272 httpwwwstatsmodelsorgdevgeneratedstatsmodelsmultivariatepcaPCAhtml

92 Galleries 345

Machine Learning Statistiques et Programmation Version 035930

On retrouve exactement les mecircmes reacutesultats

Valeurs manquantes et factorisation de matrices

Reacuteflexion autour des valeur manquantes et de la factorisation de matrice positive

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Matrice agrave coefficients aleacuteatoires (page 346)bull Matrice avec des vecteurs colonnes correacuteleacutes (page 348)bull Matrice identiteacute (page 350)bull Matrice identiteacute et repreacutesentation spatiale (page 351)

matplotlib inline

Matrice agrave coefficients aleacuteatoires

On eacutetudie la factorisation drsquoune matrice agrave coefficients tout agrave fait aleacuteatoires qui suivent une loi uniforme sur lrsquointervalle[0 1] Essayons sur une petite matrice

from numpyrandom import randM = rand(3 3)M

array([[ 005119593 043722929 09290821 ][ 04588466 014187813 023762633][ 09768084 047674026 079044526]])

346 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

from sklearndecomposition import NMFmf = NMF(1)mffit_transform(M)

array([[ 067825803][ 038030919][ 102295362]])

La matrice preacuteceacutedente est la matrice W dans le produit WH la matrice qui suit est H

mfcomponents_

array([[ 073190904 050765757 092611883]])

mfreconstruction_err_ (Mshape[0] Mshape[1])

007236890712696428

On recalcule lrsquoerreur

d = M - mffit_transform(M) mfcomponents_a = dravel()e = a aTe 05 (Mshape[0] Mshape[1])

0072368907126964283

eravel()

array([ 042421796])

Et maintenant sur une grande et plus neacutecessairement carreacutee

M = rand(300 10)mf = NMF(1)mffit_transform(M)mfreconstruction_err_ (Mshape[0] Mshape[1])

0004996164872801101

Lrsquoerreur est la mecircme

errs = []rangs = list(range(1 11))for k in rangs

mf = NMF(k)mffit_transform(M)e = mfreconstruction_err_ (Mshape[0] Mshape[1])errsappend(e)

92 Galleries 347

Machine Learning Statistiques et Programmation Version 035930

import pandasdf = pandasDataFrame(dict(rang=rangs erreur=errs))dfplot(x=rang y=erreur)

ltmatplotlibaxes_subplotsAxesSubplot at 0x199924d8668gt

Matrice avec des vecteurs colonnes correacuteleacutes

Supposons maintenant que la matrice preacuteceacutedente M est de rang 3 Pour srsquoen assurer on tire une matrice aleacutealatoireavec 3 vecteurs colonnes et on reacuteplique des colonnes jusqursquoagrave la dimension souhaiteacutee

from numpy import hstackM = rand(300 3)M = hstack([M M M M[1]])Mshape

(300 10)

errs = []rangs = list(range(1 11))for k in rangs

mf = NMF(k)mffit_transform(M)e = mfreconstruction_err_ (Mshape[0] Mshape[1])errsappend(e)

import pandasdf = pandasDataFrame(dict(rang=rangs erreur=errs))

(suite sur la page suivante)

348 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

dfplot(x=rang y=erreur)

ltmatplotlibaxes_subplotsAxesSubplot at 0x199925d6630gt

On essaye agrave nouveausur une matrice un peu plus petite

M = rand(3 2)M = hstack([M M[1]])M

array([[ 027190312 06497563 027190312][ 044853292 087097224 044853292][ 029424835 065106952 029424835]])

mf = NMF(2)mffit_transform(M)

array([[ 061835197 0 ][ 082887888 029866219][ 061960446 007743224]])

mfcomponents_

array([[ 043972536 105078419 043972536][ 028143493 0 028143493]])

La derniegravere colonne est identique agrave la premiegravere

92 Galleries 349

Machine Learning Statistiques et Programmation Version 035930

Matrice identiteacute

Et maintenant si la matrice M est la matrice identiteacute que se passe-t-il

from numpy import identityM = identity(3)M

array([[ 1 0 0][ 0 1 0][ 0 0 1]])

mf = NMF(1)mffit_transform(M)

array([[ 0][ 1][ 0]])

mfcomponents_

array([[ 0 1 0]])

mfreconstruction_err_ 2

20000000000000004

On essaye avec k = 2

mf = NMF(2)mffit_transform(M)

array([[ 0 0 ][ 0 103940448][ 095521772 0 ]])

mfcomponents_

array([[ 0 0 104688175][ 0 096208937 0 ]])

mfreconstruction_err_ 2

10

Avec des vecteurs normeacutes et indeacutependants (formant donc une base de lrsquoespace vectoriel) lrsquoalgorithme aboutit agrave unematrice W eacutegale au k premiers vecteurs et oublie les autres

350 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Matrice identiteacute et repreacutesentation spatiale

Pour comprendre un peu mieux ce dernier exemple il est utile de chercher drsquoautres solutions dont lrsquoerreur esteacutequivalente

def erreur_mf(M W H)d = M - W Ha = dravel()e = a aTe 05 (Mshape[0] Mshape[1])return e

M = identity(3)mf = NMF(2)W = mffit_transform(M)H = mfcomponents_erreur_mf(M W H)

10

W

array([[ 0 0 ][ 09703523 0 ][ 0 102721047]])

H

array([[ 0 103055354 0 ][ 0 0 097351032]])

W H

array([[ 0 0 0][ 0 1 0][ 0 0 1]])

from mpl_toolkitsmplot3d import Axes3Dimport matplotlibpyplot as pltfig = pltfigure()ax = figadd_subplot(111 projection=3d)wh = W Haxscatter(M[0] M[1] M[2] c=b marker=o s=20)axscatter(wh[0] wh[1] wh[2] c=r marker=^)

ltmpl_toolkitsmplot3dart3dPath3DCollection at 0x19992d2a5c0gt

92 Galleries 351

Machine Learning Statistiques et Programmation Version 035930

Et si on pose maintenant

import numpyW = numpyarray([[05 05 0] [0 0 1]])TH = numpyarray([[1 1 0] [00 00 10]])W

array([[ 05 0 ][ 05 0 ][ 0 1 ]])

H

array([[ 1 1 0][ 0 0 1]])

W H

array([[ 05 05 0 ][ 05 05 0 ][ 0 0 1 ]])

erreur_mf(M W H)

10

fig = pltfigure()ax = figadd_subplot(111 projection=3d)wh = W Haxscatter(M[0] M[1] M[2] c=b marker=o s=20)axscatter(wh[0] wh[1] wh[2] c=r marker=^)

352 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

ltmpl_toolkitsmplot3dart3dPath3DCollection at 0x19992a2e5f8gt

On peut voir la matrice M comme un ensemble de n points dans un espace vectoriel La matrice W est un ensemblede k lt n points dans le mecircme espace La matrice WH de rang k est une approximation de cet ensemble dans lemecircme espace crsquoest aussi n combinaisons lineacuteaires de k points de faccedilon agrave former n points les plus proches proches den points de la matrice M

92 Galleries 353

Machine Learning Statistiques et Programmation Version 035930

Analyse de survie(page 197)

Benchmark (page 339) Ce notebook compare diffeacuterents modegraveles depuis un notebook

Factorisation etmatrice et ACP(page 342)

Un exemple pour montrer lrsquoeacutequivalence entre lrsquoACP et une factorisation dematrice

Reacutegression lineacuteairepar morceaux(page 129)

La reacutegression lineacuteaire par morceaux a lrsquoavantage de produire un modegravelelocalement interpreacutetable Mais ce nrsquoest pas eacutevident drsquoestimer un tel modegravelequand on ne connaicirct pas les morceaux par avance

Reacutegression sansinversion (page 147)

Ce notebook mesure le temps de calcul dans deux algorithmes pourreacutesoudre une reacutegression lineacuteaire le premier inverse un matrice le secondle fait sans inverser une matrice le troisiegraveme reprend lrsquoideacutee du second maisutilise une deacutecomposition QR puis inverse la matrice R

Reacuteseaux de neurones(page 192)

Reacuteseaux de neurones avec scikit-learn

Un arbre de deacutecisionen reacuteseaux deneurones (page 87)

Lrsquoideacutee est de convertir sous la forme drsquoun reacuteseaux de neurones un arbrede deacutecision puis de continuer lrsquoapprentissage de faccedilon agrave obtenir unassemblage de reacutegression logistique plutocirct que de deacutecision binaire

Valeurs manquanteset factorisation dematrices (page 346)

Reacuteflexion autour des valeur manquantes et de la factorisation de matricepositive

Voronoiuml et reacutegressionlogistique (page 161)

Le notebook eacutetudie la pertinence drsquoun modegravele de reacutegression logistiquedans certaines configurations Il regarde aussi le diagramme de Voronoiumlassocieacute agrave une reacutegression logistique agrave trois classes Il donne quelquesintuitions sur les modegraveles que la reacutegression logistique peut reacutesoudre354 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

925 NLP - Natural Language Processing

Completion Trie and metrics

Evaluation of a completion system on wikpedia pages

matplotlib inlineimport matplotlibpyplot as pltpltstyleuse(ggplot)from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Wikipedia titles uniform (page 355)bull Reduce the alphabet size (page 358)bull Wikipedia titles uniform longer test (page 361)

Wikipedia titles uniform

from mlstatpydatawikipedia import download_titlesfile_titles = download_titles(country=fr)

from mlstatpydatawikipedia import enumerate_titleslist_titles = list(sorted(set(_ for _ in enumerate_titles(file_titles) if A lt= _[0] lt=rarrZ)))

len(list_titles) list_titles[5] list_titles[10000001000005]

(3108490[AA amp AA (Airport Express)A (Ayumi Hamasaki)A (Disque dAyumi Hamasaki)]

[Fantasy in the skyFantasy mythiqueFantasy of mannersFantasy tennisFantasy urbaine])

from mlstatpynlpcompletion import CompletionTrieNode

def gain_dynamique_moyen_par_mot(queries weights)per = list(zip(weights queries))total = sum(w len(q) for q w in zip(queries weights))res = []trie = CompletionTrieNodebuild([(None q) for _ q in per])trieprecompute_stat()trieupdate_stat_dynamic()wks = [(w p len(w)-triemin_keystroke0(w)[0]) for p w in per]

(suite sur la page suivante)

92 Galleries 355

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

wks_dyn = [(w p len(w)-triemin_dynamic_keystroke(w)[0]) for p w in per]wks_dyn2 = [(w p len(w)-triemin_dynamic_keystroke2(w)[0]) for p w in per]gain = sum( gptotal for w p g in wks)gain_dyn = sum( gptotal for w p g in wks_dyn)gain_dyn2 = sum( gptotal for w p g in wks_dyn2)ave_length = sum( len(w) p total for p w in per)return gain gain_dyn gain_dyn2 ave_length

import time random pandas

def benchmark(sizes)print(time 0)allres = []for size in sizes

begin = timeperf_counter()if size is None

size = len(list_titles)spl = list_titles

elsespl = randomsample(list_titles size)

splsort()res = gain_dynamique_moyen_par_mot(spl [10] len(spl))dt = timeperf_counter() - beginprint(time 0s - nb=1format(dt len(spl)) gain tuple(_res[-1] for _

rarrin res))allresappend((size dt) + res) with open(sampledtxt len(spl) w encoding=utf-8) as f fwrite(njoin(spl))

df = pandasDataFrame(allres columns=size time mks mks mks ave_lensplit())for c in mks mks mkssplit()

df[ + c] = df[c] df[ave_len]df[c + mks] = df[c] df[mks]

return df

df = benchmark([200 500 800 1000 2000 5000 8000 10000 20000])dftail(n=2)

time 0time 021504800644533353s - nb=200 gain (0820872274143302 0820872274143302 0rarr820872274143302 10)time 06058446756721159s - nb=500 gain (07976588628762532 07976588628762532 0rarr7976588628762532 10)time 1009366944402156s - nb=800 gain (0779308535065277 0779308535065277 0rarr779308535065277 10)time 12731077523609795s - nb=1000 gain (07819106501794998 07819106501794998 0rarr7819106501794998 10)time 30382918326608044s - nb=2000 gain (07491075326810025 07491075326810025 0rarr7491075326810025 10)time 6941259884811901s - nb=5000 gain (07193327903836085 07193534087277493 0rarr7193534087277493 10)time 12096078319013222s - nb=8000 gain (06971821041145199 06971821041145199 0rarr6971821041145199 10)

(suite sur la page suivante)

356 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

time 17030497306746902s - nb=10000 gain (06881011563817098 06881371807341721 0rarr6881371807341721 10)time 3055692095058407s - nb=20000 gain (06579791591697565 06582343738435791 0rarr6582343738435791 10)

import matplotlibpyplot as pltf ax = pltsubplots(2 2 figsize=(1410))dfplot(x=size y=time ax=ax[10])dfplot(x=size y=[mks mks mks ave_len] ax=ax[00])dfplot(x=size y=[mks mks mks] ax=ax[01])dfplot(x=size y=[mksmks mksmks] ax=ax[11])ax[00]legend()ax[01]legend()ax[10]legend()ax[11]legend()ax[11]set_ylim([09 11])ax[00]set_title(Raw Gain)ax[01]set_title(Relative Gain)ax[10]set_title(Time)ax[11]set_title(Comparison between MKS)

ltmatplotlibtextText at 0x15a756202b0gt

92 Galleries 357

Machine Learning Statistiques et Programmation Version 035930

Reduce the alphabet size

from mlstatpydatawikipedia import enumerate_titleslist_titles = list(sorted(set(_ for _ in enumerate_titles(file_titles) if A lt= _[0] lt=rarrZ)))

import time random pandas

def char_modulo(c size)if len(c) = 1

raise Exception(unexpected size s c) if len(c) = len(clower()) raise Exception(unexpected lower size s = s (d = d) (c clower()

rarrlen(c) len(clower())))if size is None

return celse

cl = clower()if len(cl) gt len(c)

cl = co = ord(cl)a = 97d = (o - a) + size 10return chr(97 + (d size))

def reduce_alphabet(sample size)return [join(char_modulo(c size) for c in word) for word in sample]

def benchmark_size(size alphabet_sizes)if size is None

size = len(list_titles)sample = list_titles

elsesample = randomsample(list_titles size)

print(time 0)allres = []for size in alphabet_sizes

begin = timeperf_counter()spl = reduce_alphabet(sample size)spl = list(sorted(set(spl)))res = gain_dynamique_moyen_par_mot(spl [10] len(spl))dt = timeperf_counter() - beginprint(time 0s - nb=1format(dt len(spl)) gain tuple(_res[-1] for _

rarrin res))if size is None

size = max(_ for _ in alphabet_sizes if _ is not None) + 5allresappend((size dt) + res) with open(sampledtxt len(spl) w encoding=utf-8) as f fwrite(njoin(spl))

df = pandasDataFrame(allres columns=size time mks mks mks ave_lensplit())for c in mks mks mkssplit()

df[ + c] = df[c] df[ave_len](suite sur la page suivante)

358 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

df[c + mks] = df[c] df[mks]return df

df = benchmark_size(5000 [None] + list(range(2 26)))dftail(n=2)

time 0time 759344921135289s - nb=5000 gain (0716585290640898 0716585290640898 0rarr716585290640898 10)time 38923985946166795s - nb=4581 gain (041594360086768417 04448874994683378 0rarr4448874994683378 10)time 5085379287694195s - nb=4942 gain (05571683533987387 05620376961406324 0rarr5620376961406324 10)time 5121866923020207s - nb=4974 gain (05983975448244626 06052151883090817 0rarr6052151883090817 10)time 5501076360438674s - nb=4991 gain (06380275314306908 06382847383691052 0rarr6382847383691052 10)time 5524899975880544s - nb=4988 gain (06475382003395598 06479497864896859 0rarr6479497864896859 10)time 6245833967660474s - nb=4997 gain (06639308855291576 06639308855291576 0rarr6639308855291576 10)time 6012760238038936s - nb=4997 gain (06712028636672216 06712028636672216 0rarr6712028636672216 10)time 6076252674864918s - nb=4997 gain (06838256469329845 06839490681696653 0rarr6839490681696653 10)time 6111897439143831s - nb=4999 gain (06822851853756178 06823160384634976 0rarr6823160384634976 10)time 5873518026578495s - nb=4997 gain (06900718921309502 06900718921309502 0rarr6900718921309502 10)time 6684070891827105s - nb=4999 gain (06925798323648767 06925798323648767 0rarr6925798323648767 10)time 6735858496876062s - nb=4997 gain (06969017445687994 06969017445687994 0rarr6969017445687994 10)time 6131690155300021s - nb=4999 gain (06960868000205542 06960868000205542 0rarr6960868000205542 10)time 62186773552921295s - nb=4999 gain (07022574175965309 07022574175965309 0rarr7022574175965309 10)time 5907541621836572s - nb=4998 gain (06991010265166325 06991010265166325 0rarr6991010265166325 10)time 631432889332882s - nb=4999 gain (07022368488712789 07022471332339055 0rarr7022471332339055 10)time 5892940837380593s - nb=4998 gain (07070717459272685 07070717459272685 0rarr7070717459272685 10)time 6061792582734597s - nb=4999 gain (07097547179513399 07097547179513399 0rarr7097547179513399 10)time 6094942944771901s - nb=4999 gain (07079858075795616 07080166606674415 0rarr7080166606674415 10)time 6141645954818159s - nb=4999 gain (07118732966524257 07118732966524257 0rarr7118732966524257 10)time 59873731844709255s - nb=4999 gain (07094359027099135 07094359027099135 0rarr7094359027099135 10)time 60718454556808865s - nb=4999 gain (07120892682675833 07120892682675833 0rarr7120892682675833 10) (suite sur la page suivante)

92 Galleries 359

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

time 6133951068150054s - nb=4999 gain (07124903584100222 07124903584100222 0rarr7124903584100222 10)time 6292655432947868s - nb=4999 gain (0713611353936324 0713611353936324 0rarr713611353936324 10)

df = dfsort_values(size)

import matplotlibpyplot as pltf ax = pltsubplots(2 2 figsize=(1410))dfplot(x=size y=time ax=ax[10])dfplot(x=size y=[mks mks mks ave_len] ax=ax[00])dfplot(x=size y=[mks mks mks] ax=ax[01])dfplot(x=size y=[mksmks mksmks] ax=ax[11])ax[00]legend()ax[01]legend()ax[10]legend()ax[11]legend()ax[11]set_ylim([09 11])ax[00]set_title(Raw Gain)ax[01]set_title(Relative Gain)ax[10]set_title(Time)ax[11]set_title(Comparison between MKS)

ltmatplotlibtextText at 0x15a74bf40b8gt

360 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Wikipedia titles uniform longer test

df2 = benchmark([50000])df2tail(n=2)

time 0time 52057980205573585s - nb=50000 gain (06162242515637921 0616305075104518 0rarr616305075104518 10)

df2 = benchmark([50000 100000 200000]) 500000 500000 1000000 2000000 None])rarrtoo long in pythondf2tail(n=2)

time 0time 5251158252780897s - nb=50000 gain (0615225173328998 06153599275825006 0rarr6153599275825006 10)time 1050721302614229s - nb=100000 gain (05836043296652512 05841384772496148 0rarr5841384772496148 10)time 18786111486480695s - nb=200000 gain (05507786166438062 05518801462043321 0rarr5518801462043321 10)

92 Galleries 361

Machine Learning Statistiques et Programmation Version 035930

dfall = pandasconcat([df df2])f ax = pltsubplots(2 2 figsize=(1410))dfallplot(x=size y=time ax=ax[10])dfallplot(x=size y=[mks mks mks ave_len] ax=ax[00])dfallplot(x=size y=[mks mks mks] ax=ax[01])dfallplot(x=size y=[mksmks mksmks] ax=ax[11])ax[00]legend()ax[01]legend()ax[10]legend()ax[11]legend()ax[11]set_ylim([09 11])ax[00]set_title(Raw Gain)ax[01]set_title(Relative Gain)ax[10]set_title(Time)ax[11]set_title(Comparison between MKS)

ltmatplotlibtextText at 0x15a132f8be0gt

362 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Completion profiling

Profiling avec cProfile273 memory_profiler274 pyinstrument275 snakeviz276line_profiler277 ne semble pas plus ecirctre maintenu

matplotlib inlineimport matplotlibpyplot as pltpltstyleuse(ggplot)from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Setup (page 363)ndash Function to profile (page 363)ndash Data (page 364)

bull Standard modules (page 364)ndash cProfile (page 364)

bull Others informations when profiling (page 366)ndash memory_profiler (page 366)

bull Static Visualization (page 368)ndash pyinstrument (page 368)

bull Javascript Visualization (page 369)ndash SnakeViz (page 369)ndash vprof py-spy (page 369)

Setup

Function to profile

from mlstatpynlpcompletion import CompletionTrieNode

def gain_dynamique_moyen_par_mot(queries weights)per = list(zip(weights queries))total = sum(weights) 10res = []trie = CompletionTrieNodebuild([(None q) for _ q in per])trieprecompute_stat()trieupdate_stat_dynamic()wks = [(w p len(w) - triemin_keystroke0(w)[0]) for p w in per]wks_dyn = [(w p len(w) - triemin_dynamic_keystroke(w)[0])

for p w in per]wks_dyn2 = [(w p len(w) - triemin_dynamic_keystroke2(w)[0])

(suite sur la page suivante)

273 httpsdocspythonorg37libraryprofilehtml274 httpspypiorgprojectmemory-profiler275 httpsgithubcomjoerickpyinstrument276 httpsjiffyclubgithubiosnakeviz277 httpsgithubcomrkernline_profiler

92 Galleries 363

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

for p w in per]gain = sum(g p total for w p g in wks)gain_dyn = sum(g p total for w p g in wks_dyn)gain_dyn2 = sum(g p total for w p g in wks_dyn2)ave_length = sum(len(w) p total for p w in per)return gain gain_dyn gain_dyn2 ave_length

Data

from mlstatpydatawikipedia import download_titlesfile_titles = download_titles(country=fr)

len(file_titles)

33

from mlstatpydatawikipedia import enumerate_titleslist_titles = list(sorted(set(_ for _ in enumerate_titles(file_titles) if A lt= _[0] lt=rarrZ)))

import randomsample1000 = randomsample(list_titles 1000)with open(sample1000txt w encoding=utf-8) as f

fwrite(njoin(sample1000))

Standard modules

cProfile

import cProfile io pstats os

def toprofile0(lines)gain_dynamique_moyen_par_mot(lines [10] len(lines))

def doprofile(lines filename)pr = cProfileProfile()prenable()toprofile0(lines)prdisable()s = ioStringIO()ps = pstatsStats(pr stream=s)sort_stats(cumulative)psprint_stats()rem = ospathnormpath(ospathjoin(osgetcwd() ))res = sgetvalue()replace(rem )psdump_stats(filename)return res

364 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

r = doprofile(sample1000 completionprof)print(r)

1311797 function calls in 1865 secondsOrdered by cumulative timencalls tottime percall cumtime percall filenamelineno(function)

1 0000 0000 1865 1865 ltipython-input-7-d2b6d910fdd7gt3(toprofile0)1 0000 0000 1865 1865 ltipython-input-2-684f3e860cf5gt3(gain_

rarrdynamique_moyen_par_mot)1 0241 0241 1232 1232 srcmlstatpynlpcompletionpy415(precompute_

rarrstat)15982 0244 0000 0770 0000 srcmlstatpynlpcompletionpy503(merge_

rarrcompletions)1 0088 0088 0366 0366 srcmlstatpynlpcompletionpy450(update_stat_

rarrdynamic)15982 0307 0000 0314 0000 built-in method builtins__build_class__

1 0194 0194 0220 0220 srcmlstatpynlpcompletionpy203(build)16982 0094 0000 0165 0000 srcmlstatpynlpcompletionpy555(update_

rarrdynamic_minimum_keystroke)36051 0114 0000 0130 0000 srcmlstatpynlpcompletionpy523(ltlistcompgt)37609 0035 0000 0071 0000 built-in method builtinsall16982 0051 0000 0058 0000 srcmlstatpynlpcompletionpy588(second_step)314299 0053 0000 0053 0000 built-in method builtinslen15983 0006 0000 0049 0000 method extend of collectionsdeque

rarrobjects16983 0031 0000 0047 0000 srcmlstatpynlpcompletionpy97(unsorted_iter)15982 0039 0000 0046 0000 srcmlstatpynlpcompletionpy542(update_

rarrminimum_keystroke)16982 0041 0000 0044 0000 srcmlstatpynlpcompletionpy624(init_dynamic_

rarrminimum_keystroke)1001 0028 0000 0043 0000 srcmlstatpynlpcompletionpy132(leaves)

115015 0041 0000 0041 0000 srcmlstatpynlpcompletionpy435(ltgenexprgt)15982 0024 0000 0032 0000 built-in method builtinssorted3000 0031 0000 0031 0000 srcmlstatpynlpcompletionpy257(find)

110110 0027 0000 0027 0000 built-in method builtinshasattr117519 0023 0000 0023 0000 method values of dict objects

1 0001 0001 0017 0017 ltipython-input-2-684f3e860cf5gt10(ltlistcompgt)16982 0015 0000 0017 0000 srcmlstatpynlpcompletionpy20(__init__)47946 0016 0000 0016 0000 method extend of list objects23287 0015 0000 0015 0000 built-in method builtinsmin1000 0002 0000 0015 0000 srcmlstatpynlpcompletionpy321(min_

rarrkeystroke0)1 0001 0001 0013 0013 ltipython-input-2-684f3e860cf5gt13(ltlistcompgt)

50946 0013 0000 0013 0000 method pop of list objects1 0001 0001 0013 0013 ltipython-input-2-684f3e860cf5gt11(ltlistcompgt)

20069 0012 0000 0012 0000 built-in method builtinsmax1000 0002 0000 0012 0000 srcmlstatpynlpcompletionpy382(min_dynamic_

rarrkeystroke2)1000 0002 0000 0012 0000 srcmlstatpynlpcompletionpy352(min_dynamic_

rarrkeystroke)56589 0011 0000 0011 0000 method popleft of collectionsdeque

rarrobjects52034 0011 0000 0011 0000 method append of list objects38608 0009 0000 0009 0000 method append of collectionsdeque

92 Galleries 365

Machine Learning Statistiques et Programmation Version 035930

rarrobjects16982 0008 0000 0008 0000 srcmlstatpynlpcompletionpy517(ltgenexprgt)16981 0007 0000 0007 0000 srcmlstatpynlpcompletionpy54(_add)15982 0007 0000 0007 0000 srcmlstatpynlpcompletionpy511(ltlistcompgt)15982 0007 0000 0007 0000 srcmlstatpynlpcompletionpy508(Fake)31964 0006 0000 0006 0000 method items of dict objects

5 0001 0000 0002 0000 built-in method builtinssum17982 0002 0000 0002 0000 built-in method builtinsisinstance1001 0000 0000 0001 0000 ltipython-input-2-684f3e860cf5gt18(ltgenexprgt)1001 0001 0000 0001 0000 ltipython-input-2-684f3e860cf5gt15(ltgenexprgt)

1 0000 0000 0000 0000 ltipython-input-2-684f3e860cf5gt7(ltlistcompgt)1001 0000 0000 0000 0000 ltipython-input-2-684f3e860cf5gt16(ltgenexprgt)1001 0000 0000 0000 0000 ltipython-input-2-684f3e860cf5gt17(ltgenexprgt)

1 0000 0000 0000 0000 method disable of _lsprofProfilerrarrobjects

Others informations when profiling

memory_profiler

See memory_profiler278 Version 056 is bugged (see 258279)

from memory_profiler import profile __version__load_ext memory_profiler

memit toprofile0(sample1000)

peak memory 41120 MiB increment 1840 MiB

from io import StringIOst = StringIO()profile(stream=st)def toprofile(lines)

gain_dynamique_moyen_par_mot(lines [10] len(lines))toprofile(sample1000)

ERROR Could not find file ltipython-input-11-7512ff5cdee3gtNOTE mprun can only be used on functions defined in physical files and not in therarrIPython environment

file temp_mem_profilepy

from mlstatpynlpcompletion import CompletionTrieNodefrom memory_profiler import profile

profile(precision=4)def gain_dynamique_moyen_par_mot(queries weights)

per = list(zip(weights queries))total = sum(weights) 10

(suite sur la page suivante)

278 httpspypipythonorgpypimemory_profiler041279 httpsgithubcompythonprofilersmemory_profilerissues258

366 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

res = []trie = CompletionTrieNodebuild([(None q) for _ q in per])trieprecompute_stat()trieupdate_stat_dynamic()wks = [(w p len(w) - triemin_keystroke0(w)[0]) for p w in per]wks_dyn = [(w p len(w) - triemin_dynamic_keystroke(w)[0])

for p w in per]wks_dyn2 = [(w p len(w) - triemin_dynamic_keystroke2(w)[0])

for p w in per]gain = sum(g p total for w p g in wks)gain_dyn = sum(g p total for w p g in wks_dyn)gain_dyn2 = sum(g p total for w p g in wks_dyn2)ave_length = sum(len(w) p total for p w in per)return gain gain_dyn gain_dyn2 ave_length

profile(precision=4)def toprofile()

with open(sample1000txt r encoding=utf-8) as flines = [_strip(nr ) for _ in freadlines()]

gain_dynamique_moyen_par_mot(lines [10] len(lines))toprofile()

Overwriting temp_mem_profilepy

import syscmd = sysexecutablefrom pyquickhelperloghelper import run_cmdcmd += -m memory_profiler temp_mem_profilepyout err = run_cmd(cmd wait=True)print(out)

Filename temp_mem_profilepyLine Mem usage Increment Line Contents================================================

5 567930 MiB 567930 MiB profile(precision=4)6 def gain_dynamique_moyen_par_mot(queries weights)7 567930 MiB 00000 MiB per = list(zip(weights queries))8 567930 MiB 00000 MiB total = sum(weights) 109 567930 MiB 00000 MiB res = []

10 633047 MiB 64492 MiB trie = CompletionTrieNodebuild([(None q) for _rarrq in per])

11 710742 MiB 77695 MiB trieprecompute_stat()12 806211 MiB 95469 MiB trieupdate_stat_dynamic()13 807305 MiB 01094 MiB wks = [(w p len(w) - triemin_keystroke0(w)[0])

rarrfor p w in per]14 807930 MiB 00469 MiB wks_dyn = [(w p len(w) - triemin_dynamic_

rarrkeystroke(w)[0])15 807930 MiB 00000 MiB for p w in per]16 808398 MiB 00430 MiB wks_dyn2 = [(w p len(w) - triemin_dynamic_

rarrkeystroke2(w)[0])17 808398 MiB 00000 MiB for p w in per]18 808398 MiB 00000 MiB gain = sum(g p total for w p g in wks)

92 Galleries 367

Machine Learning Statistiques et Programmation Version 035930

19 808398 MiB 00000 MiB gain_dyn = sum(g p total for w p g in wks_rarrdyn)

20 808398 MiB 00000 MiB gain_dyn2 = sum(g p total for w p g in wks_rarrdyn2)

21 808398 MiB 00000 MiB ave_length = sum(len(w) p total for p w inrarrper)

22 808398 MiB 00000 MiB return gain gain_dyn gain_dyn2 ave_length

Filename temp_mem_profilepyLine Mem usage Increment Line Contents================================================

24 565820 MiB 565820 MiB profile(precision=4)25 def toprofile()26 565820 MiB 00000 MiB with open(sample1000txt r

rarrencoding=utf-8) as f27 567930 MiB 00742 MiB lines = [_strip(nr ) for _ in f

rarrreadlines()]28 808398 MiB 240469 MiB gain_dynamique_moyen_par_mot(lines [10]

rarrlen(lines))

Static Visualization

pyinstrument

See pyinstrument280

from pyinstrument import Profiler

profiler = Profiler(use_signal=False)profilerstart()

toprofile0(sample1000)

profilerstop()out = profileroutput_text(unicode=False color=False)print(outreplace( ))

_ _ ____ _ _ _ _ __ Recorded 181734 Samples 1048__ _ _ _ Duration 1802 CPU time 1703 _ v301Program -f pstats completionprof -o completiondot1799 run_code IPythoncoreinteractiveshellpy3288`- 1799 ltmodulegt ltipython-input-18-f16978ea99efgt6`- 1799 toprofile0 ltipython-input-7-d2b6d910fdd7gt3`- 1799 gain_dynamique_moyen_par_mot ltipython-input-2-684f3e860cf5gt3

|- 1251 precompute_stat mlstatpynlpcompletionpy415| |- 0917 merge_completions mlstatpynlpcompletionpy503| | |- 0771 [self]| | `- 0136 ltlistcompgt mlstatpynlpcompletionpy523| |- 0224 [self]| |- 0051 update_minimum_keystroke mlstatpynlpcompletionpy542

(suite sur la page suivante)

280 httpsgithubcomjoerickpyinstrument

368 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

| |- 0037 ltgenexprgt mlstatpynlpcompletionpy435| `- 0021 leaves mlstatpynlpcompletionpy132|- 0289 update_stat_dynamic mlstatpynlpcompletionpy450| |- 0147 update_dynamic_minimum_keystroke mlstatpynlpcompletionpy555| | |- 0100 [self]| | `- 0046 second_step mlstatpynlpcompletionpy588| |- 0084 [self]| |- 0040 init_dynamic_minimum_keystroke mlstatpynlpcompletionpy624| `- 0018 unsorted_iter mlstatpynlpcompletionpy97|- 0204 build mlstatpynlpcompletionpy203| `- 0190 [self]|- 0020 ltlistcompgt ltipython-input-2-684f3e860cf5gt10| `- 0019 min_keystroke0 mlstatpynlpcompletionpy321`- 0018 ltlistcompgt ltipython-input-2-684f3e860cf5gt13

Javascript Visualization

SnakeViz

load_ext snakeviz

Lrsquoinstruction qui suit lance lrsquoexplorateur par deacutefaut avec les donneacutees du profilage

snakeviz toprofile0(sample1000)

from pyquickhelperhelpgen import NbImageNbImage(imagesfunc_infojpg width=400)

vprof py-spy

See vprof281 or py-spy282 The second one outputs a SVG file easy to handle

from vprof import profiler

needs to be run from a file not from a notebook profilerrun(toprofile0 cmh args=(sample1000) host=localhost port=8000)

281 httpsgithubcomnvdvvprof282 httpsgithubcombenfredpy-spy

92 Galleries 369

Machine Learning Statistiques et Programmation Version 035930

from pyquickhelperhelpgen import NbImageNbImage(imagesvprofjpg width=800)

Compleacutetion

Comparaion de plusieurs algorithmes pour impleacutementer un systegraveme de compleacutetion

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Tester des ideacutees (page 371)ndash Meilleur ordre pour a ab abc abcd (page 371)ndash Meilleur ordre pour a ab abc abcd edf edfh (page 371)ndash Influence du poids (page 372)

bull Nouvelle meacutetrique (page 374)ndash Intuition (page 374)

bull Veacuterification (page 375)bull Ajouter une compleacutetion (page 376)bull Wikipedia (page 376)

370 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Tester des ideacutees

Meilleur ordre pour a ab abc abcd

from mlstatpynlpcompletion import CompletionTrieNodeimport itertoolsqueries = [a ab abc abcd]for per in itertoolspermutations(queries)

trie = CompletionTrieNodebuild([(None w) for w in per])gain = sum( len(w) - triemin_keystroke(w)[0] for w in per)print(gain ordre per)

0 ordre (a ab abc abcd)1 ordre (a ab abcd abc)1 ordre (a abc ab abcd)2 ordre (a abc abcd ab)2 ordre (a abcd ab abc)2 ordre (a abcd abc ab)1 ordre (ab a abc abcd)2 ordre (ab a abcd abc)2 ordre (ab abc a abcd)3 ordre (ab abc abcd a)3 ordre (ab abcd a abc)3 ordre (ab abcd abc a)2 ordre (abc a ab abcd)3 ordre (abc a abcd ab)2 ordre (abc ab a abcd)3 ordre (abc ab abcd a)4 ordre (abc abcd a ab)4 ordre (abc abcd ab a)3 ordre (abcd a ab abc)3 ordre (abcd a abc ab)3 ordre (abcd ab a abc)3 ordre (abcd ab abc a)4 ordre (abcd abc a ab)4 ordre (abcd abc ab a)

Meilleur ordre pour a ab abc abcd edf edfh

queries = [a ab abc abcd edf edfh]res = []for per in itertoolspermutations(queries)

trie = CompletionTrieNodebuild([(None w) for w in per])gain = sum( len(w) - triemin_keystroke(w)[0] for w in per)resappend((gain ordre per))

ressort(reverse=True)for r in res[30]

print(r)

92 Galleries 371

Machine Learning Statistiques et Programmation Version 035930

(6 ordre (edfh edf abcd abc ab a))(6 ordre (edfh edf abcd abc a ab))(6 ordre (edfh edf abcd ab abc a))(6 ordre (edfh edf abcd ab a abc))(6 ordre (edfh edf abcd a abc ab))(6 ordre (edfh edf abcd a ab abc))(6 ordre (edfh edf abc abcd ab a))(6 ordre (edfh edf abc abcd a ab))(6 ordre (edf edfh abcd abc ab a))(6 ordre (edf edfh abcd abc a ab))(6 ordre (edf edfh abcd ab abc a))(6 ordre (edf edfh abcd ab a abc))(6 ordre (edf edfh abcd a abc ab))(6 ordre (edf edfh abcd a ab abc))(6 ordre (edf edfh abc abcd ab a))(6 ordre (edf edfh abc abcd a ab))(6 ordre (abcd abc edfh edf ab a))(6 ordre (abcd abc edfh edf a ab))(6 ordre (abcd abc edfh ab edf a))(6 ordre (abcd abc edfh ab a edf))(6 ordre (abcd abc edfh a edf ab))(6 ordre (abcd abc edfh a ab edf))(6 ordre (abcd abc edf edfh ab a))(6 ordre (abcd abc edf edfh a ab))(6 ordre (abcd abc edf ab edfh a))(6 ordre (abcd abc edf ab a edfh))(6 ordre (abcd abc edf a edfh ab))(6 ordre (abcd abc edf a ab edfh))(6 ordre (abcd abc ab edfh edf a))(6 ordre (abcd abc ab edfh a edf))

Influence du poids

queries = [actuellement actualiteacute acte actes]weights = [1 1 1 2]total = sum(weights) 10 len(queries)res = []for per in itertoolspermutations(zip(queries weights))

trie = CompletionTrieNodebuild([(None w) for w p in per])wks = [(w p len(w)-triemin_keystroke(w)[0]) for w p in per]gain = sum( gptotal for w p g in wks)resappend((gain wks))

ressort(reverse=True)for r in res

print(034 - 1format(r[0] | join(s p=11f g=11f _ for _ inrarrr[1])))

192 - actes p=20 g=40 | actuellement p=10 g=100 | acte p=10 g=10 | actualiteacute p=1rarr0 g=50192 - actes p=20 g=40 | actualiteacute p=10 g=70 | acte p=10 g=10 | actuellement p=10rarrg=80

(suite sur la page suivante)

372 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

192 - actes p=20 g=40 | acte p=10 g=20 | actualiteacute p=10 g=60 | actuellement p=10rarrg=80192 - actes p=20 g=40 | actuellement p=10 g=100 | actualiteacute p=10 g=60 | acte p=1rarr0 g=00192 - actes p=20 g=40 | actualiteacute p=10 g=70 | actuellement p=10 g=90 | acte p=10rarrg=00192 - actes p=20 g=40 | acte p=10 g=20 | actuellement p=10 g=90 | actualiteacute p=10rarrg=50184 - actuellement p=10 g=110 | actes p=20 g=30 | actualiteacute p=10 g=60 | acte p=1rarr0 g=00184 - actuellement p=10 g=110 | actes p=20 g=30 | acte p=10 g=10 | actualiteacute p=1rarr0 g=50184 - actualiteacute p=10 g=80 | actes p=20 g=30 | actuellement p=10 g=90 | acte p=10rarrg=00184 - actualiteacute p=10 g=80 | actes p=20 g=30 | acte p=10 g=10 | actuellement p=10rarrg=80184 - acte p=10 g=30 | actes p=20 g=30 | actuellement p=10 g=90 | actualiteacute p=10rarrg=50184 - acte p=10 g=30 | actes p=20 g=30 | actualiteacute p=10 g=60 | actuellement p=10rarrg=80176 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actes p=20 g=20 | acte p=1rarr0 g=00176 - actuellement p=10 g=110 | acte p=10 g=20 | actes p=20 g=20 | actualiteacute p=1rarr0 g=50176 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | actes p=20 g=20 | acte p=1rarr0 g=00176 - actualiteacute p=10 g=80 | acte p=10 g=20 | actes p=20 g=20 | actuellement p=10rarrg=80176 - acte p=10 g=30 | actuellement p=10 g=100 | actes p=20 g=20 | actualiteacute p=1rarr0 g=50176 - acte p=10 g=30 | actualiteacute p=10 g=70 | actes p=20 g=20 | actuellement p=10rarrg=80168 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | acte p=10 g=10 | actes p=2rarr0 g=10168 - actuellement p=10 g=110 | acte p=10 g=20 | actualiteacute p=10 g=60 | actes p=2rarr0 g=10168 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | acte p=10 g=10 | actes p=2rarr0 g=10168 - actualiteacute p=10 g=80 | acte p=10 g=20 | actuellement p=10 g=90 | actes p=20rarrg=10168 - acte p=10 g=30 | actuellement p=10 g=100 | actualiteacute p=10 g=60 | actes p=2rarr0 g=10168 - acte p=10 g=30 | actualiteacute p=10 g=70 | actuellement p=10 g=90 | actes p=20rarrg=10

92 Galleries 373

Machine Learning Statistiques et Programmation Version 035930

Nouvelle meacutetrique

Intuition

def gain_moyen_par_mot(queries weights)total = sum(weights) 10res = []for per in itertoolspermutations(zip(queries weights))

trie = CompletionTrieNodebuild([(None w) for w p in per])wks = [(w p len(w)-triemin_keystroke(w)[0]) for w p in per]gain = sum( gptotal for w p g in wks)resappend((gain wks))

ressort(reverse=True)for i r in enumerate(res)

print(034 - 1format(r[0] | join(s p=11f g=11f _ for _ inrarrr[1])))

if i gt 10print()break

queries = [actuellement actualiteacute actuel]weights = [1 1 1]gain_moyen_par_mot(queries weights)

70 - actuellement p=10 g=110 | actuel p=10 g=40 | actualiteacute p=10 g=6070 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actuel p=10 g=3070 - actuel p=10 g=50 | actuellement p=10 g=100 | actualiteacute p=10 g=6070 - actuel p=10 g=50 | actualiteacute p=10 g=70 | actuellement p=10 g=9070 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | actuel p=10 g=3070 - actualiteacute p=10 g=80 | actuel p=10 g=40 | actuellement p=10 g=90

queries = [actuellement actualiteacute actuel]weights = [1 1 0]gain_moyen_par_mot(queries weights)

90 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actuel p=00 g=3090 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | actuel p=00 g=3085 - actuellement p=10 g=110 | actuel p=00 g=40 | actualiteacute p=10 g=6085 - actualiteacute p=10 g=80 | actuel p=00 g=40 | actuellement p=10 g=9080 - actuel p=00 g=50 | actuellement p=10 g=100 | actualiteacute p=10 g=6080 - actuel p=00 g=50 | actualiteacute p=10 g=70 | actuellement p=10 g=90

queries = [actuellement actualiteacute]weights = [1 1]gain_moyen_par_mot(queries weights)

90 - actuellement p=10 g=110 | actualiteacute p=10 g=7090 - actualiteacute p=10 g=80 | actuellement p=10 g=100

374 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Veacuterification

def gain_dynamique_moyen_par_mot(queries weights permutation=True)total = sum(weights) 10res = []for per in itertoolspermutations(zip(queries weights))

trie = CompletionTrieNodebuild([(None w) for w p in per])trieprecompute_stat()trieupdate_stat_dynamic()wks = [(w p len(w)-triemin_dynamic_keystroke(w)[0]) for w p in per]gain = sum( gptotal for w p g in wks)resappend((gain wks))if not permutation

breakressort(reverse=True)for i r in enumerate(res)

print(034 - 1format(r[0] | join(s p=11f g=11f _ for _ inrarrr[1])))

if i gt 10print()break

Pas de changement

queries = [actuellement actualiteacute actuel]weights = [1 1 0]gain_dynamique_moyen_par_mot(queries weights)

90 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actuel p=00 g=3090 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | actuel p=00 g=3085 - actuellement p=10 g=110 | actuel p=00 g=40 | actualiteacute p=10 g=6085 - actuel p=00 g=50 | actualiteacute p=10 g=70 | actuellement p=10 g=10085 - actualiteacute p=10 g=80 | actuel p=00 g=40 | actuellement p=10 g=9080 - actuel p=00 g=50 | actuellement p=10 g=100 | actualiteacute p=10 g=60

Changements

queries = [actuellement actualiteacute actuel]weights = [1 1 1]gain_dynamique_moyen_par_mot(queries weights)

7333 - actuel p=10 g=50 | actualiteacute p=10 g=70 | actuellement p=10 g=10070 - actuellement p=10 g=110 | actuel p=10 g=40 | actualiteacute p=10 g=6070 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actuel p=10 g=3070 - actuel p=10 g=50 | actuellement p=10 g=100 | actualiteacute p=10 g=6070 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | actuel p=10 g=3070 - actualiteacute p=10 g=80 | actuel p=10 g=40 | actuellement p=10 g=90

gain_moyen_par_mot(queries weights)

70 - actuellement p=10 g=110 | actuel p=10 g=40 | actualiteacute p=10 g=6070 - actuellement p=10 g=110 | actualiteacute p=10 g=70 | actuel p=10 g=30

(suite sur la page suivante)

92 Galleries 375

Machine Learning Statistiques et Programmation Version 035930

(suite de la page preacuteceacutedente)

70 - actuel p=10 g=50 | actuellement p=10 g=100 | actualiteacute p=10 g=6070 - actuel p=10 g=50 | actualiteacute p=10 g=70 | actuellement p=10 g=9070 - actualiteacute p=10 g=80 | actuellement p=10 g=100 | actuel p=10 g=3070 - actualiteacute p=10 g=80 | actuel p=10 g=40 | actuellement p=10 g=90

Ajouter une compleacutetion

queries = [maceacuterer maline machinerie machinerie infernale machinerierarrinfernalissime

machine artistique machine automatiquemachine chaplin machine intelligente machine learning]

weights = [1] len(queries)gain_dynamique_moyen_par_mot(queries weights permutation=False)

101 - maceacuterer p=10 g=60 | maline p=10 g=40 | machinerie p=10 g=70 | machinerierarrinfernale p=10 g=160 | machinerie infernalissime p=10 g=200 | machine artistiquerarrp=10 g=120 | machine automatique p=10 g=120 | machine chaplin p=10 g=70 |rarrmachine intelligente p=10 g=110 | machine learning p=10 g=60

queries = [machine] + queriesweights = [1] len(queries)weights[queriesindex(machine)] = 00gain_dynamique_moyen_par_mot(queries weights permutation=False)

123 - machine p=00 g=60 | maceacuterer p=10 g=50 | maline p=10 g=30 | machinerie p=10rarrg=80 | machinerie infernale p=10 g=170 | machinerie infernalissime p=10 g=210 |rarrmachine artistique p=10 g=150 | machine automatique p=10 g=150 | machine chaplinrarrp=10 g=110 | machine intelligente p=10 g=160 | machine learning p=10 g=120

Wikipedia

bull PageCount283

bull dump284

Compleacutetion Simple

Evaluation drsquoune meacutetrique pour un systegraveme de compleacutetion sur quelques cas simples

from jyquickhelper import add_notebook_menuadd_notebook_menu()

bull Meacutetrique Mrsquo (page 377)

283 httpsdumpswikimediaorgotherpagecounts-raw284 httpsdumpswikimediaorgbackup-indexhtml

376 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

Meacutetrique Mrsquo

from mlstatpynlp import CompletionSystemmots = [po po rouge po vert po orange port port blanc port bleurarrport rouge]ens = CompletionSystem(mots)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

n=0 M=1 | pon=1 M=2 | po rougen=2 M=3 | po vertn=3 M=4 | po orangen=4 M=3 | portn=5 M=4 | port blancn=6 M=5 | port bleun=7 M=6 | port rouge

mots_rev = motscopy()mots_rev[4] mots_rev[-1] = mots_rev[-1] mots_rev[4]ens = CompletionSystem(mots_rev)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

n=0 M=1 | pon=1 M=2 | po rougen=2 M=3 | po vertn=3 M=4 | po orangen=4 M=3 | port rougen=5 M=4 | port blancn=6 M=5 | port bleun=7 M=3 | port

mots_court = [m[4] for m in mots if mstartswith(port) and len(m) gt 4]ens = CompletionSystem(mots_court)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

n=0 M=1 | blancn=1 M=2 | bleun=2 M=3 | rouge

mots_court = [m for m in mots if m = port]ens = CompletionSystem(mots_court)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

92 Galleries 377

Machine Learning Statistiques et Programmation Version 035930

n=0 M=1 | pon=1 M=2 | po rougen=2 M=3 | po vertn=3 M=4 | po orangen=4 M=3 | port blancn=5 M=4 | port bleun=6 M=5 | port rouge

couleur = [blanc vert orange rouge noir noire blanche]key = portesmots = [port port rouge port vert port orange pore pour]motsappend(key)mots += [key + + c for c in couleur]ens = CompletionSystem(mots)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

n=0 M=1 | portn=1 M=2 | port rougen=2 M=3 | port vertn=3 M=4 | port orangen=4 M=4 | poren=5 M=4 | pourn=6 M=3 | portesn=7 M=4 | portes blancn=8 M=5 | portes vertn=9 M=6 | portes orangen=10 M=6 | portes rougen=11 M=6 | portes noirn=12 M=7 | portes noiren=13 M=5 | portes blanche

mots2 = [m for m in mots if m = portes]ens = CompletionSystem(mots2)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

n=0 M=1 | portn=1 M=2 | port rougen=2 M=3 | port vertn=3 M=4 | port orangen=4 M=4 | poren=5 M=4 | pourn=6 M=3 | portes blancn=7 M=4 | portes vertn=8 M=5 | portes orangen=9 M=6 | portes rougen=10 M=6 | portes noirn=11 M=7 | portes noiren=12 M=4 | portes blanche

378 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

mots3 = mots2copy()mots3insert(1 portes)ens = CompletionSystem(mots3)enscompute_metrics()for el in ens

print(n=1 M=0 | 2format(elmks1 elweight elvalue))

n=0 M=1 | portn=1 M=2 | portesn=2 M=3 | port rougen=3 M=4 | port vertn=4 M=4 | port orangen=5 M=4 | poren=6 M=4 | pourn=7 M=3 | portes blancn=8 M=4 | portes vertn=9 M=5 | portes orangen=10 M=5 | portes rougen=11 M=5 | portes noirn=12 M=6 | portes noiren=13 M=4 | portes blanche

Completion Trie andmetrics (page 355)

Evaluation of a completion system on wikpedia pages

Completion profiling(page 363)

Profiling avec cProfile memory_profiler pyinstrument snakeviz

Compleacutetion(page 370)

Comparaion de plusieurs algorithmes pour impleacutementer un systegraveme decompleacutetion

Compleacutetion Simple(page 376)

Evaluation drsquoune meacutetrique pour un systegraveme de compleacutetion sur quelquescas simples

92 Galleries 379

Machine Learning Statistiques et Programmation Version 035930

Notebooks Coverage

Report on last executions100 2022-05-30

380 Chapter 9 Galleries

Machine Learning Statistiques et Programmation Version 035930

index coverageexetime

lastexecution

name title successtime nbcells

nbruns

nbvalid

0 100 0128 2022-05-30

dsgardenclassification_multipleipynb(page 326)

Classification multiple(page 326)

True 3270 2 2 2

1 100 1057502022-05-30

dsgardencorrelation_non_lineaireipynb(page 282)

Correacutelations nonlineacuteaires (page 282)

True 10893141 41 41

2 100 254842022-05-30

dsgardendiscret_gradientipynb(page 313)

Le gradient et le discret(page 313)

True 2863522 22 22

3 100 9101 2022-05-30

dsgardenfile_dattente_exipynb(page 328)

File drsquoattente unexemple simple(page 328)

True 122148 8 8

4 100 6688 2022-05-30

dsgardenquantile_regression_exampleipynb(page 125)

Reacutegression quantileillustreacutee (page 125)

True 9845 10 10 10

5 100 205002022-05-30

dsgardenregression_lineaireipynb(page 107)

Reacutegression lineacuteaire(page 107)

True 2365541 41 41

6 100 2670542022-05-30

dsgardensplit_train_testipynb(page 267)

Reacutepartir en basedrsquoapprentissage et detest (page 267)

True 27022029 29 29

7 100 451632022-05-30

imagesegment_detectionipynb(page 261)

Deacutetection de segmentsdans une image(page 261)

True 4832817 17 17

8 100 8300 2022-05-30

metricpvalues_examplesipynb(page 235)

p-values (page 235) True 1164011 11 11

9 100 103502022-05-30

metricroc_exampleipynb(page 332)

ROC (page 332) True 1350021 21 21

10 100 168982022-05-30

mlbenchmarkipynb(page 339)

Benchmark (page 339) True 202269 9 9

11 100 578262022-05-30

mllogreg_voronoiipynb(page 161)

Voronoiuml et reacutegressionlogistique (page 161)

True 6112464 64 64

12 100 8253 2022-05-30

mlmf_acpipynb(page 342)

Factorisation et matriceet ACP (page 342)

True 1138114 14 14

13 100 3167802022-05-30

mlneural_treeipynb(page 87)

Un arbre de deacutecisionen reacuteseaux de neurones(page 87)

True 32004362 62 62

14 100 110512022-05-30

mlpiecewise_linear_regressionipynb(page 129)

Reacutegression lineacuteaire parmorceaux (page 129)

True 142137 7 7

15 100 2835952022-05-30

mlregression_no_inversionipynb(page 147)

Reacutegression sansinversion (page 147)

True 28670317 17 17

16 100 4432 2022-05-30

mlreseau_neuronesipynb(page 192)

Reacuteseaux de neurones(page 192)

True 7580 5 5 5

17 100 1492502022-05-30

mlsurvivalipynb(page 197)

Analyse de survie(page 197)

True 15233215 15 15

18 100 9986 2022-05-30

mlvaleurs_manquantes_mfipynb(page 346)

Valeurs manquanteset factorisation dematrices (page 346)

True 1310035 35 35

19 100 967422022-05-30

nlpcompletion_profilingipynb(page 363)

Completion profiling(page 363)

True 9985720 20 20

20 100 0914 2022-05-30

nlpcompletion_simpleipynb(page 376)

Compleacutetion Simple(page 376)

True 4006 9 9 9

21 100 2270 2022-05-30

nlpcompletion_trieipynb(page 370)

Compleacutetion (page 370) True 5394 15 15 15

22 100 6436272022-05-11

nlpcompletion_trie_longipynb(page 355)

Completion Trie andmetrics (page 355)

True 64778116 16 16

92 Galleries 381

Machine Learning Statistiques et Programmation Version 035930

382 Chapter 9 Galleries

CHAPTER 10

API

101 Machine Learning

bull Meacutetriques (page 383)bull Tree and neural networks (page 384)

1011 Meacutetriques

mlstatpymlMlGridBenchMark (self name datasets clog = None fLOG = ltfunction noLOG at 0x7f0cecf745e0gtpath_to_images = iquestiquest cache_file = None progressbar = None graphx = None graphy = None params)

The class tests a list of model over a list of datasetsmlstatpymlROC (self y_true = None y_score = None sample_weight = None df = None)

Helper to draw a ROC285 curvemlstatpymlvoronoi_estimation_from_lr (L B C = None D = None cl = 0 qr = True max_iter = Noneverbose = False)

Determines a Voronoi diagram close to a convex partition defined by a logistic regression in n classesM isin Mnd a row matrix (L1 Ln) Every border between two classes i and j is defined by ⟨Li X⟩ +B = ⟨Lj X⟩+BThe function looks for a set of points from which the Voronoi diagram can be inferred It is done througha linear regression with norm L1 See Reacutegression logistique diagramme de Voronoiuml k-Means (page 155)

285 httpsfrwikipediaorgwikiCourbe_ROC

383

Machine Learning Statistiques et Programmation Version 035930

1012 Tree and neural networks

mlstatpyml_neural_tree_nodeNeuralTreeNode (self weights bias = None activation = iquestsigmoidiquest nodeid= -1 tag = None)

One node in a neural networkmlstatpymlneural_treeNeuralTreeNet (self dim empty = True)

Node ensemble

102 Optimisation

bull Gradient (page 384)

1021 Gradient

mlstatpyoptimSGDOptimizer (self coef learning_rate_init = 01 lr_schedule = iquestinvscalingiquest momentum = 09power_t = 05 early_th = None min_threshold = None max_threshold = None l1 = 00 l2 = 00)

Stochastic gradient descent optimizer with momentum

103 Traitement du langage naturel

bull Compleacutetion (page 384)bull Normalisation (page 386)

1031 Compleacutetion

mlstatpynlpCompletionElement (self value weight = 10 disp = None)Definition of an element in a completion system it contains the following members

bull value the completionbull weight a weight or a position we assume a completion with a lower weight is shown at a lower

positionbull disp display string (no impact on the algorithm)bull mks0 value of minimum keystrokebull mks0_ length of the prefix to obtain mks0bull mks1 value of dynamic minimum keystrokebull mks1_ length of the prefix to obtain mks1bull mks2 value of modified dynamic minimum keystrokebull mks2_ length of the prefix to obtain mks2

empty_prefix ()return an instance filled with an empty prefix

init_metrics (self position completions = None)

384 Chapter 10 API

Machine Learning Statistiques et Programmation Version 035930

initiate the metricsstr_all_completions (self maxn = 10 use_precompute = True)

builds a string with all completions for all prefixes along the paths this is only available ifparameter completions was used when calling method update_metrics

str_mks (self )return a string with metric information

str_mks0 (self )return a string with metric information

update_metrics (self prefix position improved delta completions = None iteration = -1)update the metrics

mlstatpynlpCompletionSystem (self elements)define a completion systemcompare_with_trie (self delta = 08 fLOG = ltfunction noLOG at 0x7f0cecf745e0gt)

Compares the results with the other implementationcompute_metrics (self ffilter = None delta = 08 details = False fLOG = ltfunction noLOG at0x7f0cecf745e0gt)

Computes the metric for the completion itselfenumerate_test_metric (self qset)

Evaluates the completion set on a set of queries the function returns a list ofCompletionElement with the three metrics M M prime Mrdquo for these particular queries

find (self value is_sorted = False)Not very efficient finds an item in a the list

items (self )Iterates on (evalue e)

sort_values (self )sort the elements by value

sort_weight (self )Sorts the elements by value

test_metric (self qset)Evaluates the completion set on a set of queries the function returns a dictionary with theaggregated metrics and some statistics about them

to_dict (self )Returns a dictionary

tuples (self )Iterates on (eweight evalue)

103 Traitement du langage naturel 385

Machine Learning Statistiques et Programmation Version 035930

1032 Normalisation

mlstatpydatawikipedianormalize_wiki_text (text)Normalizes a text such as a wikipedia title

mlstatpynlpremove_diacritics (input_str)remove diacritics

104 Source de donneacutees

bull Wikipeacutedia (page 386)

1041 Wikipeacutedia

mlstatpydatawikipediadownload_dump (country name folder = iquestiquest unzip = True timeout = -1 overwrite =False fLOG = ltfunction noLOG at 0x7f0cecf745e0gt)

Downloads wikipedia dumps from dumpswikimediaorgfrwikilatest286mlstatpydatawikipediadownload_pageviews (dt folder = iquestiquest unzip = True timeout = -1 overwrite = FalsefLOG = ltfunction noLOG at 0x7f0cecf745e0gt)

Downloads wikipedia pagacount for a precise date (up to the hours) the url follows the pattern

httpsdumpswikimediaorgotherpageviewsYY-mpagecounts-Ymd-H0000rarrgz

mlstatpydatawikipediadownload_titles (country folder = iquestiquest unzip = True timeout = -1 overwrite =False fLOG = ltfunction noLOG at 0x7f0cecf745e0gt)

Downloads wikipedia titles from dumpswikimediaorgfrwikilatestlatest-all-titles-in-ns0gz287mlstatpydatawikipediaenumerate_titles (filename norm = True encoding = iquestutf8iquest)

Enumerates titles from a filemlstatpydatawikipediadownload_dump (country name folder = iquestiquest unzip = True timeout = -1 overwrite =False fLOG = ltfunction noLOG at 0x7f0cecf745e0gt)

Downloads wikipedia dumps from dumpswikimediaorgfrwikilatest288

105 Graphes

bull Distance (page 387)

286 httpsdumpswikimediaorgfrwikilatest287 httpsdumpswikimediaorgfrwikilatestlatest-all-titles-in-ns0gz288 httpsdumpswikimediaorgfrwikilatest

386 Chapter 10 API

Machine Learning Statistiques et Programmation Version 035930

1051 Distance

mlstatpygraphGraphDistance (self edge_list vertex_label = None add_loop = False weight_vertex = 10weight_edge = 10)

Defines a graph to compute a distance between two graphsdistance_matching_graphs_paths (self graph2 function_mach_vertices = Nonefunction_match_edges = None noClean = False store = None use_min = True weight_vertex =10 weight_edge = 10 verbose = 0 fLOG = ltbuilt-in function printgt)

Computes an alignment between two graphs

106 Image

bull Conversion (page 387)bull Images aleacuteatoires (page 387)bull Segments (page 387)

1061 Conversion

mlstatpyimagedetection_segmentconvert_array2PIL (img mode = None)Convertit une image donneacutee sous la forme drsquoun array au format numpyarray289

mlstatpyimagedetection_segmentconvert_PIL2array (img)Convertit une image donneacutee sous la forme drsquoune image Pillow290 au format numpyarray291

1062 Images aleacuteatoires

mlstatpyimagedetection_segmentrandom_noise_image (size ratio = 01)Construit une image blanche de taille size noircit aleacuteatoirement ratio x nb pixels pixels

mlstatpyimagedetection_segmentrandom_segment_image (image lmin = 01 lmax = 10 noise = 001density = 10)

Ajoute un segment aleacuteatoire agrave une image Geacutenegravere des points le long drsquoun segment aleacuteatoire

1063 Segments

mlstatpyimagedetection_segmentdetect_segments (image proba_bin = 00625 cos_angle =09807852804032304 seuil_nfa = 1e-05 seuil_norme = 2 angle = 01308996938995747 stop = -1 verbose =False)

Deacutetecte les segments dans une imagemlstatpyimagedetection_segmentplot_segments (image segments outfile = None color = (255 0 0))

Dessine les segments produits par la fonction detect_segments

289 httpsdocsscipyorgdocnumpyreferencegeneratednumpyarrayhtml290 httpspillowreadthedocsio291 httpsdocsscipyorgdocnumpyreferencegeneratednumpyarrayhtml

106 Image 387

Machine Learning Statistiques et Programmation Version 035930

388 Chapter 10 API

CHAPTER 11

Index

389

Machine Learning Statistiques et Programmation Version 035930

390 Chapter 11 Index

Bibliography

[Arthur2007] k-means++ the advantages of careful seeding (2007) Arthur D Vassilvitskii S Proceedings ofthe eighteenth annual ACM-SIAM symposium on Discrete algorithms Society for Industrial and AppliedMathematics Philadelphia PA USA pp 1027ndash1035 PDF7

[Balakrishnan1996] Comparative performance of the FSCL neural net and K-means algorithm for market segmentation(1996) P V Sundar Balakrishnan Martha Cooper Varghese S Jacob Phillip A Lewis European Journalof Operation Research volume 93 pages 346-357

[Bahmani2012] Scalable K-Means++ (2012) Bahman Bahmani Benjamin Moseley Andrea Vattani Ravi KumarSergei Vassilvitskii Proceedings of the VLDB Endowment (PVLDB) Vol 5 No 7 pp 622-633 (2012)PDF8 arXiv9

[Cheung2003] klowast-Means A new generalized k-means clustering algorithm (2003) Yiu-Ming Cheung PatternRecognition Letters volume 24 2883-2893

[Davies1979] A cluster Separation Measure (1979) D L Davies D W Bouldin IEEE Trans Pattern Analysis andMachine Intelligence (PAMI) volume 1(2)

[Goodman1954] Measures of associations for cross-validations (1954) L Goodman W Kruskal J Am Stat Assocvolume 49 pages 732-764

[Herbin2001] Estimation of the number of clusters and influence zones (2001) M Herbin N Bonnet P VautrotPattern Recognition Letters volume 22 pages 1557-1568

[Kothari1999] On finding the number of clusters (1999) Ravi Kothari Dax Pitts Pattern Recognition Letters volume20 pages 405-416

[Liu2003] Strip line detection and thinning by RPCL-based local PCA (2003) Zhi-Yong Liu Kai-Chun Chiu Lei XuPattern Recognition Letters volume 24 pages 2335-2344

[Silverman1986] Density Estimation for Statistics and Data Analysis (1986) B W Silverman Monographs onStatistics and Applied Probability Chapman and Hall London volume 26

[Xu1993] Rival penalized competitive learning for clustering analysis rbf net and curve detection (1993) L Xu AKrzyzak E Oja IEEE Trans Neural Networks volume (4) pages 636-649

[Biernacki2001] Assessing a Mixture Model for Clustering with the Integrated Completed Likelihood (2001) CBiernacki G Deleux G Govaert IEEE Transactions on Image Analysis and Machine Intelligence volume22(7) pages 719-725

7 httpilpubsstanfordedu809077812006-13pdf8 httptheorystanfordedu~sergeipapersvldb12-kmparpdf9 httpsarxivorgabs12036402

391

Machine Learning Statistiques et Programmation Version 035930

[Celeux1985] The SEM algorithm a probabilistic teacher algorithm derived from the EM algorithm for the mixtureproblem (1985) G Celeux J Diebolt Computational Statistics Quarterly Volume 2(1) pages 73-82

[Celeux1985b] On stochastic version of the EM algorithm (1985) Gilles Celeux Didier Chauveau Jean DieboltRapport de recherche de lrsquoINRIA n 2514

[Dempster1977] Maximum-Likelihood from incomplete data via the EM algorithm (1977) A P Dempster N MLaird D B Rubin Journal of Royal Statistical Society B volume 39 pages 1-38

[Figueiredo2002] Unsupervised learning of finite mixture models (2002) M A T Figueiredo A K Jain IEEETransactions on Pattern Analysis and Machine Intelligence volume 24(3) pages 381-396

[ZhangB2004] Competitive EM algorithm for finite mixture models (2004) Baibo Zhang Changshui Zhang XingYi Pattern Recognition volume 37 pages 131-144

[Kohonen1982] Self-organized formation of topologically correct feature maps (1982) T Kohonen Biol Cybernvolume (43) pages 59-69

[Kohonen1997] Self-Organizing Map (1997) T Kohonen Springer[Lo1991] On the rate of convergence in topology preserving neural networks (1991) Z Lo B Bavarian Biological

Cybernetics volume 63 pages 55-63[Rougier] Dynamic Self-Organising Map16 Nicolas P Rougier and Yann Boniface[Wu2004] Clustering of the self-organizing map using a clustering validity index based on inter-cluster and intra-cluster

density (2004) Sitao Wu Tommy W S Chow Pattern Recognition volume (37) pages 175-188[Bottou1991] Une approche theacuteorique de lrsquoapprentissage connexionniste Application agrave la reconnaissance de la

parole Leacuteon BottouThegravese de lrsquoUniversiteacute de Paris Sud Centre drsquoOrsay

[Broyden1967] Quasi-Newton methods and their application to function minimization (1967) C G Broyden MathComput pages 21-368

[Bishop1995] Neural networks for pattern recognition (1995) C M Bishop Oxford University Press[Cottrel1995] Neural modeling for time series a statistical stepwise methode for weight elimination (1995) M Cottrel

B Girard M Mangeas C Muller IEEE Transaction On Neural Networks[Cybenko1989] Approximation by superpositions of a sigmoidal function (1989) G Cybenko Mathematics of

Controls Signals and Systems p 303-314[Davidon1959] Variable metric method for minimization (1959) C W Davidon AEC Research and Development

Report ANL-5990[Driancourt1996] Optimisation par descente de gradient stochastique de systegravemes modulaires combinant reacuteseaux de

neurones et programmation dynamique Application agrave la reconnaissance de la parole (1996) X DriancourtThegravese de lrsquoUniversiteacute de Paris Sud Centre drsquoOrsay

[Fletcher1963] A rapidly convergent descent method for minimization (1963) R Fletcher M J D Powell ComputerJournal 6 pages 163-168

[Fletcher1993] An overview of Unconstrained Optimization (1993) R Fletcher Numerical Analysis Report NA149[Kullback1951] On information and sufficiency (1951) S Kullback R A Leibler Ann Math Stat 22 pages 79-86[LeCun1985] Une proceacutedure drsquoapprentissage pour reacuteseaux agrave seuil asymeacutetrique (1985) Yann Le Cun Cognita p 599-

604[Moreacute1977] The Levenberg-Marquardt algorithm Implementation and theory (1977) J J Moreacute Proceedings of the

1977 Dundee Conference on Numerical Analysis G A Watson ed Lecture Notes in Mathematics vol630 Springer-Verlag Berlin pages 105-116

[Rumelhart1986] Learning internal representations by error propagation (1986) D E Rumelhart G E Hinton R JWilliams in Parallel distributed processing explorations in the microstructures of cohniyionn MIT PressCambridge

16 httpwwwlabrifrpersonrougiercodingarticlearticlehtml

392 Bibliography

Machine Learning Statistiques et Programmation Version 035930

[Saporta1990] Probabiliteacutes analyse des donneacutees et statistique (1990) Gilbert Saporta Editions Technip[Song1997] Self-organizing algorithm of robust PCA based on single layer NN (1997) Song Wang Shaowei Xia

Proceedings of the 4th International Conference Document Analysis and Recognition[Beckmann1990] The R$^$-tree an efficient and robust access method for points and rectangles N Beckmann H

P Kriegel P Schneider B Seeger Proceedings of SIGMOD conference Atlantic City pages 322-331[Berchtold1996] The X-Tree An index structure for high dimension data S Berchtold D A Keim H P Kriegel

Proceedings of the 22nd Internation Conference on Very Large Databases Bombay India[Farago1993] Fast Nearest-Neighbor Search in Dissimilarity Spaces A Farago T Linder G Lugosi IEEE

Transactions on Pattern Analysis and Machine Intelligence volume 15(9) pages 957-962[Guttman1984] R-Trees A Dynamic Index Structure for Spatial Searching A Guttman Proceedings ACM SIGMOD

pages 47-57[Moreno2003] A modification of the LAESA algorithm for approximated k-NN classification Francisco Moreno-Seco

Luisa Mico Jose Oncina Pattern Recognition Letters volumne 24 pages 47-53[Rico-Juan2003] Comparison of AESA and LAESA search algorithms using string and tree-edit-distances J R Rico-

Juan L Mico Pattern Recognition Letters volume 24 pages 1417-1426[Sellis1987] The R+tree - a Dynamic Index for Multi-Dimensional Objects T Sellis N Roussopoulos C Faloutos

Proceedings of the 13th VLDB conference pages 507-518[Acara2011] Scalable tensorfactorizations for incomplete data Evrim Acara Daniel MDunlavyc Tamara GKoldab

Morten Moslashrupd Chemometrics and Intelligent Laboratory Systems Volume 106 Issue 1 15 March 2011Pages 41-56 or ArXiv 1005219788

[Boutsidis2008] SVD-based initialization A head start for nonnegative matrix factorization Christos Boutsidis andEfstratios Gallopoulos Pattern Recognition 41(4) 1350-1362 2008

[Gilles2014] The Why and How of Nonnegative Matrix Factorization Nicolas Gillis ArXiv 1401522689

[Gupta2010] Additive Non-negative Matrix Factorization for Missing Data Mithun Das Gupta ArXiv 1007038090

[Koenker2017] Quantile Regression 40 years on109 Roger Koenker (2017)[Chen2014] Fast Iteratively Reweighted Least Squares Algorithms for Analysis-Based Sparsity Reconstruction110

Chen Chen Junzhou Huang Lei He Hongsheng Li[Acharya2016] Fast Algorithms for Segmented Regression145 Jayadev Acharya Ilias Diakonikolas Jerry Li Ludwig

Schmidt ICML 2016146

[Cai2020] Online Sufficient Dimension Reduction Through Sliced Inverse Regression147 Zhanrui Cai Runze LiLiping Zhu

[Nie2016] Online PCA with Optimal Regret148 Jiazhong Nie Wojciech Kotlowski Manfred K Warmuth[Preda2010] The NIPALS Algorithm for Missing Functional Data149 Cristian Preda Gilbert Saporta Mohamed Hadj

Mbarek Revue roumaine de matheacutematiques pures et appliqueacutees 2010 55 (4) pp315-326[Char] Regularization and Penalized Regression154 Arthur Charpentier[Bampoulidis2017] Does Online Evaluation Correspond to Offline Evaluation in Query Auto Completion (2017)

Alexandros Bampoulidis Joatildeo PalottiMihai LupuJon BrasseyAllan Hanbury ECIR 2017 Advances inInformation Retrieval

88 httpsarxivorgpdf10052197pdf89 httpsarxivorgabs1401522690 httpsarxivorgabs10070380

109 httpwwweconuiucedu~rogercoursesNIPEhandoutsQR40pdf110 httpsarxivorgabs14115057145 httpsarxivorgabs160703990146 httpsicmlcc2016indexhtml147 httpwwwjmlrorgpapersvolume2118-56718-567pdf148 httpjmlrorgpapersvolume1715-32015-320pdf149 httpshalarchives-ouvertesfrhal-01125940document154 httpsfreakonometricshypothesesorg58240

Bibliography 393

Machine Learning Statistiques et Programmation Version 035930

[Sevenster2013] Algorithmic and user study of an autocompletion algorithm on a large medical vocabulary (2013)Merlijn Sevenster Rob van Ommering Yuechen Qian Journal of Biomedical Informatics 45 pages 107-119

[Agarwal2005] Generalization Bounds for the Area Under the ROC Curve (2005) Shivani Agarwal Thore GraepelRalf Herbich Sariel Har-Peled Dan Roth Journal of Machine Learning Research volume 6 pages 393-425

[Saporta1990] Probabiliteacutes analyse des donneacutees et statistique (1990) Gilbert Saporta Editions Technip[Damerau1964] A technique for computer detection and correction of spelling errors (1964) F J Damerau Commun

ACM volume 7(3) pages 171-176[Kripasundar1996] Generating edit distance to incorporate domain information (1996) V Kripasunder G Seni R K

Srihari CEDARSUNY[Levenstein1966] Binary codes capables of correctiong deletions insertions and reversals (1966) V I Levenstein

Soviet Physics Doklady volume 10(8) pages 707-710[Seni1996] Generalizing edit distance to incorporate domain information handwritten text recognition as a case study

(1996) Giovanni Seni V Kripasundar Rohini K Srihari Pattern Recognition volume 29 pages 405-414[Waard1995] An optimised minimal edit distance for hand-written word recognition (1995) W P de Waard Pattern

Recognition Letters volume 1995 pages 1091-1096[Wagner1974] The string-to-string correction problem (1974) R A Wagner M Fisher Journal of the ACM volume

21 pages 168-178[Blondel2004] A measure of similarity between graph vertices Vincent Blondel Anahi Gajardo Maureen Heymans

Pierre Senellart Paul Van Dooren arxiv0407061238

[Faure2000] Preacutecis de recherche opeacuterationnelle 5iegraveme eacutedition Robert Faure Bernard Lemaire Christophe PicouleauDunod

[Gourieacuteroux1983] Analyse des seacuteries temporelles Christian Gourieacuteroux Alain Monfort Editions Economica[Saporta2006] Probabiliteacutes analyse des donneacutees et statistique Gilbert Saporta Editions Technip

238 httpsarxivorgabscs0407061

394 Bibliography

  • Clustering
    • k-means
      • Principe
        • Homogeacuteneacuteiteacute des dimensions
          • Ameacuteliorations de linitialisation
            • K-means++
            • K-means||
              • Estimation de probabiliteacutes
              • Seacutelection du nombre de classes
                • Critegravere de qualiteacute
                • Maxima de la fonction densiteacute
                • Deacutecroissance du nombre de classes
                  • Extension des nueacutees dynamiques
                    • Classes elliptiques
                    • Rival Penalized Competitive Learning (RPCL)
                    • RPCL-based local PCA
                    • Frequency Sensitive Competitive Learning (FSCL)
                      • k-means norme L1
                      • Bibliographie
                        • Meacutelange de lois normales
                          • Algorithme EM
                          • Competitive EM algorithm
                          • Bibliographie
                            • Carte de Kohonen
                              • Principe
                              • Carte de Kohonen et classification
                              • Autres utilisation des cartes de Kohenen
                              • Bibliographie
                                  • Non lineacuteaire
                                    • Reacuteseaux de neurones
                                      • Deacutefinition des reacuteseaux de neurones multi-couches
                                        • Un neurone
                                        • Une couche de neurones
                                        • Un reacuteseau de neurones le perceptron
                                          • La reacutegression
                                          • La classification
                                          • Deacutemonstration du theacuteoregraveme de la densiteacute des reacuteseaux de neurones
                                            • Formulation du problegraveme de la reacutegression
                                            • Densiteacute des reacuteseaux de neurones
                                              • Descente de gradient
                                                • Algorithme et convergence
                                                • Calcul du gradient ou reacutetropropagation
                                                  • Apprentissage dun reacuteseau de neurones
                                                    • Apprentissage avec gradient global
                                                      • Meacutethodes du premier ordre
                                                      • Meacutethodes du second ordre
                                                        • Apprentissage avec gradient stochastique
                                                          • Classification
                                                            • Vraisemblance dun eacutechantillon de variable suivant une loi multinomiale
                                                            • Problegraveme de classification pour les reacuteseaux de neurones
                                                            • Reacuteseau de neurones adeacutequat
                                                              • Prolongements
                                                                • Base dapprentissage et base de test
                                                                • Fonction de transfert agrave base radiale
                                                                • Poids partageacutes
                                                                • Deacuteriveacutee par rapport aux entreacutees
                                                                • Reacutegularisation ou Decay
                                                                • Problegravemes de gradients
                                                                • Seacutelection de connexions
                                                                  • Analyse en composantes principales (ACP) et Auto Encoders
                                                                    • Problegraveme de lanalyse en composantes principales
                                                                    • Reacutesolution dune ACP avec un reacuteseau de neurones diabolo
                                                                    • Calcul de valeurs propres et de vecteurs propres
                                                                    • Analyse en Composantes Principales (ACP)
                                                                      • Bibliographie
                                                                        • Classification agrave laide des plus proches voisins
                                                                          • Principe
                                                                          • B+ tree
                                                                          • R-tree ou Rectangular Tree
                                                                          • LAESA
                                                                          • Reacutesultats theacuteoriques
                                                                          • Impleacutementation
                                                                          • Bilbiographie
                                                                            • Liens entre factorisation de matrices ACP k-means
                                                                              • Factorisation de matrices et rang
                                                                              • Quelques cas simples
                                                                              • Intuition geacuteomeacutetrique
                                                                              • k-means
                                                                              • Quelques reacutesultats
                                                                              • Prolongements
                                                                                • Factorisation non-neacutegative
                                                                                • Preacutediction
                                                                                • Norme
                                                                                • Sparsiteacute
                                                                                • Valeurs manquantes
                                                                                • Interpreacutetation
                                                                                • NTF
                                                                                  • Bibliographie
                                                                                    • Un arbre de deacutecision en reacuteseaux de neurones
                                                                                      • Un exemple sur Iris
                                                                                      • Mecircme exemple en reacuteseau de neurones
                                                                                      • Intermegravede de simples neurones de reacutegression
                                                                                      • Intermegravede de simples neurones de classification
                                                                                      • Apprentissage du reacuteseau de neurones
                                                                                      • Autre architecture
                                                                                          • Reacutegression lineacuteaire
                                                                                            • Reacutegression lineacuteaire
                                                                                              • Un cas simple
                                                                                              • Evolution de R2
                                                                                              • Deux variables correacuteleacutees
                                                                                              • Indicatrices
                                                                                              • Reacutegression lineacuteaire par morceaux
                                                                                                • Reacutegression quantile
                                                                                                  • Meacutediane et valeur absolue
                                                                                                  • Reacutegression quantile
                                                                                                  • Reacutesolution dune reacutegression quantile
                                                                                                  • Quantile et optimisation
                                                                                                  • Reacutegression quantile pour un quantile p quelconque
                                                                                                  • Reacutesolution dune reacutegression quantile pour un quantile p quelconque
                                                                                                  • Notebook
                                                                                                    • Reacutegression quantile illustreacutee
                                                                                                      • Un jeu de donneacutees non symeacutetrique
                                                                                                      • Reacutegression lineacuteaire et reacutegression quantile
                                                                                                      • Diffeacuterents quantiles
                                                                                                          • Bilbiographie
                                                                                                            • Reacutegression lineacuteaire par morceaux
                                                                                                              • Exploration
                                                                                                                • Problegraveme et regreacutession lineacuteaire dans un espace agrave une dimension
                                                                                                                  • Reacutegression lineacuteaire par morceaux
                                                                                                                    • Des donneacutees artificielles
                                                                                                                    • Quelques exemples avec un arbre de deacutecision
                                                                                                                    • Quelques exemples avec un KBinsDiscretizer
                                                                                                                    • Arbre de deacutecision optimiseacute pour la reacutegression lineacuteaire
                                                                                                                        • Impleacutementation naiumlve dune reacutegression lineacuteaire par morceaux
                                                                                                                        • Aparteacute sur la continuiteacute de la reacutegression lineacuteaire par morceaux
                                                                                                                        • Reacutegression lineacuteaire et correacutelation
                                                                                                                        • Ideacutee de lalgorithme
                                                                                                                        • Un peu plus en deacutetail dans lalgorithme
                                                                                                                          • Synthegravese matheacutematique
                                                                                                                          • Streaming
                                                                                                                            • Streaming Gram-Schmidt
                                                                                                                            • Streaming Linear Regression
                                                                                                                            • Streaming Linear Regression version Gram-Schmidt
                                                                                                                              • Digressions
                                                                                                                              • Notebooks
                                                                                                                                • Reacutegression sans inversion
                                                                                                                                  • Streaming versions
                                                                                                                                      • Impleacutementations
                                                                                                                                      • Bilbiographie
                                                                                                                                        • Normalisation des coefficients
                                                                                                                                          • Reacuteduction de dimension
                                                                                                                                          • Peacutenalisation L1 et L2
                                                                                                                                          • Bibliographie
                                                                                                                                              • Reacutegression logistique
                                                                                                                                                • Reacutegression logistique diagramme de Voronoiuml k-Means
                                                                                                                                                  • Diagramme de Voronoiuml
                                                                                                                                                  • Reacutegression logistique
                                                                                                                                                  • Diagramme de Voronoiuml et partition convexe
                                                                                                                                                  • Reacutegression logistique et partition convexe
                                                                                                                                                  • Voronoiuml et reacutegression logistique
                                                                                                                                                  • Notebooks
                                                                                                                                                    • Voronoiuml et reacutegression logistique
                                                                                                                                                      • Reacutegression logistique
                                                                                                                                                      • Quelques diagramme de Voronoiuml
                                                                                                                                                      • Un diagramme de Voronoiuml proche
                                                                                                                                                      • Reacutegression logistique dans un quadrillage
                                                                                                                                                      • Reacutegression logistique autour dun cercle
                                                                                                                                                      • Pousser les classes sur la boule uniteacute
                                                                                                                                                      • Cas presque hexagonal
                                                                                                                                                      • Diagramme de Voronoiuml approcheacute
                                                                                                                                                        • Reacutegression logistique par morceaux arbres de deacutecision
                                                                                                                                                          • Parallegravele entre un neurone et une reacutegression logistique
                                                                                                                                                          • Principe dun arbre de deacutecision
                                                                                                                                                          • Construction dun pseudo arbre
                                                                                                                                                          • Aparteacute matheacutematique
                                                                                                                                                          • Approche EM et reacutegression logistique
                                                                                                                                                          • Lien vers les reacuteseaux de neurones
                                                                                                                                                          • Plan orthogonal
                                                                                                                                                          • Interpreacutetabiliteacute
                                                                                                                                                          • Bibliographie
                                                                                                                                                            • Reacuteseaux de neurones
                                                                                                                                                            • Analyse de survie
                                                                                                                                                              • Lien avec le machine learning
                                                                                                                                                              • Courbe de Kaplan-Meier
                                                                                                                                                              • Reacutegression de Cox
                                                                                                                                                              • Notebooks
                                                                                                                                                                • Analyse de survie
                                                                                                                                                                  • Quelques donneacutees
                                                                                                                                                                  • Reacutegression de Cox
                                                                                                                                                                      • Liens articles
                                                                                                                                                                      • Modules
                                                                                                                                                                          • NLP
                                                                                                                                                                            • Compleacutetion
                                                                                                                                                                              • Formalisation
                                                                                                                                                                                • Problegraveme doptimisation
                                                                                                                                                                                • Ensemble des compleacutetions
                                                                                                                                                                                • Gain
                                                                                                                                                                                  • Fausses ideacutees reccedilues
                                                                                                                                                                                    • Il faut trier les compleacutetions par freacutequence deacutecroissante
                                                                                                                                                                                    • Il faut placer les compleacutetions courtes avant
                                                                                                                                                                                    • Il faut montrer toutes les compleacutetions
                                                                                                                                                                                    • Et si le poids de chaque compleacutetion est uniforme
                                                                                                                                                                                      • Nouvelle meacutetrique
                                                                                                                                                                                        • Intuitions
                                                                                                                                                                                        • Formalisation
                                                                                                                                                                                        • Quelques reacutesultats
                                                                                                                                                                                        • Deacutefinition avanceacutee
                                                                                                                                                                                        • Questions
                                                                                                                                                                                          • Proprieacuteteacutes matheacutematiques
                                                                                                                                                                                            • Calcul pour une compleacutetion
                                                                                                                                                                                            • Calcul pour une requecircte en dehors
                                                                                                                                                                                            • Compleacutetions emboicircteacutees
                                                                                                                                                                                            • Listes tronqueacutees de compleacutetions
                                                                                                                                                                                              • Problegraveme doptimisation
                                                                                                                                                                                                • Enonceacute 1
                                                                                                                                                                                                • Enonceacute 2
                                                                                                                                                                                                • Une ideacutee
                                                                                                                                                                                                  • Impleacutementation
                                                                                                                                                                                                    • Notion de trie
                                                                                                                                                                                                    • Algorithme eacuteleacutegant
                                                                                                                                                                                                      • Digressions
                                                                                                                                                                                                        • Synonymes Contexte
                                                                                                                                                                                                        • Source
                                                                                                                                                                                                        • Fonction de gain
                                                                                                                                                                                                        • Minuscules majuscules
                                                                                                                                                                                                        • Suppression de caractegraveres
                                                                                                                                                                                                        • Coucirct dun caractegravere
                                                                                                                                                                                                        • Compleacutetion partielle
                                                                                                                                                                                                        • Utilisateurs
                                                                                                                                                                                                        • Revenir en arriegravere
                                                                                                                                                                                                          • Meacutetriques
                                                                                                                                                                                                            • Courbe ROC
                                                                                                                                                                                                              • Deacutefinitions
                                                                                                                                                                                                              • Aire sous la courbe
                                                                                                                                                                                                                • Expression
                                                                                                                                                                                                                • Intervalles de confiance
                                                                                                                                                                                                                  • Intervalles de confiance sur la courbe
                                                                                                                                                                                                                    • Construction de la courbe ROC
                                                                                                                                                                                                                    • Meacutethode boostrap
                                                                                                                                                                                                                    • Aire sous la courbe
                                                                                                                                                                                                                      • Distribution des scores mauvais et bons
                                                                                                                                                                                                                      • Variantes
                                                                                                                                                                                                                        • Taux de lecture ou de reconnaissance
                                                                                                                                                                                                                          • Classification multi-classe
                                                                                                                                                                                                                          • Exemple
                                                                                                                                                                                                                            • Confidence Interval and p-Value
                                                                                                                                                                                                                              • Introduction
                                                                                                                                                                                                                              • p-value
                                                                                                                                                                                                                              • Significant difference between samples mean
                                                                                                                                                                                                                              • Application on binomial variables
                                                                                                                                                                                                                              • Estimate a p-value by using the distribution function
                                                                                                                                                                                                                              • Correlated variables
                                                                                                                                                                                                                              • Multiple comparisons problem
                                                                                                                                                                                                                              • Algorithm Expectation-Maximization
                                                                                                                                                                                                                              • Notebooks
                                                                                                                                                                                                                                • p-values
                                                                                                                                                                                                                                  • p-value table
                                                                                                                                                                                                                                  • p-values in 2D
                                                                                                                                                                                                                                  • p-value ratio
                                                                                                                                                                                                                                  • p-values and EM
                                                                                                                                                                                                                                  • p-value and heavy tail
                                                                                                                                                                                                                                      • Bibliographie
                                                                                                                                                                                                                                          • Algorithmes
                                                                                                                                                                                                                                            • Distance deacutedition
                                                                                                                                                                                                                                              • Deacutefinition et proprieacuteteacutes
                                                                                                                                                                                                                                                • Deacutefinition
                                                                                                                                                                                                                                                • Proprieacuteteacutes
                                                                                                                                                                                                                                                  • Factorisation des calculs
                                                                                                                                                                                                                                                  • Extension de la distance deacutedition
                                                                                                                                                                                                                                                  • Apprentissage dune distance deacutedition
                                                                                                                                                                                                                                                  • Bibliographie
                                                                                                                                                                                                                                                    • Distance between two graphs
                                                                                                                                                                                                                                                      • Definitions
                                                                                                                                                                                                                                                      • Problem
                                                                                                                                                                                                                                                      • First approach
                                                                                                                                                                                                                                                        • Step 1 edit distance
                                                                                                                                                                                                                                                        • Step 2 Kruskal kind (bijection on paths)
                                                                                                                                                                                                                                                        • Step 3 Matching
                                                                                                                                                                                                                                                        • Step 4 Kruskal kind the return (bijection on edges and vertices)
                                                                                                                                                                                                                                                        • Step 5 Merging the two graphs
                                                                                                                                                                                                                                                          • Distance between graphs
                                                                                                                                                                                                                                                          • Second approach faster
                                                                                                                                                                                                                                                          • Bibliography
                                                                                                                                                                                                                                                            • Deacutetection de segments
                                                                                                                                                                                                                                                              • Lideacutee
                                                                                                                                                                                                                                                              • Illustration
                                                                                                                                                                                                                                                                • Deacutetection de segments dans une image
                                                                                                                                                                                                                                                                  • Une image aleacuteatoire
                                                                                                                                                                                                                                                                  • Gradient
                                                                                                                                                                                                                                                                  • Deacutetection de segments
                                                                                                                                                                                                                                                                  • Deacutetection de segments sur une image
                                                                                                                                                                                                                                                                      • Explications
                                                                                                                                                                                                                                                                        • Bibliographie
                                                                                                                                                                                                                                                                          • Peacutereacutegrinations
                                                                                                                                                                                                                                                                            • Reacutepartir en base dapprentissage et de test
                                                                                                                                                                                                                                                                              • Reacutepartition naiumlve
                                                                                                                                                                                                                                                                              • Reacutepartition stratifieacutee
                                                                                                                                                                                                                                                                              • Streaming splitting
                                                                                                                                                                                                                                                                              • Streaming distribueacute
                                                                                                                                                                                                                                                                                • Correacutelations non lineacuteaires
                                                                                                                                                                                                                                                                                  • Un exemple
                                                                                                                                                                                                                                                                                  • Un peu de theacuteorie
                                                                                                                                                                                                                                                                                  • Veacuterifications
                                                                                                                                                                                                                                                                                  • Overfitting
                                                                                                                                                                                                                                                                                  • Correacutelations de variables cateacutegorielles
                                                                                                                                                                                                                                                                                  • Maximal information coefficient
                                                                                                                                                                                                                                                                                    • File dattente un petit exemple
                                                                                                                                                                                                                                                                                      • Petite histoire
                                                                                                                                                                                                                                                                                      • Un peu de theacuteorie
                                                                                                                                                                                                                                                                                        • File dattente cas MM1
                                                                                                                                                                                                                                                                                        • File dattente cas MMS
                                                                                                                                                                                                                                                                                        • Retour aux ampoules
                                                                                                                                                                                                                                                                                        • Application numeacuterique
                                                                                                                                                                                                                                                                                          • Programme informatique
                                                                                                                                                                                                                                                                                          • Bibliographie
                                                                                                                                                                                                                                                                                            • Optimisation avec donneacutees aleacuteatoires
                                                                                                                                                                                                                                                                                              • Un problegraveme simple
                                                                                                                                                                                                                                                                                              • Modeacutelisation de la demande
                                                                                                                                                                                                                                                                                              • Variations saisonniegraveres et prolongations
                                                                                                                                                                                                                                                                                              • Bibliographie
                                                                                                                                                                                                                                                                                                • Le gradient et le discret
                                                                                                                                                                                                                                                                                                  • Un petit problegraveme simple
                                                                                                                                                                                                                                                                                                  • Multiplication des observations
                                                                                                                                                                                                                                                                                                  • Introduire du bruit
                                                                                                                                                                                                                                                                                                  • Comparaisons de plusieurs modegraveles
                                                                                                                                                                                                                                                                                                  • Avec une ACP
                                                                                                                                                                                                                                                                                                  • Base dapprentissage et de test
                                                                                                                                                                                                                                                                                                  • Petite explication
                                                                                                                                                                                                                                                                                                      • Galleries
                                                                                                                                                                                                                                                                                                        • Gallery of examples
                                                                                                                                                                                                                                                                                                          • Arbre dindeacutecision
                                                                                                                                                                                                                                                                                                            • Un cas simple et un cas compliqueacute
                                                                                                                                                                                                                                                                                                              • Seuil de deacutecision
                                                                                                                                                                                                                                                                                                                • Galleries
                                                                                                                                                                                                                                                                                                                  • Le petit coin des data scientists
                                                                                                                                                                                                                                                                                                                    • Classification multiple
                                                                                                                                                                                                                                                                                                                      • Deacutebut de lhistoire
                                                                                                                                                                                                                                                                                                                        • Confusions
                                                                                                                                                                                                                                                                                                                        • Clustering
                                                                                                                                                                                                                                                                                                                          • Mise en pratique
                                                                                                                                                                                                                                                                                                                            • File dattente un exemple simple
                                                                                                                                                                                                                                                                                                                              • Images
                                                                                                                                                                                                                                                                                                                              • Meacutetriques
                                                                                                                                                                                                                                                                                                                                • ROC
                                                                                                                                                                                                                                                                                                                                  • Iris datasets
                                                                                                                                                                                                                                                                                                                                  • ROC with scikit-learn
                                                                                                                                                                                                                                                                                                                                  • ROC - TPR FPR
                                                                                                                                                                                                                                                                                                                                  • ROC - score distribution
                                                                                                                                                                                                                                                                                                                                  • ROC - recall precision
                                                                                                                                                                                                                                                                                                                                      • Machine Learning
                                                                                                                                                                                                                                                                                                                                        • Benchmark
                                                                                                                                                                                                                                                                                                                                          • Petit bench sur le clustering
                                                                                                                                                                                                                                                                                                                                            • Deacutefinition du bench
                                                                                                                                                                                                                                                                                                                                            • Lancer le bench
                                                                                                                                                                                                                                                                                                                                            • Reacutecupeacuterer les reacutesultats
                                                                                                                                                                                                                                                                                                                                            • Dessin Graphs
                                                                                                                                                                                                                                                                                                                                                • Factorisation et matrice et ACP
                                                                                                                                                                                                                                                                                                                                                  • Factorisation de matrices
                                                                                                                                                                                                                                                                                                                                                  • ACP analyse en composantes principales
                                                                                                                                                                                                                                                                                                                                                    • Valeurs manquantes et factorisation de matrices
                                                                                                                                                                                                                                                                                                                                                      • Matrice agrave coefficients aleacuteatoires
                                                                                                                                                                                                                                                                                                                                                      • Matrice avec des vecteurs colonnes correacuteleacutes
                                                                                                                                                                                                                                                                                                                                                      • Matrice identiteacute
                                                                                                                                                                                                                                                                                                                                                      • Matrice identiteacute et repreacutesentation spatiale
                                                                                                                                                                                                                                                                                                                                                          • NLP - Natural Language Processing
                                                                                                                                                                                                                                                                                                                                                            • Completion Trie and metrics
                                                                                                                                                                                                                                                                                                                                                              • Wikipedia titles uniform
                                                                                                                                                                                                                                                                                                                                                              • Reduce the alphabet size
                                                                                                                                                                                                                                                                                                                                                              • Wikipedia titles uniform longer test
                                                                                                                                                                                                                                                                                                                                                                • Completion profiling
                                                                                                                                                                                                                                                                                                                                                                  • Setup
                                                                                                                                                                                                                                                                                                                                                                    • Function to profile
                                                                                                                                                                                                                                                                                                                                                                    • Data
                                                                                                                                                                                                                                                                                                                                                                      • Standard modules
                                                                                                                                                                                                                                                                                                                                                                        • cProfile
                                                                                                                                                                                                                                                                                                                                                                          • Others informations when profiling
                                                                                                                                                                                                                                                                                                                                                                            • memory_profiler
                                                                                                                                                                                                                                                                                                                                                                              • Static Visualization
                                                                                                                                                                                                                                                                                                                                                                                • pyinstrument
                                                                                                                                                                                                                                                                                                                                                                                  • Javascript Visualization
                                                                                                                                                                                                                                                                                                                                                                                    • SnakeViz
                                                                                                                                                                                                                                                                                                                                                                                    • vprof py-spy
                                                                                                                                                                                                                                                                                                                                                                                        • Compleacutetion
                                                                                                                                                                                                                                                                                                                                                                                          • Tester des ideacutees
                                                                                                                                                                                                                                                                                                                                                                                            • Meilleur ordre pour a ab abc abcd
                                                                                                                                                                                                                                                                                                                                                                                            • Meilleur ordre pour a ab abc abcd edf edfh
                                                                                                                                                                                                                                                                                                                                                                                            • Influence du poids
                                                                                                                                                                                                                                                                                                                                                                                              • Nouvelle meacutetrique
                                                                                                                                                                                                                                                                                                                                                                                                • Intuition
                                                                                                                                                                                                                                                                                                                                                                                                  • Veacuterification
                                                                                                                                                                                                                                                                                                                                                                                                  • Ajouter une compleacutetion
                                                                                                                                                                                                                                                                                                                                                                                                  • Wikipedia
                                                                                                                                                                                                                                                                                                                                                                                                    • Compleacutetion Simple
                                                                                                                                                                                                                                                                                                                                                                                                      • Meacutetrique M
                                                                                                                                                                                                                                                                                                                                                                                                        • Notebooks Coverage
                                                                                                                                                                                                                                                                                                                                                                                                          • API
                                                                                                                                                                                                                                                                                                                                                                                                            • Machine Learning
                                                                                                                                                                                                                                                                                                                                                                                                              • Meacutetriques
                                                                                                                                                                                                                                                                                                                                                                                                              • Tree and neural networks
                                                                                                                                                                                                                                                                                                                                                                                                                • Optimisation
                                                                                                                                                                                                                                                                                                                                                                                                                  • Gradient
                                                                                                                                                                                                                                                                                                                                                                                                                    • Traitement du langage naturel
                                                                                                                                                                                                                                                                                                                                                                                                                      • Compleacutetion
                                                                                                                                                                                                                                                                                                                                                                                                                      • Normalisation
                                                                                                                                                                                                                                                                                                                                                                                                                        • Source de donneacutees
                                                                                                                                                                                                                                                                                                                                                                                                                          • Wikipeacutedia
                                                                                                                                                                                                                                                                                                                                                                                                                            • Graphes
                                                                                                                                                                                                                                                                                                                                                                                                                              • Distance
                                                                                                                                                                                                                                                                                                                                                                                                                                • Image
                                                                                                                                                                                                                                                                                                                                                                                                                                  • Conversion
                                                                                                                                                                                                                                                                                                                                                                                                                                  • Images aleacuteatoires
                                                                                                                                                                                                                                                                                                                                                                                                                                  • Segments
                                                                                                                                                                                                                                                                                                                                                                                                                                      • Index
                                                                                                                                                                                                                                                                                                                                                                                                                                      • Bibliography
Page 4: Machine Learning, Statistiques et Programmation
Page 5: Machine Learning, Statistiques et Programmation
Page 6: Machine Learning, Statistiques et Programmation
Page 7: Machine Learning, Statistiques et Programmation
Page 8: Machine Learning, Statistiques et Programmation
Page 9: Machine Learning, Statistiques et Programmation
Page 10: Machine Learning, Statistiques et Programmation
Page 11: Machine Learning, Statistiques et Programmation
Page 12: Machine Learning, Statistiques et Programmation
Page 13: Machine Learning, Statistiques et Programmation
Page 14: Machine Learning, Statistiques et Programmation
Page 15: Machine Learning, Statistiques et Programmation
Page 16: Machine Learning, Statistiques et Programmation
Page 17: Machine Learning, Statistiques et Programmation
Page 18: Machine Learning, Statistiques et Programmation
Page 19: Machine Learning, Statistiques et Programmation
Page 20: Machine Learning, Statistiques et Programmation
Page 21: Machine Learning, Statistiques et Programmation
Page 22: Machine Learning, Statistiques et Programmation
Page 23: Machine Learning, Statistiques et Programmation
Page 24: Machine Learning, Statistiques et Programmation
Page 25: Machine Learning, Statistiques et Programmation
Page 26: Machine Learning, Statistiques et Programmation
Page 27: Machine Learning, Statistiques et Programmation
Page 28: Machine Learning, Statistiques et Programmation
Page 29: Machine Learning, Statistiques et Programmation
Page 30: Machine Learning, Statistiques et Programmation
Page 31: Machine Learning, Statistiques et Programmation
Page 32: Machine Learning, Statistiques et Programmation
Page 33: Machine Learning, Statistiques et Programmation
Page 34: Machine Learning, Statistiques et Programmation
Page 35: Machine Learning, Statistiques et Programmation
Page 36: Machine Learning, Statistiques et Programmation
Page 37: Machine Learning, Statistiques et Programmation
Page 38: Machine Learning, Statistiques et Programmation
Page 39: Machine Learning, Statistiques et Programmation
Page 40: Machine Learning, Statistiques et Programmation
Page 41: Machine Learning, Statistiques et Programmation
Page 42: Machine Learning, Statistiques et Programmation
Page 43: Machine Learning, Statistiques et Programmation
Page 44: Machine Learning, Statistiques et Programmation
Page 45: Machine Learning, Statistiques et Programmation
Page 46: Machine Learning, Statistiques et Programmation
Page 47: Machine Learning, Statistiques et Programmation
Page 48: Machine Learning, Statistiques et Programmation
Page 49: Machine Learning, Statistiques et Programmation
Page 50: Machine Learning, Statistiques et Programmation
Page 51: Machine Learning, Statistiques et Programmation
Page 52: Machine Learning, Statistiques et Programmation
Page 53: Machine Learning, Statistiques et Programmation
Page 54: Machine Learning, Statistiques et Programmation
Page 55: Machine Learning, Statistiques et Programmation
Page 56: Machine Learning, Statistiques et Programmation
Page 57: Machine Learning, Statistiques et Programmation
Page 58: Machine Learning, Statistiques et Programmation
Page 59: Machine Learning, Statistiques et Programmation
Page 60: Machine Learning, Statistiques et Programmation
Page 61: Machine Learning, Statistiques et Programmation
Page 62: Machine Learning, Statistiques et Programmation
Page 63: Machine Learning, Statistiques et Programmation
Page 64: Machine Learning, Statistiques et Programmation
Page 65: Machine Learning, Statistiques et Programmation
Page 66: Machine Learning, Statistiques et Programmation
Page 67: Machine Learning, Statistiques et Programmation
Page 68: Machine Learning, Statistiques et Programmation
Page 69: Machine Learning, Statistiques et Programmation
Page 70: Machine Learning, Statistiques et Programmation
Page 71: Machine Learning, Statistiques et Programmation
Page 72: Machine Learning, Statistiques et Programmation
Page 73: Machine Learning, Statistiques et Programmation
Page 74: Machine Learning, Statistiques et Programmation
Page 75: Machine Learning, Statistiques et Programmation
Page 76: Machine Learning, Statistiques et Programmation
Page 77: Machine Learning, Statistiques et Programmation
Page 78: Machine Learning, Statistiques et Programmation
Page 79: Machine Learning, Statistiques et Programmation
Page 80: Machine Learning, Statistiques et Programmation
Page 81: Machine Learning, Statistiques et Programmation
Page 82: Machine Learning, Statistiques et Programmation
Page 83: Machine Learning, Statistiques et Programmation
Page 84: Machine Learning, Statistiques et Programmation
Page 85: Machine Learning, Statistiques et Programmation
Page 86: Machine Learning, Statistiques et Programmation
Page 87: Machine Learning, Statistiques et Programmation
Page 88: Machine Learning, Statistiques et Programmation
Page 89: Machine Learning, Statistiques et Programmation
Page 90: Machine Learning, Statistiques et Programmation
Page 91: Machine Learning, Statistiques et Programmation
Page 92: Machine Learning, Statistiques et Programmation
Page 93: Machine Learning, Statistiques et Programmation
Page 94: Machine Learning, Statistiques et Programmation
Page 95: Machine Learning, Statistiques et Programmation
Page 96: Machine Learning, Statistiques et Programmation
Page 97: Machine Learning, Statistiques et Programmation
Page 98: Machine Learning, Statistiques et Programmation
Page 99: Machine Learning, Statistiques et Programmation
Page 100: Machine Learning, Statistiques et Programmation
Page 101: Machine Learning, Statistiques et Programmation
Page 102: Machine Learning, Statistiques et Programmation
Page 103: Machine Learning, Statistiques et Programmation
Page 104: Machine Learning, Statistiques et Programmation
Page 105: Machine Learning, Statistiques et Programmation
Page 106: Machine Learning, Statistiques et Programmation
Page 107: Machine Learning, Statistiques et Programmation
Page 108: Machine Learning, Statistiques et Programmation
Page 109: Machine Learning, Statistiques et Programmation
Page 110: Machine Learning, Statistiques et Programmation
Page 111: Machine Learning, Statistiques et Programmation
Page 112: Machine Learning, Statistiques et Programmation
Page 113: Machine Learning, Statistiques et Programmation
Page 114: Machine Learning, Statistiques et Programmation
Page 115: Machine Learning, Statistiques et Programmation
Page 116: Machine Learning, Statistiques et Programmation
Page 117: Machine Learning, Statistiques et Programmation
Page 118: Machine Learning, Statistiques et Programmation
Page 119: Machine Learning, Statistiques et Programmation
Page 120: Machine Learning, Statistiques et Programmation
Page 121: Machine Learning, Statistiques et Programmation
Page 122: Machine Learning, Statistiques et Programmation
Page 123: Machine Learning, Statistiques et Programmation
Page 124: Machine Learning, Statistiques et Programmation
Page 125: Machine Learning, Statistiques et Programmation
Page 126: Machine Learning, Statistiques et Programmation
Page 127: Machine Learning, Statistiques et Programmation
Page 128: Machine Learning, Statistiques et Programmation
Page 129: Machine Learning, Statistiques et Programmation
Page 130: Machine Learning, Statistiques et Programmation
Page 131: Machine Learning, Statistiques et Programmation
Page 132: Machine Learning, Statistiques et Programmation
Page 133: Machine Learning, Statistiques et Programmation
Page 134: Machine Learning, Statistiques et Programmation
Page 135: Machine Learning, Statistiques et Programmation
Page 136: Machine Learning, Statistiques et Programmation
Page 137: Machine Learning, Statistiques et Programmation
Page 138: Machine Learning, Statistiques et Programmation
Page 139: Machine Learning, Statistiques et Programmation
Page 140: Machine Learning, Statistiques et Programmation
Page 141: Machine Learning, Statistiques et Programmation
Page 142: Machine Learning, Statistiques et Programmation
Page 143: Machine Learning, Statistiques et Programmation
Page 144: Machine Learning, Statistiques et Programmation
Page 145: Machine Learning, Statistiques et Programmation
Page 146: Machine Learning, Statistiques et Programmation
Page 147: Machine Learning, Statistiques et Programmation
Page 148: Machine Learning, Statistiques et Programmation
Page 149: Machine Learning, Statistiques et Programmation
Page 150: Machine Learning, Statistiques et Programmation
Page 151: Machine Learning, Statistiques et Programmation
Page 152: Machine Learning, Statistiques et Programmation
Page 153: Machine Learning, Statistiques et Programmation
Page 154: Machine Learning, Statistiques et Programmation
Page 155: Machine Learning, Statistiques et Programmation
Page 156: Machine Learning, Statistiques et Programmation
Page 157: Machine Learning, Statistiques et Programmation
Page 158: Machine Learning, Statistiques et Programmation
Page 159: Machine Learning, Statistiques et Programmation
Page 160: Machine Learning, Statistiques et Programmation
Page 161: Machine Learning, Statistiques et Programmation
Page 162: Machine Learning, Statistiques et Programmation
Page 163: Machine Learning, Statistiques et Programmation
Page 164: Machine Learning, Statistiques et Programmation
Page 165: Machine Learning, Statistiques et Programmation
Page 166: Machine Learning, Statistiques et Programmation
Page 167: Machine Learning, Statistiques et Programmation
Page 168: Machine Learning, Statistiques et Programmation
Page 169: Machine Learning, Statistiques et Programmation
Page 170: Machine Learning, Statistiques et Programmation
Page 171: Machine Learning, Statistiques et Programmation
Page 172: Machine Learning, Statistiques et Programmation
Page 173: Machine Learning, Statistiques et Programmation
Page 174: Machine Learning, Statistiques et Programmation
Page 175: Machine Learning, Statistiques et Programmation
Page 176: Machine Learning, Statistiques et Programmation
Page 177: Machine Learning, Statistiques et Programmation
Page 178: Machine Learning, Statistiques et Programmation
Page 179: Machine Learning, Statistiques et Programmation
Page 180: Machine Learning, Statistiques et Programmation
Page 181: Machine Learning, Statistiques et Programmation
Page 182: Machine Learning, Statistiques et Programmation
Page 183: Machine Learning, Statistiques et Programmation
Page 184: Machine Learning, Statistiques et Programmation
Page 185: Machine Learning, Statistiques et Programmation
Page 186: Machine Learning, Statistiques et Programmation
Page 187: Machine Learning, Statistiques et Programmation
Page 188: Machine Learning, Statistiques et Programmation
Page 189: Machine Learning, Statistiques et Programmation
Page 190: Machine Learning, Statistiques et Programmation
Page 191: Machine Learning, Statistiques et Programmation
Page 192: Machine Learning, Statistiques et Programmation
Page 193: Machine Learning, Statistiques et Programmation
Page 194: Machine Learning, Statistiques et Programmation
Page 195: Machine Learning, Statistiques et Programmation
Page 196: Machine Learning, Statistiques et Programmation
Page 197: Machine Learning, Statistiques et Programmation
Page 198: Machine Learning, Statistiques et Programmation
Page 199: Machine Learning, Statistiques et Programmation
Page 200: Machine Learning, Statistiques et Programmation
Page 201: Machine Learning, Statistiques et Programmation
Page 202: Machine Learning, Statistiques et Programmation
Page 203: Machine Learning, Statistiques et Programmation
Page 204: Machine Learning, Statistiques et Programmation
Page 205: Machine Learning, Statistiques et Programmation
Page 206: Machine Learning, Statistiques et Programmation
Page 207: Machine Learning, Statistiques et Programmation
Page 208: Machine Learning, Statistiques et Programmation
Page 209: Machine Learning, Statistiques et Programmation
Page 210: Machine Learning, Statistiques et Programmation
Page 211: Machine Learning, Statistiques et Programmation
Page 212: Machine Learning, Statistiques et Programmation
Page 213: Machine Learning, Statistiques et Programmation
Page 214: Machine Learning, Statistiques et Programmation
Page 215: Machine Learning, Statistiques et Programmation
Page 216: Machine Learning, Statistiques et Programmation
Page 217: Machine Learning, Statistiques et Programmation
Page 218: Machine Learning, Statistiques et Programmation
Page 219: Machine Learning, Statistiques et Programmation
Page 220: Machine Learning, Statistiques et Programmation
Page 221: Machine Learning, Statistiques et Programmation
Page 222: Machine Learning, Statistiques et Programmation
Page 223: Machine Learning, Statistiques et Programmation
Page 224: Machine Learning, Statistiques et Programmation
Page 225: Machine Learning, Statistiques et Programmation
Page 226: Machine Learning, Statistiques et Programmation
Page 227: Machine Learning, Statistiques et Programmation
Page 228: Machine Learning, Statistiques et Programmation
Page 229: Machine Learning, Statistiques et Programmation
Page 230: Machine Learning, Statistiques et Programmation
Page 231: Machine Learning, Statistiques et Programmation
Page 232: Machine Learning, Statistiques et Programmation
Page 233: Machine Learning, Statistiques et Programmation
Page 234: Machine Learning, Statistiques et Programmation
Page 235: Machine Learning, Statistiques et Programmation
Page 236: Machine Learning, Statistiques et Programmation
Page 237: Machine Learning, Statistiques et Programmation
Page 238: Machine Learning, Statistiques et Programmation
Page 239: Machine Learning, Statistiques et Programmation
Page 240: Machine Learning, Statistiques et Programmation
Page 241: Machine Learning, Statistiques et Programmation
Page 242: Machine Learning, Statistiques et Programmation
Page 243: Machine Learning, Statistiques et Programmation
Page 244: Machine Learning, Statistiques et Programmation
Page 245: Machine Learning, Statistiques et Programmation
Page 246: Machine Learning, Statistiques et Programmation
Page 247: Machine Learning, Statistiques et Programmation
Page 248: Machine Learning, Statistiques et Programmation
Page 249: Machine Learning, Statistiques et Programmation
Page 250: Machine Learning, Statistiques et Programmation
Page 251: Machine Learning, Statistiques et Programmation
Page 252: Machine Learning, Statistiques et Programmation
Page 253: Machine Learning, Statistiques et Programmation
Page 254: Machine Learning, Statistiques et Programmation
Page 255: Machine Learning, Statistiques et Programmation
Page 256: Machine Learning, Statistiques et Programmation
Page 257: Machine Learning, Statistiques et Programmation
Page 258: Machine Learning, Statistiques et Programmation
Page 259: Machine Learning, Statistiques et Programmation
Page 260: Machine Learning, Statistiques et Programmation
Page 261: Machine Learning, Statistiques et Programmation
Page 262: Machine Learning, Statistiques et Programmation
Page 263: Machine Learning, Statistiques et Programmation
Page 264: Machine Learning, Statistiques et Programmation
Page 265: Machine Learning, Statistiques et Programmation
Page 266: Machine Learning, Statistiques et Programmation
Page 267: Machine Learning, Statistiques et Programmation
Page 268: Machine Learning, Statistiques et Programmation
Page 269: Machine Learning, Statistiques et Programmation
Page 270: Machine Learning, Statistiques et Programmation
Page 271: Machine Learning, Statistiques et Programmation
Page 272: Machine Learning, Statistiques et Programmation
Page 273: Machine Learning, Statistiques et Programmation
Page 274: Machine Learning, Statistiques et Programmation
Page 275: Machine Learning, Statistiques et Programmation
Page 276: Machine Learning, Statistiques et Programmation
Page 277: Machine Learning, Statistiques et Programmation
Page 278: Machine Learning, Statistiques et Programmation
Page 279: Machine Learning, Statistiques et Programmation
Page 280: Machine Learning, Statistiques et Programmation
Page 281: Machine Learning, Statistiques et Programmation
Page 282: Machine Learning, Statistiques et Programmation
Page 283: Machine Learning, Statistiques et Programmation
Page 284: Machine Learning, Statistiques et Programmation
Page 285: Machine Learning, Statistiques et Programmation
Page 286: Machine Learning, Statistiques et Programmation
Page 287: Machine Learning, Statistiques et Programmation
Page 288: Machine Learning, Statistiques et Programmation
Page 289: Machine Learning, Statistiques et Programmation
Page 290: Machine Learning, Statistiques et Programmation
Page 291: Machine Learning, Statistiques et Programmation
Page 292: Machine Learning, Statistiques et Programmation
Page 293: Machine Learning, Statistiques et Programmation
Page 294: Machine Learning, Statistiques et Programmation
Page 295: Machine Learning, Statistiques et Programmation
Page 296: Machine Learning, Statistiques et Programmation
Page 297: Machine Learning, Statistiques et Programmation
Page 298: Machine Learning, Statistiques et Programmation
Page 299: Machine Learning, Statistiques et Programmation
Page 300: Machine Learning, Statistiques et Programmation
Page 301: Machine Learning, Statistiques et Programmation
Page 302: Machine Learning, Statistiques et Programmation
Page 303: Machine Learning, Statistiques et Programmation
Page 304: Machine Learning, Statistiques et Programmation
Page 305: Machine Learning, Statistiques et Programmation
Page 306: Machine Learning, Statistiques et Programmation
Page 307: Machine Learning, Statistiques et Programmation
Page 308: Machine Learning, Statistiques et Programmation
Page 309: Machine Learning, Statistiques et Programmation
Page 310: Machine Learning, Statistiques et Programmation
Page 311: Machine Learning, Statistiques et Programmation
Page 312: Machine Learning, Statistiques et Programmation
Page 313: Machine Learning, Statistiques et Programmation
Page 314: Machine Learning, Statistiques et Programmation
Page 315: Machine Learning, Statistiques et Programmation
Page 316: Machine Learning, Statistiques et Programmation
Page 317: Machine Learning, Statistiques et Programmation
Page 318: Machine Learning, Statistiques et Programmation
Page 319: Machine Learning, Statistiques et Programmation
Page 320: Machine Learning, Statistiques et Programmation
Page 321: Machine Learning, Statistiques et Programmation
Page 322: Machine Learning, Statistiques et Programmation
Page 323: Machine Learning, Statistiques et Programmation
Page 324: Machine Learning, Statistiques et Programmation
Page 325: Machine Learning, Statistiques et Programmation
Page 326: Machine Learning, Statistiques et Programmation
Page 327: Machine Learning, Statistiques et Programmation
Page 328: Machine Learning, Statistiques et Programmation
Page 329: Machine Learning, Statistiques et Programmation
Page 330: Machine Learning, Statistiques et Programmation
Page 331: Machine Learning, Statistiques et Programmation
Page 332: Machine Learning, Statistiques et Programmation
Page 333: Machine Learning, Statistiques et Programmation
Page 334: Machine Learning, Statistiques et Programmation
Page 335: Machine Learning, Statistiques et Programmation
Page 336: Machine Learning, Statistiques et Programmation
Page 337: Machine Learning, Statistiques et Programmation
Page 338: Machine Learning, Statistiques et Programmation
Page 339: Machine Learning, Statistiques et Programmation
Page 340: Machine Learning, Statistiques et Programmation
Page 341: Machine Learning, Statistiques et Programmation
Page 342: Machine Learning, Statistiques et Programmation
Page 343: Machine Learning, Statistiques et Programmation
Page 344: Machine Learning, Statistiques et Programmation
Page 345: Machine Learning, Statistiques et Programmation
Page 346: Machine Learning, Statistiques et Programmation
Page 347: Machine Learning, Statistiques et Programmation
Page 348: Machine Learning, Statistiques et Programmation
Page 349: Machine Learning, Statistiques et Programmation
Page 350: Machine Learning, Statistiques et Programmation
Page 351: Machine Learning, Statistiques et Programmation
Page 352: Machine Learning, Statistiques et Programmation
Page 353: Machine Learning, Statistiques et Programmation
Page 354: Machine Learning, Statistiques et Programmation
Page 355: Machine Learning, Statistiques et Programmation
Page 356: Machine Learning, Statistiques et Programmation
Page 357: Machine Learning, Statistiques et Programmation
Page 358: Machine Learning, Statistiques et Programmation
Page 359: Machine Learning, Statistiques et Programmation
Page 360: Machine Learning, Statistiques et Programmation
Page 361: Machine Learning, Statistiques et Programmation
Page 362: Machine Learning, Statistiques et Programmation
Page 363: Machine Learning, Statistiques et Programmation
Page 364: Machine Learning, Statistiques et Programmation
Page 365: Machine Learning, Statistiques et Programmation
Page 366: Machine Learning, Statistiques et Programmation
Page 367: Machine Learning, Statistiques et Programmation
Page 368: Machine Learning, Statistiques et Programmation
Page 369: Machine Learning, Statistiques et Programmation
Page 370: Machine Learning, Statistiques et Programmation
Page 371: Machine Learning, Statistiques et Programmation
Page 372: Machine Learning, Statistiques et Programmation
Page 373: Machine Learning, Statistiques et Programmation
Page 374: Machine Learning, Statistiques et Programmation
Page 375: Machine Learning, Statistiques et Programmation
Page 376: Machine Learning, Statistiques et Programmation
Page 377: Machine Learning, Statistiques et Programmation
Page 378: Machine Learning, Statistiques et Programmation
Page 379: Machine Learning, Statistiques et Programmation
Page 380: Machine Learning, Statistiques et Programmation
Page 381: Machine Learning, Statistiques et Programmation
Page 382: Machine Learning, Statistiques et Programmation
Page 383: Machine Learning, Statistiques et Programmation
Page 384: Machine Learning, Statistiques et Programmation
Page 385: Machine Learning, Statistiques et Programmation
Page 386: Machine Learning, Statistiques et Programmation
Page 387: Machine Learning, Statistiques et Programmation
Page 388: Machine Learning, Statistiques et Programmation
Page 389: Machine Learning, Statistiques et Programmation
Page 390: Machine Learning, Statistiques et Programmation
Page 391: Machine Learning, Statistiques et Programmation
Page 392: Machine Learning, Statistiques et Programmation
Page 393: Machine Learning, Statistiques et Programmation
Page 394: Machine Learning, Statistiques et Programmation
Page 395: Machine Learning, Statistiques et Programmation
Page 396: Machine Learning, Statistiques et Programmation
Page 397: Machine Learning, Statistiques et Programmation