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 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í.
  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.
  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, 13.11.2006