====== Křivka učení ====== [[wp>Learning curve|Křivka učení]] obvykle popisuje míru porozumění předmětné oblasti v závislosti na délce učení. Učíme-li se něco, pro co máme vlohy, co nám jde jaksi samo od sebe, je křivka učení strmá, neboli míra porozumění velmi rychle stoupne z 0% na téměř 100%. Pokud se naopak učíme něco, co nám vůbec nejde, bývá křivka učení pozvolná (roste jen pomalu) a může začít stagnovat, pokud jsme narazili na své limity. Podobně je tomu i ve strojovém učení. Křivka učení zde představuje závislost prediktivní přesnosti modelu na velikosti trénovací sady (na počtu příkladů, které jsou předloženy k učení). Umožňuje posoudit, zda zvolený model datům dobře odpovídá, kolik dat je potřeba k dostatečně dobrému naučení modelu a zda se vyplatí ještě nějaká data do trénovací sady přidávat. ===== Jednoduchá křivka učení ===== Vytvořme proces: - Na datovou sadu ''iris'' napojme operátor ''Process Control/Loop/Create Learning Curve''. Tento operátor má podobně jako ''Split Validation'' a ''X-Validation'' 2 vnitřní procesy: jeden pro tvorbu modelu, druhý pro vyčíslení chyby modelu. Operátor funguje tak, že data rozdělí na trénovací a testovací část (podle parametru ''training_ratio''). Následně iteruje tyto kroky: * Z trénovacích dat vezmi jistou část (//start_fraction + iteration*step_fraction//) a na ní nauč model. * Vypočti chybu modelu na testovacích datech (která jsou stejná přes všechny iterace). - Operátor ''Create Learning Curve'' ale nemá žádný výstup! Data potřebná k vytvoření křivky učení je třeba posbírat "ručně". Zařaďme na konec testovacího podprocesu (za operátor ''Performance'') operátor ''Utility/Logging/Log''. Tento operátor umožňuje (vždy když na něj přijde řada) uložit sadu parametrů procesu jako 1 řádek tabulky. Nastavme jej tak, aby ukládal: * z operátoru ''Create Learning Curve'' hodnotu (''value'') proměnné ''fraction'' a pojmenujme ji ''fraction'' * z operátoru ''Performance'' hodnotu (''value'') proměnné ''performance'' a pojmenujme ji ''performance''. Po spuštění procesu by v //Results Perspective// měla být záložka ''Log'' obsahující naměření data. Je možné ji zobrazit v ''Plot view''. ===== Opakovaná měření ===== * Operátor ''Loop'' * ''Log'' bude zaznamenávat ''Loop.iteration'' * Přidat ''Log to Data'', aby byla přístupná volba ''Advanced Plots'' ===== Několik křivek učení v 1 grafu ===== * Dosud náš model vypadal tak, že jsme na zdroj dat napojili operátor ''Loop'', uvnitř něhož byl operátor ''Create Learning Curve'', který v trénovací části obsahoval model (např. ''Decision Tree'') a v testovací části se model aplikoval (''Apply Model''), vypočetla se jeho úspěšnost (''Performance'') a následně se úspěšnost, velikost trénovacích dat (''fraction'' z ''LearningCurve'' operátoru) a iterace (''iteration'' z ''Loop'' operátoru) ukládaly do logu. Log se v hlavním procesu následně převedl na datovou sadu, na níž bylo možné vytvořit křivku učení nástroji přístupnými pomocí přepínače ''Advanced Plots''. * Abychom vytvořili několik křivek učení, je třeba nejprve nasbírat data z několika modelů. Do procesu tak zahrneme N ''Loop'' operátorů, každý z nich bude obsahovat jeden ''Create Learning Curve'' operátor, které se budou lišit především trénovací částí (tedy typem modelu). Testovací část bude stejná, tedy bude obsahovat operátory ''Apply model'', ''Performance'' a ''Log''. * **POZOR!** V operátoru ''Log'' je třeba vybrat proměnné z těch správných operátorů!!! Logy a ''performance'' jednotlivých modelů je také vhodné smysluplně (odlišně) pojmenovat. * Všech N vytvořených logů převedeme na datové sady operátory ''Log to Data'' (zde se budou hodit ta smysluplná jména). * Následně nově vzniklé datové sady spojíme pomocí operátorů (kaskády operátorů) ''Join'', kde jako ''key attributes'' vybereme proměnné ''iteration'' a ''fraction''. Vznikne nám tak nová datová sada obsahující proměnné ''iteration'', ''fraction'' a úspěšnosti jednotlivých modelů. Prostřednictvím ''Advanced Plots'' pak snadno vytvoříme v jednom grafu několik křivek učení.