úloha klasifikace spočívá v přiřazení vhodné třídy (nebo sady tříd) konkrétní položce
typická je binární klasifikace
při regresi přiřazujeme položce x vhodnou funkční hodnotu y
standardní evaluační metriky
regrese
mean square error, MSE=N1∑i=1N(yi−ti)2
yi … predikce funkční hodnoty pro xi
ti … reálná funkční hodnota pro xi (v trénovacích/testovacích datech)
klasifikace
negative log likelihood, NLL=−∑i=1Npi(ti)
ti … reálná třída xi
pi … pravděpodobnostní rozdělení, které model vrací pro xi (pravděpodobnosti, že xi náleží jednotlivým třídám)
místo pi(ti) lze také zapsat p(ti∣xi)
accuracy (přesnost)
počet správně klasifikovaných ÷ celkový počet
tp+tn+fp+fntp+tn (u binární klasifikace)
nevhodná metrika, pokud jsou třídy nevyvážené (např. testujeme vzácné onemocnění)
confusion matrix
řádky jsou označeny pravdivými hodnotami, sloupce predikovanými hodnotami (nebo naopak – je to potřeba uvést)
v každé buňce je počet testovacích dat s konkrétní kombinací targetu a predikce
na diagonále jsou tedy počty správně klasifikovaných testovacích dat
při binární klasifikaci buňky vlastně obsahují počty TP, FN, FP, TN
binární klasifikace (navíc)
základní dělení výsledků klasifikace
predikce je pozitivní, realita (target) rovněž → true positive (TP)
predikce je pozitivní, realita je negativní → false positive (FP)
predikce je negativní, realita je pozitivní → false negative (FN)
predikce je negativní, realita také → true negative (TN)
precision, P=tp+fptp
recall, R=tp+fntp
F-measure
vážený harmonický průměr precision a recallu
Fβ=β2P+R(β2+1)PR=tp+fp+β2(tp+fn)tp+β2⋅tp
F1=P+R2PR=tp+fp+tp+fntp+tp
je užitečné mít jednu hodnotu místo dvou (P,R)
ROC (receiver operating characteristic) křivka
zachycuje, jak se mění vlastnosti binárního klasifikátoru, když posouváme práh (threshold, tzn. hodnotu, od níž výsledek prohlásíme za pozitivní – typicky uvažujeme 0.5)
na ose x je false positive rate, FPR=fp+tnfp (v čitateli jsou všechny negativní instance)
na ose y je true positive rate (recall), TPR=tp+fntp
každý bod na křivce odpovídá jinému thresholdu
pro náhodný „klasifikátor“ bude ROC křivka diagonála
pro dokonalý klasifikátor bude ROC křivka jeden bod vlevo nahoře
FPR = 0, TPR = 1
AUC (area under curve)
plocha pod ROC křivkou
pro náhodný „klasifikátor“ je AUC = 0.5, pro dokonalý klasifikátor to bude AUC = 1
ohodnocení modelu (testovací data, křížová validace, maximální věrohodnost)
testovací data slouží k ověření toho, jak dobře náš model generalizuje
snažíme se zjistit, jak dobré výsledky model vrací pro data, která dosud neviděl
testovací data nesmím použít v procesu trénování modelu a ladění hyperparametrů
pokud je potřeba ladit hyperparametry, používá se train-dev-test split
parametry modelu trénujeme na trénovacích datech
hyperparametry určujeme pomocí vývojových dat (zjistíme, pro které hodnoty hyperparametrů má model nejlepší výkon)
vývojová data se někdy označují jako validační (validation set)
k finálnímu vyhodnocení modelu slouží testovací data
pokud mám dat málo a nelze z nich jednoduše vyčlenit testovací (nebo vývojová) data, používá se křížová validce (cross-validation)
trénovací data rozdělím na n dílů
model natrénuju na datech z n−1 dílů
na zbylých datech model vyhodnotím
proces opakuju pro n možných voleb
jako výsledné skóre modelu použiju průměr průběžných hodnocení
maximální věrohodnost (maximum likelihood)
máme-li fixní trénovací data, pak likelihood L(w) (kde w jsou váhy modelu) se rovná součinu pravděpodobností targetů trénovacích dat
odhadujeme váhy modelu tak, aby byl likelihood (věrohodnost) trénovacích dat co největší
přesněji
pro model s fixními vahami w máme pravděpodobnostní distribuci pmodel(x;w), že model vygeneruje x
pro model s fixními vahami w a konkrétní řádek x máme pravděpodobnostní distribuci pmodel(t∣x;w), jak model klasifikuje x
místo toho zafixujeme trénovací data a budeme měnit váhy → dostaneme L(w)=pmodel(X;w)=∏ipmodel(xi;w)
wMLE=arg maxwpmodel(X;w)
MLE … maximum likelihood estimation
přeučení a regularizace (generalizační chyba, včasné zastavení trénování, L2 a L1 regularizace)
underfitting – model je příliš slabý (příliš jednoduchý), plně jsme nevyužili jeho potenciál
overfitting (přeučení) – model špatně generalizuje, příliš se přizpůsobil trénovacím datům
generalizační chyba
zachycuje, jak dobře model generalizuje
typicky odpovídá výkonu modelu na testovacích datech (případně lze k jejímu určení použít křížovou validaci)
výkon = vhodná metrika (F-measure, accuracy, …)
generalizační chybu lze zachytit v grafu vedle trénovací chyby (výkonu modelu na trénovacích datech)
pokud se testovací (generalizační) křivka přibližovala k trénovací a v určitý moment se začala vzdalovat, došlo k přetrénování (overfitting) modelu
je potřeba zesílit regularizaci nebo včas zastavit trénování
pokud se testovací křivka ani nezačala přibližovat, je potřeba trénovat déle
regularizace
intuice
penalizujeme modely s většími váhami
preferujeme menší změny modelu
omezujeme efektivní kapacitu modelu
čím je model složitější, tím větší má váhy
ke ztrátové funkci (loss :.|:;) přičteme normu vah vynásobenou parametrem λ
L1 regularizace … λ(∣w1∣+∣w2∣+⋯+∣wn∣)
L2 regularizace … λ(w12+w22+⋯+wn2)
nebo také λ∥w∥2, případně 2λ∥w∥2, aby nám vyšla hezká derivace
jak bojovat s overfittingem
L2 regularizací
early stoppingem (s trénováním přestaneme, když začne validační chyba růst)
s rostoucím počtem dimenzí (features) potřebujeme čím dál víc (exponenciálně) trénovacích dat, aby model rozumně generalizoval
chceme mít v trénovacích datech několik vzorků pro každou kombinaci features → s každou další dimenzí potřebujeme násobně víc vzorků
k redukci počtu dimenzí se obvykle používají následující přístupy
filter
nezávislý na modelu, features vybírá na základě jejich vlastností
k hodnocení relevance features se používají statistické metody
konzistence – nemůžeme odstranit features, pokud bychom tak ztratili možnost odlišit prvky s různými targety (třídami)
korelace – dobré features korelují s třídami a nekorelují s jinými features
vzdálenost mezi třídami
metriky z teorie informace – např. vzájemná informace
wrapper
závislý na modelu, features vybírá tak, aby optimalizoval jeho výsledky
model se natrénuje, pak se vyhodnotí pomocí standardních technik (accuracy, F-measure apod.)
Učení založené na příkladech
algoritmus k-nejbližších sousedů
regrese: t=∑i∑jwjwi⋅ti
vážený průměr
klasifikace
pro uniformní váhy můžeme hlasovat (nejčastější třída vyhrává, remízy rozhodujeme náhodně)
jinak uvažujeme one-hot kódování ti opět můžeme použít predikci t=∑i∑jwjwi⋅ti (zvolíme třídu s největší predikovanou pravděpodobností)
volba vah (weighting)
uniform: všech k nejbližších sousedů má stejné váhy
inverse: váhy jsou nepřímo úměrné vzdálenosti
softmax: váhy jsou přímo úměrné softmaxu záporných vzdáleností
jak určit nejbližší sousedy / vzdálenosti?
p-norma: ∥x∥p=p∑i∣xi∣p
obvykle se používá p∈{1,2,3,∞}
vzdálenost x a y pak lze určit jako ∥x−y∥p
Lineární regrese
analytické řešení metodou nejmenších čtverců
sum of squares error: 21∑i(xiTw−ti)2
lze ho zapsat jako 21∥Xw−t∥2
snažíme se ho minimalizovat → hledáme hodnoty, kde je derivace chybové funkce podle každé z vah nulová
∂wj∂21∑i(xiTw−ti)2=∑ixij(xiTw−ti)
chceme, aby ∀j:∑ixij(xiTw−ti)=0
XT(Xw−t)=0
XTXw=XTt
je-li XTX invertibilní, pak lze určit explicitní řešení jako w=(XTX)−1XTt
trénování pomocí stochastic gradient descent
gradient descent
snažíme se minimalizovat hodnotu chybové funkce E(w) pro dané váhy w volbou lepších vah
spočítáme ∇wE(w) → tak zjistíme, jak váhy upravit
nastavíme w←w−α∇wE(w)
α … learning rate (hyperparametr), „délka kroku“
tomu se říká gradient descent
standard gradient descent – používáme všechna trénovací data k výpočtu ∇wE(w)
stochastic (online) gradient descent – používáme jeden náhodný řádek
minibatch stochastic gradient descent – používáme B náhodných nezávislých řádků
algoritmus pro trénink modelu lineární regrese (minibatch SGD)
náhodně inicializujeme w (nebo nastavíme na nulu)
opakujeme, dokud to nezkonverguje nebo nám nedojde trpělivost
samplujeme minibatch řádků s indexy B
buď uniformně náhodně, nebo budeme chtít postupně zpracovat všechna trénovací data (to se obvykle dělá, jednomu takovému průchodu se říká epocha), tedy je nasekáme na náhodné minibatche a procházíme postupně
w←w−α∣B∣1∑i∈B((xiTw−ti)xi)−αλw
jako E se používá polovina MSE (s L2 regularizací): E(w)=∣B∣1∑i∈B21(xiTw−ti)2+2λ∥w∥2 (stačí to zderivovat)
Logistická regrese
binární klasifikace (sigmoid, metody trénování)
aktivační funkce sigmoid … σ(x)=1+e−x1
predikce y(x;w)=σ(yˉ(x;w))=σ(xTw)
správnou třídu získáme zaokrouhlením
přesná hodnota se rovná pravděpodobnosti, že je x klasifikováno jako 1 (uvažujeme třídy 0 a 1)
yˉ … „lineární složka“ logistické regrese
velikost vektoru vah w odpovídá počtu features
nesmíme zapomenout také na bias, ten opět může být reprezentován jako další váha
při trénování se jako ztrátová funkce používá negative log likelihood (NLL)
pravděpodobnost targetu t pro položku x lze vyjádřit jako p(t∣x;w)=σ(xTw)t(1−σ(xTw))1−t
algoritmus trénování pomocí minibatch SGD
klasifikujeme do tříd {0,1}, na vstupu máme dataset X a learning rate α∈R+
náhodně inicializujeme w (nebo nastavíme na nulu)
opakujeme, dokud to nezkonverguje nebo nám nedojde trpělivost
samplujeme minibatch řádků s indexy B
w←w−α∣B∣1∑i∈B(σ(xTw)−t)x−αλw
jako E se používá NLL (s L2 regularizací)
výsledek se překvapivě podobá lineární regresi
gradient je také (y(x)−t)x
klasifikace do více tříd (softmax, metody trénování)
klasifikujeme do jedné z K tříd
parametry modelu: váhová matice W (sloupce odpovídají třídám, řádky featurám), vektor biasů (jeden bias za každou třídu)
aktivační funkce … softmax(z)i=∑jezjezi
softmax je invariantní k přičtení konstanty softmax(z+c)i=softmax(z)i
softmax zajišťuje normalizaci (aby se pravděpodobnosti sečetly na jedničku)
z linearity yˉ lze dokázat, že oblasti tříd jsou konvexní – nemůže se stát, že by na úsečce mezi dvěma body v jedné třídě byl bod v jiné třídě
algoritmus trénování pomocí minibatch SGD
klasifikujeme do tříd {0,…,K−1}, na vstupu máme dataset X a learning rate α∈R+
náhodně inicializujeme w (nebo nastavíme na nulu)
opakujeme, dokud to nezkonverguje nebo nám nedojde trpělivost
samplujeme minibatch řádků s indexy B
w←w−α∣B∣1∑i∈B((softmax(xTW)−1t)xT)T−αλw
jako E se používá NLL (s L2 regularizací)
srovnání gradientu logistické regrese
binary: (y(x)−t)x
multiclass: ((y(x)−1t)xT)T
přičemž 1t je one-hot reprezentace targetu t (tedy vektor s jedničkou na t-té pozici a nulami všude jinde)
Rozhodovací stromy
algoritmus učení a kritéria větvení
v každém vnitřním vrcholu je uložena feature, podle které dělíme, a konkrétní hodnota, která určuje rozhraní
každému vrcholu náleží podmnožina trénovacích dat
predikce listu odpovídá tomu, jaká data v něm jsou (při regresi průměrujeme, při klasifikaci volíme největší třídu = většinové hlasování / majority vote)
možná kritéria větvení ve vrcholu T
squared error criterion (používá se při regresi)
squared error criterion říká, jak homogenní je podmnožina trénovacích dat, která náleží vrcholu T
cSE(T)=∑i∈IT(ti−t^T)2
IT jsou indexy řádků trénovacích dat, které náleží danému vrcholu
t^T je průměr targetů v daném vrcholu
Gini index / Gini impurity (používá se při klasifikaci)
cGini(T)=∣IT∣∑kpT(k)(1−pT(k))
jak často by byl náhodně vybraný prvek špatně klasifikován, kdyby byl klasifikován náhodně podle rozdělení pT
pT(k) … pravděpodobnost, že vybereme prvek ze třídy k
(1−pT(k)) … pravděpodobnost, že mu přiřadíme jinou třídu než k
v binární klasifikaci Gini odpovídá squared error ztrátové funkci (skoro MSE)
ze součtu vynecháme třídy s nulovou pravděpodobností, aby nám nerozbily logaritmus
entropy criterion lze odvodit ze ztrátové funkce negative log likelihood (NLL)
algoritmus CART (Classification and Regression Trees)
trénovací data jsou uložena v listech
začneme s jedním listem
list můžeme rozdělit (stane se z něj vnitřní vrchol a pod něj připojíme dva nové listy)
list dělíme tak, aby rozdíl cTL+cTR−cT byl co nejmenší
cT … criterion současného vrcholu
cTL … criterion nového levého syna
cTR … criterion nového pravého syna
někdy stanovujeme omezení: maximální hloubku stromu, minimální počet dat v děleném listu (abychom nedělili zbytečně listy, co mají málo dat), maximální počet listů
obvykle se listy dělí prohledáváním do hloubky
pokud je stanoven maximální počet listů, je vhodnější je dělit ty s nejmenším rozdílem cTL+cTR−cT
dosud nás vždycky zajímaly parametry, které minimalizují ztrátovou funkci
tím, že minimalizujeme dělicí kritérium, minimalizujeme minimální dosažitelnou hodnotu ztrátové funkce pro daný strom
prořezávání
prořezávání (pruning) lze použít ke zjednodušení rozhodovacího stromu, tím je možné omezit overfitting
prořezávat lze shora dolů nebo zespoda nahoru (bottom-up pruning × top-down pruning)
příklad: reduced error pruning
bottom-up přístup
na testovacích datech ověřujeme přesnost (accuracy)
postupně zkoušíme rušit větvení ve vnitřních vrcholech – pokud tím nedojde ke snížení přesnosti, tak změnu provedeme
tedy se z vnitřního vrcholu stane list, který predikuje třídu s největším počtem položek
Metoda podpůrných vektorů
klasifikátor pro lineárně separabilní třídy
hard-margin SVM (support-vector machine)
je to kernelová (jádrová) metoda strojového učení
model má k dispozici spoustu polynomiálních features, aniž bychom je museli explicitně počítat
používáme jádrovou funkci K
model je neparametrický – využívá se duální formulace
nemáme váhy, ale koeficienty u trénovacích dat
duální formulace vychází z pozorování, že klasické váhy jsou lineárními kombinacemi trénovacích dat
princip je podobný jako u perceptronu
jedná se o binární klasifikaci do tříd {−1,1}
tentokrát ale chceme zajistit, aby byla dělicí nadrovina (decision boundary) co nejlepší – aby byl margin (mezera mezi nadrovinou a body) co největší
jak se odvozuje
uvažujeme váhy w a bias b, dále mapování φ do prostoru features, predikci označíme y(x)=φ(x)Tw+b
pro všechny body chceme maximalizovat vzdálenost od decision boundary
váhy i bias můžeme libovolně škálovat, proto určíme, že pro body nejbližší k decision boundary bude platit tiy(xi)=1
díky tomu nám stačí „minimalizovat váhy“ takto: argminw,b21∥w∥2
za předpokladu, že tiy(xi)≥1
tuhle minimalizaci s omezující podmínkou provádíme pomocí lagrangiánu a KKT podmínek
místo multiplikátorů λi se tradičně používají ai
díky KKT podmínkám víme, že nás při maximalizaci lagrangiánu zajímají jenom některá trénovací data – ta, která leží na okraji (support vektory)
je tam podmínka ai(tiy(xi)−1)=0
z toho vyplývá, že pro každé xi platí tiy(xi)=1 (bod je na marginu) nebo ai=0 (bod se nepoužívá k predikci)
predikce … y(x)=∑iaitiK(x,xi)+b
klasifikátor pro lineárně neseparabilní třídy
soft-margin SVM
v mnohém se podobá hard-margin SVM
dovolíme některým bodům, aby porušily pravidlo (aby byly uvnitř marginu nebo na opačné straně decision boundary)
pořídíme si slack variables ξi≥0
pro body, které porušují tiy(xi)≥1 bude platit ξi=∣ti−y(xi)∣
jinak ξi=0
takže podmínku tiy(xi)≥1 nahradíme tiy(xi)≥1−ξi
úpravy lagrangiánu
musíme tam přidat další multiplikátory, které zajistí nezápornost ξi
výsledný lagrangián bude stejný jako minule, akorát ai (odpovídají lambdám) budou navíc omezeny shora nějakým C
support vektory teďka nebudou jenom body na okrajích marginu, ale i všechny, které mají kladné ξi (jsou divné)
pozorování: ξi=max(0,1−tiy(xi))
téhle funkci se říká hinge loss
soft-margin SVM lze vlastně formulovat jako argminw,bC∑iLhinge(ti,y(xi))+21∥w∥2
to nám hodně připomíná klasický vzorec pro logistickou regresi apod.
akorát místo regularizační konstanty λ tady máme C, které hraje opačnou roli (čím větší C, tím slabší regularizace)
k trénování se používá sequential minimal optimization
bereme řádky po jednom, k tomu ai, náhodně aj a taky bias, postupně zlepšujeme lagrangián
jádrové funkce
idea
uvažujeme duální formulaci modelu (místo vah máme koeficienty, kterými přispívají řádky trénovacích dat)
máme polynomiální features (pomocí zobrazení φ)
při predikci bychom museli N-krát počítat φ(xi)Tφ(z)
když si ale například představíme features 0. až 3. řádu, tak si můžeme všimnout toho, že φ(x)Tφ(z)=1+xTz+(xTz)2+(xTz)3
zobecnění
budeme uvažovat kernelové funkce (kernely), které mají všechny následující vzorec (pro různé φ): K(x,z)=φ(x)Tφ(z)
kernel je tedy funkce, která dostane dva vektory a ona mi vrátí součin features těch vektorů
výše jsme si jeden takový kernel ukázali
polynomiální kernel stupně d (homogenní polynomiální kernel)
vyrábí kombinace d vstupních features
K(x,z)=(γxTz)d
γ je hyperparametr, který škáluje features
polynomiální kernel stupně nejvýše d (nehomogenní polynomiální kernel)
K(x,z)=(γxTz+1)d
Gaussian Radial basis function (RBF) kernel
obsahuje polynomiální features všech řádů
K(x,z)=e−γ∥x−z∥2
je to funkce vzdálenosti
pro stejné vektory vrací jedničku, pro hodně vzdálené vektory vrací nulu, pro ostatní něco mezi tím
dá se to interpretovat jako rozšířenou verzi algoritmu k nejbližších sousedů (k-NN)
γ ovlivňuje, co už je „moc daleko“
polynomiální features vysokých řádů mají nízké váhy
kernely se typicky používají tam, kde potřebujeme lineárně separabilní data (například v SVM) – transformují nám původní data do více dimenzí, tam už je pak obvykle můžeme rozumně separovat
klasifikace do více tříd
kombinujeme několik binárních klasifikátorů
první možný (nepoužívaný!) přístup: one-versus-rest (ovr) schéma
natrénuju K nezávislých binárních klasifikátorů (patří prvek konkrétní třídě? ano/ne)
při predikci vyberu třídu, které její klasifikátor přisuzuje největší pravděpodobnost
je potřeba klasifikátory kalibrovat, aby se ty pravděpodobnosti daly porovnávat!
takhle se to u SVM nedělá
alternativní přístup: one-versus-one schéma
klasifikátor na každou dvojici tříd, které existují
většinové hlasování (každý klasifikátor hlasuje pro jednu třídu)
klasifikátorů je víc, ale trénujeme je na méně datech
Kombinace více modelů
bagging a boosting
jedná se o dva různé přístupy k trénování více modelů
bagging
modely se trénují nezávisle
pro každý model náhodně vybereme vzorek trénovacích dat, na nichž se učí (typicky samplujeme s opakováním = bootstrapping)
boosting
modely se trénují sekvenčně
snažíme se postupně opravovat chyby předchozích modelů
princip algoritmu AdaBoost
postupně trénujeme slabé klasifikátory (např. mělké rozhodovací stromy/pařezy) na vážených trénovacích datech
v každé iteraci upravujeme váhy trénovacích dat, aby špatně klasifikovaná data měla větší váhy
rovněž přiřazujeme váhy klasifikátorům podle jejich přesnosti (accuracy)
metoda náhodných lesů
trénování
pro každý strom náhodně (s opakováním) vybereme sample trénovacích dat (= bagging)
pro každý vrchol náhodně vybereme podmnožinu features, které při dělení bereme v úvahu
predikce
u regrese průměrujeme hodnoty jednotlivých stromů
u klasifikace hlasujeme
les vs. strom
strom se dá rychle natrénovat, jeho predikci lze snadno interpretovat (jako sérii rozhodnutí)
les je obvykle přesnější a lépe generalizuje
Statistické testy
studentův t-test (jednovýběrový a dvouvýběrový)
jednovýběrový t-test
způsob, jak získat intervalový odhad pro θ, neznáme-li rozptyl σ2
uvažujeme statistiku T=σˉ/nXn−θ0, která má t-rozdělení s n−1 stupni volnosti, pokud H0 platí
intervalový odhad
najdeme bodový odhad θ^ pro θ
třeba pokud nás zajímá μ, tak prostě použijeme výběrový průměr
máme n hodnot
δ=nσˉ⋅Ψn−1−1(1−α/2)
kde Ψn−1−1 je kvantilová funkce studentova t-rozdělení
vrátíme [θ^−δ,θ^+δ]
v tomto intervalu bude pravděpodobně reálná hodnota θ pro populaci, z níž jsme data vybrali
testování hypotézy
např. pokud ověřujeme, že se střední hodnota rovná nějaké konstantě, tak konstantu i výběrový průměr dosadíme do vzorce pro T
H0 … T má t-rozdělení s n−1 stupni volnosti
H0 zamítáme, když je spočítaná hodnota statistiky větší než kritická hodnota
poznámka: proč uvažujeme n−1 stupňů volnosti, když máme n hodnot?
z n−1 hodnot můžu n-tou hodnotu dopočítat
dvouvýběrový t-test
můžeme testovat třeba to, jestli se rovnají střední hodnoty parametru θ u dvou různých populací (samplujeme nezávisle, vzorků může být různý počet)
např. H0 … μX=μY
opět uvažujeme testovou statistiku T s t-rozdělením
T=SEXn−Ym
přičemž SE je směrodatná chyba (vzorec je komplikovaný)
bonus: párový test
data jsou ve dvojicích, dvojice dat spolu nějak souvisí
např. H0 … μX=μY
uvažuju Ri=Yi−Xi (rozdíl dvojice), použiju jednovýběrový test
chí-kvadrát test (test dobré shody)
Pearsonův chí-kvadrát test dobré shody
Oi … pozorovaná četnost kategorie i
Ei … očekávaná četnost kategorie i
testová statistika: ∑iEi(Ei−Oi)2
typická úloha: je kostka spravedlivá?
použijeme χ2 distribuci pro 5 stupňů volnosti
pokud χ2 pro naši konkrétní kostku náleží kritickému oboru W, prohlásíme, že kostka není spravedlivá
H0 … pozorované četnosti jednotlivých kategorií odpovídají jejich očekávaným četnostem
pokud H0 platí, má testová statistika rozdělení χ2 rozdělení s n−1 stupni volnosti, přičemž n je počet kategorií
H0 zamítáme, když je spočítaná hodnota statistiky větší než kritická hodnota
Učení bez učitele
shlukování (algoritmus k-means)
algoritmus
na vstupu máme body x1,…,xN, počet clusterů K
inicializujeme středy clusterů μ1,…,μK
buď náhodně (ze vstupních bodů)
nebo pomocí kmeans++
první střed se vybere náhodně (ze vstupních bodů)
každý další střed vybereme z nepoužitých bodů tak, že pravděpodobnost výběru každého bodu úměrně roste s druhou mocninou vzdálenosti jeho nejbližšího středu (clusteru)
opakujeme, dokud to nezkonverguje nebo nám nedojde trpělivost
body přiřadíme clusterům (každý bod přiřadíme tomu clusteru, k jehož středu má nejblíž)
aktualizujeme středy clusterů (vždy zprůměrujeme body, které jsme danému clusteru přiřadili)
použití
K-means se používá ke clusteringu, tedy k dělení dat do skupin, clusterů
je to technika učení bez učitele (unsupervised), neznáme targety
konkrétní příklady: seskupení pixelů podobné barvy, určení skupin zákazníků
ztrátová funkce, kterou algoritmus optimalizuje
J=∑i=1N∑k=1Kzi,k∥xi−μk∥2
kde zi,k je indikátor přiřazení bodu xi do clusteru k
konvergence
aktualizace přiřazení bodů ke clusterům nezvyšuje loss
aktualizace středů clusterů nezvyšuje loss
takže K-means konverguje k lokálnímu optimu
hierarchické shlukování
dva přístupy: postupné spojování menších shluků (aglomerativní shlukování) nebo naopak dělení velkých shluků na menší (divisivní shlukování) podle zadaných pravidel
algoritmus spojování menších clusterů/shluků
na začátku je každý cluster singleton (patří tam jeden bod)
slučujeme nejpodobnější clustery, dokud nezískáme cílový počet clusterů
dají se používat různé metriky podobnosti shluků (např. vzdálenost mezi centroidy shluků nebo přímo mezi jejich body, průměry vzdáleností, …)
příklady algoritmů divisivního shlukování
DIANA (divisive analysis)
na začátku jsou všechny body v jednom clusteru
v něm najdeme bod, který se nejvíc liší od všech ostatních a oddělíme ho do samostatného clusteru
do téhož (nového) clusteru po jednom přidáváme i další body z původního clusteru, pokud se více hodí do nového clusteru (jsou mu blíže než původnímu)
principal directions divisive partitioning (PDDP)
používá princip PCA – dělí clustery pomocí projekce na hlavní komponenty
většinou se jedná o hladové algoritmy → nelze zaručit, že je řešení optimální
redukce dimenzionality (analýza hlavních komponent)
singulární rozklad (SVD, singular value decomposition)
mějme matici X∈Rm×n s hodností r
X=UΣVT
U∈Rm×m ortonormální
Σ∈Rm×n diagonální matice s nezápornými hodnotami (tzv. singulárními čísly) zvolenými tak, aby byly uspořádány sestupně
V∈Rn×n ortonormální
možný pohled na dekompozici
X=σ1u1v1T+σ2u2v2T+⋯+σrurvrT
σi … i-té singulární číslo
ui … i-tý sloupec matice U
viT … i-tý řádek matice VT
redukovaná verze SVD
σ označme vektor singulárních čísel
pro matici X s hodností r bude v tom vektoru nejvýše r nenulových hodnot
tedy matici Σ můžeme redukovat na rozměry r×r, podobně U můžeme redukovat na m×r a VT na r×n, touto kompresí nepřijdeme o žádné informace
dokonce můžeme Σ zmenšit ještě víc
zvolíme k<r
necháme jenom k největších singulárních čísel, všechny ostatní zahodíme
tím už se nějaké informace ztratí
budeme mít aproximaci původní matice X, ta aproximace bude mít hodnost k
algoritmus určení PCA (principal component analysis) M-té dimenze na základě datové matice X
spočteme SVD matice (X−xˉ)
kde xˉ je průměr řádků matice (vektor průměrných hodnot jednotlivých features)
k určení SVD (respektive nalezení V) lze použít algoritmus power iteration
do proměnné S uložíme kovarianční matici cov(X)=N1(X−xˉ)T(X−xˉ)
pro každou komponentu hledáme vektor vi (sloupec matice V) tak, že začneme s náhodným vektorem a poté ho zleva násobíme maticí S a normalizujeme (dělíme vlastní normou), dokud to nezkonverguje
od matice S na konci každého kroku odečteme λiviviT, kde λi je norma vektoru vi před poslední normalizací
necháme prvních M řádků VT, ostatní zahodíme (takže V bude mít M sloupců)
pokud chceme získat hodnoty nových M komponent, tak stačí vynásobit XV, tak dostaneme matici N×M
funguje to díky tomu, že pomocí SVD matice (X−xˉ) získáváme vlastní vektory kovarianční matice cov(X)=N1(X−xˉ)T(X−xˉ)