Využijeme učícího algoritmu AdaBoost k natrénování jednoduchého
klasifikátoru obrázků číslic.
Jako pozitivní třídu zvolíme jednu číslici a budeme se ji učit
rozpoznat od ostatních číslic. Slabý klasifikátor bude využívat hodnoty
pouze jednoho pixelu v obrázku, na jejímž základě bude pomocí jednoho
prahu klasifikovat do pozitivní a negativní třídy.
Formulace úlohy
Algoritmus učení AdaBoostu je popsán v [1]
(Algoritmus 1).
V našem případě jsou vstupem obrázky číslic velikosti 13x13 v
šedotónové škále (xi) a jejich příslušnosti do
tříd. Pozitivní třídu (yi = +1)
zvolíme jako jednu číslici, ostatní budeme uvažovat jako negativní
příklady (yi = -1).
Množina slabých klasifikátorů H obsahuje 13x13=169 slabých
klasifikátorů, z nichž každý využívá informace jen z jednoho pixelu v
obrázku. Slabý klasifikátor má dva parametry - práh θ a paritu p (p
Î {+1, -1}, neboli, je
pozitivní třída nad prahem nebo pod prahem?). Rozhoduje tedy tak, že
přečte hodnotu pixelu a podle prahu a parity rozhodne, do které třídy
obrázek patří:
hx,y(I)
= sign[p *
(I(x,y) - θ)].
Práh θ a
parita p
nejsou dopředu známé, je třeba je tedy také najít.
Zadání
Pro přehlednost a
snadnou udržitelnost kódu (dnes bude spíše delší) doporučujeme členit
kód do funkcí.
Stáhněte si trénovací (trn_data) a testovací (tst_data)
data v souboru data_rpz33_cv07.mat.
Vyberte si jednu číslici (pozitivní třída), kterou se
budete učit rozpoznávat od zbytku číslic (negativní třída).
Připomenutí: Pro učení je třeba nastavit yi
= +1 pro
pozitivní třídu a yi
= -1 pro negativní třídu.
Implementujte učení pomocí AdaBoostu (algoritmus 1
v [1]).
K nalezení prahu a parity při daném ovážení trénovací množiny použijte
funkci findThetaPar.
Poznámka 1: Aktualizace vah Dt+1 (krok 4) se dá napsat jednoduše vektorovým zápisem (není třeba for cyklu). Dále si uvědomte, že Zt je jen
normalizační faktor, zajišťující, že Dt+1 je distribuce
(integrál přes ni je roven 1). Z této úvahy vám vyplyne jednodušší vzoreček pro Zt než ten uvedený v kroku 4 (algoritmu 1
v [1]).
Poznámka 2: Aktualizace vah Dt+1 se dá také
napsat (po dosazení za at) jako Dt+1= Dt
sqrt(εt/(1
- εt)),
když yi= ht(xi) a
jako Dt+1= Dt
sqrt((1 -
εt)/εt),
když yi ≠ ht(xi).
Vykreslete do jednoho grafu průběh trénovací a testovací
chyby.
Vykreslete průběh chyby εt
vybraných slabých
klasifikátorů.