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 napravo nebo nalevo od prahu?). 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.
Vykreslete do jednoho grafu průběh trénovací a testovací
chyby.
Vykreslete průběh chyby εt
vybraných slabých
klasifikátorů.