Aby sme získali predstavu o tom, ako fungujú algoritmy strojového učenia a aby sme získali lepšiu predstavu o niektorých dôležitých členoch, použijeme knižnice programovacieho jazyka Python, konkrétne NumPy, Matplotlib a Pandas. Cieľom tu určite nie je podrobne ich preskúmať (všetky tri knižnice sú rozsiahle a ponúkajú veľa možností), ale spoznať niektoré základné objekty a funkcie, ktoré nám môžu pomôcť.
Knižnica NumPi
Všetky údaje, ktoré máme, by mali byť prezentované pomocou čísel a niektorých schém, ktoré ich kombinujú. Takže napríklad vonkajšia teplota môže byť reprezentovaná reálnym číslom (nazývaným aj skalár), zatiaľ čo séria čísel môže byť reprezentovaná vonkajšou teplotou za celý týždeň (dĺžka tejto sekvencie je sedem). Pomocou bloku čísel, takzvaných matíc, môžeme znázorniť pixely čiernobieleho obrázka. Ak je veľkosť obrázka 200 x 300 pixelov, tento blok má 200 riadkov a 300 stĺpcov a na priesečníku každého typu a stĺpca je jedno číslo, ktoré označuje hodnotu pixelu. Preto hovoríme, že takéto štruktúry sú dvojrozmerné. Ak je obrázok farebný a používa farebný systém RGB (angl. červená, zelená, modrá) (o tom si povieme neskôr v časti o konvolučných neurónových sieťach), máme vlastne tri bloky čísel s rozmermi 200x300 (jeden pre každú z farieb), ktoré možno zapísať aj ako 200x300x3. Viete si predstaviť, ako prezentujeme video? Nevidel nič iné ako sériu snímok (obrazov) v čase. Zvyčajných 24 snímok za sekundu nám umožňuje zažiť video ako prirodzené, bez prerušenia alebo sekania. To by ďalej znamenalo, že jednu sekundu videa možno opísať ako 24x200x300x3. Takéto štruktúry sú štvorrozmerné. Je bežné, že štruktúry, ktoré majú viacero rozmerov, sa nazývajú tenzory. V skutočnosti je skalár tenzor dimenzie nula, reťazec je tenzor dimenzie jedna a matica je tenzor dimenzie dva. Odtiaľ pochádza aj názov populárnej knižnice TensorFlow, ktorá sa používa v strojovom učení.
Tenzory rôznych rozmerov
Knižnica NumPy je knižnica s otvoreným zdrojovým kódom, ktorá nám umožňuje rýchlo vykonávať mnoho matematických operácií s takto prezentovanými údajmi. Aj keď je súbor funkcií tejto knižnice veľmi bohatý, naučíme sa, ako:
- Definujme polia a matice čísel.
- Pozrime sa na ich prvky, typy a stĺpce.
- A budeme ich môcť sčítať a násobiť.
- Nájdime matematickú funkciu a
- Dostaneme nejaké náhodné hodnoty.
Táto časť je spárovaná s Jupyter volume B-numpy.ipynb. Aby ste mohli obsah ďalej sledovať, kliknutím na tlačidlo
otvorte obsah v prostredí Google Colab.Ak si poznámkové bloky prezeráte v lokálnom počítači, vyhľadajte poznámkový blok s rovnakým názvom v obsahu a spustite ho. Podrobnejšie pokyny nájdete v časti Hands-on Zone a lekcii Jupyter Exercise Notebook.
Hneď na začiatku notebooku vás privíta príkaz import numpy ako np, ktorý musíme vykonať, aby sme mohli používať knižnicu NumPy.
Ako ste videli v úvode, aby sme mohli pracovať so skutočnými údajmi, potrebujeme multidimenzionálne polia. Základnou štruktúrou knižnice NumPy je multidimenzionálne pole. multidimenzionálne pole, ndarray)štítok. Vyznačuje sa tvarom, ktorý označuje rozmery viacrozmerného poľa a prvky, ktoré obsahuje. Funkcia, ktorá vytvára multidimenzionálne pole, sa nazýva pole. Ďalší blok kódu vytvorí maticu M s rozmermi 3x2, t. j. maticu, ktorá má tri riadky a dva stĺpce.
Ako sme videli, s takýmito blokmi sa stretávame pri reprezentácii obrázkov, ale aj tabuľkových údajov - jednotlivé stĺpce označujú atribúty a typy inštancií označujú množiny.
Počet stĺpcov a počet typov multidimenzionálneho poľa M je možné prečítať vlastnosťou shape, takže nasledujúci riadok kódu má za následok dvojicu čísel (3, 2):
M. tvar
Multidimenzionálne polia musia obsahovať hodnoty rovnakého typu - môžu to byť celé čísla alebo reálne čísla. Knižnica tiež umožňuje použitie čísel s jednoduchou a dvojitou presnosťou, ale nebudeme zachádzať do týchto podrobností. Typ prvku multidimenzionálneho poľa môžete vždy prečítať pomocou vlastnosti dtype. Keďže naša matica obsahuje iba celé čísla, nasledujúci príkaz vypíše int64 :
M.dtipe
Tu je niekoľko príkladov vytvárania multidimenzionálnych polí:
- Postupnosť jednociferných čísel: np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
- Matica 1x3 obsahujúca čísla 10, 11 a 12: np.array([[10, 11, 12]])
- Matica 3x1 obsahujúca čísla 10, 11 a 12: np.array([[10], [11], [12]])
K jednotlivým prvkom poľa pristupujeme pomocou príslušných indexov - používame toľko indexov, koľko máme dimenzií a dbáme na to, aby indexy začínali od nuly. M[0,0] teda číta hodnotu v nulovom riadku a nulovom stĺpci, zatiaľ čo M[2,1] číta hodnotu v druhom riadku a prvom stĺpci.
Rovnako ako v prípade zoznamov, aj knižnica NumPy môže používať operátor vystrihovania. Napríklad v matici A rozmeru 5x5 znázornenej na obrázku nižšie:
- A [4 , :] rozlišuje všetky prvky posledného druhu, t. j. žltý blok,
- A [ :, 1::2] je extrahovaný prvkami každého druhého stĺpca, t. j. červenými blokmi.
- A [1::2 , 0:3:2] sa rozlišujú prvkami modrého bloku.
Operácie sčítania a odčítania na multidimenzionálnych poliach sa vykonávajú prvok po prvku. Odpočítajte prvky polí, ktoré sú na rovnakých pozíciách, a v dôsledku toho získate pole rovnakých rozmerov. Operátory týchto akcií sú, ako by ste očakávali, + a - a možno použiť aj funkcie sčítania a odčítania.
Nasledujúci blok kódu sčítava dve matice: A =[1357911131517] a 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
Výsledkom je matica [3711151923273135].
Pokiaľ ide o násobenie, je možné vynásobiť polia skalármi, v takom prípade je každý prvok poľa vynásobený skalárom. Táto operácia je označená *. Spodný blok kódu pre maticu A z predchádzajúceho príkladu teda poskytuje maticu [3915212733394551].
3 * A
Na vykonanie skutočného násobenia matice sa používa funkcia bodky. Matice A a B majú maticu [96114132240294348384474564].
A.dot(B)
Keď sa matematické funkcie knižnice NumPy použijú na multidimenzionálne polia, použijú sa na každý z jej prvkov. Napríklad spustením nasledujúceho kódu
npr.exp(M)
použitie exponenciálnej funkcie na prvky matice M =[123456], matica M =[2.718281837.389056120.0855369254.59815003148.4131591403.42879349].
Je tiež možné vykonať funkciu iba pozdĺž nejakej dimenzie multidimenzionálneho poľa, napríklad iba podľa stĺpcov alebo len podľa typov. Samozrejme, to dáva zmysel len pre niektoré funkcie, ako je hľadanie maxím, minimál, sčítaní alebo priemerov. Nasledujúci kód najprv pridá prvky matice M podľa typu a potom podľa stĺpcov. V dôsledku toho sa získajú [3,7,11] a [9,12].
# Pridanie podľa typu
np.sum(M, axis=1)
# Sčítanie podľa stĺpcov
np.sum(M, axis=0)
V našej práci to často znamená, že rýchlo generujeme polia s nejakými náhodnými hodnotami, alebo vektormi núl alebo jednotiek. V poradí sa vygenerujú nasledujúce výzvy:
- Pole náhodného poľa 2x3: np.random.random((2, 3))
- Maticový nulový rozmer 4k4: np.nuly((4, 4))
- Matica jednotiek 4x2: np.ones((4, 2))
- Jednorozmerné pole s rovnako vzdialenou množinou 9 bodov od intervalu 0 až 2: np.linspace(0, 2, 9)
Viac o obsahu a možnostiach knižnice NumPy sa dozviete na oficiálnej webovej stránke http://www.numpy.org/.
Knižnica Matplotlib
Táto časť je spárovaná so zväzkom Jupyter A-matplotlib.ipynb. Ak chcete pokračovať v sledovaní obsahu, kliknite na odkaz a potom na tlačidlo na otvorenie obsahu v prostredí Google Colab.Ak si poznámkové bloky prezeráte v lokálnom počítači, vyhľadajte poznámkový blok s rovnakým názvom v obsahu a spustite ho. Podrobnejšie pokyny nájdete v časti Hands-on Zone a lekcii Jupyter Exercise Notebook.
Matplotlib je knižnica Pythonu používaná pre 2D aj 3D grafiku. Grafické znázornenia sú veľmi užitočné pri práci s údajmi, pretože nám umožňujú lepšie porozumieť údajom, ako aj lepšie sledovať niektoré správanie algoritmov. Poďme sa zoznámiť s funkčnosťou tejto knižnice prostredníctvom dvoch jednoduchých príkladov: vykreslenie grafu funkcie sin(x) a zobrazenie bodového grafu súboru údajov.
Kódy, ktoré používajú knižnicu Matplotlib, zvyčajne začínajú príkazom import matplotlib.pyplot as plt, ktorý načíta panel vykresľovania plt a jeho funkcie.
Príklad vykreslenia grafov funkcie sin(x) na interval [0, 10] začne vytvorením rovnako vzdialenej mriežky bodov x volaním funkcie linspace knižnice NumPy. Táto funkcia očakáva ako argumenty konce intervalov 0 a 10 a počet míľnikov - v našom prípade to môže byť 100. Potom vypočítame hodnotu sínusovej funkcie pre každý z týchto bodov volaním funkcie sin(x). Jeho hodnoty uložíme do premennej y - a teraz to bude jedno pole 100 bodov, pretože funkcia je aplikovaná na každý prvok poľa x.
Názov grafu nastavíme volaním funkcie title a značky osi (texty, ktoré vysvetľujú ich význam) volaním funkcií xlabel a ylabel. Všetky tieto funkcie sú definované na úrovni kresliaceho panela plt. Samotný graf sa vykreslí volaním funkcie grafu a zadaním hodnôt súradníc x a y pre kreslenie (preto sme týmito názvami pomenovali počiatočnú množinu bodov a hodnôt sínusovej funkcie). Graf sa zobrazí volaním funkcie zobrazenia.
# Vytvorenie bodovej mriežky
x = np.linspace(0, 10, 100)
y = np.sin(x)
# Nastavenie názvov, grafiky a značiek osí
plt.title('Grafik funkcije y=sin(x)')
plt.xlabel('x')
plt.ylabel('y')
# Vykresľovanie grafiky
plt.plot(x, y)
# Zobraziť grafiku
plt.show()
Bodové grafy sa často používajú na zobrazenie priestorového usporiadania údajov. V nasledujúcom príklade vytvoríme desať párov bodov s celočíselnými hodnotami súradníc z intervalu [0, 20] a zobrazíme ich vo forme bodového grafu.
Aby sme vytvorili sériu párov bodov, vytvoríme pole jednoduchých súradníc x a y. Urobíme to pomocou funkcie NumPy randomint , ktorej argumenty low, high a size vám umožňujú ovládať dolnú a hornú hranicu intervalu, ako aj ovládať počet bodov. Samotný bodový graf sa vytvorí volaním funkcie bodového panela na vykreslenie plt. Pri volaní tejto funkcie sa udávajú hodnoty súradníc bodov, v našom prípade x a y. Okrem toho môžete upraviť farbu bodiek pomocou argumentu farby, ako aj upraviť samotný symbol na zobrazenie pomocou argumentu značky. Namiesto predvolených čiernych kruhov sa v grafike používajú zelené trojuholníky smerujúce nadol. Graf sa zobrazí, ako v predchádzajúcom príklade, volaním funkcie show.
# polia dĺžky 10 s ľubovoľnými prvkami z intervalu [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)
# Generovanie bodového grafu
plt.scatter(x, y, color='green', marker='v')
# Zobraziť grafiku
plt.show()
Vidíme, že v tomto príklade sme na úrovni knižnice NumPy a jej náhodného balíka nastavili generátor náhodných čísel (tzv. vlastnosť semena) na hodnotu 7. To nám umožní získať rovnaké usporiadanie bodov pri každom spustení tohto kódu. Táto funkcia je pre nás dôležitá kvôli možnosti reštartovať experimenty a zdieľať kódy. Táto vlastnosť sa nazýva opakovateľnosť alebo reprodukovateľnosť.
Oficiálna webová stránka knižnice Matplotlib je https://matplotlib.org/ a okrem nej existujú aj ďalšie knižnice Pythonu pre vizualizácie, ako napríklad Seaborn a Plotly.
Knižnica Pandas je navrhnutá tak, aby pracovala s tabuľkovými údajmi. Vyznačuje sa funkciami na načítanie rôznych formátov súborov a potom mnohými funkciami na manipuláciu s údajmi. Odkaz na oficiálnu stránku knižnice je https://pandas.pydata.org/ a s jeho možnosťami sa zoznámime o niečo neskôr, v časti s prieskumnou analýzou údajov.
- Make a submission