Knjižnica NumPy omogućuje nam izvođenje različitih operacija koje je potrebno izvršiti na strukturama podataka koje se često koriste u strojnom učenju i znanosti o podacima, poput vektora, matrica i nizova. Prikazat ćemo samo najčešće operacije s NumPy -om koje se koriste u mnogim cjevovodima strojnog učenja. Na kraju, imajte na umu da je NumPy samo način izvođenja operacija, pa su matematičke operacije koje prikazujemo glavni fokus ove lekcije, a ne sam paket NumPy. Započnimo.
Što je vektor?
Prema Google -u, vektor je veličina koja ima smjer, ali i veličinu, osobito za određivanje položaja jedne točke u prostoru u odnosu na drugu.
Vektori su vrlo važni u strojnom učenju jer ne opisuju samo veličinu, već i smjer značajki. Možemo stvoriti vektor u NumPy -u sa sljedećim isječkom koda:
uvoz numpykaonpr
row_vector = np.mat([1,2,3])
ispisati(red_vektor)
U gornjem isječku koda stvorili smo vektor retka. Također možemo stvoriti vektor stupca kao:
uvoz numpykaonprcol_vector = np.mat([[1],[2],[3]])
ispisati(col_vector)
Izrada matrice
Matrica se može jednostavno shvatiti kao dvodimenzionalni niz. Pomoću NumPy-a možemo napraviti matricu tako što ćemo napraviti višedimenzionalni niz:
matrica = np.mat([[1,2,3],[4,5,6],[7,8,9]])
ispisati(matrica)
Iako je matrica potpuno slična višedimenzionalnom nizu, matrična struktura podataka se ne preporučuje iz dva razloga:
- Niz je standard kada je u pitanju paket NumPy
- Većina operacija s NumPy vraća nizove, a ne matricu
Korištenje rijetke matrice
Da podsjetimo, rijetka matrica je ona u kojoj je većina stavki nula. Sada je uobičajen scenarij u obradi podataka i strojnom učenju obrada matrica u kojima je većina elemenata nula. Na primjer, razmislite o matrici čiji redovi opisuju svaki videozapis na Youtubeu, a stupci predstavljaju svakog registriranog korisnika. Svaka vrijednost predstavlja je li korisnik gledao video ili nije. Naravno, većina vrijednosti u ovoj matrici bit će nula. The prednost s rijetkom matricom je da ne pohranjuje vrijednosti koje su nule. To rezultira velikom računalnom prednošću i optimizacijom pohrane.
Stvorimo matricu iskre ovdje:
od scipy uvoz rijetkoizvorna_matrica = np.mat([[1,0,3],[0,0,6],[7,0,0]])
sparse_matrix = rijetka.csr_matrix(izvorna_matrica)
ispisati(rijetka_matrica)
Da bismo razumjeli kako kod funkcionira, ovdje ćemo pogledati izlaz:
U gornjem kodu koristili smo funkciju NumPy za stvaranje Komprimirani rijetki red matrica u kojoj su elementi različiti od nule prikazani pomoću indeksa temeljenih na nuli. Postoje različite vrste rijetke matrice, poput:
- Komprimirani rijetki stup
- Popis popisa
- Rječnik ključeva
Ovdje nećemo zalaziti u druge rijetke matrice, ali znajte da je svaka njihova upotreba specifična i nitko se ne može nazvati 'najboljim'.
Primjena operacija na sve vektorske elemente
Uobičajen je scenarij kada moramo primijeniti zajedničku operaciju na više vektorskih elemenata. To se može učiniti definiranjem lambda i zatim vektorizacijom iste. Pogledajmo isječak koda za isti:
matrica = np.mat([[1,2,3],
[4,5,6],
[7,8,9]])
mul_5 = lambda x: x* 5
vectorized_mul_5 = np.vectorize(mul_5)
vektoriziran_mul_5(matrica)
Da bismo razumjeli kako kod funkcionira, ovdje ćemo pogledati izlaz:
U gornjem isječku koda koristili smo funkciju vektoriranja koja je dio biblioteke NumPy, za transformaciju jednostavne lambda definicije u funkciju koja može obraditi svaki element vektora. Važno je napomenuti da je vektorizacija samo petlja nad elementima i nema utjecaja na izvedbu programa. NumPy također dopušta emitiranje , što znači da smo umjesto gornjeg složenog koda mogli jednostavno učiniti:
matrica* 5A rezultat bi bio potpuno isti. Htio sam prvo pokazati složeni dio, inače biste preskočili odjeljak!
Srednja vrijednost, varijacija i standardna devijacija
Uz NumPy, lako je izvesti operacije povezane s opisnom statistikom o vektorima. Srednja vrijednost vektora može se izračunati na sljedeći način:
np.znači(matrica)Varijanta vektora može se izračunati na sljedeći način:
np.var(matrica)Standardna devijacija vektora može se izračunati kao:
npr. std(matrica)Ovdje se nalazi izlaz gore navedenih naredbi na zadanoj matrici:
Transponiranje matrice
Transponiranje je vrlo česta operacija o kojoj ćete čuti kad god ste okruženi matricama. Transponiranje je samo način zamjene stupacnih i retkih vrijednosti matrice. Napominjemo da je a vektor se ne može transponirati jer je vektor samo zbir vrijednosti bez da su te vrijednosti kategorizirane u retke i stupce. Imajte na umu da pretvaranje vektora retka u vektor stupca nije transponiranje (na temelju definicija linearne algebre, što je izvan opsega ove lekcije).
Za sada ćemo mir pronaći samo transponiranjem matrice. Pristup transponiranju matrice s NumPy je vrlo jednostavan:
matrica.TOvdje se nalazi rezultat gornje naredbe na zadanoj matrici:
Ista se operacija može izvesti na vektoru retka kako bi se pretvorio u vektor stupca.
Izravnavanje matrice
Matricu možemo pretvoriti u jednodimenzionalni niz ako njene elemente želimo obraditi linearno. To se može učiniti pomoću sljedećeg isječka koda:
matrica.spljoštiti()Ovdje se nalazi rezultat gornje naredbe na zadanoj matrici:
Imajte na umu da je spljoštena matrica jednodimenzionalni niz, jednostavno linearan.
Izračunavanje vlastitih vrijednosti i vlastitih vektora
Vlastiti vektori se vrlo često koriste u paketima za strojno učenje. Dakle, kada je funkcija linearne transformacije predstavljena kao matrica, tada su X, vlastiti vektori vektori koji se mijenjaju samo u mjerilu vektora, ali ne i u njegovu smjeru. Možemo reći da:
Xv = γvOvdje je X kvadratna matrica, a γ sadrži vlastite vrijednosti. Također, v sadrži vlastite vektore. Uz NumPy, lako je izračunati vlastite vrijednosti i vlastite vektore. Evo isječka koda gdje demonstriramo isto:
ocjenjuje, evectors = np.linalg.eig(matrica)Ovdje se nalazi rezultat gornje naredbe na zadanoj matrici:
Točkasti proizvodi vektora
Točkasti proizvodi vektora način je množenja 2 vektora. Govori vam o koliko je vektora u istom smjeru , za razliku od umreženog proizvoda koji vam govori suprotno, koliko su mali vektori u istom smjeru (nazvani ortogonalni). Možemo izračunati točkasti proizvod dva vektora kako je dato u isječku koda ovdje:
a = np. niz([3,5,6])b = np. niz([2. 3,petnaest,1])
np.točka(a, b)
Ovdje se nalazi rezultat gornje naredbe na danim nizovima:
Zbrajanje, oduzimanje i množenje matrica
Zbrajanje i oduzimanje više matrica prilično je jednostavna operacija u matricama. Postoje dva načina na koja se to može učiniti. Pogledajmo isječak koda za izvođenje ovih operacija. Kako bi ovo bilo jednostavno, dvaput ćemo koristiti istu matricu:
np.dodati(matrica, matrica)Zatim se dvije matrice mogu oduzeti kao:
np.oduzimati(matrica, matrica)Ovdje se nalazi rezultat gornje naredbe na zadanoj matrici:
Očekivano, svaki od elemenata u matrici se zbraja/oduzima s odgovarajućim elementom. Množenje matrice slično je pronalaženju točkastog proizvoda kao što smo to učinili ranije:
np.točka(matrica, matrica)Gornji kôd će pronaći pravu vrijednost množenja dviju matrica, danu kao:
matrica*matrica
Ovdje se nalazi rezultat gornje naredbe na zadanoj matrici:
Zaključak
U ovoj lekciji prošli smo kroz mnoge matematičke operacije povezane s vektorima, matricama i nizovima koje se obično koriste za obradu podataka, opisnu statistiku i znanost o podacima. Ovo je bila kratka lekcija koja je pokrivala samo najčešće i najvažnije dijelove širokog spektra koncepata, ali bi te operacije trebale dati vrlo dobru predodžbu o tome koje se sve operacije mogu izvesti dok se radi s tim strukturama podataka.
Slobodno podijelite svoje povratne informacije o lekciji na Twitteru sa @linuxhint i @sbmaggarwal (to sam ja!).