Knihovna NumPy nám umožňuje provádět různé operace, které je třeba provádět na datových strukturách často používaných ve strojovém učení a datové vědě, jako jsou vektory, matice a pole. Ukážeme pouze nejběžnější operace s NumPy, které se používají v mnoha potrubích strojového učení. Nakonec si všimněte, že NumPy je jen způsob, jak provádět operace, takže hlavní pozornost této lekce jsou ukázané matematické operace a ne samotný balíček NumPy. Začněme.
Co je to vektor?
Podle Googlu je vektor veličina, která má směr i velikost, zejména pro určování polohy jednoho bodu v prostoru vůči druhému.
Vektory jsou ve strojovém učení velmi důležité, protože nepopisují pouze velikost, ale také směr funkcí. Vektor můžeme vytvořit v NumPy pomocí následujícího fragmentu kódu:
import numpytak jakonapř
row_vector = np.array([1,2,3])
tisk(řádkový_vektor)
Ve výše uvedeném fragmentu kódu jsme vytvořili řádkový vektor. Můžeme také vytvořit sloupcový vektor jako:
import numpytak jakonapřcol_vector = np.array([[1],[2],[3]])
tisk(col_vector)
Vytvoření matice
Matici lze jednoduše chápat jako dvourozměrné pole. Můžeme vytvořit matici s NumPy vytvořením vícerozměrného pole:
matice = np.array([[1,2,3],[4,5,6],[7,8,9]])
tisk(matice)
Přestože je matice přesně podobná vícerozměrnému poli, struktura dat matice se nedoporučuje ze dvou důvodů:
- Pole je standardem, pokud jde o balíček NumPy
- Většina operací s NumPy vrací pole a ne matici
Pomocí řídké matice
Připomínáme, že řídká matice je ta, ve které je většina položek nulová. Nyní je běžným scénářem zpracování dat a strojového učení zpracování matic, ve kterých je většina prvků nulová. Zvažte například matici, jejíž řádky popisují každé video na Youtube a sloupce představují každého registrovaného uživatele. Každá hodnota představuje, zda uživatel sledoval video nebo ne. Většina hodnot v této matici bude samozřejmě nulová. The výhoda s řídkou matricí je, že neukládá hodnoty, které jsou nulové. To má za následek obrovskou výpočetní výhodu a také optimalizaci úložiště.
Pojďme vytvořit jiskrovou matici zde:
ze scipy import řídkýoriginal_matrix = np.array([[1,0,3],[0,0,6],[7,0,0]])
sparse_matrix = sparse.csr_matrix(původní_matice)
tisk(řídká_matice)
Abychom pochopili, jak kód funguje, podíváme se na výstup zde:
Ve výše uvedeném kódu jsme použili funkci NumPy k vytvoření Stlačená řídká řada matice, kde jsou nenulové prvky reprezentovány pomocí indexů založených na nule. Existují různé druhy řídké matice, například:
- Stlačený řídký sloupec
- Seznam seznamů
- Slovník klíčů
Nebudeme se potápět do jiných řídkých matic, ale vězte, že každé z nich je specifické a nikdo nemůže být označen jako „nejlepší“.
Použití operací na všechny prvky Vector
Je to běžný scénář, když potřebujeme použít společnou operaci na více vektorových prvků. To lze provést definováním lambda a následným vektorováním. Podívejme se na stejný fragment kódu:
matice = np.array([[1,2,3],
[4,5,6],
[7,8,9]])
mul_5 = lambda x: x* 5
vectorized_mul_5 = np.vectorize(mul_5)
vectorized_mul_5(matice)
Abychom pochopili, jak kód funguje, podíváme se na výstup zde:
Ve výše uvedeném fragmentu kódu jsme použili funkci vectorize, která je součástí knihovny NumPy, k transformaci jednoduché definice lambda na funkci, která dokáže zpracovat každý prvek vektoru. Je důležité si uvědomit, že vektorizace je jen smyčka nad živly a nemá to žádný vliv na výkon programu. NumPy také umožňuje vysílání , což znamená, že místo výše uvedeného složitého kódu jsme mohli jednoduše udělat:
matice* 5A výsledek by byl úplně stejný. Chtěl jsem nejprve ukázat složitou část, jinak byste sekci přeskočili!
Průměr, rozptyl a standardní odchylka
S NumPy je snadné provádět operace související s popisnou statistikou vektorů. Průměr vektoru lze vypočítat jako:
np. průměr(matice)Rozptyl vektoru lze vypočítat jako:
np.var(matice)Standardní odchylku vektoru lze vypočítat jako:
např. std(matice)Zde je uveden výstup výše uvedených příkazů na dané matici:
Transpozice matice
Transpozice je velmi běžná operace, o které uslyšíte, kdykoli jste obklopeni maticemi. Transpozice je jen způsob, jak zaměnit sloupcové a řádkové hodnoty matice. Vezměte prosím na vědomí, že a vektor nelze transponovat jako vektor je jen sbírka hodnot, aniž by tyto hodnoty byly kategorizovány do řádků a sloupců. Mějte na paměti, že převádění řádkového vektoru na sloupcový není transponováno (na základě definic lineární algebry, která je mimo rozsah této lekce).
Prozatím nalezneme mír pouhou transpozicí matice. Přístup k transpozici matice pomocí NumPy je velmi jednoduchý:
matice.TZde je uveden výstup výše uvedeného příkazu na dané matici:
Stejnou operaci lze provést na řádkovém vektoru a převést jej na sloupcový vektor.
Sloučení matice
Matici můžeme převést na jednorozměrné pole, pokud chceme její prvky zpracovat lineárně. To lze provést pomocí následujícího fragmentu kódu:
matice.plot()Zde je uveden výstup výše uvedeného příkazu na dané matici:
Všimněte si, že matice sloučení je jednorozměrné pole, jednoduše lineární.
Výpočet vlastních hodnot a vlastních vektorů
Vlastní obvody se velmi často používají v balíčcích strojového učení. Když je tedy funkce lineární transformace prezentována jako matice, pak X, vlastní vektory jsou vektory, které se mění pouze v měřítku vektoru, ale ne ve směru. Můžeme říci, že:
Xv = γvZde X je čtvercová matice a γ obsahuje vlastní čísla. Také v obsahuje vlastní vektory. S NumPy je snadné vypočítat vlastní hodnoty a vlastní vektory. Zde je fragment kódu, kde předvádíme totéž:
vyhodnocuje, evektory = np.linalg.eig(matice)Zde je uveden výstup výše uvedeného příkazu na dané matici:
Tečkované produkty vektorů
Dot Products of Vectors je způsob, jak znásobit 2 vektory. Vypovídá to o kolik vektorů je ve stejném směru , na rozdíl od křížového součinu, který vám říká opak, jak málo jsou vektory ve stejném směru (nazývané ortogonální). Můžeme vypočítat součin bodů dvou vektorů, jak je uvedeno ve fragmentu kódu zde:
a = np.array([3,5,6])b = np.array([2. 3,patnáct,1])
np.dot(a, b)
Zde je uveden výstup výše uvedeného příkazu na daná pole:
Sčítání, odčítání a násobení matic
Sčítání a odčítání více matic je poměrně jednoduchá operace v maticích. To lze provést dvěma způsoby. Podívejme se na fragment kódu k provedení těchto operací. Aby to bylo jednoduché, použijeme stejnou matici dvakrát:
np.add(matice, matice)Dále lze odečíst dvě matice jako:
np.odečíst(matice, matice)Zde je uveden výstup výše uvedeného příkazu na dané matici:
Jak se dalo očekávat, každý z prvků v matici se přičte/odečte s odpovídajícím prvkem. Násobení matice je podobné hledání tečkového součinu jako dříve:
np.dot(matice, matice)Výše uvedený kód najde skutečnou hodnotu násobení dvou matic, která je uvedena jako:
matice*matice
Zde je uveden výstup výše uvedeného příkazu na dané matici:
Závěr
V této lekci jsme prošli spoustou matematických operací souvisejících s vektory, maticemi a poli, které se běžně používají pro zpracování dat, popisnou statistiku a datovou vědu. Byla to rychlá lekce pokrývající pouze nejběžnější a nejdůležitější části široké škály konceptů, ale tyto operace by měly poskytnout velmi dobrou představu o tom, jaké všechny operace lze provést při práci s těmito datovými strukturami.
Sdílejte prosím svobodně svůj názor na lekci na Twitteru @linuxhint a @sbmaggarwal (to jsem já!).