\chapter{Použité metody}
\section{Základy klastrové analýzy}
Klastrová analýza je statistická metoda používaná pro seskupování datových bodů do klastrů (clusterů) tak, aby prvky uvnitř jednoho shluku byly co nejpodobnější, zatímco prvky mezi shluky byly co nejvíce odlišné. Používá se v~mnoha oblastech, jako je rozpoznávání vzorů, bioinformatika, strojové učení nebo analýza obrazu. \cite{clusteranalysis}

\subsection{Předzpracování dat (data preprocessing)} 
Předzpracování se týká transformací, které se na naše data aplikují před jejich předáním algoritmu. Předzpracování dat je technika, která se používá k~převodu surových dat na čistý soubor dat. Pro různé modely musí být data v~různých formátech. Např. model Random forest není schopen zpracovat data, která obsahují NaN hodnoty, a tak je třeba se jich zbavit, nastavením hodnoty na 0, průměrem okolních hodnot nebo dalšími technikami. \cite{dataprep_gfg}

\subsection{Analýza hlavních komponent (principal component analysis)}
Techniku analýzy hlavních komponent zavedl matematik Karl Pearson v~roce 1901. Funguje na základě podmínky, že zatímco data ve vyšším rozměrovém prostoru jsou mapována na data v~nižším rozměrovém prostoru, rozptyl dat v~nižším rozměrovém prostoru by měl být maximální. Tato analýza je technika pro algoritmy patřící do učení bez učitele, která se používá ke zkoumání vzájemných vztahů mezi souborem proměnných. Je také známá jako obecná faktorová analýza, kde regrese určuje přímku nejlepší shody. Používá ke snížení dimenzionality souboru dat nalezením nového souboru proměnných, který je menší než původní soubor proměnných, zachovává většinu informací o~vzorku a je užitečný pro regresi a klasifikaci dat. \cite{pca_gfg}

\subsection{Učení bez učitele (unsupervised learning)}
Učení bez učitele je trénování stroje pomocí dat, která nejsou klasifikovaná ani označená, a umožňuje algoritmu jednat na základě těchto informací bez vedení. Úkolem stroje je zde seskupovat netříděné informace podle podobností, vzorů a rozdílů bez předchozího trénování dat. Toto trénování se dělí do dvou kategorií. Shlukování (clustering), při kterém se zjišťují skupiny obsaženy v~datech. Například tato skupina zákazníků nakupuje převážně výrobek X a tato výrobek Y. Asociace je druhá metoda, jež je založena na hledání asociací mezi velkou částí dat. Například zákazníci, kteří nakupují výrobek X mají tendenci nakupovat výrobek Y. \cite{ucenibezucitele_wiki_cs}
\cite{supervisedunsupervised}

\subsection{Učení s~učitelem (supervised learning)}
Učení s~učitelem je proces, při kterém trénovací data obsahují vstupní objekty a jejich požadovaná výstupní ohodnocení, tj. výrok učitele o~objektu. Tento proces využívá zpětnou vazbu podobně jako biologické sítě. Neuronové síti je předložen vzor, a na základě aktuálního nastavení sítě je zjištěn výsledek. Ten je porovnán s~požadovaným výsledkem a určena chyba. Poté je dle typu neuronové sítě spočítána nutná korekce a upraveny hodnoty vah nebo prahů, aby se snížila hodnota chyby. Tento proces se opakuje až do dosažení stanovené minimální chyby, po které je síť adaptována. 

Výstupem naučené funkce mohou být buď spojité hodnoty (při regresi), nebo binární hodnoty označující příslušnost vstupních objektů do daných tříd (při klasifikaci). Naučená funkce je schopna odhadovat výstupní ohodnocení každého vstupního objektu poté, co zpracuje trénovací příklady. To vyžaduje, aby síť dokázala generalizovat souvislost mezi vstupy a výstupy na základě příkladů obsažených v~trénovacích datech.
\cite{ucenisucitelem_wiki_cs} 

\section{Druhy algoritmů}

\subsection{K-means algoritmus}
K-means algoritmus je součástí učení bez vedení. Má jeden parametr, celé číslo počet shluků, který uživatel určuje před spuštěním algoritmu na datech. Jeho výchozí hodnota je 8. Algoritmus na datech funguje tak, že se náhodně vybere tolik bodů v~datech, kolik je požadovaný počet klastrů, které budou fungovat jako centroidy klastrů. Poté se pro všechny centroidy zvlášť střídají dva kroky. První, kde se vypočítá vzdálenost všech bodů od daného centroidu, přičemž se ten nejbližší přiřadí k~shluku. A~druhý, při kterém se vypočítá nový centroid, který je průměrem všech bodů v~shluku. Tyto dva kroky se opakují dokud se shluk neustálí, neboli centroid nemění svou pozici. Takto se algoritmus opakuje dokud nejsou všechny body v~nějakém klastru. Časová složitost je O(n*k*i*d) a paměťová složitost je O(n*d), kde n je počet bodů, k~je počet klastrů, i je počet iterací,  které algoritmus udělá, dokud centroidy nejsou stabilní a d je počet dimenzí, které data mají. \cite{kmeanswiki} \cite{kmeansiop} \cite{kmeansintro} \cite{kmeansibm}

\subsection{Hierarchické klastrování (hierarchical clustering)}
Hierarchické shlukování je druh shlukování založený na konektivitě, která seskupuje datové body, které jsou si blízké na základě míry podobnosti nebo vzdálenosti. Předpokladem je, že datové body, jež jsou si blízké, jsou si podobnější nebo příbuznější než datové body, které jsou od sebe vzdálenější. Hierarchické vztahy mezi skupinami znázorňuje dendrogram. Jednotlivé datové body jsou umístěny ve spodní části, zatímco největší shluky, zahrnující všechny datové body, jsou umístěny nahoře. Aby bylo možné vytvořit libovolný počet klastrů, lze dendrogram rozřezat v~jakékoli výšky. Jsou dva druhy tohoto shlukování. První se nazývá divisivní a funguje na principu tzv. “shora dolů”. Všechna pozorování začínají v~jednom shluku a rozdělení na více menších shluků se rekurzivně provádí tak, jak se v~hierarchii postupuje dolů. Druhý druh je agglomerativní a jeho fungování je popsáno v~další kapitole. \cite{hierarchicalclusteringgfg} \cite{hierarchicalclusteringwiki}

\subsubsection{Hierarchické agglomerativní klastrování (hierarchical agglomerative clustering)}
Tento druh hierarchického shlukování funguje na principu tzv. “zdola nahoru”. Pozorování vždy začíná v~jednom shluku a poté se dvojice klastrů, které jsou vzdáleností či hodnotou nejblíže, spojují, jak se postupuje nahoru v~hierarchii. Stejně jako K-means algoritmus přijímá celé číslo jako parametr pro určení počtu shluků. Jeho výchozí hodnota je 2. Časová složitost tohoto algoritmu je O(n3) a paměťová složitost je O(n2), kde n je počet bodů.
\cite{hierarchicalclusteringgfg} \cite{hierarchicalclusteringwiki}

\subsection{DBSCAN}
Density-based spatial clustering of applications with noise, zkráceně DBSCAN, je algoritmus, který na datasetu do shluků dává body, které mají kolem sebe hodně “sousedů” a body, které jsou naopak samy, označí jako šum (noise). Na začátku algoritmus najde vzorky bodů, jež budou fungovat jako centroidy shluků. Proto je dobré když mají data klastry s~podobnou hustotou bodů. Pro tento algoritmus se nastavují dva parametry a to eps a min samples. Eps je desetinným číslem, které určuje maximální vzdálenost mezi dvěma body pro které stále platí, že jsou “sousedé” a patří do jednoho klastru. Výchozí hodnota je 0,5. 
Druhý parametr, min samples, je celé číslo, které určuje počet “sousedů”, které bod musí mít aby byl vyhodnocen jako centroid. Toto číslo vztahuje do parametru i samotný centroid. Čím je jeho hodnota vyšší tím hustší shluky algoritmus hledá. Jeho výchozí hodnota je 5.  Nejhorší časová náročnost je O(n2), jež se může objevit, když je eps parametr velký a min samples je malý. HDBSCAN je verze DBSCAN, která provádí stejný algoritmus, avšak ho provádí nad různými hodnotami eps a integruje výsledek tak, aby našel klastrování, jež má nejlepší stabilitu v~závislosti na eps. Tento algoritmus může lépe hledat shluky s~různou hustotou oproti DBSCAN.
\cite{dbscan_sklearn} \cite{dbscan_wiki} \cite{hdbscan_sklearn}

\section{Evaluace výsledků algoritmů}

Při použití shlukovacích technik je velmi důležité vyhodnotit kvalitu vytvořených shluků. Tyto metriky jsou kvantitativní ukazatele používané k~hodnocení výkonnosti a kvality klastrovacích algoritmů. Mezi populární druhy metrik patří interní a externí evaluace (viz vnitřní evaluace a vnější evaluace).
\cite{clusteringmetrics_gfg} 

\subsection{Vnitřní (internal) evaluace}
Pro tento druh metrik je výsledek vyhodnocen na základě dat, která byla shlukována. Tyto metriky obvykle přiřazují nejlepší skóre algoritmu, který vytváří shluky s~vysokou podobností uvnitř klastru a nízkou podobností mezi shluky. Jednou z~nevýhod je, že vysoké skóre v~interním měřítku nemusí nutně vést k~efektivním aplikacím pro vyhledávání informací. Navíc je toto hodnocení zaujaté vůči algoritmům, které používají stejný model shluku. Například shlukování K-means přirozeně optimalizuje vzdálenosti objektů a interní kritérium založené na vzdálenosti pravděpodobně nadhodnotí výsledné klastrování. 
\cite{clusteringmetrics_gfg} 

\subsubsection{Silhouette score}

Tato technika poskytuje stručné grafické znázornění toho, jak dobře byl každý objekt klasifikován. Navrhl ji belgický statistik Peter Rousseeuw v~roce 1987. Hodnota siluety je měřítkem toho, jak je objekt podobný svému vlastnímu shluku (koheze) ve srovnání s~ostatními shluky (separace). Pohybuje se od -1 (špatné klastrování) do +1 (dokonalé shlukování). Skóre blízké 1 naznačuje dobře oddělené shluky. Toto skóre je užitečné pro zjištění, jak vhodné jsou metody shlukování a kolik shluků je pro určitý soubor dat nejvhodnější.
\cite{silhouette_wiki}

\subsubsection{Davies-Bouldin index} 
Davies-Bouldin index se používá pro hodnocení účinnosti klastrovacích algoritmů. Hodnotí kompaktnost a oddělení shluků datového souboru. Tato metrika byla uvedena v~roce 1979 David L. Daviesem a Donald W. Bouldinem. Lépe definované shluky jsou označeny nižším indexem, který se určuje porovnáním průměrného poměru podobnosti a nepodobnosti každého shluku s~poměrem podobnosti a nepodobnosti jeho nejpodobnějšího souseda. Protože shluky s~nejmenšími vnitroshlukovými a největšími mezishlukovými vzdálenostmi poskytují nižší index, pomáhá to při určování ideálního počtu shluků.
\cite{davies_wiki}

\subsubsection{Calinski-Harabasz index}
K~hodnocení kvality shluků v~rámci souboru dat se používá Calinski-Harabaszův index také známý jako Variance Ratio Criterion (VRC). Představili ho Tadeusz Caliński a Jerzy Harabasz v~roce 1974. Vyšší hodnoty ukazují na kompaktní a dobře oddělené shluky. Vypočítává poměr rozptylu uvnitř shluku a rozptylu mezi shluky. Pomáhá určit ideální počet klastrů pro daný soubor dat porovnáním indexu v~různých shlucích. Lepší vymezení shluků je implikováno vyšším Calinski-Harabaszovým indexem. Tato míra je užitečná pro posouzení toho, jak dobře fungují klastrovací algoritmy, což pomáhá vybrat nejlepší řešení shlukování pro různé datové sady.
\cite{calinski_wiki}

\subsection{Vnější (external) evaluace}
Při externí evaluaci se výsledky shlukování hodnotí na základě dat, která nebyla použita pro shlukování, například známých značek tříd a externích srovnávacích testů. Taková měřítka se skládají ze souboru předem klasifikovaných položek a tyto soubory často vytvářejí lidé. 
\cite{clusteringmetrics_gfg} 

\subsubsection{Rand index}
Rand index, pojmenován po Williamu M. Randovi, vypočítává, jak jsou shluky získané shlukovacím algoritmem podobné referenčním klasifikacím. Jedním z~problémů Rand indexu je, že falešně pozitivní a falešně negativní výsledky mají stejnou váhu. To může být pro některé klastrovací aplikace nežádoucí vlastnost. F-measure tento problém řeší, stejně jako Adjusted Rand Index (ARI), který vykonává Rand index a bere v~úvahu očekávanou podobnost mezi dvěma náhodnými klastry stejných dat.
\cite{randindex_gfg} \cite{randindex_wiki}

\subsubsection{F-measure}
Předpokládá se, že název F-measure byl pojmenován podle jiné funkce F ve Van Rijsbergenově knize, když byla představena na the Fourth Message Understanding Conference. Výpočet metriky se skládá z~přesnosti a zpětné vazby testu. Přesnost je počet pravdivě pozitivních výsledků vydělený počtem všech vzorků, které měly být pozitivní, včetně těch, které nebyly správně identifikovány. Zpětná vazba je počet pravdivě pozitivních výsledků vydělený počtem všech vzorků, které měly být identifikovány jako pozitivní.
\cite{fscore_wiki}

\section{Neuronové sítě}

Neuronová síť je model inspirovaný strukturou a funkcí biologických neuronových sítí v~mozcích zvířat. Skládá se ze spojených jednotek nebo uzlů zvaných umělé neurony, které volně modelují neurony v~mozku. Ty jsou propojeny hranami, které modelují synapse v~mozku. Každý umělý neuron přijímá signály od připojených neuronů, poté je zpracovává a vysílá signál dalším připojeným neuronům. „Signál“ je reálné číslo a výstup každého neuronu se vypočítá pomocí určité nelineární funkce součtu jeho vstupů, která se nazývá aktivační funkce. Síla signálu na každém spojení je určena váhou, která se upravuje během procesu učení.

Neurony se obvykle sdružují do vrstev. Různé vrstvy mohou na svých vstupech provádět různé transformace. Signály putují z~první vrstvy, tzv. vstupní vrstva, do poslední vrstvy, tzv. výstupní vrstva, přičemž mohou procházet několika mezivrstvami, tzv. skrytými vrstvami. Síť se nazývá hluboká neuronová síť, pokud má alespoň dvě skryté vrstvy.
\cite{neuralnetwork_wiki} 

\subsection{Historie neuronové sítě}

První umělé neurony vytvořili Warren McCulloch a Walter Pitts v~roce 1943. Fungovaly na principu binárního výstupu 0/1 podle prahové hodnoty vážené sumy vstupů. Jejich teorie byla, že dokáží počítat aritmetické a logické funkce, avšak nebyla pro ně vypracována žádná tréninková metoda.
V~padesátých letech přichází Frank Rosenblatt s~perceptony. Percepton je nejjednodušší model dopředné neuronové sítě (Feed-forward Neural Network) s~učením s~učitelem (supervised learning). Perceptrony využívá k~rozpoznávání vzorů. Mimo to dokazuje, že pokud existují váhy, které zadaný problém řeší, pak k~nim učící pravidlo konverguje. 
Počáteční nadšení však uvadá, když je zjištěno, že takovýto perceptron umí řešit pouze lineárně 
separovatelné úlohy. Frank Rosenblatt se sice snaží model upravit a rozšířit, ale nedaří se mu to a tak až do osmdesátých let přestává být o~perceptrony a neuronové sítě zájem.
V~80. letech přišel průlom s~vícevrstvými perceptronovými sítěmi schopnými aproximovat libovolnou vektorovou funkci. Zájem později klesl kvůli problémům s~učením hlubokých sítí.
Nejužívanější metoda učení je algoritmus zpětného šíření chyby, odvozený z~dynamického programování. K~jeho vývoji přispěli Kelley (1960), Bryson (1961) a Dreyfus (1962).
Linnainmaa (1970) publikoval obecnou metodu automatického derivování. Werbos (1974, 1982) aplikoval princip na neuronové sítě. Rumelhart, Hinton a Williams (1986) prokázali užitečnost pro hluboké učení.
V~současnosti se neuronové sítě převážně užívají v~úlohách zpracovávání přirozeného jazyka (natural language processing v~rámci tzv. jazykových modelů jako např. Word2Vec nebo Transformer a v~úlohách počítačového vidění (computer vision) v~rámci tzv. konvolučních neuronových sítí.
\cite{neuralnetwork_wiki_cs} \cite{perceptron_wiki_cs} \cite{neuralnetwork_wiki} 


\subsection{Druhy architektur neuronových sítí}

\subsubsection{Dopředná neuronová síť (Feed-forward Neural Network)}

Dopředná neuronová síť je charakteristická jednosměrným tokem informací mezi jednotlivými vrstvami sítě. Tok informací jde pouze dopředu od vstupní vrstvy neuronů, pokud existují přes skryté vrstvy neuronů, až k~výstupní vrstvě neuronů, tj. bez jakýchkoli smyček či zpětných vazeb.
\cite{feedforwardnn_wiki_cs}

\subsubsection{Rekurentní neuronová síť (Recurrent Neural Network)}

Rekurentní neuronová síť se vyznačují směrem toku informací mezi jednotlivými vrstvami 
sítě. Tok informací v~rekurentní síti je obousměrný, tj. tvoří se smyčky. Zpracovávají data ve více časových krocích, a díky tomu jsou dobře uzpůsobeny pro modelování a zpracování textu, řeči a časových řad.

Základním stavebním kamenem RNN je rekurentní jednotka. Tato jednotka udržuje skrytý stav, v~podstatě jakousi formu paměti, která je v~každém časovém kroku aktualizována na základě aktuálního vstupu a předchozího skrytého stavu. Tato zpětnovazební smyčka umožňuje síti učit se z~minulých vstupů a zahrnout tyto znalosti do aktuálního zpracování.

První sítě RNN trpěly problémem mizejícího gradientu, což omezovalo jejich schopnost učit se závislosti na dlouhé vzdálenosti. Tento problém vyřešila varianta dlouhé krátkodobé paměti (LSTM) v~roce 1997, a stala se tak standardní architekturou RNN.

RNN se uplatnily v~úlohách, jako je nesegmentované, propojené rozpoznávání rukopisu, rozpoznávání řeči, zpracování přirozeného jazyka a neuronový strojový překlad.
\cite{recurrentnn_wiki}

\subsection{Učení neuronových sítí}

Cílem učení neuronové sítě je nastavit síť tak, aby dávala co nejpřesnější výsledky. 
\newline
V~biologických sítích jsou zkušenosti uloženy v~synapsích. V~umělých neuronových sítích jsou zkušenosti uloženy v~jejich matematickém ekvivalentu – váhách. Učení neuronové sítě rozlišujeme na učení s~učitelem (supervised learning) a učení bez učitele (unsupervised learning) (viz kapitoly učení s~učitelem, učení bez učitele). U~neuronových sítí se tyto dva hlavní druhy učení dělí na další. Fáze učení neuronové sítě bývá nazývána adaptivní, fáze vybavování po naučení neuronové sítě bývá nazývána aktivní.
\cite{neuralnetwork_wiki_cs}


\subsubsection{Hebbovské učení}
Hebbův princip představil v~roce 1949 Donald Olding Hebb. Hebbovské učení je metodou určování, jak měnit váhy mezi umělými neurony. Váha mezi dvěma neurony se zvyšuje, pokud se oba neurony aktivují současně, a snižuje, pokud se aktivují odděleně. Uzly, které mají tendenci být buď oba pozitivní, nebo oba negativní současně, mají silné pozitivní váhy, zatímco ty, které mají tendenci být opačné, mají silné negativní váhy. Hebbovské učení se užívá u~asociativních pamětí, jako je lineární autoasociativní paměť, bidirektní heteroasociativní paměť nebo Hopfieldova síť.
\cite{neuralnetwork_wiki_cs}

\subsubsection{Přeučení}
Přeučení je stav, kdy je systém příliš přizpůsoben množině trénovacích dat, ale nemá schopnost generalizace a selhává na validační množině dat. To se může stát např. při malém rozsahu trénovací množiny nebo pokud je systém příliš komplexní, např. příliš mnoho skrytých neuronů v~neuronové síti. Řešením je zvětšení trénovací množiny, snížení složitosti systému nebo různé techniky regularizace, jako je zavedení náhodného šumu, zavedení omezení na parametry systému, které v~důsledku snižuje složitost popisu naučené funkce, nebo předčasné ukončení učení. V~průběhu učení se sledují chyby na validační množině a učení se ukončí ve chvíli, kdy se chyba na této množině dostane do svého minima.
\cite{neuralnetwork_wiki_cs}

\subsection{Hyperparametry neuronových sítí}

\subsubsection{Hyperparametry}
Hyperparametry jsou parametry, jejichž hodnoty nastavuje uživatel před tréninkem modelu, např. počet vrstev neuronů. Ovlivňují chování a výkon modelu. Jsou dva typy hyperparametrů, kontinuální a diskrétní. Kontinuální nese svůj název, kvůli možnosti výběru své hodnoty z~intervalu, zatímco diskrétní hyperparametry lze nastavit pouze na omezený počet možností.
\cite{hyperparams_towardsdatascience}

\subsubsection{Parametry}
Parametry jsou interní pro model. Jsou během tréninku optimalizovány modelem. Typickými parametry jsou koeficienty lineárních regresních modelů, či centroidy klastrů při klastrování.
\cite{hyperparams_towardsdatascience}


\subsubsection{Optimalizace hyperparametrů}
Hledá nejoptimálnější sadu hyperparametrů pro konkrétní neuronovou síť. Je spousta metod, které se snaží najít nejlepší hyperparametry. Těmi nejběžnějšími je vyhledávání v~mřížce (grid search), náhodné vyhledávání (random search), Bayesovská optimalizace (Bayesian Optimization), Optimalizace založená na přechodech (Gradient-based Optimization) a automatické strojové učení (Automated Machine Learning).
\cite{hyperparamopt_wiki} \cite{hyperparamtuning_gfg}

\subsubsection{Rychlost učení (learning rate)}
Tento hyperparametr kontroluje jak velký krok udělá optimalizátor během každé iterace trénování. Nastavení na příliš malou rychlost může mít za následek pomalou konvergenci, avšak nastavení velké rychlosti může vést k~nestabilitě a divergenci. Běžnou hodnotou je 0.01 nebo 0.001.
\cite{hyperparamtuning_cs_eitca}
 
\subsubsection{Epochy}
Tímto hyperparametrem nastavujeme počet předání celé trénovací sady při trénování modelu. Pokud počet epoch zvýšíme, může to pomoci zlepšit výkon modelu, ale riskujeme tím přeučení modelu. Běžnými hodnotami jsou 16, 32 nebo 64.
\cite{hyperparamtuning_cs_eitca}

\subsubsection{Počty a typy vrstev neuronů}
Počty vrstev určují hloubku modelu, pokud nastavíme moc komplexní model s~mnoha vrstvami, hrozí, že se model přeučí. Tímto hyperparametrem ovlivňujeme složitost modelu a jeho možnost se učit. Běžně se nastavují 2-4 vstrvy modelu. Typy vrstev, které můžeme nastavit jsou například Dense, Conv2D či LSTM.
\cite{hyperparamtuning_cs_eitca}

\subsubsection{Počty neuronů ve vrstvách}
Určuje šířku modelu a jeho schopnost reprezentovat složité vlastnosti, které se v~datech nachází. Vysokým počtem neuronů se zvyšuje pravděpodobnost pro přeučení modelu. Běžné nastavení může představovat 128 neuronů v~první vrstvě, 32 ve druhé a 16 ve třetí vrstvě.
\cite{hyperparamtuning_cs_eitca}

\subsubsection{Aktivační funkce}
Tento hyperparametr ovlivňuje jak jsou výstupy vrstev transformovány. Běžně nastavenými funkcemi jsou sigmoid, tanh nebo ReLU (Rectified Linear Unit).
\cite{hyperparamtuning_cs_eitca}

\subsubsection{Dropout}
Tento hyperparametr náhodně vypíná neurony během tréninku a nastavuje se jako zábrana přeučení. Běžné hodnoty jsou 0, 0.2, 0.4 či 0.5.
\cite{hyperparamtuning_cs_eitca}

\subsection{Předzpracování dat (data preprocessing)}
Standardně se data normalizují či škálují pomocí MinMaxScaleru, či jiného nástroje pro lepší výkonnost modelu. Pokud jsou hodnoty na škále celých čísel 1-10, model by takto velké skoky v~hodnotách nemusel dobře zpracovat. Pokud ale hodnoty přeškálujeme na desetinné hodnoty mezi nulou a jedničkou, skoky nebudou tak signifikantní a model se může na datech lépe naučit. 
Před samotným spuštěním modelu je důležité rozdělit svá data na trénovací a testovací sady. Běžně se data dělí v~poměru tréninková : testovací sada 90 : 10 nebo 80 : 20.
\cite{neuralnetwork_wiki_cs}