Materiál k cvičení DBM2 týden #4, sezona 2023/2024

Regrese

V předešlých příkladech byly řešeny klasifikátory, tedy modely rozhodující o náležitosti záznamu do nějaké ze známých tříd. Oproti tomu metody regrese se snaží o nalezení křivky popisující jeden z atributů. Pomocí této křivky je následně možné odhadnout reálnou hodnotu pro danou kombinaci vstupních atributů. Pouze ve výjimečných případech se stane, že křivka modelu bude procházet datovými body vstupní množiny. Křivka je volena tak, aby se minimalizovala některá z chybových metrik.

U klasifikace se ke srovnávání modelů používá poměr správných odhadů, případně se využije vážená confusion matice. U regrese se využívá číselných metrik, které vyjadřují, jak moc se zvolená křivka odlišuje ve známých datových bodech od očekávané hodnoty. Jednou z často používaných obecných metrik je odmocnina ze střední čtvercové chyby (Root Mean Squared Error) (RMSE). Menší hodnota znamená, že křivka lépe modeluje data.

    
sum((skutečná_hodnota - odhad)^2) RMSE = sqrt( ─────────────────────────────────── ), kde n = počet datových bodů n

Druhou ze zajímavých metrik je odmocnina z relativní čtvercové chyby (Root Relative Squared Error) (RRSE). Výsledkem je poměr odhadovaných chyb vůči situaci, kdy by odhadem byla střední hodnota náhodné proměnné (což je ve své podstatě situace ZeroR algoritmu, který u regrese odhaduje vždy střední hodnotu). Hodnota 100% může sloužit jako baseline ke srovnání algoritmů podobně, jako u klasifikátorů byl použit výsledek ZeroR algoritmu.

    
sum((skutečná_hodnota - odhad)^2) RRSE = sqrt( ──────────────────────────────────────────── ), sum((skutečná_hodnota - střední_hodnota)^2)

Triviální datasety

V tomto cvičení jsou využívány datasety linear.csv a quadratic.csv ve kterých je 100 (x,y) měření lineární, resp. kvadratické funkce. Do hodnot y je zanesena náhodná složka (šum), aby nebylo řešení triviální.

Funkce mají předpis:

y = (3.1x - 0.2) + (RAND()-0.5)

y = (3.1x^2 - 0.2) + (RAND()-0.5)

03plotpng Fig — Vizualizace datových bodů a původních křivek v linear.csv a quadratic.csv

Dataset s lineární funkcí lze importovat do Weka přes Explorer → Preprocess → Open file → zvolit *csv. Po importu je potřeba ověřit, že se jako target atribut zvolil atribut y (tučně označený popisek sloupce v Edit okně) a že jsou atributy chápány jako numerické. Na tento problém je nejlepší použít lineární regresi (classifiers.functions.LinearRegression), která vypočte koeficienty a, b lineární funkce na základě trénovací množiny. Ve výstupním okně je kromě předpisu funkce modelu y = 3.087x - 0.255 i údaj o RMSE. Pravým kliknutím na výsledný model v Result list a výběrem Visualize classifier errors lze vykreslit datové body tak, jak je model odhaduje (velikost značky X odpovídá chybě pro daný bod).


Na druhý z datasetů (kvadratická funkce) již lineární regrese kvůli svému omezení na polynom 1. řádu nebude stačit. RRSE lineární regrese je dokonce >100%, tedy horší než baseline. K vymodelování datasetu je potřeba algoritmus, který dokáže pracovat s polynomy vyššího stupně.

K tomu lze použít classifiers.functions.SMOreg. SMO (sequential minimal optimization) je algorimus pro trénování support vector machines běžně používaných pro klasifikační problémy. Implementace SMOreg je pak navržená pro řešení regresních problémů.

V parametrech modelu je nutné zrušit normalizaci vstupních dat a zvolit kernel, což je charakteristika prokládané křivky. V tomto případě je ideální PolyKernel (polynom) a v jeho parametrech nastavit exponent 2 (polynom 2. řádu). U reálných dat bývá problém odhadnout stupeň polynomu, v takových případech je potřeba vyzkoušet několik variant v Experimenteru, nebo použít plugin pro optimizační činnosti.

Všimněte si chování při zapnutém předzpracování normalizace vstupních dat.

Q: Jaká architektura neuronové sítě by byla vhodná pro modelování kvadratické funkce?

Titanic

Při práci s datasetem Titaniku jsme narazili na ~20% chybějících hodnot ve sloupci age. Jelikož jde o číselný atribut, můžeme se pokusit regresí vytvořit model, kterým bychom mohli chybějící hodnoty odhadnout.

Příprava

Použijeme arff soubor s odstraněnými sloupci se jmény, lístky a kajutami. Atribut age označíme jako target. Dataset nyní rozdělíme na trénovací množinu (záznamy s vyplněnou hodnotou) a výpočetní množinu (záznamy s chybějící hodnotou). K odstranění záznamů s chybějícím věkem lze použít filters.unsupervised.instance.RemoveWithValues. V konfiguraci je nutné nastavit do parametru attributeIndex pořadí atributu age a zvolit matchMissingValues = true. Po aplikování filtru v datasetu zbyde 714 záznamů.

💾 Dataset uložte pod jiným názvem a vraťte filtrovací operaci tlačítkem Undo.

Druhý dataset lze vytvořit přes editaci, seřazení podle sloupce age, označení řádek s vyplněnou hodnotou a volbou Delete ALL selected instances.

💾 Dataset opět uložte pod jiným názvem.

Experiment

Protože nedokážeme předem odhadnout, jaký model by na problém pasoval nejlépe, zkusíme v Experimenteru ověřit několik variant. V novém experimentu zvolte, že se jedná o regresi, vyberte dataset s odstraněnými neúplnými záznamy a do algoritmů vyberte položky a konfigurace dle uvážení.

V mém experimentu se žádný ze zvolených algoritmů neukázal jako statisticky lepší než ostatní, ale všechny jsou lepší než ZeroR. Použiji lineární regresi, která se z testovaných jeví jako nejjednodušší. Očekávaná chyba tohoto modelu na neznámých datech je 12.54 ± 1.07 let.

Použití modelu k predikci neznámých věků

Ve weka exploreru otevřeme soubor s úplnými záznamy a na záložce Classify vybereme lineární regresi. V Test options měníme na supplied test set a vybereme soubor s chybějícími údaji o věku. V more options nastavíme výstup předpovědí do PlainText. Výsledný vzorec lineárního modelu je:

    
age = -4.1115 * sibsp + -0.9536 * parch + -2.0577 * embarked=C + -7.7428 * pclass + 6.6971 * survived_binarized=0 + 45.9351

Všimněte si, že tento model má určité nedostatky. Konkrétně jde o predikování záporné hodnoty věku, která vyplývá ze struktury rovnice (záporné váhy).

Q: Je tento model vhodný pro predikci věku? Jaké další nedostatky může mít?