AdaBoost

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í.
  1. Stáhněte si trénovací (trn_data) a testovací (tst_data) data v souboru data_rpz33_cv07.mat.

  2. 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.

  3. 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).

  4. Vykreslete do jednoho grafu průběh trénovací a testovací chyby.

  5. Vykreslete průběh chyby εt vybraných slabých klasifikátorů.

Doporučená literatura

[1] AdaBoost (cvičení z minulých let)

[2] AdaBoost přednáška


Created by Jan Šochman, last update 19.11.2008