{{predmet|Úvod do strojového učení (v počítačové lingvistice)|Barbora Vidová-Hladká]],<br/>Pavel Schlesinger,<br/>[[Kiril Ribarov|PFL054}}

Tohle jsou ne nutně úplné poznámky ze ZS 2008/9 -- User:Tuetschek 18:59, 23 Jan 2009 (CET)

  • Stránka předmětu, obsahuje slajdy

  • R-tahák ze zápisků ze cvičení, měl by obsahovat většinu důležitých funkcí

  • Literatura: Tom Mitchell (1997): Machine Learning. McGraw/Hill, ISBN 0-07-042807-7.

Úvod

Učení v našem smyslu je získávání zkušeností, učení se novým poznatkům. Stroj je počítač, který umí jenom počítat. Formálně:

  • Počítač se učí řešit úlohu třídy TT se zkušeností EE a úspěšností měřenou kritériem PP, jestliže se jeho úspěšnost zkušeností zvyšuje.

Např.: TT = parsing, EE = treebank, PP počet správně určených hran.

Zkušenost je přímá (přímo uvést, které postupy jsou povolené a které ne) a nepřímá (udává "dobré" postupy na základě trénovacích dat). Získávání zkušenosti může být řízené (s učitelem, kdy EE = trénovací data), semi-supervised (kdy systém generuje postupy a něco je známkuje) nebo neřízené. Trénovací data by měla být vybraná s ohledem na testovací data.

Pro řízené strojové učení máme trénovací data: X=x1,x2,xnX = x_1, x_2, \dots x_n s výstupními hodnotami YY a hledáme cílovou funkci c:XY,c(xi)=yic:X\to Y, c(x_i) = y_i. Hledáme ji nad prostorem hypotéz (modelem) HH; tj. hledáme hH:h(xi)=c(xi) i1,nh\in H: h(x_i) = c(x_i)\ \forall i\in 1,\dots n.

Několik konceptů

{{TODO|doplnit, vysvětlit místa označená "(?)"}}

Postup učení jako vyhledávání: Máme množinu možných hypotéz, v ní podmnožinu hypotéz konzistentních s trénovacími daty a v této podmnožině se někde nachází optimální hypotéza. Pomocí stroj. učení se jí přibližujeme, od startovací hypotézy se postupně dostaneme do něčeho, co je konzistentní s trénovacími daty, ale ne nutně k optimu.

Vstupní hodnoty XX prostoru hypotéz jsou buď reálné, diskrétní, nebo kategoriální. Výstupní hodnoty taktéž, potom je pro reálné hodnoty strojové učení regresí, kdežto pro kategoriální klasifikací.

Trénování je možné:

  • dávkově (všechna trénovací data najednou)

  • inkrementálně (dostávám instance jednu po druhé, mám náhodný výběr s návratem, postupně bez návratu (?))

  • online (dostávám trénovací instance jednu po druhé, až když jsou k dispozici)

Bias je nějaký apriorní předpoklad. Může být dvojitého typu:

  • absolutní -- např. "hledaná hypotéza je prvkem prohledávané množiny" (?)

  • preferenční -- preferují se hypotézy vyhovující nějakému kritériu (např. Occamově břitvě)

Se šumem v datech se musí počítat, vzniká kvůli chybě měření nebo chybě modelu. Data musí ale být konzistentní (?).

Occamova břitva je kritérium jednoduchosti: vybrat nejjednodušší hypotézu, která pasuje na trénovací data (nabízí-li se víc možností).

Testování hypotéz -- úspěšnost hypotézy na trénovacích datech je odhadem její úspěšnosti na testovacích datech (+ intervaly spolehlivosti (?)). Problém je přetrénování: při příliš velkém množství trénovacích dat klesá chyba na trénovacích, ale roste chyba na testovacích datech. K zjištění očekávané úspěšnosti na testovacích datech se může používat i křížová validace: rozdělím trénovací data na podmnožiny a potom vždycky natrénuju na jedné podmnožině a testuju úspěšnost na zbytku dat; nakonec spočítám průměrnou chybu.

Teoretické aspekty:

  • Lze určit hranice pro velikost prostoru hypotéz, přesnost aproximace, pravděpodobnost vydání úspěšné hypotézy a nutnou velikost trénování?

  • Kolik trénovacích příkladů je třeba, aby učení s vysokou pravděpodobností konvergovalo k úspěšné hypotéze?

  • Jaká je výpočetní složitost učení, které je úspěšné?

  • Kolik případů bude klasifikováno špatně, než systém dojde ke správné hypotéze?

  • Naučitelnost: Požadujeme, aby se systém s velkou pravděpodobností naučil hypotézu, která je přibližně správná.

Testování úspěšnosti algoritmů

Máme několik měr, které se všechny vztahují k tabulce confusion matrix.

Testovací data !! Reálná hodnota: 1 !! Reálná hodnota: 0
Klasifikace: 1tpfp
Klasifikace: 0fntn
  • Accuracy je čistě poměr správně klasifikovaných a všech testovacích instancí, tj. A=tp+tntp+fp+tn+fnA = \frac{tp + tn}{tp + fp + tn + fn}

  • Precision: P=tptp+fpP = \frac{tp}{tp + fp} a recall: R=tptp+fnR = \frac{tp}{tp + fn} se vždycky uvádějí dohromady.

  • F-measure: F=2PRP+RF = \frac{2PR}{P+R} je kombinací předchozích dvou, většinou odráží chování algoritmu nejlépe.

Uspořádání hypotéz

Cílem tohoto typu učení je vytvoření boolovské funkce z množiny trénovacích příkladů. Hypotézu tu reprezentujeme jako nn-tici "povolených" hodnot proměnných z trénovacích příkladů, přičemž pro hypotézu může být hodnotou:

  • Specifická hodnota dané proměnné (tj. povolená je jedna hodnota)

  • "?" (tj. na hodnotě této proměnné nezáleží, povolené je všechno)

  • "\emptyset" (tj. nevyhovuje žádná hodnota této proměnné)

Pokud instance xx vyhovuje všemi svými hodnotami proměnných povoleným hodnotám pro hypotézu hh, potom h(x)=1h(x) = 1, tj. hypotéza hh klasifikuje xx jako pozitivní příklad.

Potom nejobecnější hypotéza je taková, která cokoliv klasifikuje jako pozitivní případ, tj. (?,?,?,,?)(?, ?, ?, \dots, ?) a nejspecifičtější hypotéza taková, která vše klasifikuje jako negativní, tj. (,,,)(\emptyset, \emptyset,\dots,\emptyset).

Máme dán popis instancí XX, tj. možné hodnoty proměnných, potom prostor všech možných hypotéz HH, cílovou funkci c:X{0,1}c: X\to \{0,1\} a trénovací data (pozitivní i negativní příklady D=(<x1,c(x1)>,<x2,c(x2)>,)D = (<x_1, c(x_1)>, <x_2, c(x_2)>,\dots). Hledáme takovou hypotézu, která by odpovídala cílové funkci na všech trénovacích příkladech: hH:xX:h(x)=c(x)h\in H: \forall x\in X: h(x) = c(x). Hypotéza, která je "vhodně dobrou" aproximací cílové funkce nad trénovacími daty, bude i "vhodně dobrou" aproximací nad ostatními daty.

Definice

Pro prohledávání hypotéz máme vodítko: uspořádání podle specifičnosti.

  • Řekneme, že příklad xXx\in X vyhovuje hypotéze hHh\in H, právě když h(x)=1h(x) = 1.

  • Hypotéza hHh\in H je obecnější než hypotéza jHj \in H (hgjh \geq_{g} j), právě když xX:j(x)=1h(x)=1\forall x\in X: j(x) = 1\Rightarrow h(x) = 1 (můžeme říct, že jj je specifičtější než hh).

  • Hypotéza hHh\in H je striktně obecnější než jHj \in H (h>gjh >_{g} j), pokud hh je obecnější než jj, ale jj není obecnější než hh.

  • Relace g\geq_{g} je částečné uspořádání nad prostorem HH.

Další definice:

  • Hypotéza hh pokrývá pozitivní příklad xXx\in X, právě když ho správně klasifikuje jako pozitivní.

  • Hypotéza hh je konzistentní s trénovacími daty DD, právě když h(x)=c(x) <x,c(x)>Dh(x) = c(x)\ \forall <x,c(x)>\in D.

  • Prostor možností (version space) VSH,DVS_{H,D} vzhledem k prostoru hypotéz HH je podmnožina hypotéz konzistentních s trénovacími daty DD.

  • Hranice obecnosti (general boundary) GG vzhledem k HH a DD je množina nejobecnějších hypotéz z HH konzistentních s DD. Proti tomu Hranice specifičnosti (specific boundary) SS vzhledem k HH a DD je množina nejspecifičtějších hypotéz z HH konzistentních s DD.

Algoritmus Find-S

Nalezne nejspecifičtější hypotézu, která ještě vyhovuje trénovacím datům.

  1. Vezmi nejspecifičtější hypotézu hHh\in H

  2. x\forall x pozitivní trénovací příklad a ai\forall a_i atribut reprezentace hh: pokud hodnota aia_i u xx neodpovídá hh, nahraď hodnotu aia_i v hh nejbližší obecnou hodnotou, která odpovídá xx

  3. Po projití všech pozitivních příkladů vrať upravené hh

Find-S vrátí nejspecifičtější hypotézu konzistentní s pozitivními trénovacími příklady. Za předpokladů, že prohledávaný soubor hypotéz obsahuje cílovou funkci cc a trénovací data neobsahují chyby, bude nalezená hypotéza konzistentní i s negativními trénovacími příklady, tj. s celými trénovacími daty.

Je-li víc správných hypotéz, nalezneme takto jen jednu z nich, navíc neodhalíme nekonzistenci trénovacích dat. Nemusí existovat ani jen jedna nejspecifičtější hypotéza. Problém nalezení všech konzistentních hypotéz řeší algoritmus Candidate-Elimination.

Algoritmus Candidate-Elimination

{{TODO|dovysvětlit "(?)"}}

Algoritmus pracuje s prostorem možností, určeným hranicí obecnosti a hranicí specifičnosti. To je možné proto, že platí následující věta:

Věta o reprezentaci prostoru možností: VSH,D={hH:sS,gG:(gghgs)}VS_{H,D} = \{h\in H: \exists s\in S, \exists g\in G: (g\geq_g h\geq_g s)\}.

Postup algoritmu:

  1. Do G,SG, S přiřaď množinu nejobecnějších, resp. nejspecifičtějších hypotéz z HH

  2. Postupuj přes trénovací příklady dDd\in D:

  3. Je-li příklad dDd\in D pozitivní:

    1. Odstraň z GG hypotézy nekonzistentní s dd.

    2. Každou s dd nekonzistentní hypotézu z SS odstraň a přidej do SS její minimální zobecnění konzistentní s dd, pro které existuje nějaká obecnější hypotéza v GG. Odstraň pak z SS hypotézy, které jsou obecnější než jiné hypotézy v SS.

  4. Je-li příklad dDd\in D negativní:

    1. Odstraň z SS hypotézy nekonzistentní s dd.

    2. Každou s dd nekonzistentní hypotézu z GG odstraň a přidej do GG její minimální specializaci konzistentní s dd, pro kterou existuje nějaká specifičtější hypotéza v SS. Odstraň pak z GG hypotézy, které jsou specifičtější než jiné hypotézy v GG.

  5. Na konci vrať G,SG, S jako reprezentaci prostoru možností.

Pokud chci uznávat dvě "povolené" hodnoty pro jeden atribut a ne jen jednu nebo všechny, můžu si zvětšit prostor hypotéz na množinu všech podmnožin množiny instancí XX. Potom můžeme použít CE algoritmus, ale systém není schopen klasifikovat instance "za hranicí" trénovacích dat (?).

Induktivní předpoklad

{{TODO|dovysvětlit "(?)"}}

Abychom zachytili strategii, podle které systém generalizuje za hranici trénovacích dat při klasifikaci nových instancí, definujeme induktivní předpoklad:

  • (Dcxi)L(xi,Dc)(D_c\wedge x_i)\vdash L(x_i, D_c), tj. klasifikace instance xix_i algoritmem LL natrénovaným na DcD_c je induktivně odvoditelná z oné instance a trénovacích dat.

  • Induktivní předpoklad (inductive bias) algoritmu LL je minimální množina tvrzení BB taková, že pro libovolnou cílovou funkci cc definovanou nad instancemi XX a odp. trénovací data DcD_c platí: xiX:(BDcxi)L(xi,Dc)\forall x_i \in X: (B\wedge D_c\wedge x_i)\vdash L(x_i, D_c), tj. klasifikace xix_i algoritmem LL natrénovaným na DcD_c je dokazatelná z instance, trénovacích dat a induktivního předpokladu.

Induktivní předpoklad algoritmu CE je B={cH}B = \{c\in H\}, tj. "cílová funkce je obsažena v prostoru hypotéz". Potom totiž platí i cVSH,Dc\in VS_{H,D} a hVSH,D:h(xi)=L(xi,Dc)\forall h\in VS_{H,D}: h(x_i) = L(x_i,D_c), tj. i c(xi)=L(xi,Dc)c(x_i)=L(x_i, D_c).

Např. algoritmus ROTE-LEARNER, který jen skladuje v paměti trénovací příklady a pak vydává výsledek jen tehdy, je-li reálný příklad ekvivalentní nektrému z nich, má prázdný induktivní předpoklad.

Proti tomu Find-S předpokládá cHc \in H a navíc, že všechny příklady jsou negativní, pokud jejich protějšek nepřináší novou znalost (?).

Induktivní učící systém, který používá CE a prostor hypotéz HH, je ekvivalentní deduktivnímu učícímu systému, který používá dokazování logických vět a induktivní předpoklad "HH obsahuje cílovou funkci".

Perceptron

{{TODO|Doplnit, opravit (nevím, jestli to chápu ;))}} Mějme nějaké trénovací příklady (xi,yi) i=1n(x_i,y_i)\ i=1\dots n, funkci GEN(x)\mathbf{GEN}(x), která pro vstup xx vygeneruje všechny možné výstupy, reprezentaci Φ:(x,y)Rd\Phi: (x,y)\to\mathbb{R}^d (mapuje dvojice (x,y)(x,y) na vektor nějakých atributů) a vektor parametrů αRd\overline{\alpha}\in\mathbb{R}^d.

Např. máme trénovací příklady jako věty a jim odpovídající sekvence tagů, funkce GEN(x)\mathbf{GEN}(x) generuje všechny možné sekvence tagů příslušné délky a Φ\Phi jsou atributy indikující určité vlastnosti, definované jako suma lokálních vlastností (závisejících na nějakém slově a jeho tagu, předchozích dvou tagách a pozici ve větě; např. booleovská indikace toho, že slovo je the a tag ukazuje DET, tj. člen).

Pro klasifikaci nových instancí použijeme funkci F(x)=argmaxyGEN(x)Φ(x,y)αF(x) = \mathrm{argmax}_{y\in\mathbf{GEN}(x)} \Phi(x,y)\cdot\overline{\alpha}. Úkolem učení je tady zjistit správné hodnoty α\overline{\alpha}, aby klasifikace pomocí F(x)F(x) byla co nejpřesnější. Algoritmus učení vypadá následovně:

  1. Nastavit α=0\overline{\alpha} = 0

  2. Pro (předem systémem pokus-omyl určený) počet kroků TT a pro všechna i=1,,ni = 1,\dots,n:

    1. Spočíst zi=argmaxzGEN(xi)Φ(xi,z)αz_i = \mathrm{argmax}_{z\in\mathbf{GEN}(x_i)}\Phi(x_i,z)\cdot\overline{\alpha}.

    2. Pokud (ziyi)(z_i\neq y_i), potom upravit α=α+Φ(xi,yi)Φ(xi,zi)\overline{\alpha} = \overline{\alpha} + \Phi(x_i,y_i) - \Phi(x_i,z_i).

  3. Vrátit parametry α\overline{\alpha}.

Konvergence

{{TODO|dopsat text}}

Dá se dokázat, že algoritmus se opravdu naučí to, co má (konverguje ke správnému výsledku) a taky že na neznámých datech bude zaručeně pracovat nějak dobře.

  • GEN\overline{\mathbf{GEN}} -- špatné klasifikace

  • Separovatelnost trénovací sekvence s marginem δ\delta: U,U=1\exists\mathbf{U}, ||\mathbf{U}||=1 takové, že i,zGEN(xi):UΦ(xi,yi)UΦ(xi,z)>δ\forall i, \forall z\in\overline{\mathbf{GEN}}(x_i): \mathbf{U}\cdot\Phi(x_i,y_i) - \mathbf{U}\cdot\Phi(x_i,z)>\delta

  • Pro separovatelné počet chyb po konečném počtu kroků algoritmu je R2δ2\leq \frac{R^2}{\delta^2}, kde i,zGEN(xi):Φ(xi,yi)Φ(xi,z)R\forall i, \forall z\in\overline{\mathbf{GEN}}(x_i): ||\Phi(x_i,y_i) - \Phi(x_i,z)||\leq R.

  • Pro neseparovatelné -- DU,δD_{U,\delta}: jak daleko je od separování, počet chyb minU,δ(R+DU,δ)2δ2\leq\min_{U,\delta}\frac{(R+D_{U,\delta})^2}{\delta^2}

Volený perceptron

{{TODO|dopsat text, formalizaci}}

Vylepšení (voted perceptron): pamatujeme si αi\overline{\alpha}_i ze všech kroků algoritmu a když dostaneme novou instanci, počítáme její klasifikace postupně za pomoci všech αi\overline{\alpha}_i a jako výslednou klasifikaci vrátíme tu, která se vyskytuje nejčastěji.

  • Pravděpodobnost, že se sekne na netrénovacích datech, je

    ParseError: KaTeX parse error: Undefined control sequence: \[ at position 26: …+1}E_{n+1}\left\̲[̲\min_{U,\delta}…

Rozhodovací stromy

Jsou induktivní algoritmy, vytvořené ke klasifikaci instancí, které popisují pomocí "disjunkce konjunkcí". Můžeme je použít, když instance jsou popsány atributy a hodnotami a cílová funkce je diskrétní. V trénovacích datech můžou být i chyby nebo nevyplněné atributy, není to až tak citlivé.

Cílová funkce je tu reprezentována právě rozhodovacím stromem (sekvencí rozhodnutí if-then-else), klasifikace se pak provádí průchodem stromem od kořene k listům, kdy se testuje hodnota jednoho atributu instance pro každý uzel, každá hrana odpovídá jedné hodnotě. Každý list pak určuje klasifikaci instance.

ID3 algoritmus

Je algoritmus, který vytváří rozhodovací stromy na základě trénovacích dat. Postupuje top-down -- konstruuje strom od kořene. V každém uzlu si klade otázku: Který atribut je nejlepší pro tento uzel? a řeší ji statistickým testem na základě max. entropie. Počet větví vedoucích z uzlu je počet možných hodnot atributu, takže ho známe hned po vytvoření uzlu. Trénovací data jsou při vytváření dělena podle atributů v daném uzlu.

Pracuje rekurzivně:

  1. Vyřeší singulární případy:

    1. Všechna trénovací data jsou pozitivní případy / negativní případy: vytvoří jednouzlové stromy s (+) nebo (-).

    2. Nemáme (už) žádné atributy: vytvoří jednouzlový strom s (nejčastější hodnota cíl. funkce v trénovacích datech).

  2. Vybere atribut AA, který nejlépe klasifikuje trénovací data a:

    1. Pro každou jeho možnou hodnotu udělá poduzel, rozdělí trénovací data podle těchto hodnot.

    2. Máme-li pro danou hodnotu atributu trénovací data, volá se rekurzivně (na danou část trénovacích dat a atributy s vynechaným AA).

    3. Pokud nejsou trénovací data, vloží list s (nejčastější hodnota cíl. funkce v trénovacích datech).

  3. Vrátí výsledný (pod)strom.

Prochází se celý hypothesis space, ale hladovým způsobem bez backtrackingu. Výstupem je 1 rozhodovací strom, tj. jedna hypotéza.

Výběr nejlepšího atributu probíhá na základě entropie (zisku informace). Který atribut má nejvyšší zisk informace (míra očekávaného snížení entropie), ten je vybrán. Platí: G(D,A)=H(D)vvalues(A)(DvDH(Dv))G(D,A) = H(D) - \sum_{v\in\mathrm{values}(A)}(\frac{|D_v|}{|D|}\cdot H(D_v)), kde:

  • G(D,A)G(D,A) je zisk informace pro data DD a atribut AA,

  • H(D)H(D) je entropie dat DD vzhledem k cílové funkci,

  • DvD_v jsou data, která mají hodnotu atributu AA rovnou vv.

Vylepšení ID3

Jedním z možných problémů je overfitting. Řekneme, že hypotéza hHh\in H overfituje trénovací data, pokud existuje alternativní hypotéza hHh'\in H taková, že hh má menší chybu než hh' na trénovacích datech, ale na celé distribuci instancí je to naopak.

Vyvarovat se overfittingu lze buď prořezáváním (pruning), např. za použití heldout dat pro validaci při trénování. Pruning je vyříznutí nějakého podstromu. Prořezávat můžeme, pokud je přesnost obecnější hypotézy vyšší než nějaké speciálnější. Postup:

  1. Vyhodit podstrom.

  2. Dát místo něj jeden uzel s (nejčastější hodnota na trénovacích datech) pro podmnožinu odpovídající vyhazovanému podstromu.

Máme víc možností prořezávání, počítáme přesnost a podle toho se rozhodujeme -- je nutné taky vědět, kdy s tím přestat, nutné testovat. K testování se můžou používat heldout data: k prořezání vyberu ten podstrom, jehož vyříznutí nejvíce zlepší úspěšnost na heldout datech.

Strategie rule-post-pruning spočívá v následujícím postupu:

  1. Vytvoření rozhodovacího stromu.

  2. Jeho převedení na pravdila (počet pravidel = počet listů), kdy 1 pravidlo je 1 cesta od listu ke kořeni.

  3. Pro každé pravidlo zahodit ty podmínky, jejichž vyhozením se přesnost pravidla zlepší.

  4. Pravidla setřídit podle přesnosti na trénovacích datech, reálná data klasifikovat použitím pravidel v tomto pořadí.

Proti prořezávání nad stromem nemusíme vyhazovat jen z konce stromu, máme jemnější rozlišení.

Pokud je některý atribut AA spojitý (ale cílové ohodnocení stále diskrétní), můžeme ho převést na diskrétní ACA_{C}: najdeme konstantu CC a potom: A<CAC=0A <C \Rightarrow A_{C} = 0, ACAC=1A \geq C \Rightarrow A_{C} = 1. Nejlepší CC můžeme najít opět pomocí zisku informace:

  1. Zjistíme "přelomové" body, tj. vedle sebe stojící hodnoty, které jsou hodnoceny rozdílně.

  2. Kandidáti na CC pak jsou průměry takových to vedle sebe stojících hodnot.

  3. Spočítáme C=argmaxCG(D,AC)\overline{C} = \mathrm{argmax}_{C} G(D,A_{C}).

Má-li atribut více hodnot (např. nějaké datum), zisk informace ho bude preferovat, což často vede k vytvoření stromu hloubky 1, který funguje jen na trénovací data. Musíme pak změnit test výběru atributů, místo zisku informace používáme ziskový poměr (gain ratio):

  • Rozštěpení informace (split information): SI(D,A)=vvalues(A)DvDlog2(DvD)SI(D,A) = - \sum_{v\in\mathrm{values}(A)}\frac{|D_v|}{|D|}\log_2(\frac{|D_v|}{|D|})

  • Ziskový poměr: GR(D,A)=G(D,A)SI(D,A)GR(D,A) = \frac{G(D,A)}{SI(D,A)}, kde G(D,A)G(D,A) je zisk informace pro trénovací data DD a atribut AA

Jsou i jiné způsoby, jak toho dosáhnout.

Pokud jsou některé atributy důležitější než jiné, zavádí se cena atributu (cost of the attribute). Taky se musí vytvořit jiné kritérium, alternativní k zisku informace. Jsou i jiné alternativní způsoby výběru nejlepšího atributu, např. distance-based measure, kdy se vybírá atribut, který dělí data co nejrovnoměrněji podle nějaké metriky (směrodatná odchylka, wen:Gini_coefficient). Změna výběru atributů nemá na stromy takový vliv jako prořezávání.

Učení založené na příkladech

Hlavní myšlenka učení založeného na příkladech (instance-based learning): který trénovací příklad je nejbližší aktuální testovací instanci? Mám vždy v paměti celá trénovací data, kdykoliv můžu přidat další a pro každý testovací příklad v nich hledám ty nejpodobnější. Proto je nutné zavést míru závislosti příkladů. My budeme používat euklidovskou míru d(x,y)=i=1n(ai(x)ai(y))2d(x,y) = \sqrt{\sum_{i=1}^n (a_i(x) - a_i(y))^2}. Cílová funkce může být diskrétní (s def. oborem V={v1,,vn}V = \{v_1,\dots,v_n\}) nebo spojitá.

K-nearest neighbor

K-nearest neighbor nebo k-nn je algoritmus typu instance-based learning. Počítám s uloženými trénovacími daty EE v paměti. Postup pro nějakou testovací instanci xqx_q:

  • Je-li xqEx_q \in E, potom mám přímo hodnocení.

  • Jinak najdu kk nejbližších x1,,xkEx_1,\dots,x_k\in E a:

    • Pro diskrétní cílovou funkci f^(xq)=argmaxvVi=1kδ(v,f(xi))\hat{f}(x_q) = \mathrm{argmax}_{v\in V} \sum_{i=1}^{k} \delta (v, f(x_i)), kde δ=1\delta = 1 pro stejné hodnoty argumentů, a 0 pro různé (tj. přiřadím xqx_q takovou hodnotu, kterou má nejvíce z oněch kk sousedů).

    • Pro spojitou cílovou funkci f^(xq)=i=1kf(xi)k\hat{f}(x_q) = \frac{\sum_{i=1}^k f(x_i)}{k}, tj. udělám průměr hodnocení.

K-nn nikdy nepočítá explicitní obecnou hypotézu, pracuje jen v kontextu. Pro k=1k = 1 de facto odpovídá Voronoi diagramu. Vylepšením může být vážení podle vzdáleností (distance-weighted k-nn), kde:

  • V diskrétním případě f^(xq)=argmaxvVi=1kwiδ(v,f(xi))\hat{f}(x_q) = \mathrm{argmax}_{v\in V} \sum_{i=1}^{k} w_i\cdot\delta (v, f(x_i)), kde navíc wi=1d(xq,xi)2w_i = \frac{1}{d(x_q,x_i)^2}.

  • Ve spojitém případě f^(xq)=i=1kwif(xi)i=1kwi\hat{f}(x_q) = \frac{\sum_{i=1}^{k} w_i f(x_i)}{\sum_{i=1}^{k} w_i}.

Díky vážení můžeme takhle jít dokonce přes celá trénovací data (globální (Shepardova) metoda).

Algoritmus je robustní vzhledem k šumu v trénovacích datech. Problémem je pomalý výpočet vzdáleností ke všem trénovacím datům, pro zrychlení se vytváří indexy, pomocí k-d stromů (vynecháme). Problém je taky, když mám hodně atributů a relevantních jen pár. Pak je metrika vzdáleností zavádějící -- i když se shodují důležité atributy, mohou být od sebe instance "daleko". Řešením je váha atributů.

Lokálně vážená lineární regrese

Lokálně vážená lineární regrese (locally weighted linear regression) je konstrukce lokální aproximace cílové funkce na okolí kolem testovacího příkladu. Používá se často ve statistice. Používají se i jiné než lineární funkce, ale těmi se zabývat nebudeme.

  • Def.: Regrese je aproximace reálné funkce.

  • Def.: Reziduum je odchylka aproximace od reálné funkce, tj. f^(x)f(x)\hat{f}(x) - f(x).

  • Def.: Jádro (kernel function) je funkce KK vzdálenosti dd za účelem získání váhy trénovacích příkladů wi=K(d(xi,xq))w_i = K(d(x_i, x_q)). Často je to gaussovská funkce se střední hodnotou μ\mu a rozptylem σ2\sigma^2.

Aproximace hodnotící funkce je tu ve tvaru: f^(x)=w0+w1a1(x)++wnan(x)\hat{f}(x) = w_0 + w_1 a_1(x)+\dots + w_n a_n(x) (kde ai(x)a_i(x) je hodnota ii-tého atributu příkladu. Úkolem je pak najít taková wiw_i, která minimalizují rezidua E=12iD(f^(x)f(x))2E = \frac{1}{2}\sum_{i\in D}(\hat{f}(x)-f(x))^2. K tomu slouží algoritmus postupného klesání gradientu (gradient descent training rule) (vynecháme). Aproximace se modifikuje tak, aby byla jen lokální, pro to jsou 3 možnosti (z nichž ta 3. je nejlepší). Nechť NNk(xq)NN_k(x_q) je množina kk nejbližších sousedů xqx_q:

  1. E1(xq)=12xNNk(xq)(f^(x)f(x))2E_1(x_q) = \frac{1}{2}\sum_{x\in NN_k(x_q)} (\hat{f}(x)-f(x))^2

  2. E2(xq)=12xD(f^(x)f(x))2K(d(xq,x))E_2(x_q) = \frac{1}{2}\sum_{x\in D}(\hat{f}(x)-f(x))^2\cdot K(d(x_q,x)) -- tady ale výpočtová složitost závisí na velikosti trénovacích dat D|D|.

  3. E3(xq)=12xNNk(xq)(f^(x)f(x))2K(d(xq,x))E_3(x_q) = \frac{1}{2}\sum_{x\in NN_k(x_q)} (\hat{f}(x)-f(x))^2\cdot K(d(x_q,x)) -- toto je vhodná aproximace 2. přístupu, výpočetní složitost závisí jen na kk.

Bayesovské učení

{{TODO|Tuto kapitolu je třeba upravit, buď s použitím Mitchella, nebo Státnice%20I3:%20Stochastické%20metody%20a%20jejich%20aplikace%20v%20počítačové%20lingvistice#Bayesovské%20učení, aby nebyla zavádějící}} Bayesovské učení (Bayesian learning) je kvantitativní přístup k hypotéze, narozdíl od předchozích se zabývá pravděpodobností. Trénovací příklady tu zvyšují vhodnost (likelihood) nějaké hypotézy. Potřebujeme nějaké apriorní znalosti -- iniciální pravděpodobnosti hypotéz, což je často výpočetně náročné. Klasifikace instancí je založená na hypotézách a jejich pravděpodobnostech, kombinuje se i víc hypotéz.

Při pohledu na strojové učení jako prohledávání prostoru hypotéz k nalezení té nejlepší je pro bayesovské učení nejlepší hypotéza ta nejpravděpodobnější (vzhledem k apriorním pravděpodobnostem a trénovacím datům).

  • Def.: P(h)P(h) -- apriorní pravděpodobnost hypotézy hh; nezávisí na datech

  • Def.: P(D)P(D) -- pravděpodobnost výskytu čehokoliv z trénovacích dat DD bez znalosti pravděpodobnosti nějaké hypotézy

  • Def.: P(Dh)P(D|h) -- podmíněná pravděpodobnost výskytu DD, platí-li hh

  • Def.: P(hD)P(h|D) -- aposteriorní pravděpodobnost, pravděpodobnost hh za předpokladu, že známe DD; závisí na datech

Zajímá nás právě P(hD)P(h|D). Bayesova věta: P(AB)=P(BA)P(A)P(B)P(A|B) = \frac{P(B|A)P(A)}{P(B)}, z toho je vidět, že P(hD)=P(Dh)P(h)P(D)P(h|D) = \frac{P(D|h)P(h)}{P(D)}. Tedy P(hD)P(h|D) se zvyšuje spolu s P(Dh)P(D|h) a P(h)P(h), ale snižuje s rostoucí P(D)P(D).

Hledáme hypotézu, která má maximální aposteriorní pravděpodobnost (maximální aposteriorní hypotézu), tj. hMAP=argmaxhHP(Dh)P(h)h_{MAP}=\mathrm{argmax}_{h\in H} P(D|h)P(h) (podle Zlatého pravidla). Pokud jsou apriorní pravděpodobnosti všech hypotéz stejné, pak maximálně vhodná hypotéza (maximum likelihood hypothesis) je hML=argmaxhHP(Dh)h_{ML}=\mathrm{argmax}_{h\in H} P(D|h).

Konceptuální učení hrubou silou

Bayesův vzorec použijeme k algoritmu, který za pomoci vypočtených aposteriorních pravděpodobností ohodnotí hypotézy a vrátí tu nejpravděpodobnější.

  • Def.: Řekneme, že hypotéza hh je konzistentní s trénovacími daty DD, pokud xiD=<xi,di>i=1n:h(xi)=di\forall x_i\in D = <x_i,d_i>_{i=1}^n : h(x_i) = d_i, tj. ve všech případech na trénovacích datech dává správné ohodnocení.

Pro algoritmus předpokládáme apriorní pravděpodobnost pro všechny hypotézy stejnou, tj. rovnoměrné rozdělení: P(h)=1H hHP(h) = \frac{1}{|H|}\ \forall h\in H. Dále předpokládáme, že P(Dh)={1 pro di=h(xi) <xi,di>D0 jinakP(D|h) = \begin{cases}1\ \mathrm{pro}\ d_i = h(x_i)\ \forall <x_i,d_i>\in D\\0\ \mathrm{jinak}\end{cases}.

Celkový běh algoritmu:

  1. hH:P(hD)=P(Dh)P(h)P(D)\forall h\in H: P(h|D) = \frac{P(D|h)P(h)}{P(D)}

  2. hMAP=argmaxhHP(hD)h_{MAP} = \mathrm{argmax}_{h\in H} P(h|D)

    1. Je-li hh nekonzistentní s DD, pak P(Dh)=0P(D|h) = 0, proto P(hD)=0P(h|D) = 0

    2. Je-li hh konzistentní s DD, pak P(Dh)=1P(D|h) = 1, proto P(hD)=11HVSH,DH=1HP(D)P(h|D) = \frac{1\cdot\frac{1}{|H|}}{\frac{|VS_{H,D}|}{|H|}} = \frac{1}{|H|\cdot P(D)}.

To, že P(D)=VSH,DHP(D) = \frac{|VS_{H,D}|}{|H|}, plyne z věty o úplné pravděpodobnosti: P(D)=iP(Dhi)P(hi)P(D) = \sum_{i} P(D|h_i)P(h_i), protože P(hihj)=0 ijP(h_i\cap h_j) = 0\ i\neq j. Potom P(D)=hVSH,D11H+h∉VSH,D01H=VSH,DHP(D) = \sum_{h\in VS_{H,D}} 1\cdot\frac{1}{|H|} + \sum_{h\not\in VS_{H,D}} 0\cdot\frac{1}{|H|} = \frac{|VS_{H,D}|}{|H|}.

Z toho a Bayesova vzorce plyne, že P(hD)={1VSH,D pro h konzistentni s D0 jinakP(h|D) = \begin{cases}\frac{1}{|VS_{H,D}|}\ \mathrm{pro}\ h\ \mathrm{konzistentni\ s}\ D\\0\ \mathrm{jinak}\end{cases}. Tedy každá konzistentní hypotéza je maximální aposteriorní, každá konzistentní hypotéza je "nejpravděpodobnější" pro daná trénovací data.

Bayesova optimální klasifikace

Jaká je nejpravděpodobnoější klasifikace nového příkladu? Nemusí být shodná s hMAPh_{MAP}. Může-li nabýt libovolné hodnoty yjYy_j\in Y, pak je dána vztahem P(yjD,x)=hiHP(yjhi)P(hiD,x)P(y_j|D,x) = \sum_{h_i\in H} P(y_j|h_i)P(h_i|D,x) a Bayesova optimální klasifikace je to yjy_j, pro kterou je P(yjD,x)P(y_j|D,x) maximální (tj. argmax\mathrm{argmax}).

Libovolný systém, který používá Bayesovu optimální klasifikaci pro nové instance, se nazývá Bayes optimal learning. Tato metoda maximalizuje pravděpodobnost, že nová data budou klasifikována správně za předpokladu trénovacích dat, prostoru hypotéz a apriorních pravděpodobností.

Bayesův optimální klasifikátor poskytuje sice nejlepší možné výsledky z trénovacích dat, ale je výpočetně náročný. To motivuje použití Gibbsova algoritmu:

  1. Vybere se náhodně hHh\in H vzhledem k distribuci aposteriorních pravděpodobností nad HH.

  2. hh se použije k predikci klasifikace nové instance.

Naive Bayes Classifier

Menší výpočetní náročnost než optimální bayesovská klasifikace má i Naivní bayesovský klasifikátor. Ten lze použít, když každou instanci lze popsat nn-ticí hodnot atributů a cílová funkce c(x)c(x)nabývá hodnot z konečné množiny YY.

Bayesovský přístup: yMAP=argmaxyYP(ya1,,an)=argmaxyYP(a1,,any)P(y)y_{MAP} = \mathrm{argmax}_{y\in Y} P(y|a_1,\dots,a_n) = \mathrm{argmax}_{y\in Y} P(a_1,\dots,a_n|y)P(y). Použijeme:

  • P(y)P(y) je relativní frekvence výskytu yy v trénovacích datech.

  • P(a1,,any)=i=1nP(aiy)P(a_1,\dots,a_n|y) = \prod_{i=1}^n P(a_i|y), tj. předpokládáme nezávislost hodnot atributů (zjednodušení Naivního klasifikátoru).

Ve výsledku yNBC=argmaxyYP(y)i=1nP(aiy)y_{NBC} = \mathrm{argmax}_{y\in Y} P(y)\prod_{i=1}^n P(a_i|y).

Je-li splněn předpoklad o podmíněné nezávislosti hodnot atributů, je yNBC=yMAPy_{NBC} = y_{MAP}. Nevyžadujeme ale prohledávání všech možných hypotéz (tj. možných hodnot P(y)P(y) a P(aiy)P(a_i|y)), jen počítáme frekvence specifických jevů v trénovacích datech.

Délka minimálního popisu

Délka minimálního popisu (minimum description length) souvisí s Occamovou břitvou. Platí totiž: hMAP=argmaxhHP(Dh)P(h)=argmaxhHlog2P(Dh)+log2P(h)=h_{MAP} = \mathrm{argmax}_{h\in H} P(D|h)P(h) = \mathrm{argmax}_{h\in H}\log_2 P(D|h) + \log_2 P(h) =

=argminhHlog2P(Dh)log2P(h) = \mathrm{argmin}_{h\in H} - \log_2 P(D|h) - \log_2 P(h) A to se dá interpretovat jako preference nejkratší hypotézy s ohledem na specifický systém reprezentace hypotéz a dat. Pokud označíme LC(i)L_C(i) počet bitů potřebných k zakódování zprávy ii v kódování CC, pak se dá vzorec přepsat jako hMAP=argminhLCh(h)+LCDh(Dh)h_{MAP} = \mathrm{argmin}_h L_{C_h}(h) + L_{C_{D|h}} (D|h) (uvažujeme optimální kódování prostoru hypotéz i trénovacích dat s ohledem na hypotézu hh).

Princip délky minimálního popisu je následující:

  • Vyber hMDLh_{MDL} takové, že hMDL=argminhHLC1(h)+LC2(Dh)h_{MDL} = \mathrm{argmin}_{h\in H} L_{C_1}(h) + L_{C_2}(D|h).

Pokud je C1C_1 optimální kódování hypotéz a C2C_2 optimální kódování trénovacích dat, pak hMAP=hMDLh_{MAP} = h_{MDL}.

Přesto z toho nevyplývá, že nejkratší hypotézy jsou nejlepší.

Vyhodnocování hypotéz

{{TODO|dopsat}}

Support Vector Machines

{{TODO|dovysvětlit "(?)", celkově líp vysvětlit}}

Do 80. let většina algoritmů pro strojové učení používala lineární funkce. V 80. letech přišly algoritmy jako k-nn nebo rozhodovací stromy, které používaly nelineární rozhodovací plochy. Od 90. let už za algoritmy stojí silné teoretické pozadí, což platí i o SVM. Nepřistupujeme tu k učení jako k problému vyhledávání, nýbrž optimalizace.

Image:svm.png SVM lze použít, pokud máme hodnoty atributů jednotlivých příkladů spojité. Pak můžeme zkonstruovat pomocí kernelové funkce prostor atributů (feature space). V něm jsou umístěny jednotlivé příklady a my hledáme nejlepší nadrovinu, která odděluje negativní příklady od pozitivních (tj. máme optimalizační problém). Nejlepší nadrovina je taková, která má největší margin (vzdálenost k nejbližší rovnoběžce, která prochází nějakými příklady, viz obrázek).

Každou nadrovinu můžeme popsat rovnicí w×xb=0\mathbf{w}\times\mathbf{x}-b = 0 (kde ×\times je skalární součin), w\mathbf{w} je její normálový vektor. Popíšeme hraniční nadroviny (support vectors; rovnoběžky s nadrovinou, které se dotýkají pozitivních, resp. negativních příkladů) jako w×xb=1\mathbf{w\times x}-b =1 a w×xb=1\mathbf{w\times x}-b=-1. Podle vzorce pro vzdálenost z geometrie je vzdálenost nadroviny od hraničních nadrovin d=w×xbw2=1wd = \frac{|\mathbf{w\times x}-b|}{\sqrt{||\mathbf{w}||^2}} = \frac{1}{||\mathbf{w}||}, celková vzdálenost (margin) je tedy 2w\frac{2}{||\mathbf{w}||}. Tedy k maximalizování marginu musíme minimalizovat w\mathbf{w}. K tomu máme další podmínky, aby se hraniční nadroviny dotýkaly právě nejbližších případů k nadrovině.

Úloha maximalizace marginu je vlastně úloha kvadratického programování -- máme:

  • Maximalizační kritérium argmin12w2\mathrm{argmin}\frac{1}{2}||\mathbf{w}||^2 (výsledek je stejný jako u minimalizace w\mathbf{w}, ale kritérium je kvadratické).

  • Nerovnice (zajišťují to, že nadrovina je na správné straně od všech bodů) tvaru w×xi+b1\mathbf{w \times x}_i + b\geq 1 pro pozitivní případy a w×xi+b1\mathbf{w\times x}_i + b\leq -1 pro negativní.

  • Rovnice (zajišťují, že mám opravdu nadrovinu (?)) wx+b=0\mathbf{wx}+b=0

To se dá přepsat do duálního tvaru v kvadratickém programování:

  • Maximalizovat maxi=1nαi12i,jαiαjcicjxiTxj\mathrm{max}\sum_{i=1}^n\alpha_i -\frac{1}{2}\sum_{i,j}\alpha_i\alpha_j c_i c_j\mathbf{x}_i^T\mathbf{x}_j

  • Za podmínky αi0\alpha_i \geq 0 a i=1nαici=0\sum_{i=1}^n \alpha_i c_i = 0

Kde w=iαicixi\mathbf{w} = \sum_i\alpha_i c_i\mathbf{x}_i (cic_i odlišuje nadroviny příslušející pozitivním příkladům od těch k negativním, je buď rovné 1-1 nebo 11).

Většina parametrů je nulová (jde jen o instance nejbližší dělící nadrovině, tzv. borders), takže dostanu řešení s velmi malým počtem parametrů.

Chování SVM můžu ovlivňovat dvěma věcmi: pomocí slack variables a transformací feature space.

Slack variables

Kvůli špatně klasifikovaným datům (pro větší robustnost) existuje úprava za pomocí slack variables (korigující míry, pro správně klasifikovaná data jsou nulové). Potom se minimalizuje 12w2+Ciξi\frac{1}{2}||\mathbf{w}||^2 + C\cdot\sum_i\xi_i, kde ξi\xi_i jsou slack variables a CC je konstanta určující velikost penalizace špatně klasifikovaných dat.

Transformace feature space

S jednotlivými atributy můžeme dělat polynomiální transformace a kombinovat je, např. máme-li h,wh, w jako výšku a šířku, můžeme je upravit na h,w,hw,h2,w2h, w, h\cdot w, h^2, w^2 pro polynomiální transformace do stupně 2. V praxi se vyšší než stupeň 3 většinou nepoužívá. Problém ale je stále lineární, mění se jen prostor atributů!

Další transformace jsou např. radial basis function (něco jako hustota normálního rozdělení) -- exp{cxx2}\exp\{c\cdot ||\mathbf{x-x'}||^2\}. Parametry si musím zjistit sám podle konkrétního případu. Podobná je i Gaussian basis function, která vypadá podobněji Gaussově definici hustoty normálního rozdělení.

Více hodnot cílové funkce

Pokud má cílová funkce nn hodnot místo dvou, jsou tu dvě strategie:

  • 1-versus-all -- definuju funkce = nadroviny dělící prostor na ++ a - (mám nn funkcí) tím, že vezmu vždycky jednu třídu a zbytek považuju za druhou třídu. Pak klasifikuju nové instance k té třídě, která má nejbližší nadrovinu.

  • 1-versus-1 -- pro každý pár hodnot mám jednu funkci, tj. nakonec jich je (n2){n \choose 2}.

Category:Matematická%20lingvistika