Cours - Article Machine Learning
Cours - Article Machine Learning
L. Rouvière
[Link]@[Link]
Octobre 2021
2 Quelques exemples 6
5 Estimation du risque 15
6 Le sur-apprentissage 17
7 Le package tidymodels 19
9 Bibliographie 25
II Algorithmes linéaires 27
1 Estimation par moindres carrés 28
2 Sélection de variables 30
3 Régularisation 33
3.1 Régression ridge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2 Régression Lasso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.3 Variantes de ridge/lasso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.4 Discrimination binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5 Bibliographie 62
1
1 Arbres 64
1.1 Arbres binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
1.2 Choix des coupures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
1.2.1 Cas de la régression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
1.2.2 Cas de la classification supervisée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
1.3 Elagage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
1.4 Importance des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
2 Réseaux de neurones 76
2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
2.2 Le perceptron simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
2.3 Perceptron multicouches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
2.4 Estimation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
2.5 Choix des paramètres et surapprentissage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
3 Bibliographie 86
IV Agrégation 87
1 Bagging et forêts aléatoires 87
1.1 Bagging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
1.2 Forêts aléatoires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
1.2.1 Algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
1.2.2 Choix des paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
1.2.3 Erreur OOB et importance des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
2 Boosting 95
2.1 Algorithme de gradient boosting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
2.2 Choix des paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
2.3 Compléments/conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
3 Bibliographie 102
Présentation
— Objectifs : comprendre les aspects théoriques et pratiques des algorithmes machine learning de référence.
— Pré-requis : théorie des probabilités, modélisation statistique, régression (linéaire et logistique). R, niveau
avancé.
— Enseignant : Laurent Rouvière [Link]@[Link]
— Recherche : statistique non paramétrique, apprentissage statistique
— Enseignements : statistique et probabilités (Université, école d’ingénieur et de commerce, formation
continue).
— Consulting : energie, finance, marketing, sport.
Programme
— Matériel :
— slides : https: // lrouviere. github. io/ machine_ learning/
— Tutoriel long : https: // lrouviere. github. io/ TUTO_ ML/
— Tutoriel court : https: // lrouviere. github. io/ machine_ learning/ tuto_ court_ ml_ sans_
correc. html
— 4 parties :
1. Machine Learning : cadre, objectif, risque...
2. Algorithmes linéaires : MCO, régularisation (ridge, lasso), SVM
3. Algorithmes non linéaires : arbres et réseaux de neurones
4. Agrégation : forêts aléatoires et boosting
2
Objectifs/questions
— Buzzword : machine learning, big data, data mining, intelligence artificielle...
3
Première partie
Apprentissage : contexte et formalisation
1 Motivations
Apprentissage statistique ?
Plusieurs "définitions"
1. "... explores way of estimating functional dependency from a given collection of data" [Vapnik, 2000].
2. "...vast set of tools for modelling and understanding complex data" [James et al., 2015]
Wikipedia
L’apprentissage automatique (en anglais : machine learning), apprentissage artificiel ou apprentissage statistique
est un champ d’étude de l’intelligence artificielle qui se fonde sur des approches mathématiques et statistiques pour
donner aux ordinateurs la capacité d’apprendre à partir de donnée...
=⇒ Interface : Mathématiques-statistiques/informatique.
Constat
— Le développement des moyens informatiques fait que l’on est confronté à des données de plus en plus com-
plexes.
— Les méthodes traditionnelles se révèlent souvent peu efficaces face à ce type de données.
— Nécessité de proposer des algorithmes/modèles statistiques qui apprennent directement à partir des données.
Conclusion
Capacités informatiques =⇒ Data Mining =⇒ Apprentissage statistique =⇒ Big Data =⇒ Intelligence artificielle...
Approche statistique
Objectif =⇒ expliquer
— notion de modèle ;
Exemples
— Tests indépendance/adéquation...
— Modèle linéaire : estimation, sélection de variables, analyse des résidus...
— Régression logistique...
— Séries temporelles...
4
Approche machine learning
Objectif =⇒ prédire
— notion d’algorithmes de prévision ;
— critères d’erreur de prévision ;
— calibration de paramètres (tuning).
Exemples
— Algorithmes linéaires (moindres carrés, régularisation, "SVM") ;
— Arbres, réseaux de neurones ;
— Agrégation : boosting, bagging (forêts aléatoires) ;
— Deep learning (apprentissage profond).
Statistique vs apprentissage
— Les objectifs diffèrent :
— recherche de complexité minimale en statistique =⇒ le modèle doit être interprétable !
— complexité moins importante en machine learning =⇒ on veut "juste bien prédire".
— Approches néanmoins complémentaires :
— bien expliquer =⇒ bien prédire ;
— "récentes" évolutions d’aide à l’interprétation des algorithmes ML =⇒ scores d’importance des va-
riables...
— un bon algorithme doit posséder des bonnes propriétés statistiques (convergence, biais, variance...).
Conclusion
Ne pas dissocier les deux approches.
Nombreuses applications
finance, économie, marketing, biologie, médecine...
5
The Elements of Statistical Learning [Hastie et al., 2009, James et al., 2015]
[Link] [Link]
Wikistat
— Page de cours et tutoriels très bien faits sur la statistique classique et moderne.
— On pourra notamment regarder les vignettes sur la partie apprentissage :
— [Wikistat, 2020a]
— [Wikistat, 2020b]
— ...
— Plusieurs parties de ce cours sont inspirées de ces vignettes.
2 Quelques exemples
Reconnaissance de l’écriture
Apprentissage statistique
Comprendre et apprendre un comportement à partir d’exemples.
Reconnaissance de la parole
6
0.5 0.5
YES NO
−0.5 −0.5
0 1 0 1
1 1
BOAT GOAT
−1 −1
0 1 0 1
0.2 1
SH AO
−0.2 −1
0 1 0 1
Question
Peut-on prédire la concentration maximale en ozone du lendemain à partir des prévisions météorologiques ?
Détection de spam
— Sur 4 601 mails, on a pu identifier 1813 spams.
7
— On a également mesuré sur chacun de ces mails la présence ou absence de 57 mots.
> spam %>% select(c(1:8,58)) %>% head()
## make address all num3d our over remove internet type
## 1 0.00 0.64 0.64 0 0.32 0.00 0.00 0.00 spam
## 2 0.21 0.28 0.50 0 0.14 0.28 0.21 0.07 spam
## 3 0.06 0.00 0.71 0 1.23 0.19 0.19 0.12 spam
## 4 0.00 0.00 0.00 0 0.63 0.00 0.31 0.63 spam
## 5 0.00 0.00 0.00 0 0.63 0.00 0.31 0.63 spam
## 6 0.00 0.00 0.00 0 1.85 0.00 0.00 1.85 spam
Question
Peut-on construire à partir de ces données une méthode de détection automatique de spam ?
Objectifs
1. Expliquer le(s) méchanisme(s) liant les entrée xi aux sorties yi ;
2. Prédire « au mieux » la sortie y associée à une nouvelle entrée x ∈ X .
Vocabulaire
— Lorsque la variable à expliquer est quantitative (Y ⊆ R), on parle de régression.
— Lorsqu’elle est qualitative (Card(Y) fini), on parle de classification (supervisée).
Exemples
— La plupart des problèmes présentés précédemment peuvent être appréhendés dans un contexte d’apprentissage
supervisé : on cherche à expliquer une sortie y par des entrées x :
yi xi
Chiffre image Classification
Mot courbe Classification
Spam présence/absence de mots Classification
C. en O3 données météo. Régression
Remarque
La nature des variables associées aux entrées xi est variée (quanti, quali, fonctionnelle...).
f (xi ) ≈ yi , i = 1, . . . , n.
— Nécessité de se donner un critère qui permette de mesurer la qualité des fonctions de prévision f .
— Le plus souvent, on utilise une fonction de perte ` : Y × Y → R+ telle que
`(y, y 0 ) = 0 si y = y 0
`(y, y 0 ) > 0 si y 6= y 0 .
8
Vision statistique
— On suppose que les données dn = {(x1 , y1 ), . . . , (xn , yn )} sont des réalisations d’un n-échantillon Dn =
{(X1 , Y1 ), . . . , (Xn , Yn )} de loi inconnue.
— Les Xi sont des variables aléatoires à valeurs dans X , les Yi dans Y.
— Le plus souvent on supposera que les couples (Xi , Yi ), i = 1, . . . , n sont i.i.d de loi P.
Aspect théorique
— Pour une fonction de perte ` : Y × Y → R+ donnée, le problème théorique consiste à trouver
— Une telle fonction f ? (si elle existe) est appelée fonction de prévision optimale pour la perte `.
Aspect pratique
— La fonction de prévision optimale f ? dépend le plus souvent de la loi P des (X, Y ) qui est en pratique
inconnue.
— Le job du statisticien est de trouver un estimateur fn = fn (., Dn ) tel que R(fn ) ≈ R(f ? ).
Définition
Un algorithme de prévision est représenté par une suite (fn )n d’applications (mesurables) telles que pour n ≥ 1,
fn : X × (X × Y)n → Y.
Propriétés statistiques
— Biais : E[fn (x)] − f ? (x) =⇒ prévisions "en moyenne" ;
— Variance : V[fn (x)] =⇒ stabilité des prévisions ;
— Consistance : limn→∞ R(fn ) = R(f ? ) =⇒ précision quand n augmente ;
— ...
9
4 Exemples de fonction de perte
Choix de la fonction de perte
— Le cadre mathématique développé précédemment sous-entend qu’une fonction est performante (voire opti-
male) vis-à-vis d’un critère (représenté par la fonction de perte `)).
— Un algorithme de prévision performant pour un critère ne sera pas forcément performant pour un autre.
Conséquence pratique
Avant de s’attacher à construire un algorithme de prévision, il est capital de savoir mesurer la performance d’un
algorithme de prévision.
— Une fonction de perte ` : Y × Ye → R+ dépend de l’espace des observations Y et de celui des prévisions Y.
e
3. Prévision de probabilités : problème de classification où on veut prédire les probabilités P(Y = k|X = x) :
` : {1, . . . , K} × RK → R+ .
Régression
— Y = R, une prévision = un réel =⇒ m : X → R ;
— Une perte = une distance entre deux nombres, par exemple la perte quadratique :
` : R × R → R+
(y, y 0 ) 7→ (y − y 0 )2
Classification
— Y = {1, . . . , K}, une prévision = un groupe =⇒ g : X → {1, . . . , K} ;
— Une perte = 1 coût pour une mauvaise prévision, par exemple la perte indicatrice
` : {1, . . . , K} × {1, . . . , K} → R+
(y, y 0 ) 7→ 1y6=y0
10
Classification binaire
— Y = {−1, 1}, une prévision = un groupe =⇒ g : X → {−1, 1}.
— Ce cadre permet une analyse plus fine des différents types d’erreur.
— En effet, seules 4 situations peuvent se produire
g(x) = −1 g(x) = 1
y = −1 VN FP
y=1 FN VP
— On peut les quantifier en terme de probabilités.
Pour aller plus vite
Erreurs binaires
— Spécificité =⇒ bien prédire les négatifs :
Critères binaires
De nombreux critères s’obtiennent en combinant ces probabilités :
Remarque
Mieux adapté que l’erreur de classification au cas de données déséquilibrées.
— Les fonctions de perte sont généralement définies comme généralisation de pertes spécifiques au problème de
classification binaire.
11
P(Y = 1|X = x) petit P(Y = 1|X = x) grand
S(x)
s
Fonction de score
— Objectif d’un score : ordonner
— avant (d’éventuellement) classer en fixant un seuil s ∈ R :
1 si S(x) > s
gs (x) =
−1 sinon.
Courbe ROC
— Idée : s’affranchir du choix de s en visualisant les erreurs α(s) et β(s) sur un graphe 2D pour toutes les
valeurs de s.
Définition
La courbe ROC de S est la courbe paramétrée par les valeurs de seuil s dont les abscisses et ordonnées sont définies
par
x(s) = P(S(X) > s|Y = −1) = α(s)
y(s) = P(S(X) > s|Y = 1) = 1 − β(s).
Visualisation
— Abscisses : les faux positifs ou la spécificité ;
— Ordonnées : les faux négatifs ou la sensibilité.
— Mauvaise ROC : S(X) et Y sont indépendantes =⇒ x(s) = y(s) pour tout s ∈ R et ROC correspond à la
première bissectrice.
Visualisation
1.00
s=s∗
s=−∞
0.75
Score
1−fn
0.50 Aléatoire
Parfait
0.25
0.00 s=+∞
0.00 0.25 0.50 0.75 1.00
fp
12
Interprétation
On évalue la performance d’un score par sa capacité à se rapprocher le plus vite possible de la droite y = 1.
Exemple 1 Exemple 2
1.00
0.75
Score
1−fn 0.50 S1
S2
0.25
0.00
0.00 0.25 0.50 0.75 1.000.00 0.25 0.50 0.75 1.00
fp
Comparaison
— Exemple 1 : S2 meilleur que S1.
— Exemple 2 : il y a débat...
— Idée : utiliser l’aire sous la courbe.
AUC
Définition
On appelle AUC l’aire sous la courbe ROC de S.
Propriété
— 0.5 ≤ AUC(S) ≤ 1.
— Plus l’AUC est grand, meilleur est le score.
Interprétation de l’AUC
Propriété
Soit (X1 , Y1 ) et (X2 , Y2 ) indépendants et de même loi que (X, Y ), on a
Interprétation
— L’AUC correspond à la probabilité que le score ordonne correctement deux observations prélevées aléatoire-
ment dans les groupes -1 et 1.
— AUC(S) = 0.9 =⇒ dans 90% des cas, le score d’un individu positif sera plus grand que le score d’un individu
négatif.
13
Perte AUC et score optimal
— Remarquons que
AUC(S) = E[1S(X1 )>S(X2 ) |Y1 = 1, Y2 = −1].
— L’AUC peut donc s’écrire comme l’espérance d’une fonction de perte particulière
Proposition
Le score optimal par rapport à l’AUC est
Résumé
Le package yardstick
— Nous verrons dans la section suivante que ces critères se calculent (ou plutôt s’estiment) en confrontant les
valeurs observées yi aux valeurs prédites d’un algorithme. Par exemple
> head(tbl)
## # A tibble: 6 x 3
## obs proba class
## <fct> <dbl> <fct>
## 1 0 0.117 0
## 2 0 0.288 0
## 3 1 0.994 1
## 4 0 0.528 1
## 5 0 0.577 1
## 6 1 0.997 1
— Le package yardstick contient un ensemble de fonctions qui permettent de calculer les critères :
https: // yardstick. tidymodels. org/ articles/ metric-types. html
Exemples
— Erreur de classification (ou plutôt accuracy) avec accuracy :
> library(yardstick)
> tbl %>% accuracy(truth=obs,estimate=class)
## # A tibble: 1 x 3
## .metric .estimator .estimate
## <chr> <chr> <dbl>
## 1 accuracy binary 0.834
14
> tbl %>% roc_auc(truth=obs,estimate=proba,event_level="second")
## # A tibble: 1 x 3
## .metric .estimator .estimate
## <chr> <chr> <dbl>
## 1 roc_auc binary 0.926
1.00
0.75
sensitivity
0.50
0.25
0.00
0.00 0.25 0.50 0.75 1.00
1 − specificity
5 Estimation du risque
Rappels
— n observations (X1 , Y1 ), . . . , (Xn , Yn ) i.i.d à valeurs dans X × Y.
Objectif
Etant donnée une fonction de perte ` : Y × Y → R+ , on cherche un algorithme de prévision fn (x) = fn (x, Dn ) qui
soit "proche" de l’oracle f ? défini par
f ? ∈ argmin R(f )
f
Question
Etant donné un algorithme fn , que vaut son risque R(fn ) ?
Risque empirique
— La loi de (X, Y ) étant inconnue en pratique, il est impossible de calculer R(fn ) = E[`(Y, fn (X))].
— Première approche : R(fn ) étant une espérance, on peut l’estimer (LGN) par sa version empirique
n
1X
Rn (fn ) = `(Yi , fn (Xi )).
n i=1
15
Problème
— L’échantillon Dn a déjà été utilisé pour construire l’algorithme de prévision fn =⇒ La LGN ne peut donc
s’appliquer !
— Conséquence : Rn (fn ) conduit souvent à une sous-estimation de R(fn ).
Une solution
Utiliser des méthodes de type validation croisée ou bootstrap.
Algorithme
Entrée : {A, T } une partition de {1, . . . , n} en deux parties.
1. Ajuster l’algorithme de prévision en utilisant uniquement les données d’apprentissage Dapp = {(xi , yi ) : i ∈
A}. On désigne par fapp (., Dapp ) l’algorithme obtenu.
2. Calculer les valeurs prédites fapp (xi , Dapp ) par l’algorithme pour chaque observation de l’échantillon test
Dtest = {(xi , yi ) : i ∈ T }
Retourner :
1 X
`(yi , fapp (xi , Dapp )).
|T |
i∈T
X1 Xp Y
Dtest
Commentaires
Nécessite d’avoir un nombre suffisant d’observations dans
1. Dapp pour bien ajuster l’algorithme de prévision ;
2. Dtest pour bien estimer l’erreur de l’algorithme.
Algorithme - CV
Entrée : {B1 , . . . , BK } une partition de {1, . . . , n} en K blocs.
Pour k = 1, . . . , K :
1. Ajuster l’algorithme de prévision en utilisant l’ensemble des données privé du k e bloc, c’est-à-dire Bk =
{(xi , yi ) : i ∈ {1, . . . , n}\Bk }. On désigne par fk (.) = fk (., Bk ) l’algorithme obtenu.
16
2. Calculer la valeur prédite par l’algorithme pour chaque observation du bloc k : fk (xi ), i ∈ Bk et en déduire
le risque sur le bloc k :
b k) = 1
X
R(f `(yi , fk (xi )).
|Bk |
i∈Bk
1
PK
Retourner : K k=1 R(f
b k ).
B1 B1 B1
B2 B2 B2
B3 B3 B3
Commentaires
— Le choix de K doit être fait par l’utilisateur (souvent K = 10).
— Avantage : plus adapté que la technique apprentissage/validation =⇒ plus stable et précis.
— Inconvénient : plus couteux en temps de calcul.
Autres approches
— Estimation par pénalisation : critère ajustement/complexité, Cp de Mallows, AIC-BIC...
6 Le sur-apprentissage
— La plupart des modèles statistiques renvoient des estimateurs qui dépendent de paramètres λ à calibrer.
Exemples
— nombres de variables dans un modèle linéaire ou logistique.
— paramètre de pénalités pour les régressions pénalisées.
— profondeur des arbres.
— nombre de plus proches voisins.
17
— nombre d’itérations en boosting.
— ...
Remarque importante
Le choix de ces paramètres est le plus souvent crucial pour la performance de l’estimateur sélectionné.
— Le paramètre λ à sélectionner représente la complexité du modèle :
Overfitting
Sur-ajuster signifie que le modèle va (trop) bien ajuster les données d’apprentissage, il aura du mal à s’adapter à
de nouveaux individus.
Erreur
Ajustement
Prévision
Sur−apprentissage
Complexité
Overfitting en régression
0
Y
−1
−4 0 4
X
18
1
10ppv
0
Y
199ppv
1ppv
−1
−4 0 4
X
1.00
0.9
0.75
0.6
X2
X2
0.50
0.3 0.25
0.0 0.00
0.0 0.3 0.6 0.9 0.00 0.25 0.50 0.75 1.00
X1 X1
1ppv 400ppv
1.00
0.75
X2
0.50 0
0.25
0.00
0.00 0.25 0.50 0.75 1.00 0.00 0.25 0.50 0.75 1.00
X1
Application shiny
[Link]
7 Le package tidymodels
Présentation du package
— Successeur de caret pour conduire des projets machine learning sur R.
19
— rsample : pour ré-échantilloner
— yardstick : pour les fonctions de perte
— recipe : pour les recettes de préparation... des données
— tune : pour calibrer les algorithme
— ...
— Tutoriel : [Link]
Les données
— Une variable binaire à expliquer par 2 variables continues
> head(don.2D.500)
## # A tibble: 6 x 3
## X1 X2 Y
## <dbl> <dbl> <fct>
## 1 0.721 0.209 0
## 2 0.876 0.766 1
## 3 0.761 0.842 1
## 4 0.886 0.934 0
## 5 0.456 0.676 0
## 6 0.166 0.859 1
Le workflow
— On commence par renseigner l’algorithme et la manière dont on va choisir les paramètres.
> library(tidymodels)
> tune_spec <-
+ nearest_neighbor(neighbors=tune(),weight_func="rectangular") %>%
+ set_mode("classification") %>%
+ set_engine("kknn")
20
Ré-échantillonnage et grille de paramètres
— On spécifie ensuite la méthode de ré-échantillonnage, ici une validation croisée 10 blocs
> [Link](12345)
> re_ech_cv <- vfold_cv(don.2D.500,v=10)
> re_ech_cv %>% head()
## # A tibble: 6 x 2
## splits id
## <list> <chr>
## 1 <split [450/50]> Fold01
## 2 <split [450/50]> Fold02
## 3 <split [450/50]> Fold03
## 4 <split [450/50]> Fold04
## 5 <split [450/50]> Fold05
## 6 <split [450/50]> Fold06
=⇒ consulter https: // www. tidymodels. org/ find/ parsnip/ pour trouver les identifiants des algorithmes
et de leurs paramètres.
Estimation du risque
— Fonction tune_grid
> tune_grid(...,resamples=...,grid=...,metrics=...)
0.725
0.700
Accuracy
0.675
0.650
0.625
0 25 50 75 100
neighbors
21
Sélection du meilleur paramètre
— On visualise les meilleures valeurs de paramètres :
> [Link] %>% show_best() %>% select(1:6)
## # A tibble: 5 x 6
## neighbors .metric .estimator mean n std_err
## <int> <chr> <chr> <dbl> <int> <dbl>
## 1 13 accuracy binary 0.72 10 0.0255
## 2 14 accuracy binary 0.72 10 0.0255
## 3 35 accuracy binary 0.72 10 0.0207
## 4 36 accuracy binary 0.72 10 0.0207
## 5 39 accuracy binary 0.718 10 0.0199
Conclusion
— Les choix de l’utilisateur sont des paramètres de la procédure.
— =⇒ facilement personnalisable.
— Il suffit d’indiquer :
— la méthode (logistique, ppv, arbre, randomForest...)
— Une grille pour les paramètres (nombre de ppv...)
— Le critère de performance (erreur de classification, AUC, risque quadratique...)
— La méthode d’estimation du critère (apprentissage validation, validation croisée, bootstrap...)
Apprentissage-validation
22
> library(caret)
> K_cand <- [Link](k=seq(1,500,by=20))
> library(caret)
> ctrl1 <- trainControl(method="LGOCV",number=1,index=list(1:1500))
> e1 <- train(Y~.,data=donnees,method="knn",trControl=ctrl1,tuneGrid=K_cand)
> e1
## k-Nearest Neighbors
##
## 2000 samples
## 2 predictor
## 2 classes: ’0’, ’1’
##
## No pre-processing
## Resampling: Repeated Train/Test Splits Estimated (1 reps, 75%)
## Summary of sample sizes: 1500
## Resampling results across tuning parameters:
##
## k Accuracy Kappa
## 1 0.620 0.2382571
## 21 0.718 0.4342076
## 41 0.722 0.4418388
## 61 0.718 0.4344073
## 81 0.720 0.4383195
## 101 0.714 0.4263847
## 121 0.716 0.4304965
## 141 0.718 0.4348063
## 161 0.718 0.4348063
## 181 0.718 0.4348063
## 201 0.720 0.4387158
## 221 0.718 0.4350056
## 241 0.718 0.4350056
## 261 0.722 0.4428232
## 281 0.714 0.4267894
## 301 0.714 0.4269915
## 321 0.710 0.4183621
## 341 0.696 0.3893130
## 361 0.696 0.3893130
## 381 0.688 0.3727988
## 401 0.684 0.3645329
## 421 0.686 0.3686666
## 441 0.686 0.3679956
## 461 0.684 0.3638574
## 481 0.680 0.3558050
## Accuracy was used to select the optimal model using the largest value.
## The final value used for the model was k = 261.
Validation croisée
> library(doMC)
> registerDoMC(cores = 3)
> ctrl2 <- trainControl(method="cv",number=10)
> e2 <- train(Y~.,data=dapp,method="knn",trControl=ctrl2,tuneGrid=K_cand)
> e2
## k-Nearest Neighbors
##
## 1500 samples
## 2 predictor
## 2 classes: ’0’, ’1’
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
## Summary of sample sizes: 1350, 1350, 1350, 1350, 1350, 1350, ...
## Resampling results across tuning parameters:
##
## k Accuracy Kappa
## 1 0.6240000 0.2446251
## 21 0.7393333 0.4745290
## 41 0.7306667 0.4570024
## 61 0.7340000 0.4636743
23
## 81 0.7333333 0.4632875
## 101 0.7313333 0.4593480
## 121 0.7326667 0.4624249
## 141 0.7333333 0.4640787
## 161 0.7366667 0.4708178
## 181 0.7313333 0.4602309
## 201 0.7326667 0.4626618
## 221 0.7293333 0.4559741
## 241 0.7306667 0.4585960
## 261 0.7353333 0.4676751
## 281 0.7286667 0.4537842
## 301 0.7253333 0.4463516
## 321 0.7173333 0.4294524
## 341 0.7113333 0.4168003
## 361 0.7080000 0.4099303
## 381 0.7140000 0.4213569
## 401 0.7073333 0.4073761
## 421 0.7100000 0.4126434
## 441 0.7066667 0.4054984
## 461 0.6966667 0.3844183
## 481 0.6860000 0.3612515
##
## Accuracy was used to select the optimal model using the largest value.
## The final value used for the model was k = 21.
24
Critère AUC
> donnees1 <- donnees
> names(donnees1)[3] <- c("Class")
> levels(donnees1$Class) <- c("G0","G1")
> ctrl11 <- trainControl(method="LGOCV",number=1,index=list(1:1500),
+ classProbs=TRUE,summary=twoClassSummary)
> e4 <- train(Class~.,data=donnees1,method="knn",trControl=ctrl11,
+ metric="ROC",tuneGrid=K_cand)
> e4
## k-Nearest Neighbors
##
## 2000 samples
## 2 predictor
## 2 classes: ’G0’, ’G1’
##
## No pre-processing
## Resampling: Repeated Train/Test Splits Estimated (1 reps, 75%)
## Summary of sample sizes: 1500
## Resampling results across tuning parameters:
##
9 Bibliographie
Références
Biblio1
[Besse, 2018] Besse, P. (2018). Science des données - Apprentissage Statistique. INSA - Toulouse. [Link]
[Link]/~besse/pub/Appren_stat.pdf.
[Bousquet et al., 2003] Bousquet, O., Boucheron, S., and Lugosi, G. (2003). Introduction to Statistical Learning
Theory, chapter Advanced Lectures on Machine Learning. Springer.
[Clémençon et al., 2008] Clémençon, S., Lugosi, G., and Vayatis, N. (2008). Ranking and empirical minimization
of u-statistics. The Annals of Statistics, 36(2) :844–874.
[Hastie et al., 2009] Hastie, T., Tibshirani, R., and Friedman, J. (2009). The Elements of Statistical Learning :
Data Mining, Inference, and Prediction. Springer, second edition.
25
[James et al., 2015] James, G., Witten, D., Hastie, T., and Tibshirani, R. (2015). The Elements of Statistical
Learning : Data Mining, Inference, and Prediction. Springer.
[Vapnik, 2000] Vapnik, V. (2000). The Nature of Statistical Learning Theory. Springer, second edition.
[Wikistat, 2020a] Wikistat (2020a). Apprentissage machine — introduction. [Link]
[Link].
[Wikistat, 2020b] Wikistat (2020b). Qualité de prévision et risque. [Link]
pdf.
26
Deuxième partie
Algorithmes linéaires
— Rappel : une fonction de prévision f : Rd → R.
Remarque
— Possibilité d’inclure des effets non linéaires :
fβ (x) = β0 + β11 x1 + β12 x21 + β21 x2 + β22 x22 + β12 x1 x2 + β31 x3 + β32 exp(x3 ) . . .
Régression
— Y à valeurs dans R.
— On utilise souvent le terme modèle linéaire :
yi = β0 + β1 xi1 + . . . + βd xid + εi
où les εi sont i.i.d tels que E[εi ] = 0 et V[εi ] = σ 2 .
— Fonction de prévision :
mβ (x) = E[Y |X = x] = β0 + β1 x1 + . . . + βd xd .
Classification binaire
— Y à valeurs dans {0, 1}.
— La classification s’effectue à partir de la probabilité
p(x) = P(Y = 1|X = x).
Questions
1. Comment calculer (ou plutôt estimer) les βj ?
— MCO-vraisemblance
— Approches régularisées =⇒ ridge-lasso...
— Machines à support vecteur (SVM).
27
1 Estimation par moindres carrés
Minimiser les erreurs
— Les données : (x1 , y1 ), . . . , (xn , yn ) à valeurs dans Rd × R.
— Le modèle
yi = β0 + β1 xi1 + . . . + βd xid + εi
— εi représente l’écart (ou l’erreur) entre la prévision du modèle β et la valeur observée.
Idée
Choisir β de manière à minimiser ces erreurs.
avec
y1 1 x11 ... x1d
Y = ...
.. .. .. .
et X = .
. .
yn 1 xn1 ... xnd
Propriété
Si X est de plein rang alors l’estimateur des MCO βb = (Xt X)−1 Xt Y minimise SCR(β).
Exemple
— Données Hitters, 263 individus, 20 variables
> Hitters %>% select(c(1:5,19)) %>% head()
## AtBat Hits HmRun Runs RBI Salary
## 1 315 81 7 24 38 475.0
## 2 479 130 18 66 72 480.0
## 3 496 141 20 65 78 500.0
## 4 321 87 10 39 42 91.5
## 5 594 169 4 74 51 750.0
## 6 185 37 1 23 8 70.0
avec predict :
> predict(mod,newdata=xnew)
## 1
## 1129.376
28
Modèle gaussien
— En supposant de plus que les erreurs εi suivent une loi Gaussienne, on obtient la loi des estimateurs
βbj − βj
∼ Tn−(d+1) .
σ
bβbj
pβ (x)
log = β0 + β1 x 1 + . . . + βd x d .
1 − pβ (x)
— Pas de solution explicite mais de (bons) algorithmes qui convergent vers le max.
Exemple
— On considère les données SAheart :
> head(SAheart)
## sbp tobacco ldl adiposity famhist typea obesity alcohol age chd
## 1 160 12.00 5.73 23.11 Present 49 25.30 97.20 52 1
## 2 144 0.01 4.41 28.61 Absent 55 28.87 2.06 63 1
## 3 118 0.08 3.48 32.28 Present 52 29.14 3.81 46 0
## 4 170 7.50 6.41 38.03 Present 51 31.99 24.26 58 1
## 5 134 13.60 3.50 27.78 Present 60 25.99 57.34 49 1
## 6 132 6.20 6.47 36.21 Present 62 30.77 14.14 45 0
29
> logit <- glm(chd~.,data=SAheart,family="binomial")
> broom::tidy(logit)
## # A tibble: 10 x 5
## term estimate [Link] statistic [Link]
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) -6.15 1.31 -4.70 0.00000258
## 2 sbp 0.00650 0.00573 1.14 0.256
## 3 tobacco 0.0794 0.0266 2.98 0.00285
## 4 ldl 0.174 0.0597 2.92 0.00355
## 5 adiposity 0.0186 0.0293 0.635 0.526
## 6 famhistPresent 0.925 0.228 4.06 0.0000490
## 7 typea 0.0396 0.0123 3.21 0.00131
## 8 obesity -0.0629 0.0442 -1.42 0.155
## 9 alcohol 0.000122 0.00448 0.0271 0.978
## 10 age 0.0452 0.0121 3.73 0.000193
Conclusion
Remarque
La qualité de ces modèles (et donc des prévisions) reposent sur deux postulats :
1. le modèle est bon : Y s’explique bien par une combinaison linéaire des X ;
2. les estimateurs sont bons : ils possèdent de bonnes propriétés statistiques.
— La qualité du modèle est toujours difficile à vérifier =⇒ ajouter d’autres effets dans la combinaison linéaire
(quadratique, interactions...).
— On en sait plus sur la performance des estimateurs :
1. Trop de variables =⇒ % de la variance (sur-ajustement).
2. Colinéarités =⇒ % de la variance (sur-ajustement).
2 Sélection de variables
— Une approche naturelle pour répondre aux 2 problèmes évoqués précédemment est de sélectionner des va-
riables explicatives parmi {X1 , . . . , Xd }.
Idée
Supprimer les variables
— qui n’expliquent pas Y .
— dont l’effet est déjà expliqué par d’autres variables
=⇒ ce n’est pas parce qu’une variable n’est pas sélectionnée qu’elle n’est pas liée à Y !
Algorithme BSS
Entrée : un critère de choix de modèle (AIC, BIC. . .).
Pour j = 0, . . . , d :
d
1. Construire les modèles linéaires à j variables ;
j
2. Choisir parmi ces modèles celui qui a la plus petite SCR. On note Mj le modèle sélectionné.
Retourner : le meilleur modèle parmi M0 , M1 , . . . , Md au sens du critère de choix de modèle.
30
Exemples de critères (voir [Cornillon et al., 2019])
— AIC : Akaike Information Criterion
−2Ln (β̂) + 2d.
— BIC : Bayesian Information Criterion
−2Ln (β̂) + log(n)d.
— R2 ajusté :
n−1 SSR kŶ − Ȳ1k2
Ra2 = 1 − (1 − R2 ) où R2 = = .
n−d+1 SST kY − Ȳ1k2
— Cp de Mallow : !
n
1 X
Cp = (Yi − Ŷi )2 + 2dσ̂ 2 .
n i=1
Ajustement/complexité
— Ces critères sont constitués de deux parties :
1. une qui mesure la qualité d’ajustement du modèle ;
2. une autre qui mesure sa complexité.
Exemple AIC
— −2Ln (β̂) mesure l’ajustement ;
— 2p mesure la complexité.
=⇒ l’idée est de choisir un modèle de complexité minimale qui ajuste bien les données.
Le coin R
— On peut utiliser les packages leaps et bestglm.
— On propose de présenter bestglm qui fait appel à leaps pour la régression et fonctionne également pour le
modèle logistique.
> Hitters1 <- Hitters[,c(1:18,20,19)]
> [Link] <- bestglm(Hitters1)
> [Link]$Subsets %>% select(c(1:5,22)) %>% head()
## (Intercept) AtBat Hits HmRun Runs BIC
## 0 TRUE FALSE FALSE FALSE FALSE 3213.768
## 1 TRUE FALSE FALSE FALSE FALSE 3117.350
## 2 TRUE FALSE TRUE FALSE FALSE 3079.270
## 3 TRUE FALSE TRUE FALSE FALSE 3072.569
## 4 TRUE FALSE TRUE FALSE FALSE 3066.387
## 5 TRUE TRUE TRUE FALSE FALSE 3064.125
Remarque
— L’approche exhaustive peut se révéler coûteuse en temps de calcul lorsque d > 50.
— On utilise généralement des méthodes pas à pas dans ce cas.
31
Pas à pas ascendant
Algorithme forward
Entrée : un critère de choix de modèle (AIC, BIC. . .)
1. Construire M0 le modèle linéaire qui contient uniquement la constante ;
2. Pour j = 0, . . . , d − 1 :
(a) Construire les d − j modèles linéaires en ajoutant une variable, parmi les variables non utilisées, à Mj ;
(b) Choisir, parmi ces d − j modèles, celui qui minimise la SCR → Mj+1 .
Retourner : le meilleur modèle parmi M0 , M1 , . . . , Md au sens du critère de choix de modèle.
Le coin R
Utiliser method=forward dans bestglm.
Le coin R
Utiliser method=backward dans bestglm.
32
3 Régularisation
Erreur
Ajustement
Prévision
Sur−apprentissage
Complexité
Complexité linéaire
Le nombre de variables est une mesure de la complexité des algorithmes linéaires.
Illustration numérique
— On génère des données (xi , yi ), i = 1, . . . , 500 selon le modèle
1.2
beta1
1.0
0.8
1 400
nb_var
Conclusion
Plus de variance (donc moins de précision) lorsque le nombre de variables inutiles augmente.
— Lorsque le nombre de variables d est grand, les estimateurs des moindres carrés du modèle linéaire
Y = β1 X1 + . . . + βd Xd + ε
33
— Comment ? En imposant une contrainte sur la valeur des estimateurs des moindres carrés :
2
n
X d
X
β̂ pen = argmin yi − xij βj
β i=1 j=1
Questions
— Quelle norme utiliser pour la contrainte ?
— Comment choisir t ?
— t petit =⇒ estimateurs contraints (proche de 0) ;
— t grand =⇒ estimateurs des moindres carrés (non pénalisés).
Définition
1. Les estimateurs ridge β̂ R s’obtiennent en minimisant
2
n
X d
X d
X
yi − β0 − xij βj sous la contrainte βj2 ≤ t (1)
i=1 j=1 j=1
2. ou de façon équivalente
2
X n Xd d
X
β̂ R = argmin yi − β0 − xij βj + λ βj2 . (2)
β
i=1 j=1 j=1
Quelques remarques
— Les définitions (1) et (2) sont équivalentes dans le sens où pour tout t il existe un unique λ tels que les
solutions aux deux problèmes d’optimisation coïncident.
— Les variables explicatives sont le plus souvent réduites pour éviter les problèmes d’échelle dans la pénalité.
34
> library(glmnet)
> [Link] <- glmnet(Hitters.X,Hitters$Salary,alpha=0)
> par(mfrow=c(1,2))
> plot([Link],lwd=2)
> plot([Link],lwd=2,xvar="lambda")
19 19 19 19 19 19 19 19 19 19
50
50
0
0
Coefficients
Coefficients
−50
−50
−100
−100
0 50 100 150 200 4 6 8 10 12
2. On déduit
biais(β̂ R ) = −λ(Xt X + λI)−1 β
et
V(β̂ R ) = σ 2 (Xt X + λI)−1 Xt X(Xt X + λI)−1 .
Commentaires
— Si λ = 0, on retrouve le biais et la variance de l’estimateur des MCO.
— λ % =⇒ biais % et variance & et réciproquement lorsque λ &.
Choix de λ
— Il est crucial : si λ ≈ 0 alors β̂ R ≈ β̂ M CO , si λ "grand" alors β̂ R ≈ 0.
> [Link](321)
> [Link] <- [Link](Hitters.X,Hitters$Salary,alpha=0,
+ lambda=exp(seq(0,10,length=100)))
> bestlam <- [Link]$[Link]
> bestlam
## [1] 233.8186
> plot([Link])
35
19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
220000
180000
Mean−Squared Error
140000
100000
0 2 4 6 8 10
Log(λ)
2. ou de façon équivalente
2
X n Xd Xd
β̂ L = argmin Yi − β0 − Xij βj + λ |βj | . (4)
β
i=1 j=1 j=1
Comparaison Ridge-Lasso
— Dans le cas où la matrice X est orthonormée, on a une écriture explicite pour les estimateurs ridge et lasso.
Propriété
Si la matrice de design X est orthonormée, alors
β̂j
β̂jR = et β̂jL = signe(β̂j )(|β̂j | − λ)+
1+λ
où β̂j est l’estimateur MCO de βj .
Commentaires
— Ridge "diminue" l’estimateur MCO de façon proportionnelle ;
— Lasso translate et tronque l’estimateur MCO (lorsque ce dernier est petit).
2 Est
Lasso
0
MCO
Ridge
−2
−4
−4 −2 0 2 4
36
Conclusion
Le lasso va avoir tendance à "mettre" des coefficients à 0 et donc à faire de la sélection de variables.
β2 β2
β̂ β̂
β1 β1
Remarque
Ces approches reviennent (d’une certaine façon) à projeter l’estimateur des MCO sur les boules unités associées à
1. la norme 2 pour la régression ridge ;
2. la norme 1 pour le lasso.
Quelques remarques
— Comme pour la régression ridge :
— Le choix de λ est crucial (il est le plus souvent sélectionné en minimisant un critère empirique).
— MAIS, contrairement à ridge : λ % =⇒ le nombre de coefficients nuls augmente ([Bühlmann and van de Geer, 2011]).
Le coin R
0 6 6 11 17 19 17 12 6
50
50
0
0
Coefficients
Coefficients
−50
−50
−100
−100
37
Sélection de λ
> [Link](321)
> [Link] <- [Link](Hitters.X,Hitters$Salary,alpha=1)
> bestlam <- [Link]$[Link]
> bestlam
## [1] 17.19108
> plot([Link])
19 18 18 18 17 17 13 13 12 9 7 6 6 6 6 5 4 2
220000
Mean−Squared Error
180000
140000
100000
−2 0 2 4
Log(λ)
Résolution numérique
— Il existe plusieurs façons de résoudre le problème numérique d’optimisation lasso (ou ridge).
— Un des plus utilisé est l’algorithme de descente de coordonnées [Hastie et al., 2015].
Descente de coordonnées
1. Initialisation : β̂0 = ȳ, β̂j = ..., j = 1, . . . , d.
3. Retourner : β̂j , j = 1, . . . , d.
38
Elastic net
— [Zou and Hastie, 2005] ont proposé de combiner les approches ridge et lasso en proposant une pénalité (appelée
elastic net) de la forme
Xd
λ ((1 − α)βj2 + α|βj |)
j=1
où α ∈ [0, 1].
Group Lasso
— Dans certaines applications, les variables explicatives appartiennent à des groupes de variables prédéfinis.
— Nécessité de "shrinker" ou sélectionner les variables par groupe.
Définition
En présence de d variables réparties en L groupes X1 , . . . , XL de cardinal d1 , . . . , dL . On note β` , ` = 1, . . . , L le
vecteur des coefficients associé au groupe X` . Les estimateurs group-lasso s’obtiennent en minimisant le critère
n L
!2 L p
X X X
y i − β0 − Xi` β` +λ d` kβ` k2
i=1 `=1 `=1
Remarque
Puisque kβ` k2 = 0 ssi β`1 = . . . = β`d` = 0, cette procédure encourage la mise à zéro des coefficients d’un même
groupe.
Le coin R
— La fonction gglasso du package gglasso permet de faire du groupe lasso sur R.
> summary(donnees)
## X1 X2 X3 Y
## Length:200 Length:200 Min. :0.009496 Min. :-3.23315
## Class :character Class :character 1st Qu.:0.237935 1st Qu.:-0.50404
## Mode :character Mode :character Median :0.485563 Median : 0.16759
## Mean :0.483286 Mean : 0.09792
## 3rd Qu.:0.734949 3rd Qu.: 0.66918
## Max. :0.998741 Max. : 3.04377
> D <- [Link](Y~.,data=donnees)[,-1]
> model <- glmnet(D,Y,alpha=1)
> groupe <- c(1,1,2,2,2,3)
> library(gglasso)
> model1 <- gglasso(D,Y,group=groupe)
> plot(model1)
39
6 6 5 4
0.5
0.5
4
0.4
0.4
3
0.3
0.3
5
Coefficients
Coefficients
0.2
0.2
0.1
0.1
0.0
0.0
2
−0.2
−0.2
6
−10 −8 −6 −4 −11 −9 −7 −5
Remarque
Les coefficients s’annulent par groupe lorsque λ augmente (graphe de droite).
Fused lasso
— Utile pour prendre en compte la spatialité des données.
— Idée : deux coefficients successifs doivent être proches.
Pénalité fused lasso
d
X d
X
λ1 |βj | + λ2 |βj+1 − βj |
j=1 j=2
40
Lasso et Ridge pour la logistique
Définition
On note ỹi = (yi + 1)/2.
— On appelle estimateur ridge en régression logistique l’estimateur
X n d
X
β̂ R = argmin − (ỹi xti β − log(1 + exp(xti β))) + λ βj2 .
β
i=1
j=1
Le coin R
— Pour faire du ridge ou lasso en logistique, il suffit d’ajouter l’argument family=binomial dans glmnet.
— Tout reste identique pour le reste (tracé du chemin des coefficients, choix du λ...).
— Exemple : données SAheart
> head(SAheart)
## sbp tobacco ldl adiposity famhist typea obesity alcohol age chd
## 1 160 12.00 5.73 23.11 Present 49 25.30 97.20 52 1
## 2 144 0.01 4.41 28.61 Absent 55 28.87 2.06 63 1
## 3 118 0.08 3.48 32.28 Present 52 29.14 3.81 46 0
## 4 170 7.50 6.41 38.03 Present 51 31.99 24.26 58 1
## 5 134 13.60 3.50 27.78 Present 60 25.99 57.34 49 1
## 6 132 6.20 6.47 36.21 Present 62 30.77 14.14 45 0
— On obtient les chemins de régularisation ridge et lasso avec les commandes suivantes :
> SAheart.X <- [Link](chd~.,data=SAheart)
> [Link] <- glmnet(SAheart.X,SAheart$chd,family="binomial",alpha=0)
> [Link] <- glmnet(SAheart.X,SAheart$chd,family="binomial",alpha=1)
> plot([Link],xvar="lambda")
9 9 9 9 9 8 8 7 6 5 1
0.8
0.8
0.6
0.6
Coefficients
Coefficients
0.4
0.4
0.2
0.2
0.0
0.0
−4 −2 0 2 4 −7 −6 −5 −4 −3 −2
41
4 Support vector machine
Cadre et notation
— Discrimination binaire : Y à valeurs dans {−1, 1} et X = (X1 , . . . , Xd ) dans Rd .
— Les extensions multi-classes et régression seront présentées à la fin de cette partie.
Objectif
— Estimer la fonction de score S(x) = P(Y = 1|X = x) ;
— En déduire une règle de classification g : Rd → {−1, 1}.
Règles linéaires
— Elles consistent à séparer l’espace des X par un hyperplan.
— On classe ensuite 1 d’un coté de l’hyperplan, -1 de l’autre coté.
Mathématiquement
— On cherche une combinaison linéaire des variables w1 x1 + . . . + wd xd .
— Règle associée :
1 si w1 x1 + . . . + wd xd ≥ 0
g(x) =
−1 sinon.
Exemple 2 : LDA
— Modèle : L(X|Y = k) = N (µk , Σ), k = 0, 1.
— Règle de classification :
1 si p(x) ≥ 0.5
g(x) =
−1 sinon.
— équivalent à
si c + xt Σ−1 (µ1 − µ0 ) ≥ 0
1
g(x) =
−1 sinon.
Illustration avec p = 2
— On considère les données suivantes :
42
1.00
0.75
X2
0.50 0
0.25
0.00
0.00 0.25 0.50 0.75 1.00
X1
— On compare les prévisions logistique et lda.
lda logit
1.00
0.75
X2
0.50 0
0.25
0.00
0.00 0.25 0.50 0.75 1.00 0.00 0.25 0.50 0.75 1.00
X1
Remarque
On retrouve bien la linéarité (et la proximité) de ces deux méthodes.
— Ces approches linéaires s’obtiennent à partir d’un modèle statistique
— L’approche SVM repose sur le calcul direct du "meilleur" hyperplan séparateur qui sera déterminé à partir
d’algorithmes d’optimisation.
— Jean-Philippe Vert, Support vector machines and applications in computational biology, disponible à l’url
http: // cbio. ensmp. fr/ ~jvert/ svn/ kernelcourse/ slides/ kernel2h/ kernel2h. pdf
Remarque
Les aspects techniques ne seront pas présentés ici, on pourra en trouver dans la partie 2.4 du tutoriel.
43
Présentation
— L’approche SVM [Vapnik, 2000] peut être vue comme une généralisation de "recherche d’hyperplan optimal".
Cas simple
Les données (x1 , y1 ), . . . , (xn , yn ) sont dites linéairement séparables si il existe (w, b) ∈ Rd × R tel que pour tout i :
— yi = 1 si hw, xi i + b = wt xi + b > 0 ;
— yi = −1 si hw, xi i + b = wt xi + b < 0.
hw, xi + b = 0
Vocabulaire
— L’équation hw, xi + b définit un hyperplan séparateur de vecteur normal w.
— La fonction signe(hw, xi + b) est une règle de discrimination potentielle.
Problème
Il existe une infinité d’hyperplans séparateurs donc une infinité de règles de discrimination potentielles.
Solution
[Vapnik, 2000] propose de choisir l’hyperplan ayant la marge maximale.
44
hw, xi + b = 0
1
M = kwk
marge
1
M = kwk
Le problème d’optimisation
— On veut trouver l’hyperplan de marge maximale qui sépare les groupes.
Solutions
— On obtient
n
X
w? = αi? yi xi .
i=1
où les αi? sont des constantes positives qui s’obtiennent en résolvant le dual du problème précédent.
— De plus, b? s’obtient en résolvant
αi? [yi (xti w + b) − 1] = 0
pour un αi? non nul.
Remarque
w? s’écrit omme une combinaison linéaire des xi .
Vecteurs supports
Propriété (conditions KKT)
αi? [yi (xti w? + b) − 1] = 0, i = 1, . . . , n.
Conséquence (importante)
— Si αi? 6= 0 alors yi (xti w? + b) = 1 et xi est sur la marge.
— w? se calcule uniquement à partir de ces points là.
— Ces points sont appelés les vecteurs supports de la SVM.
45
Représentation
hw? , xi + b? = 0
M = kw1? k
α?
i > 0
marge
M = kw1? k
Le coin R
— La fonction svm du package e1071 permet d’ajuster des SVM.
1.00
0.75
X1
0.50 0
0.25
0.00
0.00 0.25 0.50 0.75
X2
> library(e1071)
> [Link] <- svm(Y~.,data=df,kernel="linear",cost=10000000000)
La fonction svm
— Les vecteurs supports :
> [Link]$index
## [1] 6 14 12
46
— la marge.
1.00
0.75
X1
0.50 0
0.25
0.00
0.00 0.25 0.50 0.75
X2
o o o
o oo
0.8 o
1
o
0.6
o ox
X1
x o
0.4 o
o
o
0
o
0.2
o
x o
0.2 0.4 0.6 0.8
X2
Problème
Dans la vraie vie, les données ne sont (quasiment) jamais linéairement séparables...
47
hw, xi + b = 0
1
M = kwk
marge
Idée
M = 1 Autoriser certains points
kwk
1. à être bien classés mais à l’intérieur de la
hw, xi + b = 0
marge ;
2. et/ou à être mal classés.
1
M = kwk
marge
1
M = kwk
Slack variables
Rappel : cas séparable
1
min kwk2
w,b 2
— Les contraintes yi (wt xi + b) ≥ 1 signifient que tous les points se trouvent en dehors de la frontière définie par
la marge ;
— Cas non séparable : le problème ci-dessus n’admet pas de solution !
Variables ressorts
On introduit des variables ressorts (slack variables) positives ξ1 , . . . , ξn telles que yi (wt xi + b) ≥ 1 − ξi . 2 cas sont
à distinguer :
1. ξi ∈ [0, 1] =⇒ bien classé mais dans la région définie par la marge ;
2. ξi > 1 =⇒ mal classé.
yi (wt xi + b) ≥ 1−ξi
sous les contraintes
ξi ≥ 0, i = 1, . . . , n.
48
— C > 0 est un paramètre à calibrer (paramètre de coût).
— Le cas séparable correspond à C → ∞.
— Les solutions de ce nouveau problème d’optimisation s’obtiennent de la même façon que dans le cas séparable
(Lagrangien, problème dual...).
— L’hyperplan optimal est défini par
Xn
?
w = αi? yi xi
i=1
et b est solution de yi (hw , xi i + b ) = 1 pour tout i tel que 0 < αi? < C.
? ? ?
Vecteurs supports
— Les xi tels que αi? > 0 sont les vecteurs supports ;
— On en distingue 2 types :
1. ceux sur la frontière définie par la marge : ξi? = 0 ;
2. ceux en dehors : ξi? > 0 et αi? = C.
— Les vecteurs non supports vérifient αi? = 0 et ξi? = 0.
hw? , xi + b? = 0
ξ1?
ξ3? 1
M =
ξ2? kw? k
ξ5?
marge
1
M = kw? k
Le coin R
— On utilise la même fonction que dans le cas séparable (svm du package e1071) ;
— L’argument cost correspond à la constante de régularisation C.
1.00
0.75
Y
X1
0.50 0
0.25
0.00
0.00 0.25 0.50 0.75
X2
49
> plot(mod.svm1,data=df1,fill=TRUE,grid=100)
o o o
o oo
0.8 o
1
x
0.6
o ox
X1
x x
0.4 o
o
o
0
o
0.2
x
x o
0.2 0.4 0.6 0.8
X2
Choix de C
Ce paramètre régule le compromis biais/variance de la svm :
— C & : la marge est privilégiée et les ξi % =⇒beaucoup d’observations dans la marge ou mal classées (et donc
beaucoup de vecteurs supports).
— C %=⇒ ξi & donc moins d’observations mal classées =⇒ meilleur ajustement mais petite marge =⇒ risque
de surajustement.
Conclusion
Il est donc très important de bien choisir ce paramètre.
— Le choix est souvent effectué de façon "classique" :
— La fonction [Link] permet de choisir C en estimant le taux de mal classés par validation croisée. On peut
aussi (bien entendu) utiliser la fonction train du package caret.
Un exemple
1.00
0.75
Y
V1
0.50 0
0.25
0.00
0.00 0.25 0.50 0.75 1.00
V2
50
SVM classification plot SVM classification plot SVM classification plot
o o oooooooooo ox x xx xxxxxxxxxxxxxxxxxxxxx xxxxx xxxx x o o oooooooooo oo o x ooooooxoooo x
ooo xxxx xxxx x
o o oooooooooo oo o x ooooooxoooo x
ooo oxxx xxxx x
ooooo
oooo x
xx xx xxxxxxxxxx xxxxx xxxxxxxxxxx xxxx xxxxxx ooooo
oooo oo oxo o
o oo oooooooooxo oo ooooo
oooo oo oxo o
o oo oooooooooxo oo
xxo oo xxxx xxxxxx xoo oo ooooo oooooo oo xox oo oo oooooooxxx xxxx xxxxx xoo oo ooooo oooooo oo xox oo oo ooooooooxx xxxx xxxxx
ooo ooooxxxxxxx x xx x x xxxxxx xxxxxxxx xxxxx
x x
ooo ooooooooo o xo x xx xx ooo ooooooooo o xo ox xx xx
o x xx xxx x xx x xxx o o ooo oooo o o oo ooo xxxxxxxxxx x xx xx o o ooo oooo o o oo ooo xxxxxxxxxx x xx xx
0.8 o xx x x x xxx
oo xxxxxxxxxxxxxxxxx xx xx xxx x xxxxxxxxxxx xxxxxxx x xxxxx 0.8 o o o oooo
oo oxoooooooo x x o oooooo oxxxxxx xxxxx xxxx x
o
0.8 o o o oooo
oo oxoooooooo x x o oooooo ooxoxxxx xxxxx xxxx o
o
o x x xxxx xx xxxxxxxxxxxx x xx x xxxxx oooooxoo o ooo o ooxxxxxxxxxxx xx xx xxxxoooo oooooxoo o ooo o ooxooxxoxxxxx xx xx xxoooooo
1
o o
x x x x xx x x xxxxxx xxx x o o o oo o oo o ooo xxxxxxxxxxxxxxxx o oo o o o o oo o oo o ooo xxxxxxxxxxxxxxxx o oo o
xx xxx xx xx xxxx xxx xxxxx xxxxxxx x xx xxx oo xoo oo oooooxo ox xxxxx xxxxxxx x o o oo oo xoo oo oooooxo ox oxxxx xxxxxxx x o o oo
x xxxxxxxx xxxxxx xxxxxxxxxxxxxxxxxxxxx xxxx xxxx xxxx o oxoooooo ooooooooo oooo o xx xx x x x x o oxoooooo ooooooooo oooo o ooxxx x x xxx ooo oo oo
0.6 xxx x xxxxxxxxxxxxx xxxxxx x xxxxxxxxxx xxx xxxxxx xxx x
x 0.6 ooo oooo o oooxoooxoxxxxxxxxxx xxxxx xxxx xxo oo oooo 0.6 ooo oooo o oooxoooooooxx xxxx xxx o xo
oxooooo o oo xxxx x xxxx xx xooooooo o oo oo oxooooo o oo xxxx x xxxx xxxxxoo ooooo o o ooo
oo
x xxxxx xxxx xxxxx xxxx xxxx xxxxxxxxx xxxxxxxxxx o ooo
o o ox x
xx x o o x o
oo o o ooo
o o ox x
oo x o
oo x oo o o
xxxxxxxxxxxx xx xx xx x xxxxxxxxxxxxx xxx xxx xxx x xxx x ooo oxoooo x xxxxxxxxxxxxxxxx xxx oooo ooo oooxo o
oooooxoooo ooo oxoooo x xxxxxxxxxxxxxxxx xoo oooo ooo oooxo o
oooooxoooo
V1
V1
V1
o o
xxxx xxxxxxxx xx x x x xxxx xx x xx ooo oooooooo xx x x x oxxo oo ooo o ooo oooooooo ox x x x ooxo oo ooo o
0.4 xxxx xxx xxxxxxxx xxxxxx xxxxx xxxxx x x xxxxxx xxx xxx 0.4 oooo ooo oxoxxxxx xxxxxx xxxxx xxxxx o o ooo o xx oo 0.4 oooo ooo oooooxxx xxxxxx xxxxx xxoxx o o ooo o xx oo
xx x xx xx x xxxxx x xx xxxxxx xx o ooo xxxxxx x xx xxx o o ooo o o o ooo ox o ooo xxxxxx x xx oxx o o ooo o o o oo o ox
xx x xxxxx x x o o o o o
o
o o o o o o o
oo o
xxxxx xxxxxxx xxx xxxxxx xxxxxxxxxxxx xx xxxxxxxxxxxxxxxx xxx x x o
oooo o xx x
oox x x xxxxxxoo ooo x ooooooooooooo ooo o o o
oooo o xx x
oox x x xxxoxooo ooo x ooooooooooooo ooo o o
x x xx x x xxxxxxxxx x xxxxx xxxxxxxx x oxx xxxxx xxx xxx xxxo o o
oo xooo o o o o
oo oxooo o oxooxxxx xxx xxx oxoo o o
ooooxooo o oxo o oooo o
oo ooxo
x x ooox x xx xxx x o o x ooo o oooo x xx xxx x o
0
xxx x xx xx x
xx xx x x xx xxx xxxxxxxxx xxxxxxxxx xx x ooo ooo ooo oo o o
0.2 x x xxxx xxx xxxx xxxx x xxxx x x x 0.2 o xxxxxxxx xxxxxxxx xooo o oooooooo ooooooooo oooo 0.2 o xxxxxxxx xxxxxxxx xooo o oooooooo ooooooooo oooo
xxx xx x x x x x x x x xxx oo oo oo oxxooooo o o xxx oo oo oo oxxooooo o o
xxxxxxxxx xxxxxx xxxxxxxxx xxxxxxx xxxxxxxxxxx xxxx xxx xx xxxxxxxxx xxxxxx xooooo o
ooo o ooo xo oooooooo o o xxxxxxxxx xxxxxo xooooo o
ooo o ooo xo oooooooo o
oooo oo
o xoo o oo o oooo oo
o xoo o oo o o o
xxxx xxxxx x x xxx x x x x xx xx x
xx ooxooo o o o oooooo oo
o o o o xx o o
xx ooxooo o o o oooooo o o o o
xxx xxx xxxx xxxxxx xxxxxxxxxxx xxxxxxxx xxxx xxxxx xxxxxxx xxx xxx xxxx xo ooooo ooo oo xo oo
ooxo ooo oo oooo oo
ooooo xxx xxx xxxx ooo ooo ooo oo xo oo
ooxo ooo oo oooo oo
ooooo
0.2 0.4 0.6 0.8 0.2 0.4 0.6 0.8 0.2 0.4 0.6 0.8
V2 V2 V2
> mod.svm1$nSV
## [1] 480 480
> mod.svm2$nSV
## [1] 190 190
> mod.svm3$nSV
## [1] 166 165
> [Link](1234)
> [Link] <- tune(svm,Y~.,data=df3,kernel="linear",
+ ranges=list(cost=c(0.001,0.01,1,10,100,1000)))
> summary([Link])
## Parameter tuning of 'svm':
## - sampling method: 10-fold cross validation
## - best parameters:
## cost
## 1
##
## - best performance: 0.075
##
## - Detailed performance results:
## cost error dispersion
## 1 1e-03 0.127 0.07087548
## 2 1e-02 0.080 0.03944053
## 3 1e+00 0.075 0.03439961
## 4 1e+01 0.075 0.03439961
## 5 1e+02 0.075 0.03439961
## 6 1e+03 0.075 0.03439961
51
> library(tidymodels)
> tune_spec <-
+ svm_poly(cost=tune(),degree=1,scale_factor=1) %>%
+ set_mode("classification") %>%
+ set_engine("kernlab")
> svm_wf <- workflow() %>%
+ add_model(tune_spec) %>%
+ add_formula(Y ~ .)
brutes transf
1.0 1.00
0.5 0.75
Y
X2
0.0 0.50 0
−0.5 0.25
−1.0 0.00
−1.0 −0.5 0.0 0.5 0.00 0.25 0.50 0.75
X1
52
Idée
Trouver une transformation des données telle que les données transformées soient linéairement séparables.
Noyau
Définition 4.1. Soit Φ : X → H une application qui va de l’espace des observations X dans un Hilbert H. Le
noyau K entre x et x0 associé à Φ est le produit scalaire entre Φ(x) et Φ(x0 ) :
K :X ×X →R
(x, x0 ) 7→ hΦ(x), Φ(x0 )iH .
Exemple
Si X = H = R2 et ϕ(x1 , x2 ) = (x21 , x22 ) alors
L’astuce noyau
— L’astuce consiste donc à envoyer les observations xi dans un espace de Hilbert H appelé espace de représen-
tation ou feature space...
— en espérant que les données (Φ(x1 ), y1 ), . . . , (Φ(xn ), yn ) soient (presque) linéairement séparables de manière
à appliquer une svm sur ces données transformées.
Remarque
1. Beaucoup d’algorithmes linéaires (en particulier les SVM) peuvent être appliqués sur Φ(x) sans calculer
explicitement Φ ! Il suffit de pouvoir calculer le noyau K(x, x0 ) ;
2. On n’a pas besoin de connaitre l’espace H ni l’application Φ, il suffit de se donner un noyau K !
53
SVM dans le feature space avec un noyau
— Le problème dual consiste à maximiser
n n n
X 1 XX
LD (α) = αi − αi αk yi yk K(xi , xk )
i=1
2 i=1
k=1
0P≤ αi ≤ C, i = 1, . . . , n
sous les contraintes n
i=1 αi yi = 0.
— La règle de décision s’obtient en calculant le signe de
n
X
f (x) = αi? yi K(xi , x) + b? .
i=1
Conclusion
— Pour calculer la svm, on n’a pas besoin de connaitre H ou Φ, il suffit de connaitre K !
Questions
Qu’est-ce qu’un noyau ? Comment construire un noyau ?
Théorème 4.1 ([Aronszajn, 1950]). Une fonction K : X × X → R est un noyau si et seulement si elle est
(symétrique) définie positive, c’est-à-dire ssi
1. K(x, x0 ) = K(x0 , x) ∀(x, x0 ) ∈ X 2 ;
2. ∀(x1 , . . . , xN ) ∈ X N et ∀(a1 , . . . , aN ) ∈ RN
N X
X N
ai aj K(xi , xj ) ≥ 0.
i=1 j=1
Exemple
brutes transf
1.0 1.00
0.5 0.75
Y
X2
0.0 0.50 0
−0.5 0.25
−1.0 0.00
−1.0 −0.5 0.0 0.5 0.00 0.25 0.50 0.75
X1
Si
Φ: R2 → R3
√
(x1 , x2 ) 7→ (x21 , 2x1 x2 , x22 )
alors K(x, x0 ) = (xt x0 )2 (noyau polynomial de degré 2).
Exemples de noyau
1. Linéaire (vanilladot) : K(x, x0 ) = hx, x0 i.
2. Polynomial (polydot) : K(x, x0 ) = (scalehx, x0 i + offset)degree .
3. Gaussien (Gaussian radial basis function ou RBF - rbfdot)
K(x, x0 ) = exp(−sigmakx − x0 k2 .
4. Laplace (sur R) : K(x, x0 ) = exp(−sigmakx − x0 k).
5. ...
Remarque
Les paramètres correspondent aux noyaux proposés par la fonction ksvm de kernlab (voir [Karatzoglou et al., 2004]).
54
Commentaires
1. En l’absence d’information a priori le noyau radial est préconisé.
2. Procédure d’optimisation pour sigma proposé dans ksvm.
Remarque
N’importe quelle fonction définie positive fait l’affaire... Possibilité de construire des noyaux (et donc de faire des
svm) sur des objets plus complexes (courbes, images, séquences de lettres...).
Le coin R - exemple 1
— Argument kernel dans la fonction svm.
> svm(Y~.,data=donnees,cost=1,kernel="linear")
> svm(Y~.,data=donnees,cost=1,kernel="polynomial",degree=2)
> svm(Y~.,data=donnees,cost=1,kernel="radial",gamma=1)
SVM classification plot SVM classification plot SVM classification plot
o o o o o o
x x o o x o o o o
o x o x o x
o o o
x x o o o x
0.5 x 0.5 x 0.5 x
x x x
1
1
x o o
x x o x x x x x o
x o o x o o
x x x o o x x o x
0.0 x x x 0.0 x o o 0.0 o o x
X1
X1
X1
x x o o o o
x x x x x x o x x o o x
x xx o o xx o x xx o
x x o o o o
−0.5 −0.5 −0.5
0
0
x x o o x o x x o
o o o
xx oo ox
x o o o o o
o o o
−0.5 0.0 0.5 −0.5 0.0 0.5 −0.5 0.0 0.5
X2 X2 X2
Le coin R - exemple 2
Y
X1
0 0
−1
−1 0 1 2
X2
> svm(Y~.,data=donnees,kernel="linear",cost=1)
> svm(Y~.,data=donnees,kernel="polynomial",degree=2,cost=1)
oo o o oo o o
o o
1.5 o ooooo 1.5 o ooooo
o o o o
o oo ooooooo oo o o o
o oo o oo ooooooo oo o o o
o oo
o o oooo ooo o o o oooo ooo o
1.0 o oooo o o oooooooooo 1.0 o oooo o o oooooooooo
o oo o oo o oo o o oo o oo o oo o
1
oo o ooo oo o oo o ooo oo o
ooo oo o oo o o ooo oo o oo o o
0.5 o o 0.5 o o
oo oo
o o
X1
X1
0.0 0.0
o o
o o
−0.5
o o o o oo
o oo
−0.5
o x o o oo
o oo
x xxx x xx oo o o ox ooo x oo oo o o
oxox oxo ooooo ooooo oxox ooo ooooo ooooo
−1.0 x x x xxxxxo xoo o oooo oo −1.0 o o x oxxxoo xoo o oooo oo
0
x xo xo xx o o oo o o oo ooo xo o o oo o
xx x o o oooo oo o ox x o o oooo oo o
xx oo oo xo oo oo
−1.5 o ox o −1.5 o xx o
o o
o o o o
X2 X2
Le package kernlab
— Il propose un choix plus large de noyau.
> library(kernlab)
> [Link] <- ksvm(Y~.,data=donnees,kernel="polydot",
+ kpar=list(degree=2),C=0.001)
> plot([Link])
55
SVM classification plot
1.5
1.0
1.0
0.5 0.5
X1
0.0
0.0
−0.5
−1.0 −0.5
−1.5
−1.0
−1.5 −1.0 −0.5 0.0 0.5 1.0 1.5
X2
Probabilités
— La valeur de f (x) est difficilement interprétable en tant que telle.
— Il peut être intéressant de la "ramener” entre 0 et 1 pour l’interpréter comme une estimation de P(Y = 1|X =
x).
Une solution
— Considérer un modèle logistique :
1
P(Y = 1|X = x) =
1 + exp(af (x) + b)
— et d’estimer a et b par maximum de vraisemblance sur les données (f (xi ), yi ), i = 1, . . . , n.
Le coin R
> [Link] <- svm(Y~.,data=df,kernel="linear",cost=10000000000,probability=TRUE)
> plot([Link],data=df,fill=TRUE,grid=100)
0.8
o
1
o o
0.6
x o
o
o
X1
0.4 o
o
o
o
0
0.2 x
o o o
o
x o
0.2 0.4 0.6 0.8
X2
56
— Nouvelle observation :
> newX <- [Link](X1=0.2,X2=0.6)
— et à la régression : yi ∈ R.
57
One against all
Algorithme
1. Faire une SVM binaire avec tous les individus de chaque groupe contre les autres.
2. On obtient ainsi M règles "linéaires" fj (x) (groupe j contre les autres).
3. On classe un nouvel individu dans la classe qui a le score le plus élevé :
f (x) = argmax fj (x).
j
Comparaison
— M SVM binaire avec l’approche one against all contre M (M − 1)/2 avec le one against one mais...
— moins d’individus dans les one against one.
— Risque de déséquilibre plus fort avec le one against all (mais généralement plus rapide).
— Comme dans le cas binaire, il faut sélectionner le paramètre de complexité, le noyau, les paramètres du
noyau...
Le coin R
— L’approche one against one est plus souvent utilisée.
— C’est le cas par défaut avec svm de e1071 et ksvm de kernlab.
Exemple
1.0
0.5
Y
1
X1
0.0
2
3
−0.5
−1.0
−1.0 −0.5 0.0 0.5 1.0
X2
o o o o o o o oo
o o
x x oo o o o
o o oo o o o o
o o o o
oo o o o o
3
xo
o o o x xx o o oo o
0.5 o o o
o o o
ooo o x o o
o o oo o o o
o
o o
o
o o o x o o o
o oo o x o
o o o
o o
X1
0.0 x
2
oo o o x oo o
o o o
o o oo o x x xo x x
o o oo o o
o o x o o x
x o o o
−0.5 o
oo x oo o o oo x x o oo o
o o o x
o o o oo o
o ox x o o o oo
1
oo oo
x
o oo x x
xx o o o o o oo o o
o ooo o o o o o
o
X2
58
SVM non linéaire multi classes
— Il "suffit" d’utiliser un noyau.
> multi2 <- svm(Y~.,data=df,cost=0.1,kernel="sigmoid")
> plot(multi2,data=df,grid=100)
o x x x x x x xx
x x
x x xx x x o
o o ox x x x x
x x xo
oo o o x x
3
xx
o o x x xx x x oo o
0.5 o o o
x o o
ooo o x x o
o o xx x x o
o
o o
oo o x x x x x x x
x x x x
x x x
x x
X1
0.0 x
2
xx x x x xx x
x x x
x x xx x x x
xx x x x x xx x x
x x x x x x
x x x x
−0.5 x
xx x xx x x xx x x x xx x
x
x x x x xx xx x
x xx x x x x xx
1
xx oo
x
o oo x x
xx x x x x x xx x x
x ooo o x x x x
x
X2
|hw, xi i + b − yi | petits.
Optimisation SVR
On va chercher à minimiser la norme de w en se fixant comme contrainte que les yi ne soient pas "trop loin” de
l’hyperplan :
1
min kwk2
w,b 2
Un exemple en dimension 1
59
2.0
1.5
Y 1.0
Un exemple en dimension 1
wx + b + ε
2.0
wx + b
1.5
Y
wx + b − ε
1.0
Influence de ε
— Il contrôle le niveau de tolérance que l’on se donne.
2.0
epsilon
1.5
0.5
Y
0.65
1.0
Alléger la contrainte...
— La contrainte nécessite souvent de prendre des grandes valeurs de ε...
60
3.0
2.5
2.0
Y
1.5
1.0
Idée
— Comme pour la SVM binaire, autoriser des observations à se situer en dehors de la marge !
— Comment ? En introduisant des slack variables !
2.0
ξi
1.5
Y
1.0
ξi?
61
Rien ne change après...
— Les solutions s’obtiennent en résolvant le problème dual =⇒ αi , αi? .
— Les données (les X) sont généralement centrées-réduites pour éviter les problèmes d’échelle.
Le coin R
— Là aussi, pas grand chose ne change.
> svm(Y~.,data=df,kernel="linear",epsilon=0.5,cost=100)
##
## Call:
## svm(formula = Y ~ ., data = df, kernel = "linear", epsilon = 0.5,
## cost = 100)
##
##
## Parameters:
## SVM-Type: eps-regression
## SVM-Kernel: linear
## cost: 100
## gamma: 1
## epsilon: 0.5
##
##
## Number of Support Vectors: 11
Conclusion
— Algorithme machine learning pouvant être utilisé en régression et en classification supervisée.
— Méthode linéaire mais prise en compte possible de la non linéarité grâce à l’astuce du noyau.
5 Bibliographie
Références
Biblio2
[Aronszajn, 1950] Aronszajn, N. (1950). Theory of reproducing kernels. Transactions of the American Mathematical
Society, 68 :337–404.
[Bühlmann and van de Geer, 2011] Bühlmann, P. and van de Geer, S. (2011). Statistics for high-dimensional data.
Springer.
[Cornillon et al., 2019] Cornillon, P., Hengartner, N., Matzner-Løber, E., and Rouvière, L. (2019). Régression avec
R. EDP Sciences.
62
[Fromont, 2015] Fromont, M. (2015). Apprentissage statistique. Université Rennes 2, diapos de cours.
[Hastie et al., 2009] Hastie, T., Tibshirani, R., and Friedman, J. (2009). The Elements of Statistical Learning :
Data Mining, Inference, and Prediction. Springer, second edition.
[Hastie et al., 2015] Hastie, T., Tibshirani, R., and Wainwright, M. (2015). Statistical Learning with Sparsity : The
Lasso and Generalizations. CRC Press. [Link]
[Link].
[Karatzoglou et al., 2004] Karatzoglou, A., Smola, A., Hornik, K., and Zeileis, A. (2004). kernlab – an s4 package
for kernel methods in r. Journal of Statistical Software, 11(9).
[Tibshirani, 1996] Tibshirani, R. (1996). Regression shrinkage and selection via the lasso. Journal of the Royal
Statistical Society, Series B, 58 :267–288.
[Zou and Hastie, 2005] Zou, H. and Hastie, T. (2005). Regularization and variable selection via the elastic net.
Journal of the Royal Statistical Society, Series B, 67 :301–320.
63
Troisième partie
Algorithmes non linéaires
— Algorithmes linéaires :
f (x) = fβ (x) = β0 + β1 x1 + . . . + βd xd .
— Problème : tous les problèmes ne sont pas linéaires.
— Possible d’ajouter de la non linéarité dans les algorithmes linéaires : effets quadratiques, interaction...
— Difficile pour l’utilisateur de trouver quels effets ajouter ! Surtout lorsque d est grand.
1 Arbres
Présentation
— Les arbres sont des algorithmes de prédiction qui fonctionnent en régression et en discrimination.
— Nous nous focalisons dans cette partie sur la méthode CART [Breiman et al., 1984] qui est la plus utilisée.
— Y peut admettre un nombre quelconque de modalités et les variables X1 , . . . , Xd peuvent être qualitatives et/ou
quantitatives.
— Néanmoins, pour simplifier on se place dans un premier temps en discrimination binaire : Y admet 2 modalités
(-1 ou 1). On suppose de plus que l’on a simplement 2 variables explicatives quantitatives.
0.75
Y
X2
0.50 0
0.25
0.00
0.00 0.25 0.50 0.75 1.00
X1
64
Arbres binaires
— La méthode CART propose de construire une partition basée sur des divisions successives parallèles aux axes.
— 2 exemples de partition :
Arbre 1 Arbre 2
1.00
0.75
X2
0.50
0.25
0.00
0.00 0.25 0.50 0.75 1.00 0.00 0.25 0.50 0.75 1.00
X1
— A chaque étape, la méthode cherche une nouvelle division : une variable et un seuil de coupure.
1.00
0.75
X2
0.50
0.25
0.00
0.00 0.25 0.50 0.75 1.00
X1
1.00
0.75
X2
0.50
0.25
0.00
0.00 0.25 0.50 0.75 1.00
X1
65
1.00
0.75
X2
0.50
0.25
0.00
0.00 0.25 0.50 0.75 1.00
X1
1.00
0.75
X2
0.50
0.25
0.00
0.00 0.25 0.50 0.75 1.00
X1
1.00
0.75
X2
0.50
0.25
0.00
0.00 0.25 0.50 0.75 1.00
X1
Représentation de l’arbre
1.00
1
0.57
0.75 100%
yes X2 < 0.39 no
0 1
0.32 0.75
X2
1 0
0.25 0.61 0.17
21% 15%
X1 < 0.23 X1 >= 0.31
0.00
0 0 1 0 1 1
0.00 0.25 0.50 0.75 1.00 0.03 0.08 1.00 0.00 0.57 0.95
X1 21% 9% 12% 11% 5% 43%
66
Remarque
Visuel de droite plus pertinent :
— Plus d’information.
— Généralisation à plus de deux dimensions.
Vocabulaire
— Chaque coupure divise une partie de Rd en deux parties appelées nœuds.
— Le premier nœud, qui contient toutes les observations, est le nœud racine.
— Une coupure divise en noeud en deux nœuds fils :
Xj ≥ s Xj < s
N1 (j, s) N2 (j, s)
— Les nœuds qui ne sont pas découpés (en bas de l’arbre) sont les nœuds terminaux ou feuilles de l’arbre.
Questions
1. Comment découper un nœud ?
=⇒ si on dispose d’un algorithme pour découper un nœud, il suffira de le répéter.
2. Comment choisir la profondeur de l’arbre ?
— Profondeur maximale ? (on découpe jusqu’à ne plus pouvoir) sur-ajustement ?
— Critère d’arrêt ?
— Élagage ? (on construit un arbre profond et on enlève des branches "inutiles"...).
Fonction d’impureté
— Objectif : mesurer l’homogénéité d’un nœud.
— Intérêt : choisir la coupure qui maximise la pureté des nœuds fils.
67
Critère de découpe
— L’impureté I d’un nœud doit être :
1. faible lorsque un nœud est homogène : les valeurs de Y dans le nœud sont proches.
2. élevée lorsque un nœud est hétérogène : les valeurs de Y dans le nœud sont dispersées.
L’idée
Une fois I définie, on choisira le couple (j, s) qui maximise le gain d’impureté :
∆(j, s) = p(N )I(N ) − (p(N1 (j, s))I(N1 (j, s)) + p(N2 (j, s))I(N2 (j, s)))
12345 12345
6(2.92) 6(2.92)
234 12 45
1 5(4)
6(2.19) 3(0.67) 6(0.67)
Exemple
Coupure 1 Coupure 2
2
Y
68
1.2.2 Cas de la classification supervisée
— Les Yi , i = 1, . . . , n sont à valeurs dans {1, . . . , K}.
— grande sinon.
Impureté
L’impureté d’un nœud N en classification se mesure selon
K
X
I(N ) = f (pj (N ))
j=1
où
— pj (N ) représente la proportion d’observations de la classe j dans le nœud N .
— f est une fonction (concave) [0, 1] → R+ telle que f (0) = f (1) = 0.
Exemples de fonctions f
— Si N est pur, on veut I(N ) = 0 =⇒ c’est pourquoi f doit vérifier f (0) = f (1) = 0.
Cas binaire
Dans ce cas on a
1. I(N ) = 2p(1 − p) pour Gini
2. I(N ) = −p log p − (1 − p) log(1 − p) pour Information
où p désigne la proportion de 1 (ou 0) dans N .
0.6
Indice
valeurs
0.4
gini
information
0.2
0.0
0.00 0.25 0.50 0.75 1.00
p
69
Exemple 1
N•N N•N
•N•(0.5) •N•(0.5)
NNN
N•N(0.44) •N•(0.44) •••(0)
(0)
Exemple 2
Coupure 1 Coupure 2
1.00
0.75
Y
X2
0.50 0
0.25
0.00
0.00 0.25 0.50 0.75 1.000.00 0.25 0.50 0.75 1.00
X1
1.3 Elagage
Pourquoi élaguer ?
— Les coupures permettent de séparer les données selon Y =⇒ plus on coupe mieux on ajuste !
— Risque de sur-ajustement si on coupe trop !
Erreur
Ajustement
Prévision
Sur−apprentissage
Complexité
70
Comment faire ?
— Tester tous les arbres ? =⇒ possible uniquement sur de petits échantillons !
— Critère d’arrêt : ne plus découper si une certaine condition est vérifiée.=⇒ possible mais... une coupure peut
ne pas être pertinente alors que des coupures plus basses le seront !
Élaguer
1. Considérer un arbre (trop) profond =⇒ qui sur-ajuste ;
2. Supprimer les branches peu utiles.
Élagage CART
— Tester tous les sous-arbres d’un arbre très profond se révèlent souvent trop couteux en temps de calcul.
— [Breiman et al., 1984] propose une stratégie d’élagage qui permet de se ramener à une suite d’arbres emboités
Tmax = T0 ⊃ T1 ⊃ . . . ⊃ TK .
— Classification :
1 X
Rm (T ) = 1yi 6=yNm
Nm
i:xi ∈Nm
Définition
Soit α ≥ 0, le critère coût/complexité est défini par :
|T |
X
Cα (T ) = Nm Rm (T ) + α|T |.
m=1
Idée
— Cα (T ) est un critère qui prend en compte l’adéquation d’un arbre et sa complexité.
— L’idée est de chercher un arbre Tα qui minimise Cα (T ) pour une valeur de α bien choisie.
Remarque
— α = 0 =⇒ Tα = T0 = Tmax .
— α = +∞ =⇒ Tα = T+∞ = Troot arbre sans coupure.
71
Deux lemmes
Lemme 1
Si T1 et T2 sont deux sous-arbres de Tmax avec Rα (T1 ) = Rα (T2 ). Alors T1 ⊂ T2 ou T2 ⊂ T1
=⇒ garantit une unique solution de taille minimale.
Lemme 2
Si α > α0 alors Tα = Tα0 ou Tα ⊂ Tα0 .
=⇒ garantit une stabilité des solutions lorsque α parcourt R+ =⇒ elles vont être emboîtées les unes dans les autres.
Commentaires
— Nombre de minimiseurs de Cα (T ) est "petit".
— Ils s’obtiennent en élaguant : en supprimant des branches.
Exemple
— On visualise la suite de sous-arbres avec la fonction printcp ou dans l’objet rpart :
> library(rpart)
> [Link](123)
> arbre <- rpart(Y~.,data=[Link],cp=0.0001,minsplit=2)
> arbre$cptable
## CP nsplit rel error xerror xstd
## 1 0.353846154 0 1.00000000 1.0000000 0.09336996
## 2 0.230769231 1 0.64615385 0.7076923 0.08688336
## 3 0.138461538 2 0.41538462 0.5076923 0.07805324
## 4 0.061538462 4 0.13846154 0.2153846 0.05481185
## 5 0.015384615 5 0.07692308 0.1846154 0.05111769
## 6 0.007692308 6 0.06153846 0.2461538 0.05816388
## 7 0.000100000 14 0.00000000 0.2153846 0.05481185
Sorties printcp
— Suite de 7 arbres emboités.
— CP : complexity parameter, il mesure la complexité de l’arbre : CP &=⇒ complexité %.
— nsplit : nombre de coupures de l’arbre.
— [Link] : erreur (normalisée) calculée sur les données d’apprentissage =⇒ erreur d’ajustement.
— xerror : erreur (normalisée) calculée par validation croisée 10 blocs =⇒ erreur de prévision (voir diapos
suivantes).
— xstd : écart-type associé à l’erreur de validation croisée.
Visualisation
— On peut les visualiser en combinant prune (extraction) et [Link] (tracé) :
72
> arbre1 <- prune(arbre,cp=0.01)
> arbre2 <- prune(arbre,cp=0.1)
> library([Link])
> [Link](arbre1);[Link](arbre2)
1 1
0.57
100%
0.57
100%
yes X2 < 0.39 no
yes X2 < 0.39 no
0 1
0.32 0.75
42% 58%
0 1
0.32 0.75
X1 >= 0.58 X2 >= 0.79
42% 58%
1 0
0.61 0.17 X1 >= 0.58 X2 >= 0.79
21% 15%
1
X1 < 0.23 X1 >= 0.18
0.61
0
0.08 21%
9% X1 < 0.23
X1 >= 0.016
0 0 1 0 1
0 0 1 1 0 1 1
0.03 0.00 1.00 1.00 0.00 1.00 0.95 0.03 0.08 1.00 0.17 0.95
21% 8% 1% 12% 13% 3% 43% 21% 9% 12% 15% 43%
Remarque
La fonction rpart effectue par défaut une validation croisée 10 blocs en prenant :
— le risque quadratique en régression.
— l’erreur de classification en classification.
— Les erreurs de validation croisée se trouvent dans la colonne xerror de l’élément cptable.
— On peut les visualiser avec plotcp :
> plotcp(arbre)
73
size of tree
1 2 3 5 6 7 15
1.2
1.0
X−val Relative Error
0.8
0.6
0.4
0.2
0.0
Inf 0.29 0.18 0.092 0.031 0.011 0.00088
cp
— et à le visualiser :
> arbre_final <- prune(arbre,cp=cp_opt)
> [Link](arbre_final)
1
0.57
100%
yes X2 < 0.39 no
0 1
0.32 0.75
42% 58%
X1 >= 0.58 X2 >= 0.79
1 0
0.61 0.17
21% 15%
X1 < 0.23 X1 >= 0.18
0 0 1 0 1 1
0.03 0.08 1.00 0.00 1.00 0.95
21% 9% 12% 13% 3% 43%
1.00
0.75
Y
X2
0.50 0
0.25
0.00
Prévision
— Nouvel individu :
74
> xnew <- tibble(X1=0.4,X2=0.5)
— Prévision de la classe :
> predict(arbre_final,newdata=xnew,type="class")
## 1
## 1
## Levels: 0 1
Xj1 , ∆j1
— Nœuds internes =⇒ Nt , t = 1, . . . , J − 1 ;
— Variables de coupure =⇒ Xjt ; Xj2 , ∆j2
— Gain d’impureté =⇒ i2jt .
Xj3 , ∆j3
Exemple
0
0.35
100%
yes age < 51 no
0 1
0.22 0.56
63% 37%
age < 31 famhist = Absent
0 0 1
0.31 0.40 0.70
39% 18% 19%
typea < 69 tobacco < 7.6 ldl < 5
1
0.54
8%
adiposity >= 28
0
0.35
4%
tobacco < 4.2
0 0 1 0 1 0 1 1 1
0.07 0.27 0.83 0.28 0.71 0.10 0.60 0.74 0.82
23% 37% 3% 13% 5% 2% 2% 4% 11%
75
> library(vip)
> vip(arbre)
age
tobacco
adiposity
typea
ldl
sbp
famhist
obesity
alcohol
0 10 20 30
Importance
Bilan
1. Avantages :
— Méthode « simple » relativement facile à mettre en œuvre.
— Fonctionne en régression et en classification.
— Résultats interprétables (à condition que l’arbre ne soit pas trop profond).
2. Inconvénients :
— Performances prédictives limitées.
— méthode connue pour être instable, sensible à de légères perturbations de l’échantillon. =⇒ Cet inconvé-
nient sera un avantage pour des agrégations bootstrap =⇒ forêts aléatoires.
2 Réseaux de neurones
2.1 Introduction
Bibliographie
— Wikistat : Neural natworks and introduction to deep learning
— Eric Rakotomalala : Deep learning : Tensorflow et Keras sous R
— Rstudio : R interface to Keras
Historique
— Modélisation du neurone formel [McCulloch and Pitts, 1943].
— Concept mis en réseau avec une couche d’entrée et une sortie [Rosenblatt, 1958].
— Origine du perceptron
— Approche connexioniste (atteint ses limites technologiques et théoriques au début des années 70)
— Relance de l’approche connexioniste au début des années 80 avec l’essor technologique et quelques avancées
théoriques
— Estimation du gradient par rétro-propagation de l’erreur [Rumelhart et al., 1986].
— Développement considérable (au début des années 90)
— Remis en veilleuse au milieu des années 90 au profit d’autres algorithmes d’apprentissage : boosting, support
vector machine...
— Regain d’intérêt dans les années 2010, énorme battage médiatique sous l’appellation d’apprentissage pro-
fond/deep learning.
— Résultats spectaculaires obtenus par ces réseaux en reconnaissance d’images, traitement du langage naturel...
76
Différentes architectures
Il existe différents types de réseaux neuronaux :
— perceptron multicouches : les plus anciens et les plus simples ;
— réseaux récurrents : adaptés à des données séquentielles (données textuelles, séries temporelles).
Définition
Le perceptron simple est une fonction f des entrées x
— pondérées par un vecteur w = (w1 , . . . , wp ),
— complétées par un neurone de biais w0 ,
— et une fonction d’activation σ : R → R
ŷ = f (x) = σ(w0 + w1 x1 + . . . + xp xp ).
77
Fonction d’activation
Plusieurs fonctions d’activation peuvent être utilisées :
— Identité : σ(x) = x ;
— sigmoïde ou logistique : σ(x) = 1/(1 + exp(−x)) ;
— seuil : σ(x) = 1x≥0 ;
— ReLU (Rectified Linear Unit) : σ(x) = max(x, 0) ;
p
— Radiale : σ(x) = 1/2π exp(−x2 /2).
Remarque
Les poids wj sont estimés à partir des données (voir plus loin).
Représentation graphique
w0
x1 w1
x2 w2
x3 w3 Σ σ y
..
.
..
.
xp wp
Le coin R
— Plusieurs packages R permettent d’ajuster des réseaux de neurones : nnet, deepnet. . .
— Nous présentons ici le package keras, initialement programmé en Python et qui a été "traduit" récemment en
R.
> library(keras)
> install_keras()
Exemple
— On veut expliquer une variable Y binaire par 4 variables d’entrées X1 , . . . , X4 .
— On dispose d’un échantillon d’apprentissage de taille 300 :
> head(dapp)
## X1 X2 X3 X4 Y
## 1 0.5855288 -1.4203239 1.67751179 -0.1746226 1
## 2 0.7094660 -2.4669386 0.07947405 -0.6706167 1
## 3 -0.1093033 0.4847158 -0.85642750 0.5074258 0
## 4 -0.4534972 -0.9379723 -0.77877729 1.2474343 0
## 5 0.6058875 3.3307333 -0.38093608 -1.2482755 1
## 6 -1.8179560 -0.1629455 -1.89735834 -1.9347187 1
Définition du modèle
— Elle s’effectue à l’aide des fonctions keras_model_sequential et layer_dense.
> model <- keras_model_sequential()
> model %>% layer_dense(units=1,input_shape=c(4),
+ activation="sigmoid")
78
Summary
— Un summary du modèle permet de visualiser le nombre de paramètres à estimer.
> summary(model)
## ___________________________________________________________________________
## Layer (type) Output Shape Param #
## ===========================================================================
## dense (Dense) (None, 1) 5
## ===========================================================================
## Total params: 5
## Trainable params: 5
## Non-trainable params: 0
## ___________________________________________________________________________
Estimation
— On utilise la fonction fit pour entrainer le modèle
> Xtrain <- [Link](dapp[,1:4])
> Ytrain <- dapp$Y
> model %>% fit(x=Xtrain,y=Ytrain,epochs=300,batch_size=5)
Visualisation du réseau
0.174
x1 0.251
x2 0.092
x3 −0.163 Σ σ y
x4 −0.005
Estimation
1
Pb(Y = 1|X = x) =
1 + exp(−(0.174 + 0.251x1 + . . . − 0.005x4 ))
79
Prévision
— On calcule la prévision de la probabilité P (Y = 1|X = x) pour le premier individu de l’échantillon test :
> w <- W[[1]]
> w0 <- W[[2]]
> Xtest <- [Link](dtest[,1:4])
> sc1 <- w0+sum(w*Xtest[1,])
> 1/(1+exp(-sc1))
## [1] 0.6209704
Constat
— Règle de classification : le preceptron simple affecte un individu dans le groupe 1 si
Idée
Conserver cette structure de réseau en considérant plusieurs couches de plusieurs neurones.
Perceptron simple
x1
x2
x3
σ y
..
.
..
.
xp
Commentaires
— Les neurones de la première couche (cachée) calculent des combinaisons linéaires des entrées.
— Ces combinaisons linéaires sont ensuite activées par une fonction d’activation, produisant une sortie par
neurone.
— Chaque neurone de la deuxième couche (cachée) est une combinaison linaire des sorties de la couche précé-
dente...
— activées par une fonction d’activation, produisant une sortie par neurone...
80
Entrées C. cachée C. Sortie Sortie
x1
σ1,1
x2
x3 σ1,2
σ y
.. ..
. .
..
.
σ1,k1
xp
x1
σ1,1 σ2,1
x2
x3 σ1,2 σ2,2
σ y
.. .. ..
. . .
..
.
σ1,k1 σ2,k2
xp
Remarque
Le nombre de neurones dans la couche finale est définie par la dimension de la sortie y :
— Régression ou classification binaire =⇒ 1 neurone.
— Classification multiclasse (K) =⇒ K (ou K − 1) neurones.
Le coin R
— L’ajout de couches cachées dans keras est relativement simple.
— Il suffit de définir ces couches au moment de la spécification du modèle.
— Par exemple, pour deux couches cachées avec 10 et 5 neurones, on utilisera :
> model <- keras_model_sequential()
> model %>% layer_dense(units=10,input_shape=c(4),activation="sigmoid") %>%
+ layer_dense(units=5,activation="sigmoid") %>%
+ layer_dense(units=1,activation="sigmoid")
> summary(model)
## ___________________________________________________________________________
## Layer (type) Output Shape Param #
## ===========================================================================
## dense_1 (Dense) (None, 10) 50
## ___________________________________________________________________________
## dense_2 (Dense) (None, 5) 55
## ___________________________________________________________________________
## dense_3 (Dense) (None, 1) 6
## ===========================================================================
## Total params: 111
## Trainable params: 111
## Non-trainable params: 0
## ___________________________________________________________________________
81
2.4 Estimation
— L’utilisateur doit choisir le nombre de couches, le nombre de neurones par couche, les fonctions d’activation
de chaque neurone.
— Une fois ces paramètres choisis, il faut calculer (estimer) tous les vecteurs de poids dans tous les neurones.
L’approche
— On désigne par θ l’ensemble des paramètres à estimer =⇒ f (x, θ) la règle associée au réseau.
— Minimisation de risque empirique : minimiser
n
1X
Rn (θ) = `(yi , f (xi , θ))
n i=1
Fonctions de perte
— Erreur quadratique (régression) :
`(y, f (x)) = (y − f (x))2 .
— Cross-entropy ou log-vraisemblance négative (classification binaire 0/1) :
Descente de gradient
— La solution s’obtient à l’aide de methodes de type descente de gradient :
— Le réseau étant structuré en couches, la mise à jour des paramètres n’est pas directe.
Batch et epoch
— L’algorithme de rétropropagation n’est généralement pas appliqué sur l’ensemble des données, mais sur des
sous-ensemble de cardinaux m appelés batch.
— Cette approche est classique sur les gros volumes de données et permet de prendre en compte des données
séquentielles.
— Pour prendre en compte toutes les données sur une étape de la descente de gradient, on va donc appliquer
n/m fois l’algorithme de rétropropagation.
— Une itération sur l’ensemble des données est appelée epoch.
82
Algorithme de rétropropagation stochastique
Algorithme
Entrées : ε (learning rate), m (taille des batchs), nb (nombre d’epochs).
1. Pour ` = 1 à nb
2. Partitionner aléatoire les données en n/m batch de taille m =⇒ B1 , . . . , Bn/m .
(a) Pour j = 1 à n/m
i. Calculer les gradients sur le batch j avec l’algorithme de rétropropagation : ∇θ .
ii. Mettre à jour les paramètres
θnew = θold − ε∇θold .
Sorties : θnew et f (x, θnew ).
En pratique
Il est courant de visualiser l’évolution de la fonction de perte et/ou d’un critère de performance en fonction du
nombre d’epoch.
Un exemple
— On considère un réseau à 2 couches cachées comportant 50 nœuds (2851 paramètres).
> model1 <- keras_model_sequential()
> model1 %>% layer_dense(units=50,input_shape=c(4),
+ activation="sigmoid") %>%
+ layer_dense(units = 50,activation = "sigmoid") %>%
+ layer_dense(units = 1,activation = "sigmoid")
— On utilise
— crossentropy comme perte.
— Adam comme algorithme d’optimisation.
— accuracy (taux de bien classés) comme mesure de performance.
> model1 %>% compile(
+ loss="binary_crossentropy",
+ optimizer="adam",
+ metrics="accuracy"
+ )
— On estime les paramètres avec m = 5 et nb = 1000 et utilise 20% des données dans l’échantillon de validation.
> history <- model1 %>% fit(
+ x=Xtrain,
+ y=Ytrain,
+ epochs=1000,
+ batch_size=5,
+ validation_split=0.2
+ )
Erreur et perte
> plot(history)
83
●
●●
●
● ●●●● ●●●
●● ● ●
●● ●
●●
0.75 ●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●●
●
●
●
●●
● ●
●
● ●●● ● ●● ●
●
●
●
●●
●
●
●
●●●
●●●
●●
●●
●
●
●
●●
●
● ●
●
●●
●●●
●
●●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●
●
● ●
●● ●●●
●●●
●
●●
●●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●●
●
●
●
●
●● ●
●
●●
●●●●
●
●
●
●
●
●●
●
●
● ●
●●
●
●
●●●
●
●●
●
●
●
● ●●
●
●●
●●
●
●●
● ●●
●●
●●●
●
●
●
●
● ●●
●
●●
● ●
●
●
●
● ●
●
●●
●
●
●
●
● ●●
●
●
●
●
● ●
●
●●
●
●
●
●
●
●
●
●
●
●
●●●●
●●
●
● ●
●
●
●● ●
●
●
●●
●
●
●● ●
●●●
●
●
●●
●
● ●●●
0.50 ●
●●
●
●
●
●
●
●●
loss
●
●
●●
●
●
● ●●●
●●●
●
●●
●
●
● ●●
●
●
●●
●
●
●
●
●● ● ●
●●
●●
●
●● ●
●
●
●
●
●
● ●
●●
● ●
●
●
●
●
●
● ●●●
●
●
●
●
●●
● ●●
●
●
●
●
●●
● ●
●
●
●●
●
●
●
●
●●
● ●●
●●
●
●
●
● ●
●●
●●
●
●
●● ●●
●
●●
●
●
●
● ●●
●
●●
●
●
●
●
●● ●●
●
●
●
●●
●
●
●
● ●●
●
●●
●
●
●
● ●●
●●
●
● ●
●●
●
●
●
●
●●●●●
●
●
●
●
● ●
●●
●
●●
0.25 ●
●
●
● ●
●●
●
●
●●● ●
●
●
●
●
●●●
●
●
●
●●
●
●●
●
●
●
●
●
●●
●
● ● ●
●
●
●●
●
●●
●●
●●
●
●
●
●
●●
●
●
●●
● ●
●
●
●
●
●●
●
●
●●●
●
●● ●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●●
●
● ● ●
● ● ●
● ●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
● ●● ●
● ● ● ●● ● ● ●
●●●
●
●
●●●
●
●●●
● ●●●
●●
●
●
●
●●
●
●●
●●●
●
●
●
●●
●
●
●
●●
●●●
●●●
●● ●●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
● ●
●
● ● ● ● ● ● ●● ● ● ● ● ● ●●●
●
●●●●
●●
●●
●
●
●
●
●
●●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●●
●
●
●
●
●
●●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●●
●
●
●
●●
●
●
●
●●●●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●●●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
● ●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●●
●●
●
●
●●
●
●●●●
●●● ●●●
●●● ●● ●● ●● ●● ● ●●●●
●●
●
●
●●
●
● ●
●
●
●
● ●
●
●●
●
●●
●
●●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●●
●
●●●●
●● ●● ● ●
● ●
●●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●●
●
●●
●
●●
●
●●
●●
●
●
●●
●
●●
●
●
●
●●
●●
● ●●
●
●●● ●● ●●●
●
● ● ●●
●
●●● ●
●
●
●
●●
●
●●
●
●●
●●
●
●
●●
●
●
●
●
●●
●●
●
●
●
●●
●
●●
●
●●
●
●●●
● ● ● ●
●
●
●●
●
●
●●
●
●
●
●
●●
●
●
●
● ●
●
●●
●●
●
● ●
●●●
●
●
●●
●●
●
●
●
●●
●
●
●●
●
●●
●
●●
●
●
●●
●●
●
●
●●
●●
●●
●●
●
●
●●
●
●
●●●
●
●●
●
●
●
●●
●
●●
●
●
●●
●●
●
●
●
●
●●
●
●
●●
●
●●
●
●●
●
●
●●
●
●
●
●●●●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●●
●
● ● ●
●●
●●
●
●
●●
●
●●
●
●●
●
●●
●●
●
●●●
●
●
●
●● ●
●●
● ●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●●
●
●●
●
●●
●
●
●●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●●
●
●
●
●●
●
●
●●●
●
●●●
●
●
●●
● ●
● ●
●●
● ●
● ●
● ●
● ●
● ●
●
● ●
●
●
●
● ●● ●
data
0.00 ● ●●
●●
●
●
●●●
●
●●
●
●
●
●●
●
●
●●
●
●
●
●●
●
●●
●
●
●●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
● training
1.0 ● ●
●●●
●●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●● ●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
● ● validation
●
●●
●
●
●●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●●●
●●
●
●●
●
●●●
●
●
●●●
●●●
●
●●
●
●
●
●● ●●●● ●
●
●●
●
●
● ●
●
●
●●●
●
●
●●
●
●●
●●
●
●●
●
●
●●
●
●●
●
●●
●
●●
●
●
●●
●
●
●●
●
●
●●
●
●●
●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●●
●
●●
●
●
●●
●
●
●●
●
●
●●
●
●●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●●
●
●
●
●●
●
●
●
●●
●
●
●
●●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●●
●
●
●
●●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●●
●
●●
●
●●
●
●
●●
●
●●
●
●
●
●●
●
●
● ●●
●
●●●●
●
●●
●●
●
●●●
●
●
●●
●●
●●●●
●●
●
●●
●●
●
●●
●
●●
●
●
●●
●●●
●
●●
●●
●●
●●
●
●●● ● ●
● ● ● ●● ●● ● ●
●
●
●
●●
●
●
●
●●
●
●●
●
●●
●
●●
●●
●
●●
● ● ●
●
●
●
●●
●
●
●
●●●
●
●●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●●
●●
●
●●
●
●
●●
●
●
●
●●●
●
●●
●
●●
●
●●
●
●●●
●
●●
●● ●
●●●
●●
●●
●●
●
●
●●●
●●●
●
●●
●
●●
●
●
●
●●
●
●●●
● ●●
●
●●
●●
●●
●
●
●●
● ●●●
●
●●
●●
●
●
●
●●● ●
●●
●
●
●● ●●●●
●●●●
●
●
●●
●
●●
0.8 ●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●●
●
●
●
●●
●
●●
●
●
●
●●● ●
●
●●●●
● ●
●
●●● ●●●
●
●●●
●
●●
●
●
●●
●
●
●●●●●
●●
● ●●
●
●●●●●
●
●
●
●
●
●
●
●
●
●●● ●● ●
● ●
● ●
●
●
●
●
●
●
● ●●
●●● ●
●●
● ●●● ●
●
● ●●●
●
●●
●●
● ●●
●
●●
acc
●
●● ●
●●
●
●
●●
●
●●● ● ●
●
● ●
●● ●
●
0.6 ●
●
●
●
●
● ● ●
●
●
●
● ●
●●
●
●●
●
●
● ● ● ●
●●
●● ●●
●
●
●●
●
●●
●
●
●●
●●
●
●●
●
● ●●●
●
●●
●
●
●
● ●●
●
●
●●
●
●●
●
●
●
●
●
●●
●
●
●
● ●
●
●●
●●
●●
●
●
●●
●
●
●●● ●●
●●
●
●
●● ●
●
●● ●
●●● ● ●
● ●● ●
● ●●
● ●
● ●●
● ●
● ●●
● ●
●●
●
●
●
●
●
●
●
●●
●
● ●●
●
●
0.4 ●
●
●●
●
●
●●
●●
●●
●● ●
●
●
●
●
●
●
●
●●●
●●
●●
●
●
●
●
●
● ●
●●
●●
●●●●
●●
●●
●●
●●
●●
●●
●●
●●●
●
●●
●
●
●
●●
●●●
●
●●●●
Plusieurs solutions
1. Régularisation de type ridge/lasso :
n
1X
Rn (θ) = `(yi , f (xi , θ)) + λΩ(θ).
n i=1
84
C1 C2 C3 S C1 C2 C3 S
Dropout
— A chaque étape de la phase d’entrainement, on supprime un nombre de neurones (selon une Bernoulli de
paramètre p).
Le coin R
— Il suffit d’ajouter layer_dropout après les couches cachées.
> model3 <- keras_model_sequential()
> model3 %>% layer_dense(units=50,input_shape=c(4),activation="sigmoid") %>%
+ layer_dropout(0.5) %>%
+ layer_dense(units = 50,activation = "sigmoid") %>%
+ layer_dropout(0.5) %>%
+ layer_dense(units = 1,activation = "sigmoid")
— On calcule ensuite les taux de bien classés par validation croisée 5 blocs pour chaque combinaison de para-
mètres.
> caret_mlp <- train(Y~.,data=dapp1,method="mlpKerasDecay",
+ tuneGrid=param_grid,epoch=500,verbose=0,
+ trControl=trainControl(method="cv",number=5))
> caret_mlp
## Multilayer Perceptron Network with Weight Decay
## 300 samples
## 4 predictor
## 2 classes: ’0’, ’1’
## No pre-processing
## Resampling: Cross-Validated (5 fold)
## Summary of sample sizes: 240, 240, 240, 240, 240
## Resampling results across tuning parameters:
## size activation Accuracy Kappa
## 10 relu 0.9200000 0.8394122
## 10 sigmoid 0.8966667 0.7913512
## 50 relu 0.9266667 0.8515286
## 50 sigmoid 0.9066667 0.8127427
85
## 100 relu 0.9366667 0.8722974
## 100 sigmoid 0.9300000 0.8595025
## Tuning parameter ’lambda’ was held constant at a value of 0
## Tuning parameter ’rho’ was held constant at a value of 0.9
## Tuning parameter ’decay’ was held constant at a value of 0
## Accuracy was used to select the optimal model using the largest value.
## The final values used for the model were size = 100, lambda =
## 0, batch_size = 5, lr = 0.001, rho = 0.9, decay = 0 and activation = relu.
Conclusion
— Avantages :
— Méthode connue pour être efficace pour (quasiment) tous les problèmes.
— Inconvénients :
3 Bibliographie
Références
Biblio3
[Breiman et al., 1984] Breiman, L., Friedman, J., Olshen, R., and Stone, C. (1984). Classification and regression
trees. Wadsworth & Brooks.
[McCulloch and Pitts, 1943] McCulloch, W. and Pitts, W. (1943). A logical calculus of ideas immanent in nervous
activity. Bulletin of Mathematical Biophysics, 5 :115–133.
[Rosenblatt, 1958] Rosenblatt, F. (1958). The perceptron : a probabilistic model for information storage and
organization in the brain. Psychological Review, 65 :386–408.
[Rumelhart et al., 1986] Rumelhart, D. E., Hinton, G. E., and R. J. Williams, R. J. (1986). Learning representations
by back-propagating errors. Nature, pages 533–536.
86
Quatrième partie
Agrégation
— Idée : construire un grand nombre d’algorithmes "simples" et les agréger pour obtenir une seule prévision.
Par exemple
..
. 1
PB
fn (x) = B k=1 Tk (x, Dn,k )
Dn,2 T2 (x, Dn,2 )
Questions
1. Comment choisir les échantillons Dn,b ?
2. Comment choisir les algorithmes ?
3. ...
— Pour simplifier on se place en régression : Y est à valeurs dans R mais tout ce qui va être fait s’étant
directement à la classification binaire ou multiclasses.
— Notations :
Propriété
1 − ρ(x)
E[fn (x)] = E[T1 (x)] et V[fn (x)] = ρ(x)V[T1 (x)] + V[T1 (x)]
B
où ρ(x) = corr(T1 (x), T2 (x)).
Conséquence
— Biais non modifié.
— Variance & si B % et ρ(x) &.
— Ajuster le même algorithme sur les mêmes données n’est d’aucun intérêt.
— Ajuster le même algorithme sur des sous-échantillons disjoints est d’un intérêt limité.
— Utiliser un grand nombre d’algorithmes différents est compliqué...
Idée
Ajuster le même algorithme sur des échantillons bootstraps.
87
1 2 3 4 5 6 7 8 9 10
3 4 6 10 3 9 10 7 7 1 T1
2 8 6 2 10 10 2 9 5 6 T2
2 9 4 4 7 7 2 3 6 7 T3
6 1 3 3 9 3 8 10 10 1 T4
3 7 10 3 2 8 6 9 10 2 T5
.. ..
. .
7 10 3 4 9 10 10 8 6 1 TB
1.1 Bagging
— Le bagging désigne un ensemble de méthodes introduit par Léo Breiman [Breiman, 1996].
— Idée : plutôt que de constuire un seul estimateur, en construire un grand nombre (sur des échantillons boots-
trap) et les agréger.
Algorithme bagging
Entrées :
— B un entier positif ;
— T un algorithme de prévision.
Pour b entre 1 et B :
1. Faire un tirage aléatoire avec remise de taille n dans {1, . . . , n}. On note θb l’ensemble des indices sélectionnés
?
et Dn,b = {(xi , yi ), i ∈ θb } l’échantillon bootstrap associé.
?
2. Entraîner l’algorithme T sur Dn,b =⇒ T (., θb , Dn ).
B
Retourner : fn (x) = B1 b=1 T (x, θb , Dn ).
P
Conséquence
— L’algorithme se stabilise (converge) lorsque B %.
— Recommandation : choisir B le plus grand possible.
88
Choix de T
1 − ρ(x)
E[fn (x)] = E[T1 (x)] et V[fn (x)] = ρ(x)V[T1 (x)] + V[T1 (x)].
B
Conclusion
— Bagger ne modifie pas le biais.
— B grand =⇒ V[fn (x)] ≈ ρ(x)V[T1 (x)] =⇒ la variance diminue d’autant plus que la corrélation entre les
prédicteurs diminue.
— Il est donc nécessaire d’agréger des estimateurs sensibles à de légères perturbations de l’échantillon.
— Les arbres sont connus pour posséder de telles propriétés.
0 1
0.32 0.75
42% 58%
X1 >= 0.58 X2 >= 0.79
1 0
0.61 0.17
21% 15%
X1 < 0.23 X1 >= 0.31
0 0 1 0 1 1
0.03 0.08 1.00 0.00 0.57 0.95
21% 9% 12% 11% 5% 43%
Complexité
Profondeur
— petite : biais %, variance &
— grande : biais &, variance % (sur-apprentissage).
Définition
— Comme son nom l’indique, une forêt aléatoire est définie à partir d’un ensemble d’arbres.
Définition
Soit Tk (x), k = 1, . . . , B des prédicteurs par arbre (Tk : Rd → R). Le prédicteur des forêts aléatoires est obtenu par
agrégation de cette collection d’arbres :
B
1 X
fn (x) = Tk (x).
B
k=1
Forêts aléatoires
— Forêts aléatoires = collection d’abres.
— Les forêts aléatoires les plus utilisées sont (de loin) celles proposées par Léo Breiman (au début des années
2000).
— Elles consistent à agréger des arbres construits sur des échantillons bootstrap.
89
1.2.1 Algorithme
Coupures "aléatoires"
Xj ≥ s Xj < s
N1 (j, s) N2 (j, s)
Type de prévision
La prévision dépend de la nature de Y et de ce que l’on souhaite estimer
— Régression : T (x, θb , Dn ) ∈ R et
B
1 X
mn (x) = T (x, θb , Dn ).
B
b=1
Le coin R
— Notamment 2 packages avec à peu près la même syntaxe.
— randomforest : le plus ancien et probablement encore le plus utilisé.
— ranger [Wright and Ziegler, 2017] : plus efficace au niveau temps de calcul (codé en C++).
90
> library(ranger)
> [Link](12345)
> foret <- ranger(type~.,data=spam)
> foret
## ranger(type ~ ., data = spam)
## Type: Classification
## Number of trees: 500
## Sample size: 4601
## Number of independent variables: 57
## Mtry: 7
## Target node size: 1
## Variable importance mode: none
## Splitrule: gini
## OOB prediction error: 4.59 %
Choix de mtry
— Il est en relation avec la corrélation entre les arbres ρ(x).
— Ce paramètre a une influence sur le compromis biais/variance de la forêt.
— mtry &
1. tendance à se rapprocher d’un choix "aléatoire" des variables de découpe des arbres =⇒ les arbres sont
de plus en plus différents =⇒ ρ(x) & =⇒ la variance de la forêt diminue.
2. mais... le biais des arbres %=⇒ le biais de la forêt %.
— Inversement lorsque mtry % (risque de sur-ajustement).
Conclusion
— Il est recommandé de comparer les performances de la forêt pour plusieurs valeurs de mtry.
√
— Par défaut mtry = d/3 en régression et d en classification.
— Visualisation d’erreur en fonction de [Link] et mtry
0.09
[Link]
1
0.08 5
Erreur
15
0.07
50
100
0.06
500
0.05
1 3 10 30
mtry
91
Commentaires
[Link] petit et mtry à calibrer.
En pratique
— On peut bien entendu calibrer ces paramètres avec les approches traditionnelles mais...
— les valeurs par défaut sont souvent performantes !
— On pourra quand même faire quelques essais, notamment pour mtry.
Remarque
On retrouve bien [Link] petit et mtry proche de la valeur par défaut (7).
5. Ajustement de l’algorithme final :
> foret_finale <- rf_wf %>%
+ finalize_workflow(list(mtry=7,min_n=1)) %>%
+ fit(data=spam)
92
3 4 6 10 3 9 10 7 7 1 T1
2 8 6 2 10 10 2 9 5 6 T2
2 9 4 4 7 7 2 3 6 7 T3
6 1 3 3 9 3 8 10 10 1 T4
3 7 10 3 2 8 6 9 10 2 T5
7 10 3 4 9 10 10 8 6 1 T6
OOB illustration
— Les échantillons 2, 3 et 5 ne contiennent pas la première observation, donc
1
ŷ1 = (T2 (x1 ) + T3 (x1 ) + T5 (x1 )).
3
— On fait de même pour toutes les observations =⇒ ŷ2 , . . . , ŷn .
— On calcule l’erreur selon
n n
1X 1X
(ŷi − yi )2 ou 1ŷ 6=y .
n i=1 n i=1 i i
OOB définition
— Pour i = 1, . . . , n on note
OOB(i) = {b ≤ B : i ∈
/ Ib }
l’ensemble des tirages bootstrap qui ne contiennent pas i et
1 X
fn,OOB(i) (xi ) = T (xi , θb , Dn )
|OOB(i)|
b∈OOB(i)
la prévision de la forêt en ne considérant que les arbres pour lesquels i n’est pas dans le tirage bootstrap.
— L’erreur OOB s’obtient en confrontant ces prévisions au valeurs observées, par exemple
n n
1X 1X
(yi − fn,OOB(i) (xi ))2 ou 1f (x )6=y .
n i=1 n i=1 n,OOB(i) i i
93
— On recalcule cette erreur mais sur OOBb où on permute les valeurs de la j e colonne.
x11 ... x1j ... x1d x11 ... x3j ... x1d
x21 ... x2j ... x2d x21 ... x5j ... x2d
x51 ... x3j ... x3d
=⇒ x51 ... x1j ... x3d
x41 ... x4j ... x4d x41 ... x2j ... x4d
x51 ... x5j ... x5d x51 ... x4j ... x5d
1 X
Err(OOBjb ) = (yi − T (x̃ji , θb , Dn ))2 .
|OOBb |
i∈OOBb
Le coin R
— On peut calculer et visualiser facilement ces importances avec ranger :
> [Link](1234)
> [Link] <- ranger(type~.,data=spam,importance="impurity")
> [Link] <- ranger(type~.,data=spam,importance="permutation")
> vip([Link]);vip([Link])
charExclamation capitalLong
charDollar hp
remove charExclamation
free remove
capitalAve capitalAve
your capitalTotal
capitalLong charDollar
hp free
capitalTotal your
money george
Conclusion
Beaucoup d’avantages
— Bonnes performances prédictives =⇒ souvent parmi les algorithmes de tête dans les compétitions
[Fernández-Delgado et al., 2014].
— Facile à calibrer.
94
2 Boosting
— Le terme Boosting s’applique à des méthodes générales permettant de produire des décisions précises à partir
de règles faibles (weaklearner).
— Historiquement, le premier algorithme boosting est adaboost [Freund and Schapire, 1996].
— Beaucoup de travaux ont par la suite été développés pour comprendre et généraliser ces algorithmes (voir
[Hastie et al., 2009]) :
— modèle additif
— descente de gradient =⇒ gradient boosting machine, extreme gradient bossting (Xgboost).
— ...
Idée
Minimiser Rn (f ) sur une classe d’algorithmes F.
Choix de F
— Il est bien entendu crucial.
— F riche/complexité élevée =⇒ Rn (f ) & =⇒ f (xi ) ≈ yi , i = 1, . . . , n =⇒ sur-ajustement.
— et réciproquement pour des classes F simple/complexité faible.
Combinaisons d’arbres
— [Friedman, 2001, Friedman, 2002] propose de se restreindre à des combinaisons d’arbres :
( B )
X
F= λb T (x, θb ), λb ∈ R, θb ∈ Θ
b=1
où Nb` désigne les feuilles et γb` les prévisions dans les feuilles.
— Les paramètres B, θb définissent la complexité de F.
— Il faudra les calibrer à un moment mais nous les considérons fixés pour l’instant.
Un premier problème
Chercher f ∈ F qui minimise Rn (f ).
— Résolution numérique trop difficile.
— Nécessité de trouver un algorithme qui approche la solution.
95
2.1 Algorithme de gradient boosting
Descentes de gradient
— Définissent des suites qui convergent vers des extrema locaux de fonctions Rp → R.
— Le risque Rn (f ) ne dépend que des valeurs de f aux points xi .
— En notant f = (f (x1 ), . . . , f (xn )) ∈ Rn , on a
n
e n (f ) = 1
X
Rn (f ) = R `(yi , f (xi ))
n i=1
e n : Rn → R.
avec R
Nouveau problème
Minimiser R
e n . =⇒ en gardant en tête que minimiser de Rn (f ) n’est pas équivalent à minimiser R
e n (f ).
— Descente de gradient =⇒ suite (fb )b de vecteurs de Rn qui convergent vers des extrema (locaux) de R
en.
— Suite récursive :
fb = fb−1 − ρb ∇R
fn (fb−1 ),
où ∇Rfn (fb−1 ) désigne le vecteur gradient de R fn évalué en fb−1 . =⇒ vecteur de Rn donc la ie coordonnée
vaut
∂R
fn (f ) ∂`(yi , f (xi ))
(fb−1 ) = (fb−1 (xi )).
∂f (xi ) ∂f (xi )
Exemple
Si `(y, f (x)) = 1/2(y − f (x)2 alors
∂`(yi , f (xi ))
− (fb−1 (xi )) = yi − fb−1 (xi ),
∂f (xi )
Deux problèmes
1. Cette suite définit des prévisions uniquement aux points xi =⇒ impossible de prédire en tout x.
2. Les éléments de la suite ne s’écrivent pas comme des combinaisons d’arbres.
Une solution
[Friedman, 2001] propose d’ajuster un arbre sur les valeurs du gradient à chaque étape de la descente.
∂
ui = − `(yi , f (xi )) , i = 1, . . . , n.
∂f (xi ) f (xi )=fb−1 (xi )
PJ
(d) Mise à jour : fb (x) = fb−1 (x) + j=1 γjb 1x∈Njb .
Retourner : l’algorithme fn (x) = fB (x).
96
Paramètres
Nous donnons les correspondances entre les paramètres et les options de la fonction gbm :
— ` la fonction de perte =⇒ distribution
— B nombre d’itérations =⇒ [Link]
— J le nombre de feuilles des arbres =⇒ [Link] (=J − 1)
— λ le paramètre de rétrécissement =⇒ shrinkage.
Exemple
— Données sinus
0
Y
−1
−4 0 4
X .
— On entraîne l’algorithme :
> [Link](1234)
> library(gbm)
> boost.5000 <- gbm(Y~.,data=data_sinus,
+ distribution="gaussian",shrinkage=0.1,[Link] = 5000)
1 50
−1
boost
Y
300 5000
sinus
1
−1
−4 0 4 −4 0 4
X
97
1. mesurer un coût (comme d’habitude). =⇒ elle caractérise la fonction de prévision à estimer =⇒ fn est
en effet un estimateur de
f ? ∈ argmin E[`(Y, f (X))].
f :Rd →R
2. être convexe et dérivable par rapport à son second argument (spécificité gradient).
L2 -boosting en régression
— Correspond à la perte quadratique
1
`(y, f (x)) = (y − f (x))2 .
2
— fonction de prévision optimale : f ? (x) = E[Y |X = x].
Remarque
— Avec cette perte, les ui sont donnés par
∂`(yi , f (xi ))
ui = − (fb−1 (xi )) = yi − fb−1 (xi ),
∂f (xi )
— fb s’obtient donc en corrigeant fb−1 avec une régression sur ses résidus.
Interprétation
— On "corrige" fb−1 en cherchant à expliquer "l’information restante" qui est contenue dans les résidus.
— Meilleur ajustement lorsque b % =⇒ biais & (mais variance %).
Logitboost
— Classification binaire avec Y dans {−1, 1} et Ỹ = (Y + 1)/2 dans {0, 1}.
— Log-vraisemblance binomiale de la prévision p(x) ∈ [0, 1] par rapport à l’observation ỹ :
1 p(x) 1
f (x) = log ⇐⇒ p(x) = .
2 1 − p(x) 1 + exp(−2f (x))
=⇒ re-paramétrisation.
— Chercher p(x) qui maximise L(ỹ, p(x)) revient à chercher f (x) qui minimise son opposé :
y+1 y+1
−L(y, f (x)) = − log p(x) − 1 − log(1 − p(x))
2 2
y+1
= log(1 + exp(−2f (x)))+
2
y+1
1− log(1 + exp(2f (x)))
2
= log(1 + exp(−2yf (x))).
98
Remarque
f (x) 7→ log(1 + exp(−2yf (x))) est convexe et dérivable.
Logitboost
Algorithme de gradient boosting avec la fonction de perte
— Fonction optimale
1 P(Y = 1|X = x)
f ? (x) = log .
2 1 − P(Y = 1|X = x)
— fn estimant f ? , on estime P(Y = 1|X = x) avec
1
.
1 + exp(−2fn (x))
Adaboost
— Remarque : f (x) 7→ exp(−yf (x)) est aussi convexe et dérivable.
Adaboost
Algorithme de gradient boosting avec la fonction de perte
Remarque
— Même nom que l’algorithme initial de [Freund and Schapire, 1996] car quasi-similaire [Hastie et al., 2009].
— Même f ? que logitboost.
Adaboost - version 1
Algorithme [Freund and Schapire, 1996]
Entrées : une règle faible, M nombre d’itérations.
1. Initialiser les poids wi = 1/n, i = 1, . . . , n
2. Pour m = 1 à M :
a) Ajuster la règle faible sur l’échantillon dn pondéré par les poids w1 , . . . , wn , on note gm (x) l’estimateur
issu de cet ajustement Pn
b) Calculer le taux d’erreur : wi 1y 6=g (x )
em = i=1Pn i m i .
i=1 wi
Récapitulatif
— Les principales fonctions de perte pour la régression et classification sont résumées dans le tableau :
99
Profondeur des arbres
— [Link] qui correspond au nombre de coupures =⇒ nombre de feuilles J − 1.
— On parle d’interaction car ce paramètre est associé au degrés d’interactions que l’algorithme peut identifier :
X X X
f ? (x) = fj (xj ) + fj,k (xj , xk ) + fj,k,` (xj , xk , x` ) + . . .
1≤j≤d 1≤j,k≤d 1≤j,k,`≤d
=⇒ [Link]=
— 1 =⇒ premier terme
— 2 =⇒ second terme (interactions d’ordre 2)
— ...
— Boosting : réduction de biais.
— Nécessité d’utiliser des arbres biaisés =⇒ peu de coupures.
Recommandation
Choisir [Link] entre 2 et 5.
Nombre d’itérations
— Le nombre d’arbres [Link] mesure la complexité de l’algorithme.
— Plus on itere, mieux on ajuste =⇒ si on itère trop, on sur-ajuste.
— Nécessité de calibrer correctement ce paramètre.
Comment ?
Avec des méthodes classiques d’estimation du risque.
Exemple
> [Link](321)
> boost.5000 <- gbm(Y~.,data=data_sinus,[Link] = 0.75,
+ distribution="gaussian",shrinkage=0.1,[Link] = 5000)
> [Link](boost.5000)
## [1] 1040
0.5
0.4
Squared error loss
0.3
0.2
0.1
Iteration
=⇒ Risque quadratique estimé par hold out avec 75% d’observations dans l’échantillon d’apprentissage.
100
Rétrécissement
— shrinkage dans gbm.
— Correspond au pas de la descente de gradient : shrinkage % =⇒ minimisation plus rapide.
Conséquence
shrinkage est lié à [Link] :
— shrinkage % =⇒ [Link] &.
— shrinkage & =⇒ [Link] %.
Illustration
Erreur test train
0.001 0.01
0.4
0.2
0.0
Err
0.1 1
0.4
0.2
0.0
0 100 200 300 400 500 0 100 200 300 400 500
[Link]
Remarque
Le nombre d’itération optimal diminue lorsque shrinkage augmente.
Recommandation
— Pas nécessaire de trop optimiser shrinkage.
— S’assurer que le nombre d’itérations optimal se trouve sur un "plateau" pour des raisons de stabilité.
2.3 Compléments/conclusion
Importance des variables
— Similaire aux forêts aléatoires.
— Score d’impureté :
B
1 X
Ijimp = Ij (Tb ).
B
b=1
101
— Récursivité pour le boosting =⇒ Tb se construit à partir de Tb−1 .
Interprétation statistique
— Boosting : réduction de biais =⇒ arbres peu profonds.
— Random Forest : réduction de variance =⇒ arbres très profonds.
=⇒ les arbres sont ajustés de façon différente pour ces deux algorithmes. =⇒ dans les deux cas, il faut des arbres
"mauvais".
3 Bibliographie
Références
Biblio4
[Breiman, 1996] Breiman, L. (1996). Bagging predictors. Machine Learning, 26(2) :123–140.
[Fernández-Delgado et al., 2014] Fernández-Delgado, M., Cernadas, E., Barro, S., and Amorim, D. (2014). Do we
need hundreds of classifiers to solve real world classification problems ? Journal of Machine Learning Research,
15 :3133–3181.
[Freund and Schapire, 1996] Freund, Y. and Schapire, R. (1996). Experiments with a new boosting algorithm. In
Proceedings of the Thirteenth International Conference on Machine Learning.
[Friedman, 2001] Friedman, J. H. (2001). Greedy function approximation : A gradient boosting machine. Annals
of Statistics, 29 :1189–1232.
[Friedman, 2002] Friedman, J. H. (2002). Stochastic gradient boosting. Computational Statistics & Data Analysis,
28 :367–378.
[Genuer, 2010] Genuer, R. (2010). Forêts aléatoires : aspects théoriques, sélection de variables et applications. PhD
thesis, Université Paris XI.
[Hastie et al., 2009] Hastie, T., Tibshirani, R., and Friedman, J. (2009). The Elements of Statistical Learning :
Data Mining, Inference, and Prediction. Springer, second edition.
[Wright and Ziegler, 2017] Wright, M. and Ziegler, A. (2017). ranger : A fast implementation of random forests
for high dimensional data in c++ and r. Journal of Statistical Software, 17(1).
Commentaires
— Résultats pour données tabulaires.
— Différent pour données structurées (image, texte..) =⇒ performance % réseaux pré-entrainés =⇒ apprentis-
sage profond/deep learning.
102