Font size
  • A-
  • A
  • A+
Site color
  • R
  • A
  • A
  • A
Skip to main content
AI4VET AI4VET
  • Home
  • Calendar
  • More
You are currently using guest access
Log in
AI4VET
Home Calendar
Expand all Collapse all
  1. AI/ML Fundamentals
  2. AIML-SR
  3. 1. Veštačka inteligencija (SR)
  4. Intro Exercise: Bilioteka NumPy, Matplotlib i Pandas

Intro Exercise: Bilioteka NumPy, Matplotlib i Pandas

Da bismo približili kako rade algoritmi mašinskog učenja i da biste stekli bolju predstavu o nekim važnim pojmovima, koristićemo biblioteke programskog jezika Python i to NumPy , Matplotlib i Pandas.Neke od njih si već imao prilike da upoznaš na drugim kursevima. Ovde svakako nije cilj da ih detaljno istražimo (sve tri biblioteke su obimne i nude mnogo mogućnosti), već da upoznamo neke osnovne objekte i funkcije koje nam mogu pomoći.

NumPi Biblioteka 

colab

 Sve podatke kojima raspolažemo treba da predstavimo pomoću brojeva i nekih shema koje ih objedinjuju. Tako, recimo, spoljnu temperaturu možemo da predstavimo jednim realnim brojem (kažemo i skalarom), dok nizom brojeva možemo da predstavimo spoljnu temperaturu u celoj nedelji (dužina tog niza je sedam). Blokom brojeva, takozvanim matricama, možemo da predstavimo piksele jedne crno-bele slike. Ako je dimenzija slike 200x300 piksela, ovaj blok ima 200 redova i 300 kolona i u preseku svake vrste i kolone se nalazi po jedan broj koji označava vrednost piksela. Zato za ovakve strukture kažemo da su dvodimenzione. Ako je slika u boji i koristi RGB (eng. Red Green Blue) sistem boja (o tome ćemo još govoriti u delu o konvolutivnim neuronskim mrežama), imamo zapravo tri bloka brojeva dimenzije 200x300 (za svaku od boja po jednu) što možemo zapisati i kao 200x300x3. Da li možeš da zamisliš kako predstavljamo video? Pa , video je ništa drugo nego jedan niz frejmova (slika) u vremenu. Uobičajena 24 frejma u jednoj sekundi nam omogućavaju da video doživimo kao prirodan, bez prekida i seckanja. To bi dalje značilo da jedan sekund videa možemo da opišemo dimenzijom 24x200x300x3. Ovakve strukture su već četvorodimenzione. Uobičajeno je da strukture koje imaju više dimenzija nazivamo tenzorima. Zapravo, važi i da je skalar tenzor dimenzije nula, niz tenzor dimenzije jedan a matrica tenzor dimenzije dva. Otuda i ime popularne biblioteke TensorFlow koja se koristi u mašinskom učenju.

Tenzori različitih dimenzija

Biblioteka NumPy je biblioteka otvorenog koda koja nam omogućava da brzo izvedemo mnoge matematičke operacije nad ovako predstavljenim podacima. Iako je skup funkcionalnosti ove biblioteke vrlo bogat, mi ćemo naučiti kako da:

  • definišemo nizove i matrice brojeva,
  • pristupimo njihovim elementima, vrstama i kolonama,
  • izvedemo operacije sabiranja, oduzimanja i množenja nad njima,
  • pronađemo i primenimo neku matematičku funkciju, i
  • generišemo neke nasumične vrednosti.

 Ova sekcija je uparena sa Jupyter sveskom B-numpy.ipynb. Da bi mogao da pratiš sadržaj dalje, klikni na dugme colab da bi se sadržaj otvorio u okruženju Google Colab.Ukoliko sveske pregledaš na lokalnoj mašini, među sadržajima pronađi svesku sa istim imenom i pokreni je. Za detaljnije instrukcije pogledaj sekciju Hands-on zona i lekciju Jupyter sveske za vežbu.

 Na samom početku sveske dočekaće te naredba import numpy as np koju moramo da izvršimo kako bismo mogli da koristimo biblioteku NumPy.

 Kao što si video u uvodu, za rad sa realnim podacima potrebni su nam višedimenzioni nizovi. Osnovna struktura biblioteke NumPy je baš višedimenzioni niz (eng. multidimensional array, ndarray). Nju karakterišu oblik koji ukazuje na dimenzije višedimenzionog niza i elementi koje sadrži. Funkcija kojom se kreira višedimenzioni niz se zove array. Sledećim blokom koda kreira se matrica M dimenzija 3x2, tj. matrica koja ima tri vrste i dve kolone.

Kao što smo videli, takve blokove susrećemo prilikom predstavljanja slika, ali i tabelarnih podataka - pojedinačne kolone označavaju atribute, a vrste instance skupa.

 Broj kolona i broj vrsta višedimenzionog niza M može da se pročita svojstvom shape, pa tako sledeća linija koda daje kao rezultat par brojeva (3, 2):

M.shape

 Višedimenzioni nizovi moraju da sadrže vrednosti istog tipa - to mogu biti celi brojevi ili realni brojevi. Biblioteka omogućava i korišćenje brojeva sa jednostrukom i dvostrukom preciznošću, ali nećemo zalaziti u te detalje. Tip elemenata višedimenzionog niza možeš uvek očitati koristeći svojstvo dtype. S obzirom na to da naša matrica sadrži samo cele brojeve, sledeća naredba će ispisati int64 :

M.dtipe

Evo još nekih primera kreiranja višedimenzionih nizova:

  • niz jednocifrenih brojeva: np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
  • matrica dimenzija 1x3 koja sadrži brojeve 10, 11 i 12: np.array([[10, 11, 12]])
  • matrica dimenzija 3x1 koja sadrži brojeve 10, 11 i 12: np.array([[10], [11], [12]])

Pojedinačnim elementima nizova pristupa se korišćenjem odgovarajućih indeksa - koristimo onoliko indeksa koliko imamo dimenzija i vodimo računa o tome da indeksi počinju od nule. Tako se sa M[0,0] očitava vrednost u nultoj vrsti i nultoj koloni, dok se sa M[2,1] očitava vrednost u drugoj vrsti i prvoj koloni.

 Baš kao i kod listi, i u biblioteci NumPy može da se koristi operator isecanja:. Tako se, recimo, u matrici A dimenzije 5x5 koja je prikazana na donjoj slici sa:

  • A [4 , :] izdvajaju svi elementi poslednje vrste, tj. žuti blok,
  • A [ :, 1::2] izdvajaju elementi svake druge kolone, tj. crveni blokovi,
  • A [1 ::2 , 0:3:2] izdvajaju elementi plavog bloka.

Operacije sabiranja i oduzimanja nad višedimenzionim nizovima se izvode element po element - sabiraju se tj. oduzimaju elementi nizova koji se nalaze na istim pozicijama i kao rezultat se dobija niz istih dimenzija. Operatori ovih radnji su, kao što očekuješ, + i -, a mogu se koristiti i funkcije add i subtract.

Sledećim blokom koda se sabiraju dve matrice A =[1357911131517] i B =[24681012141618]:

A = np.array([
[1, 3, 5],
[7, 9, 11],
[13, 15, 17]
])
B = np.array([
[2, 4, 6],
[8, 10, 12],
[14, 16, 18]
])
A + B

Kao rezultat se dobija matrica [3711151923273135].

 Kada je reč o množenju, postoji mogućnost množenja nizova skalarima i u tom slučaju se skalarom množi svaki element niza. Tu operaciju označavamo sa *. Tako se donjim blokom koda za matricu A iz prethodnog primera dobija matrica [3915212733394551].

3 * A

Da bi se izvršilo pravo matrično množenje, koristi se funkcija dot. Tako se za matrice A i B dobija matrica [96114132240294348384474564].

A.dot(B)

Kada se primenjuju matematičke funkciju biblioteke NumPy nad višedimenzionim nizovima, one se primenjuju nad svakim njenim elementom. Tako se, recimo, izvršavanjem sledećeg koda

npr.exp(M)

kojim se primenjuje eksponencijalna funkcija nad elementima matrice M =[123456], dobija matrica M =[2.718281837.389056120.0855369254.59815003148.4131591403.42879349].

 Postoji i mogućnost da se funkcija izvrši samo duž neke dimenzije višedimenzionog niza, na primer, samo po kolonama ili samo po vrstama. Naravno , to ima smisla samo za neke funkcije kao što su pronalaženje maksimuma, minimuma, sabiranje ili uprosečavanje. Sledećim kodom se prvo vrši sabiranje elemenata matrice M po vrstama, a potom po kolonama. Kao rezultat se, redom, dobijaju nizovi [3,7,11] i [9,12].

# Dodavanje po vrstama
np.sum(M, axis=1)
# sabiranje po kolonama
np.sum(M, axis=0)

U radu nam često znači da brzo generišemo nizove sa nekim nasumičnim vrednostima ili vektore nula ili jedinica. Sledećim pozivima funkcija će se generisati, redom:

  • matrica sa slučajnim brojevima dimenzije 2x3: np.random.random((2, 3))
  • matrica nulta dimenzija 4k4: np.zeros((4, 4))
  • matrica jedinica dimenzija 4x2: np.ones((4, 2))
  • jedan jednodimenzioni niz sa ekvidistantnim skupom 9 tačaka iz intervala od 0 do 2: np.linspace(0, 2, 9)

Više o sadržaju i mogućnostima biblioteke NumPy možeš da pronađeš na zvaničnom sajtu http://www.numpy.org/.

Biblioteka Matplotlib Open In Colab

 Ova sekcija je uparena sa Jupyter sveskom A-matplotlib.ipynb. Da bi mogao da pratiš sadržaj dalje, klikni na link, a potom i na dugme  da bi se sadržaj otvorio u okruženju Google Colab.Ukoliko sveske pregledaš na lokalnoj mašini, među sadržajima pronađi svesku sa istim imenom i pokreni je. Za detaljnije instrukcije pogledaj sekciju Hands-on zona i lekciju Jupyter sveske za vežbu.

 Matplotlib je biblioteka jezika Python koja se koristi za 2D i 3D grafiku. Grafički prikazi su nam veoma korisni u radu sa podacima jer nam omogućavaju da bolje razumemo podatke, kao i da finije ispratimo neka ponašanja algoritama. Upoznajmo funkcionalnosti ove biblioteke kroz dva jednostavna primera: iscrtavanje grafika funkcije sin(x) i prikaza tačkastog grafika skupa podataka.

Uobičajeno je da kodovi koji koriste biblioteku Matplotlib započnu naredbom import matplotlib.pyplot as plt kojom se učitava panel za crtanje plt i njegove funkcije.

Primer iscrtavanja grafika funkcije sin(x) na intervalu [0, 10] započećemo kreiranjem ekvidistantne mreže tačaka x pozivom funkcije linspace biblioteke NumPy. Ova funkcija očekuje kao argumente krajeve intervala 0 i 10 i broj podeonih tačaka - u našem slučaju to može da bude broj 100. Potom ćemo izračunati vrednost sinusne funkcije za svaku od ovih tačaka pozivom funkcije sin(x). Njene vrednosti ćemo sačuvati u promenljivoj y - i to će sada biti jedan niz od 100 tačaka jer se funkcija primenjuje nad svakim elementom niza x.

Naslov grafikona postavljamo pozivom funkcije title, a obeležja osa (tekstove koji će objašnjavati njihovo značenje) pozivima funkcija xlabel i ylabel. Sve ove funkcije su definisane na nivou panela za crtanje plt. Sam grafik se iscrtava pozivom funkcije plot i zadavanjem vrednost x i y koordinata za crtanje (zato smo tim imenima i nazvali polazni skup tačaka i vrednosti sinusne funkcije). Grafik se prikazuje pozivom funkcije show.

# kreiranje mreze tacaka
x = np.linspace(0, 10, 100)
y = np.sin(x)
# podesavanje naslova grafika i obelezja osa
plt.title('Grafik funkcije y=sin(x)')
plt.xlabel('x')
plt.ylabel('y')
# iscrtavanje grafika
plt.plot(x, y)
# Prikaz grafike
plt.show()

 Tačkaste grafikone često koristimo za uvid u prostorni raspored podataka. U primeru koji sledi kreiraćemo deset parova tačaka sa celobrojnim vrednostima koordinata iz intervala [0, 20] i prikazati ih u vidu tačkastog grafikona.

 Niz parova tačaka ćemo kreirati tako što ćemo kreirati nizove pojedinačnih koordinata x i y. To ćemo uraditi korišćenjem funkcije randomint biblioteke NumPy čiji argumenti low, high i size omogućavaju kontrolu donje i gornje granice intervala, kao i kontrolu broja tačaka. Sam tačkasti grafikon se kreira pozivom funkcije scatter panela za crtanje plt. Prilikom poziva ovoj funkciji se zadaju vrednosti koordinata tačaka, u našem slučaju x i y. Dodatno se može podesiti boja tačaka argumentom color, kao i izmeniti sam simbol za prikaz argumentom marker. Na grafiku su umesto podrazumevanih kružića crne boje korišćeni zeleni trouglići usmereni nadole. Grafik se prikazuje, kao i u prethodnom primeru, pozivom funkcije show.

# nizovi duzine 10 sa proizvoljnim elementima iz intervala [0, 20]
np.random.seed(7)
k = np.random.randint (nisko = 0, visoko = 20, veličina = 10)
i = np.random.randint (nisko = 0, visoko = 20, veličina = 10)
# generisanje tackastog grafikona
plt.scatter(x, y, color='green', marker='v')
# Prikaz grafike
plt.show()

Možemo da primetimo da smo u ovom primeru na nivou biblioteke NumPy i njenog paketa random podesili generator slučajnih brojeva (takozvano svojstvo seed) na vrednost 7. To će nam omogućiti da svaki put kada pokrenemo ovaj kôd, dobijemo isti raspored tačaka. Ovo svojstvo nam je važno zbog mogućnosti ponovnog pokretanja eksperimenata i deljenja kodova. Ovo svojstvo zovemo ponovljivost ili reproducibilnost.

Zvanični sajt biblioteke Matplotlib je https://matplotlib.org/ , a osim nje postoje i druge biblioteke jezika Python za vizuelizacije, kao što su Seaborn i Plotly.

Biblioteka Pandas je namenjena radu sa tabelarnim podacima. Karakterišu je funkcije za učitavanje različitih formata datoteka a potom i mnogobrojne funkcije za manipulaciju nad podacima. Link do zvaničnog sajta biblioteke je https://pandas.pydata.org/a sa njenim mogućnostima ćemo se upoznati nešto kasnije, u delu sa eksplorativnom analizom podataka.

 

 

Completion requirements:
  • Make a submission
Previous activity Intro Exercise: Platforma Google Colab
Next activity Vežba 1.1: Primena veštačke inteligencije - korišćenje AI programa
You are currently using guest access (Log in)
Data retention summary
Get the mobile app
Get the mobile app
Play Store App Store
Powered by Moodle

This theme was proudly developed by

Conecti.me