Warning
This page is located in archive.

Cvičení 1

Program:

  • Organizace cvičení
  • Úvod do MATLABu
  • Pomocné funkce

Úvod do MATLABu

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ý

Dobře pracovat s MATLABem se ale naučíte pouze praxí, proto následující pomocné funkce berte i jako takovou rozcvičku.

Pomocné funkce

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

Chyba klasifikačního modelu (přesnost)

Č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)

Vstupy yt [1 x N] Skutečné (pravdivé, naměřené) hodnoty závislé veličiny
yp [1 x N] Predikce (odhady) modelu
Výstupy err skalár Poměr neshodných predikcí k celkovému počtu

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

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.

Chyba regresního modelu (MSE)

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

Vytvořte funkci s následující hlavičkou:

function err = errMSE(yt, yp)

Vstupy yt [1 x N] Skutečné (pravdivé, naměřené) hodnoty závislé veličiny
yp [1 x N] Predikce (odhady) modelu
Výstupy err skalár Střední kvadratická chyba

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>

Matice záměn

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:

function cm = errConfMatrix(yt, yp)

Vstupy yt [1 x N] Skutečné (pravdivé, naměřené) hodnoty závislé veličiny
yp [1 x N] Predikce (odhady) modelu
Výstupy cm [C x C] Matice záměn (confusion matrix, misclassification matrix)

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.

Matice vzdáleností

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:

function dm = distmat(x1, x2)

Vstupy x1 [D x N] Matice D-rozměrných bodů; N je jejich počet
x2 [D x M] Matice D-rozměrných bodů; M je jejich počet
Výstupy dm [N x M] Matice euklidovských vzdáleností pro všechny dvojice bodů

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

Náhodné rozdělení množiny indexů

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:

function [itr, itst] = randSplit(N, trainRatio)

Vstupy N skalár Počet pozorování v množině, kterou budeme dělit
trainRatio skalár, (0,1) Jaká část indexů 1..N má být umístěna do trénovací sady
Výstupy itr [1 x Ntr] Indexy trénovacích bodů
itst [1 x Ntst] Indexy testovacích bodů

Musí platit length(itr) + length(itst) = N a také all(unique([itr itst]) == 1:N).

Prozkoumejte funkci randperm().

courses/y33aui/cviceni/cviceni01.txt · Last modified: 2013/10/04 13:02 (external edit)