Search
Program:
V první části semestru (rozpoznávání, NN, SVM) budeme ve cvičení pracovat téměř výhradně s MATLABem. Je proto důležité, abyste si osvojili/obnovili znalosti jeho syntaxe a základní příkazy. K rychlému osvěžení můžete použít tento stručný
help
doc
Dobře pracovat s MATLABem se ale naučíte pouze praxí, proto následující pomocné funkce berte i jako takovou rozcvičku.
Po tomto cvičení byste měli mít naimplementovány všechny zde zmíněné funkce. Implementace těchto funkcí není samoúčelné cvičení, budou se nám hodit v dalších cvičeních. Vypracujte je samostatně, pokud se někde zaseknete, požádejte cvičícího o radu. Funkce důkladně otestujte (sami jistě přijdete na jednoduché způsoby, jak funkce otestovat).
Pravděpodobně nestihnete všechny funkce implementovat na cvičení - zbývající funkce zůstávají za domácí úkol do příštího cvičení.
Často je nutné vyjádřit úspěšnost/chybovost modelu jediným číslem. Pro klasifikační model se často používá počet neshodných predikcí nebo poměr neshodných predikcí k celkovému počtu.
Vytvořte funkci s následující hlavičkou:
function err = errRate(yt, yp)
yt
yp
err
Vstupy yt a yp jsou vektory obsahující pouze celá čísla, která představují identifikátory jednotlivých kategorií. Ani v jednom z vektorů se nemusí vyskytovat všechny kategorie; za množinu všech kategorií nicméně považujte sjednocení kategorií uvedených v obou vektorech (prozkoumejte funkci unique()).
unique()
Výstup err je poměr neshodných predikcí:
<latex> $$ \textrm{rate} = \frac{1}{N} \sum_{i=1}^N (y_t(i) \neq y_p(i)) $$ </latex>
Zde se předpokládá, že lze sčítat logické hodnoty, tedy že číselná hodnota pro true je 1 a pro false 0.
true
false
Pro vyjádření chyby regresního modelu je nejobvyklejší mírou MSE - střední kvadratická chyba. (Lze ale použít i jiné míry.)
function err = errMSE(yt, yp)
Vstupy yt a yp jsou vektory reálných čísel.
Výstup err je střední kvadratická chyba:
<latex> $$ MSE = \frac1N \sum_{i=1}^N (y_t(i)-y_p(i))^2 $$ </latex>
Při zjišťování úspěšnosti klasifikačního modelu je velmi vhodné sledovat, kolik objektů z třídy A bylo klasifikátorem zařazeno do třídy B, C, atd. To lze zaznamenat v matici záměn.
Vytvořte funkci errConfMatrix s následující hlavičkou:
errConfMatrix
function cm = errConfMatrix(yt, yp)
cm
Vstupy yt a yp jsou vektory obsahující pouze celá čísla, která představují identifikátory jednotlivých kategorií. Ani v jednom z vektorů se nemusí vyskytovat všechny kategorie; za množinu kategorií nicméně považujte sjednocení kategorií uvedených v obou vektorech (prozkoumejte funkci unique()).
Výstup cm je matice [C x C], kde C je velikost množiny kategorií. C je maximální číslo vyskytující se v yt nebo yp. Prvek cm(i,j) pak bude vyjadřovat počet objektů třídy j zařazených klasifikátorem do třídy i.
cm(i,j)
j
i
Na příštím cvičení budeme používat metodu nejbližších sousedů, kde jistě budeme potřebovat spočítat matici vzdáleností.
Vytvořte funkci distmat s následující hlavičkou:
distmat
function dm = distmat(x1, x2)
x1
x2
dm
Vstupy x1 a x2 jsou kolekce bodů, mezi nimiž chceme počítat vzdálenosti
Výstup dm je matice vzdáleností. Prvek dm(i,j) obsahuje vzdálenost mezi i-tým prvkem kolekce x1 (x1(:,i)) a j-tým prvkem kolekce x2 (x2(:,j)).
dm(i,j)
x1(:,i)
x2(:,j)
Budeme-li chtít rozdělit datovou sadu na trénovací a testovací data, bývá obvykle třeba rozdělit je náhodně. Je tedy třeba náhodně určit, které body budou součástí trénovací množiny a které body se stanou součástí testovací množiny. Bude také vhodné, když budeme moci specifikovat, jak velká část dat má být použita jako trénovací množina.
Vytvořte funkci randSplit s následující hlavičkou:
randSplit
function [itr, itst] = randSplit(N, trainRatio)
N
trainRatio
itr
itst
Musí platit length(itr) + length(itst) = N a také all(unique([itr itst]) == 1:N).
length(itr) + length(itst) = N
all(unique([itr itst]) == 1:N)
Prozkoumejte funkci randperm().
randperm()