Osnovni koraci procesa Strojnog učenja

ML koraci

26/12/2021

U zadnje vrijeme sve se više spominje pojam umjetna inteligencija i posljedično pojam strojnog učenja.

Uslijed sve večeg razvoja procesorske snage, veličine radne memorije i dostupnosti podataka, te pada cijene tih hardverskih komponenti, povečala se mogućnost i isplativnost komercijalnog korištenja umjetne inteligencije.

Trenutno je prisutan veliki jaz u razumijevanju mogućnosti i rada umjetne inteligencije izmedju onih koji se njome aktivno bave i ostalih u društvu.

Postoji i velika zainteresiranost mnogih da uđu u to područja, ali kao i uvijek često najteži korak je od kuda započeti. Stoga da bi sebi, ali i drugima to olakšao odlučio sam prikazati jedan jednostavan proces stojnog učenja provučen kroz primjer predikcije putem jednostavne linearne regresije.

Uz napomenu da kako bi se što jednostavnije zaokružio proces stojnog učenja neće se ulaziti u stručnost i dubinu ni statistike ni korištenog programskog jezika Pythona.

Korištena je Anaconda i Jupyter Notebook za pisanje koda (više o tome u nekom narednom članku)

1. Učitavanje potrebnih modula

Na samom početku potrebno je učitati / importirati u memoriju Python “module” koje ćemo koristit pri stojnom učenju.

U ovom konkretnom slučaju korišten je numpy za rad na izračunima sa podacima, zatim pandas za manipuliranje podacima, te matplotlib i seaborn za graficki prikaz i vizualizaciju podataka.

2. Učitavanje i upoznavanje sa podacima

Sljedeći korak je učitavanje podataka (dataseta). Za lakšu manipulaciju (i upoznavanje) sa podacima, učitavaju se u dataframe-ove (što je slično excel tablicama).

učitavanje_podataka

Može se vidjeti strukturu dataframe-a:

Struktura_datafrea

odnosno dataframe od 40 redova sa 2 stupaca.

Prikaz prvih 5 redova sa zaglavljem:

dataframe_shape

Mogu se izračunati glavni statistički pokazatelji:

statisticki_pokazatelji

U gornjem primjeru vidimo da stupac “Kvadratura” ima 40 redova (podataka), da je prosjek vrijednosti stupca “Kvadratura” 106,375 metara kvadratnih, da je najmanja “Kvadratura” 30 m kvadratnih, standardna devijacija 46,328641, maksimalna kvadratura je 200 metara kvadratnih…

Poželjno je ispitati da li za neko obilježje nema podatka, tj. koliko ima ne non-null vrijednosti:

non-null_provjera

U primjeru se vidi da su svih 40 vrijednosti non-null.

Preporučljivo je prikazati podatke pomoću grafikona, jer vizualizacijom podataka možemo naučiti ponešto o podacima. U ovom slučaju možemo uvidjeti linearnost među podacima, te zaključiti da bi za treniranje modela bilo optimalno koristiti algoritam jednostavne linearne regresije.

vizualizacija_unosnih_podataka

3. Prilagodba podataka za učenje modela

Sljedeći korak je prilagodba podataka za učenje modela koja može uključivati normalizaciju podataka (ako postoje više promatranih obilježja sa različitim skalama vrijednosti), stvaranje listi za zavisnu varijablu i nezavisnu/e varijable, te podjela podataka u training set i validation set odnosno na skup podataka na kojima ćemo učiti model i skup podatka koji će služiti za validaciju modela odnosno ocijenu koliko dobro model opisuje podatke.

dataframe za nezavisnu varijablu
U primjeru smo iz dataframe “df_ML_primjer” izdvojili u poseban dataframe “X” vrijednosti stupca “Kvadratura”.
dataframe za zavisnu varijablu

Te u dataframe “y” vrijednosti stupca “Cijena (€)”.

Izvršena je pretvorba dataframe u array (liste) i konverzija oblika liste da se može trenirati model:

Treniranju modela prethodi podjela podataka u skup podataka za učenje modela i skup podataka za validaciju modela:
Iz nezavisne varijable X tj. to su podaci o kvadraturi, 75% smo grupirali u listu “X_train” odnosno listu podataka za treniranje, a 25% smo grupirali u listu “X_test” odnosno listu podataka za validaciju, to isto napravili smo i sa “y” tj. sa podacima o cijeni, 75% u listu “y_train” i 25% podataka u “y_test”.

4. Treniranje i vrednovanje modela
Vizualizacijom podataka ustanovljeno je da se podaci ponašaju linearno odnosno da povećanje kvadrature dovodi do povećanja cijene po nekom ravnom pravcu.
U Pythonu imamo 2 modula/library koji se koriste za modeliranje pomoću jednostavne linearne regresije.
Prvo je prikazano korištenje modula LinearRegression, koji se importira iz sklearn, te se modelu dodjeli ime “model_regresija”, a trenira se pomoću podataka iz “X_train” i “y_train”.
Točnost modela se prikazuje putem koeficijenta determinacije, a iznosi 0,9512. Što je broj bliži jedinici to je točnost bolja.

Intercept iznosi 11.622,98, a slope iliti nagib funkcije iznosi 1.832,67. To bi ako uvrstimo u jednadžbu linearne regresije izgledalo => y=a+bx odnosno y=11.622,98 + 1.832,67x.

Model se može sa istim rezultatom trenirati koristeći modul statsmodels.api. Preko naredbe lr.params dobijemo ispis intercepta i slope, te putem naredbe lr.summary kompletne pokazatelje vezane uz model gdje je koeficijent determinacije = R-squared.
Rezultat odnosno pravac regresije u odnosu na podatke korištene za treniranje možemo i prikazati grafički.

Model (gledajući općenito proces strojnog učenja) je poželjno vrednovati pomoću onih 25% podataka koje smo izdvojili iz inicijalnog dataseta i kojima se model nije trenirao.

Rezultat koeficijenta determinacije je 0,97486, što je poprilično dobar rezultat i blizak rezultatu dobivenom na podacima za treniranje.
Na temelju onih 25% podataka koje smo izdvojili iz izvornih podataka i na kojima se model nije trenirao možemo vršiti predviđanje i usporedbu originalnih/stvarnih podataka (y_test) sa predviđenim (y_pred).

Dobivene podatke iz modela možemo prikazati i usporediti ih tablično sa onima izvornim iz dataseta (pritom liste pretvaramo u dataframe):

Možemo ih prikazati i grafički gdje je usporedba puno indikativnija:

Prvi graf prikazuje usporedbu podataka za validaciju, a drugi usporedbu podataka kojim se treniralo model.

5. Predikcija novih vrijednosti putem istreniranog modela

Slično kao i kod validacije samo je ovdje unos potpuno novih podataka za kojih nemamo još izmjerene rezultate.

U ovom konkretnom primjeru cilj je dobiti predviđenu cijenu za stan veličine 100 metara kvadratnih. Model je izračunao da ona iznosi 194.889,79 €.

Rekapitulacija:

1) Import modula; 2) Import podataka i analiziranje podataka; 3) Priprema podataka za treniranje; 4) Treniranje i valorizacija modela; 5) Predikcija putem istreniranog modela.

Pročitajte također i…