Vaje 2022-01-06: Uvod v strojno učenje

Uvod v strojno učenje

Na teh vajah si bomo ogledali, kako lahko uporabljamo knjižnjico scikit-learn (sklearn), da se iz podatkov naučimo napovedne modele. Ogledali si bomo primer napovedovanja velikosti planetov, ki ga je opisal že profesor na predavanjih. Podatki so na voljo tu.

Naloga 1: Nalaganje podatkov

Da si olajšamo delo, bomo podatke naložili s pomočjo pandas, visoko-funkcionalne knjižnjice za shranjevanje in obdelavo podatkov. Uporabili bomo funkcijo read_csv, ki ji bomo podali ime CSV datoteke, iz katere želimo podatke naložiti.

Kaj funkcija vrne?

Naloga 2: Izbira namena stolpcev

Podatkovni okvir (an. data frame), ki smo ga naložili s knjižnjico pandas, stolpcev ne loči glede na namen, za katerega jih bomo uporabili pri strojnem učenju. Zato si bomo pripravili spremenljivki X in y v kateri bomo shranili natanko vrednosti vhodnih (napovednih) spremenljivk ter vrednosti ciljne spremenljivke.

Iz podatkovnega ovkira stolpce izluščimo tako, da njihovo ime podamo kot bi slovarju podali ključ. Če torej želimo iz podatkovnega okvira df izluščiti stolpec "A" to storimo z ukazom df["A"]. Če pa želimo izluščiti več stolpcev, npr., "A", "B" in "C", podatkovnemu okvru kot ključ podamo seznam stolpcev, torej df[ ["A", "B", "C"] ].

Za učenje bomo na koncu potreboval le vrednosti stolpcev, ne pa tudi dodatnih kontekstualnih informacij, ki jih hrani podatkovni okvir. Te "surove" vrednosti se nahajajo v atributu values, torej do njih dostopamo z df.values.

Iz podatkovnega ovira naloženega v prvi nalogi, izluščite vrednosti ciljne spremenljivke ter vrednosti vhodnih spremenljivk. Kot na predavanjih bomo za ciljno spremenljivko izbrali planet.radius, za vhode spremenljivke pa se bom za začetek omejili spremenljivke, ki opisujejo fizikalne lastnosti opazovanega zvezdnega sistema. To so natanko star.temp, star.logg, star.rad, star.mass ter star.k.mag.

Naloga 3: Učenje in uporaba napovednega modela

Sedaj, ko smo si pripravili učne podatke, lahko z njimi naučimo napovedni model. V knjižnjici scikit-learn je veliko algoritmov, s pomočjo katerih lahko naučimo napovedne modele. Na danajšnjih vajah bomo uporabljali linearno regresijo sklearn.linear_model.LinearRegression ter regresijska dreves sklearn.tree.DecisionTreeRegressor.

Model na vhodnih podatkih X ter ciljnih vrednostih y naučimo z uporabo metode fit(X, y). Ta vrne natanko naučenu model, ki ga nato lahko uporabimo za napovedvanje. To storimo z uporabo modelove metode predict(X), ki ji podamo seznam vektorjev vrednosti vhodnih spremenljivk, za katere želimo izračunati napovedi.

Naučite linearni model in odločitveno drevo z uporabo zgoraj omenjenih razredov. Kakšni napovedi za velikost planeta izračunata pri vrednostih vhodnih spremenljivk [6188.44, 4.50000, 1.01630, 1.21398, 9.03000]?

Naloga 4: Primerjava modelov

Naučili smo dva napovedna modela, zato se hitro porodi vprašanje "Kateri je boljši?" Dober začetni odgovor na to vprašanje pridobimo s primerjavo njunih napovedi.

Zato, da karseda nepristransko ocenimo modela, ne smemo uporabiti istih podatkov na katerih smo se učili. Zato bomo del podatkov iz izvirnega podatkovnega okvira pridržali in ga uporabili le za ocenjevanje, ne pa za učenje. Temu delu podatkov pravimo testna množica.

Da se izgonemo še pristranskostim, ki bi lahko nastale zaradi vrstnega reda meritev, bomo najprej meritvam v podatkovnem okviru še naključno zamešal vrstni red z uporabo funkcije shuffle iz knjižnjice sklearn.utils.

Ko bomo naučili modela, bomo izračunali njune napovedi za primere v testni množici, ter jih primerjali s pravimi, izmerjenimi, vrednostmi. V ta namen bomo uporabili podmodul sklearn.metrics. Ta modul vsebuje veliko evaluacijskih mer, ki jih uporabljamo za ocenjevanje modelov, mi pa se bomo osredotočili na povprečno absolutno napako. Povprečna absolutna napaka (an. mean absolute error) modela je natanko vsota absolutnih napak (razlik med pravo in napovedano vrednostjo) čez celotno testno množico. Povprečno absolutno napako izračunamo z uporabo funkcije mean_absolute_error(y_p, y_n), kjer so y_p prave vrednosti ciljne spremenljivke, y_n pa napovedi modelov.

Zmešajte podatkovno množico in za testno množico pridržite 300 primerov (primere iz podatkovnega okvira izbiramo tako kot iz seznama, z rezi :). Na preostalih, učnih, podatkih naučite napovedna modela, ter na testni množici izračunajte njuni povprečni absolutni napaki. Za oba modela seveda uporabite isti učni in testni množici.

Kateri model ima nižjo napako?

Last modified: Wednesday, 5 January 2022, 8:51 PM