dans D

publicité
Ré-échantillonnage et
recombinaison adaptative
Adapatative Resampling and
Combining (Arcing algorithms)
« Bagging », « Boosting »
AS
Principe
d’amélioration des performances
E1
E2
E3
…
…
…
En
Di (distribution)
Apprentissage
par classification
Classifieuri
Bibliographie
Breiman, L. 1996 Bagging predictors,
Machine Learning 26, N°2, pp. 123-140
Freund, Y. & Schapire, R. 1996 Experiments
with a new boosting algorithm, Machine
Learning; Proceedings of the 13th
International Conference, pp. 148-156
Bagging: « bootstrap »
Bagging = « Bootstrap aggretating »
« bootstrap sampling» (amorçage de l’échantillonnage):
Etant donné un ensemble D contenant m exemples
d’apprentissage
•  Créer Di en tirant m exemples aléatoirement (avec
remplacement) dans D
•  Statistiquement, Di élimine 37% des exemples de D
Bagging: « bagging »
•  Créer k échantillons d’amorçage D1, D2...
Dk
•  Activer l’algorithme d’apprentissage sur
chacun des Di.
– On obtient k procédures de classification
•  Classer chaque nouvelle instance à l’aide
d’un vote majoritaire sur les k résultats des
procédures de classification
Bagging
Ensemble
d’exemples
d’apprentissage
D1
Classifieur1
D2
Classifieur2
D3
Dk
Algorithme
d’apprentissage
Classifieur3
Classifieurk
Vote majoritaire
•  Résultat Y: valeur de la classe qui recueille
le plus de voix…
Classifieur1 →Y1(X)
Classifieur2 →Y2(X)
X
Classifieur3 →Y3(X)
Classifieurk →Yk(X)
Vote
Y
Validation expérimentale
Étant donné un ensemble S de données étiquetées, on
réitère 100 fois le cycle suivant:
1.  Division de S aléatoirement en un ensemble test T
(10%) et un ensemble d’apprentissage D (90%)
2.  Apprendre un arbre de décision à partir de D
es : erreur de l’arbre sur T
3.  Répéter 50 fois: créer un échantillonnage
d’amorçage Di, apprendre un arbre de décision,
élaguer cette arbre en utilisant D.
eB : erreur du vote majoritaire utilisant les arbres pour
classer T.
Bagging: exemple
D1
D2
D
CART
Classifieur1
Classifieur2
D50
90%
Classifieur50
S
10%
Classifieur
T
Vote
Résultats expérimentaux
Quand le « bagging » est-il utile ?
Quand l’algorithme d’apprentissage est instable
•  Un algorithme d’apprentissage est instable si un petit
changement de l’ensemble d’apprentissage provoque
un grand changement dans les sorties (ex. arbres de
décision, réseaux neuronaux, mais pas k plus proches
voisins)
•  Expérimentalement, le « bagging » aide beaucoup
pour les algorithmes d’apprentissage instables, mais il
peut dégrader quelque peu les résultats pour les
algorithmes stables.
Amélioration
•  Si la fonction cible a une valeur réelle, utiliser la moyenne au lieu
du vote majoritaire pour combiner les sorties des classifieurs Di
•  ΦA(x) = EiΦ (x, Di) (avec EiΦ (x, Di) valeur moyenne des valeurs obtenues
avec les différents classifieurs construits sur les ensembles Di )
–  Φ (x, Di) est la valeur de la sortie du classifieur construit sur Di
pour l’entrée x,
–  ΦA(x) la valeur de la sortie du classifieur agrégé pour l’entrée x.
Ei (y - Φ (x, Di))2 = y2 – 2yEiΦ (x, Di) + EiΦ2 (x, Di)
Comme ΦA(x) = EiΦ (x, Di) et EZ2 ≥ (EZ)2
Ei (y - Φ (x, Di))2 ≥ y2 – 2y ΦA(x) + (ΦA(x))2
et donc ED (y - Φ (x, Di))2 ≥ (y - ΦA(x))2
On s’attend donc à une erreur inférieure pour classifieur agrégé ΦA.
Vote majoritaire avec pondération
Ensemble A d’algorithmes
a1
ω1
a2
ω2
….
an
ωn
Exemple avec
2 classes:
•  0
•  1
ai dénote la iième prédiction dans l’ensemble A d’algorithmes.
ωi dénote le poids associé à ai.
Algorithme de la « majorité pondérée »
•  Pour tout i, initialiser ωi à 1
•  Pour tout exemple de l’ensemble d’apprentissage <x, c(x)>
–  Initialiser q0 et q1 à 0
–  Pour chaque algorithme de prédiction ai.
•  Si ai(x) = 0 alors q0 := q0 + ωi
•  Si ai(x) = 1 alors q1 := q1 + ωi
–  Si q1 > q0 alors prédire c(x) = 1
–  Si q1 < q0 alors prédire c(x) = 0
–  Si q1 = q0 alors prédire aléatoirement c(x) = 1 ou c(x)= 0
–  Pour chaque algorithme de prédiction ai de A, faire
si ai(x) ≠ c(x) alors ωi := βωi.
Majorité pondérée
•  Soit D n’importe quelle séquence d’exemples
d’apprentissage,
•  soit A n’importe quelle séquence de n prédictions,
•  soit k le nombre minimum de fautes fait par un des
algorithmes de A pour la séquence D
•  Alors, le nombre de fautes sur D fait par l’algorithme
de la majorité pondérée utilisant β = ½ est au plus
2,4(k + log2n)
« Boosting »:
paris sur les courses de chevaux
« Boosting » Paris sur les coures de chevaux
Comment accroître ses chances de gagner ?
•  Demander à un expert des règles d’expertises
–  Il risque de ne pas savoir les formuler…
• 
Apprendre ces règles par l’observation des choix
de l’expert
–  Donner des jeux d’essai à l’expert pour avoir son avis
–  Construire des règles par apprentissage sur ces jeux
–  Combiner ces règles
Deux questions:
•  Comment trouver les jeux d’essais ?
•  Comment combiner les règles apprises ?
« Boosting » suite
Exemples
chevaux
E1
E2
Distribution Dt
jeu d’essai
Dt(1)
Dt(2)
…
En
Dt(n)
1)Tirage aléatoire d’un jeu d’essai avec la distribution Dt
2)Apprentissage sur ce jeu d’essai
3)Itération en modifiant « astucieusement » les distributions Dt
Illustration du Boosting
exemple jouet 2D
Couleur = étiquette Classe 1 rouge, classe 2 bleu
Diamètre cercle: poids de l’exemple
Lignes pointillées: décision de classifieurs individuels
Ligne pleine: décision du classifieur agrégé
1
1
1
0.8
0.8
0.8
0.6
0.6
0.6
0.4
0.4
0.4
0.2
0.2
0.2
0
0
0.5
1
0
0
0.5
1
0
0
Illustration du Boosting
exemple jouet 2D
1
1
1
0.8
0.8
0.8
0.6
0.6
0.6
0.4
0.4
0.4
0.2
0.2
0.2
0
0
0.5
1
0
0
0.5
1
0
1
1
1
0.8
0.8
0.8
0.6
0.6
0.6
0.4
0.4
0.4
0.2
0.2
0.2
0
0
0.5
1
0
0
0.5
1
0
0
0.5
1
0
0.5
1
Origine du « boosting »
•  Théorie statistique de l’apprentissage, Vapnik
•  Théories « PAC » Valiant 84
•  Kearns & Valiant 88: « accélération » des
algorithmes d’apprentissage « faibles »
•  Schapire 89 : premier algorithme polynomial de
« boosting »
•  Freund 90: algorithme plus efficace
•  Freund & Schapire, 95: algorithme AdaBoost
Apprenabilité faible [Kearns & Valiant 89]
•  F est PAC-apprenable ssi il existe un algorithme
A tel que:
∃ε 0
0 < ε0 < 1 2
∃δ0
0 < δ0 < 1 2
–  tel que pour tout concept c de F
–  et pour toute distribution D sur X
A fournit une hypothèse h de F qui vérifie avec une
probabilité 1-δ0 l’erreur ≤ ε0
Autrement dit Pr{Pr(c Δ h) ≤ ε0} ≥ 1-δ0
Apprentissage faible: étiquetage meilleur que
l’aléatoire. Si le nombre de classe est égal à 2 (concept),
cela signifie ε0 < 1/2 avec un probabilité 1-δ0
Question du « boosting »
•  Peut-on transformer un algorithme d’apprentissage
faible A en un algorithme d’apprentissage « fort » A’
en faisant un nombre d’appel suffisant à A?
•  Autrement dit, comment améliorer les performance en
diminuant ε0 et δ0 jusqu’à obtenir des valeurs
arbitrairement petites?
•  Proposition:
–  utiliser k fois l’algorithme A pour obtenir les hypothèses h1,
h2, … hk
–  demander m exemples à l’oracle pour former un échantillon E
sur D
–  fournir h = Argminh dans {h1, h2, …, hk}(erreurE(hi))
Choix de k et de m
•  Déterminer la valeur k telle que la probabilité que chacune des
hypothèse hi ait une erreur supérieure à ε0 soit inférieur à δ0.
–  Probabilité qu’une hi ait une erreur > ε0: δ0.
–  Probabilité que toutes les hi aient des erreurs > ε0:
δ0k ≤ (1-δ0)k ≤ e-kδ0
–  On veut que la probabilité d’un tel événement soit ≤ δ/2:
e-kδ0 < δ/2 ce qui est équivalent à k ≥ 1/δ0 * ln(2/δ)
•  Déterminer la valeur m telle que la probabilité que certaines
erreurs de hi mesurées sur l’échantillon E soient supérieures à γ
par rapport aux erreurs réelles soit inférieure à δ/2:
–  (borne de Chernoff) Pr(|erreur(h) – erreurE(h)| ≥ γ) ≤ e-2mγ**2
–  On veut borner cette probabilité à δ/2k
–  Cela implique: m ≥ 1/(2γ2)*ln(2k/δ)
« boosting » de la confiance δ0
•  On peut améliorer la confiance à volonté en
dégradant un peu l’erreur
–  Utiliser l’algorithme faible A k=1/δ0 * ln(2/δ) fois
pour obtenir autant d’algorithmes faible h1, h2, … hk
–  demander m = 1/(2γ2)*ln(2k/δ) exemples à l’oracle
pour former un échantillon E
–  fournir l’hypothèse h qui minimise l’erreur des hi
sur l’échantillon E.
Algorithme d’amélioration
(« boosting ») de l’erreur ε0
1.  h1 = A(Ex(c, D))
2.  définir un nouvel oracle Ex(c, D2) comme suit:
1. 
2. 
3. 
4. 
on tire à pile ou face
Si pile, faire x = Ex(c, D) jusqu’à h1(x) = c(x)
Si face, faire x = Ex(c, D) jusqu’à h1(x) ≠ c(x)
renvoyer x
3.  h2 = A(Ex(c, D2))
4.  Définir un nouvel oracle Ex(c, D3) comme suit
faire x = Ex(c, D) jusqu’à h1(x) ≠ h2(x) et renvoyer x
5.  h3 = A(Ex(c, D3))
6.  renvoyer h=voteMajoritaire(h1, h2, h3)
Amélioration de l’erreur
•  On veut que l’erreur de l’hypothèse h sur D
[erreurD(h)] soit strictement inférieure à ε0
•  soit β1 = erreurD(h1), β2 = erreurD2(h2) et
β3 = erreurD3(h3)
•  On borne l’erreur de h sur D [erreurD(h)] par:
β1.[2.γ2 + β3.(1+2.β2)] + 2.β3.γ1
•  Avec γ1 = PrD2[h1(x) = c(x) & h2(x) ≠ c(x)]
•  et ½ - γ2 = PrD2[h1(x) ≠ c(x) & h2(x) = c(x)]
er
1
algorithme de « boosting »
Shapire 1990
g(ε) = 3.ε2 – 2.ε3
ApprentissageFort(ε, Ex(c, D))
1. 
2. 
3. 
4. 
5. 
6. 
7. 
8. 
Si ε ≥ ε0 retourner (A(Ex(c, D))
ε’ = g-1(ε)
h1 = ApprentissageFort(ε’, Ex(c, D))
Définir D2 comme précédemment
h2 = ApprentissageFort(ε’, Ex(c, D2))
Définir D3 comme précédemment
h3 = ApprentissageFort(ε’, Ex(c, D3))
renvoyer h=voteMajoritaire(h1, h2, h3)
AdaBoost
•  Entrées: (x1, y1) … (xm, ym) yi∈Y
•  Y = {+1, -1}
•  AdaBoost construit un classifieur “fort” H(x) à
partir d’une combinaison linéaire de classifieurs
“faibles” ht(x)
•  ht(x): χ → {-1, +1}
T
f ( x) = ∑ α t ht ( x)
t =1
H ( x) = signe( f ( x))
AdaBoost
• 
• 
• 
• 
Entrées: (x1, y1) … (xm, ym) yi∈Y
Y = {+1, -1}
Dt: distribution de probabilité à l’itération t
Le bénéfice de la distribution Dt d’exemples est
mesuré avec le coefficient d’erreur εt:
ε t = Pri ≈ D [ht ( xi ) ≠ yi ] =
t
∑ D (i)
t
i:ht ( xi ) ≠ yi
C’est la somme des probabilités Dt(i) des exemples i mal
classés par le classifieur ht construit sur la distribution Dt
•  Apprentissage sur les exemples i responsables des
erreurs – on modifie Dt en fonction de l’erreur…
•  Entrées: (x1, y1) … (xm, ym) yi∈{-1,+1}
•  Initialisation D1(i) ←1/m
•  Pour t = 1, …, T:
Algorithme
AdaBoost
–  Construire un classifieur faible ht qui minimise l’erreur εt pour la
distribution Dt ε t = Pri ≈ D [ht ( xi ) ≠ yi ] = ∑ Dt (i )
t
i:ht ( xi ) ≠ yi
–  Idéalement: ht = arg min ε t
h j ∈H
–  Choisir α t = 1 log⎛⎜⎜ 1 − ε t ⎞⎟⎟
2
⎝ ε t ⎠
Dt (i ) exp(−α t yi ht ( xi ))
–  Mettre à jour la distribution Dt
Dt +1 (i ) =
Zt
où Zt est un facteur de normalisation
choisi pour que Dt+1 soit une
distribution de probabilité
⎛ T
⎞
–  La sortie finale donne le classifieur H ( x) = signe⎜ ∑ α t ht ( x) ⎟
⎝ t =1
⎠
•  Entrées: (x1, y1) … (xm, ym) yi∈{-1,+1}
•  Initialisation D1(i) ←1/m
•  Pour t = 1, …, T:
Algorithme
AdaBoost
–  Construire un classifieur faible ht qui minimise l’erreur εt pour la
distribution Dt ε t = Pri ≈ D [ht ( xi ) ≠ yi ] = ∑ Dt (i )
t
–  Idéalement: ht = arg min ε t
h j ∈H
–  Choisir α t = 1 log⎛⎜⎜ 1 − ε t ⎞⎟⎟
2
⎝ ε t ⎠
i:ht ( xi ) ≠ yi
On accroît la valeur de la
distribution sur les exemples
mal classé… c’est-à-dire pour
lesquels yi ≠ ht(xi)
Dt (i ) exp(−α t yi ht ( xi ))
–  Mettre à jour la distribution Dt
Dt +1 (i ) =
Zt
où Zt est un facteur de normalisation
choisi pour que Dt+1 soit une
distribution de probabilité
⎛ T
⎞
–  La sortie finale donne le classifieur H ( x) = signe⎜ ∑ α t ht ( x) ⎟
⎝ t =1
⎠
AdaBoost: quelques résultats
Apprentissage avec C4.5
Courbe 1: Erreur sur ensemble d’apprentissage
Courbe 2: Erreur sur ensemble test
AdaBoost: quelques résultats (suite)
Apprentissage avec des algorithmes
dits « faibles » sur les bases UCI
Résultats du boosting et
du bagging
AdaBoost: comparaison avec
Bagging pour quelques algorithmes
Catégorisation de texte - Reuter
Catégorisation de textes - Reuter
Téléchargement