Scikit-learn: jednoduchý a současně i univerzální model lineární regrese

5. 9. 2024
Doba čtení: 45 minut

Sdílet

 Autor: Depositphotos
Ještě jednou se vrátíme k modelu pro lineární regresi. S ním jsme se již setkali, ovšem ve skutečnosti je i zdánlivě jednoduchý koncept lineární regrese realizován tak, že ho lze využít mnoha dalšími způsoby.

Obsah

1. Jednoduchý a současně i univerzální model lineární regrese

2. Krátké zopakování – lineární regrese bodů ležících v rovině

3. Vliv hyperparametru fit_intercept na výpočet směrnice a posunu přímky

4. Lineární regrese při vynucení w0=0 pro obecná data

5. Lineární regrese při vynucení w0=0 v případě, že vstupní body obsahují počátek souřadného systému

6. Model lineární regrese pro větší množství předpovídaných hodnot

7. Model předpovídající pro každou vstupní hodnotu dvě výstupní hodnoty (odpovědi)

8. Lineární regrese a proložení bodů rovinou

9. Konstrukce matice obsahující souřadnice bodů v mřížce

10. Proložení bodů v prostoru rovinou

11. Proložení rovinou při přidání náhodnosti do pozic bodů v prostoru

12. Kombinace předchozích příkladů: přechod z roviny do prostoru a více sad očekávaných výsledků

13. Proložení dvou sad bodů dvěma nezávislými rovinami

14. Přidání náhodné výšky bodů v datové sadě

15. Polynomická regrese

16. Příklad jednoduché polynomické regrese

17. Proložení bodů v prostoru plochou prvního stupně (rovinou)

18. Proložení bodů v prostoru plochou druhého stupně

19. Repositář s demonstračními příklady

20. Odkazy na Internetu

1. Jednoduchý a současně i univerzální model lineární regrese

V dnešním článku o knihovně scikit-learn se ještě jednou vrátíme k modelu pro lineární regresi. S tímto modelem jsme se již setkali, ovšem ve skutečnosti je i zdánlivě jednoduchý až triviální koncept lineární regrese realizován takovým způsobem, že ho lze využít mnoha různými způsoby, například:

  1. Proložení bodů v rovině přímkou (nejjednodušší použití)
  2. Proložení bodů v prostoru rovinou
  3. Dtto pro vyšší dimenze (body v X-rozměrném prostoru proloženy X-1 rozměrným lineárním objektem)
  4. Model lze použít pro větší množství neznámých (odhadovaných hodnot), takže se interně uloží informace o dvou přímkách/rovinách atd.
  5. Přímka/rovina je určena parametry ležícími v oblasti (prostoru) nikoli vstupních hodnot, ale prostoru parametrů, což nám umožňuje realizovat například polynomickou regresi i další formy regrese (sinus atd.).
  6. Předchozí koncepty lze navíc zkombinovat, což si ukážeme na proložení bodů v prostoru plochou druhého stupně (popsanou polynomem druhého řádu).

2. Krátké zopakování – lineární regrese bodů ležících v rovině

S modelem (resp. přesněji řečeno s modely) založenými na lineární regresi jsme se již, jak bylo napsáno v úvodní kapitole, setkali. Připomeňme si ten nejjednodušší možný případ, a tím je proložení bodů ležících v rovině vhodně zvolenou přímkou. Směrnice a posun přímky je vypočítán takovým způsobem, aby součet čtverců odchylky (vzdálenosti) od bodů byl co nejmenší.

Nejprve zkonstruujeme dva vektory, přičemž první vektor bude obsahovat x-ové souřadnice bodů a druhý vektor souřadnice y-ové. Z kódu je zřejmé, že se body budou odchylovat od ideální přímky o náhodnou hodnotu:

# x je vektor
x = np.linspace(0, 10, VALUES)
 
# y je vektor
y = np.linspace(-1, 1, VALUES) + 0.5*np.random.rand(VALUES)

Model lineární regrese počítá s tím, že známé vstupní údaje jsou uloženy v matici a nikoli ve vektoru, takže provedeme příslušný převod (X značí matici, je to velké písmeno):

# převod vektoru na 2D matici
X = x.reshape(-1, 1)

Provedeme trénink modelu se všemi body (což v praxi nebude možné a ani ideální řešení):

# konstrukce modelu
lr = linear_model.LinearRegression()
 
# trénink modelu (X musí být maticí)
lr.fit(X, y)

Následně spočítáme predikci modelu, tj. vlastně přímku s minimálními možnými odchylkami od vstupních bodů:

# predikce modelu
y_pred = lr.predict(X)
 
# výpis vypočtených koeficientů modelu
print("Coefficients: \n", lr.coef_)
print("Intercept: \n", lr.intercept_)

Skript, jehož zdrojový kód je zde zobrazen, navíc body i predikci modelu (přímku) vykreslí:

import numpy as np
import matplotlib.pyplot as plt
 
from sklearn import linear_model
 
# počet vzorků ve vektorech x i y
VALUES = 50
 
# x je vektor
x = np.linspace(0, 10, VALUES)
 
# y je vektor
y = np.linspace(-1, 1, VALUES) + 0.5*np.random.rand(VALUES)
 
# převod vektoru na 2D matici
X = x.reshape(-1, 1)
 
# tvar matice X a vektoru y
print("X shape:", X.shape)
print("y shape:", y.shape)
 
# konstrukce modelu
lr = linear_model.LinearRegression()
 
# trénink modelu (X musí být maticí)
lr.fit(X, y)
 
# predikce modelu
y_pred = lr.predict(X)
 
# výpis vypočtených koeficientů modelu
print("Coefficients: \n", lr.coef_)
print("Intercept: \n", lr.intercept_)
 
# vykreslení výsledku
plt.scatter(x, y, color="black", s=2)
plt.plot(x, y_pred, color="blue", linewidth=2)
 
# titulek grafu
plt.title("Linear regression")
 
# osy
plt.xticks()
plt.yticks()
 
# ulozeni diagramu do souboru
plt.savefig("112.png")
 
# zobrazeni diagramu
plt.show()

Výsledkem by měl být následující graf ukazující, jakým způsobem došlo k proložení bodů v rovině přímkou:

Obrázek 1: Proložení bodů v rovině přímkou.

Současně se vypíšou parametry přímky, což jsou vlastně informace, které se model naučil:

X shape: (50, 1)
y shape: (50,)
Coefficients:
 [0.19903235]
Intercept:
 -0.7268848393877398

V tomto případě má přímka směrnici 0,199 a posun –0,72688…, její rovnice je tedy:

y = 0,199x - 0,72688

Ve skutečnosti není nutné, aby x-ové souřadnice bodů byly od sebe vzdáleny o konstantní hodnotu. Namísto:

# x je vektor
x = np.linspace(0, 10, VALUES)

můžeme přidat nějakou (pseuodo)náhodnou hodnotu ke všem souřadnicím:

# x je vektor
x = np.linspace(0, 10, VALUES) + 0.5*np.random.rand(VALUES)

Výsledek může vypadat následovně:

X shape: (50, 1)
y shape: (50,)
Coefficients:
 [0.19975871]
Intercept:
 -0.8328002402028932

Obrázek 2: Proložení bodů v rovině přímkou, přičemž x-ové i y-ové souřadnice bodů obecně neleží na pravidelné mřížce.

3. Vliv hyperparametru fit_intercept na výpočet směrnice a posunu přímky

Při konstrukci modelu pro lineární regresi je možné zvolit hyperparametr fit_intercept, přesněji řečeno povolit či zakázat výpočet posunu přímky (nebo podobného objektu ve více dimenzích). Interně totiž model při predikci vyhodnocuje tento výraz:

y(w, x) = w0 + w1 x1 + w2 x2 + … + wp xp

Přičemž člen w0 může být buď nulový nebo vypočten při tréninku modelu. A právě vynucení toho, aby byl w0 nulový, řídíme hyperparametrem fit_intercept:

# konstrukce modelu
lr = linear_model.LinearRegression(fit_intercept=False)
Poznámka: vektor w=(w1, … wp) je po tréninku modelu uložen do atributu coef_, zatímco hodnota členu w0 je dostupná v atributu intercept_.

4. Lineární regrese při vynucení w0=0 pro obecná data

Pokusme se nyní o natrénování modelu pro lineární regresi, přičemž si vynutíme, aby byl posun výsledné přímky nulový, tj. aby platilo w0=0. Použijeme tedy hyperparametr fit_intercept nastavený explicitně na hodnotu False:

import numpy as np
import matplotlib.pyplot as plt
 
from sklearn import linear_model
 
# počet vzorků ve vektorech x i y
VALUES = 50
 
# x je vektor
x = np.linspace(0, 10, VALUES)
 
# y je vektor
y = np.linspace(-1, 1, VALUES) + 0.5*np.random.rand(VALUES)
 
# převod vektoru na 2D matici
X = x.reshape(-1, 1)
 
# tvar matice X a vektoru y
print("X shape:", X.shape)
print("y shape:", y.shape)
 
# konstrukce modelu
lr = linear_model.LinearRegression(fit_intercept=False)
 
# trénink modelu (X musí být maticí)
lr.fit(X, y)
 
# predikce modelu
y_pred = lr.predict(X)
 
# výpis vypočtených koeficientů modelu
print("Coefficients: \n", lr.coef_)
print("Intercept: \n", lr.intercept_)
 
# vykreslení výsledku
plt.scatter(x, y, color="black", s=2)
plt.plot(x, y_pred, color="blue", linewidth=2)
 
# titulek grafu
plt.title("Linear regression")
 
# osy
plt.xticks()
plt.yticks()
 
# ulozeni diagramu do souboru
plt.savefig("113.png")
 
# zobrazeni diagramu
plt.show()

Z výstupu zobrazeného skriptem je patrné, že se změnila směrnice přímky a současně je její posun nulový (což jsme požadovali):

X shape: (50, 1)
y shape: (50,)
Coefficients:
 [0.08292883]
Intercept:
 0.0

V tomto případě je tedy přímka určená rovnici:

y = 0,08292883x

Z vykresleného grafu je navíc patrné, že model nedokázal proložit body vhodnou přímkou, protože byl omezen jejím nulovým posunem:

Obrázek 3: Proložení bodů v rovině přímkou, která prochází počátkem souřadného systému.

Poznámka: to je logický důsledek našeho omezení, které je určeno pouze pro ty případy, kdy očekávaná přímka skutečně má procházet počátkem souřadné soustavy (což většinou znamená nutnost předzpracování dat). V našem případě tato podmínka nebyla dodržena a proto by takto natrénovaný model při reálném použití vykazoval velké chyby.

5. Lineární regrese při vynucení w0=0 v případě, že vstupní body obsahují počátek souřadného systému

V případě, že vstupní body tvoří shluk, který prochází (v blízkosti) počátku souřadného systému, můžeme se pokusit o vynucení w0=0, tedy toho, aby výsledná přímka procházela přesně středem souřadného systému.

Příklad úpravy obsahu vektorů x a y:

# x je vektor
x = np.linspace(0, 10, VALUES)

# y je vektor
y = np.linspace(0, 2, VALUES) + 0.5*np.random.rand(VALUES)

nebo ještě lépe; zajistíme, aby byly body ve vektoru y umístěny okolo ideální hodnoty symetricky:

# x je vektor
x = np.linspace(0, 10, VALUES)
 
# y je vektor
y = np.linspace(0, 2, VALUES) + 0.5*np.random.rand(VALUES) - 0.25

Upravený skript vypadá následovně:

import numpy as np
import matplotlib.pyplot as plt
 
from sklearn import linear_model
 
# počet vzorků ve vektorech x i y
VALUES = 50
 
# x je vektor
x = np.linspace(0, 10, VALUES)
 
# y je vektor
y = np.linspace(0, 2, VALUES) + 0.5*np.random.rand(VALUES)
 
# převod vektoru na 2D matici
X = x.reshape(-1, 1)
 
# tvar matice X a vektoru y
print("X shape:", X.shape)
print("y shape:", y.shape)
 
# konstrukce modelu
lr = linear_model.LinearRegression(fit_intercept=False)
 
# trénink modelu (X musí být maticí)
lr.fit(X, y)
 
# predikce modelu
y_pred = lr.predict(X)
 
# výpis vypočtených koeficientů modelu
print("Coefficients: \n", lr.coef_)
print("Intercept: \n", lr.intercept_)
 
# vykreslení výsledku
plt.scatter(x, y, color="black", s=2)
plt.plot(x, y_pred, color="blue", linewidth=2)
 
# titulek grafu
plt.title("Linear regression")
 
# osy
plt.xticks()
plt.yticks()
 
# ulozeni diagramu do souboru
plt.savefig("114.png")
 
# zobrazeni diagramu
plt.show()

Výsledky mohou vypadat následovně.

Nesymetrický případ:

X shape: (50, 1)
y shape: (50,)
Coefficients:
 [0.23191679]
Intercept:
 0.0

Obrázek 4: Nesymetrický případ.

Symetrický případ:

X shape: (50, 1)
y shape: (50,)
Coefficients:
 [0.19996755]
Intercept:
 0.0

Obrázek 5: Symetrický případ.

Poznámka: ve druhém případě dostaneme téměř očekávanou hodnotu směrnice = 2/10 = 0,2.

6. Model lineární regrese pro větší množství předpovídaných hodnot

Předchozí trojice demonstračních příkladů ukazovala to nejjednodušší použití modelu lineární regrese, konkrétně případ, kdy vstupními hodnotami (atributy, proměnnými) je jednorozměrný vektor a pro každou vstupní hodnotu dostaneme jedinou hodnotu výstupní. Ovšem model lineární regrese je ve skutečnosti mnohem univerzálnější, což si ostatně ukážeme v navazujících kapitolách. Nejdříve si ukážeme, jak dokáže model lineární regrese předpovídat větší množství hodnot. Technicky to znamená, že y (očekávané, resp. predikované hodnoty) již nebude jednorozměrným vektorem, ale dvourozměrnou maticí, přičemž počet sloupců této matice odpovídá počtu předpovídaných hodnot.

Poznámka: zajímavé je, že vlastní programový kód se prakticky nezmění, pouze se změní tvar (shape) hodnot, s nimiž se pracuje.

7. Model předpovídající pro každou vstupní hodnotu dvě výstupní hodnoty (odpovědi)

Vyzkoušejme si nyní zkonstruovat model, který na základě jediné vstupní hodnoty předpoví dvě výstupní hodnoty (tedy odpovědi). Model tedy budeme muset natrénovat tak, že mu namísto vektoru y předáme matici Y obsahující dva sloupce očekávaných odpovědí. Například:

# Y je matice vytvořená ze dvou vektorů
y1 = np.linspace(-1, 1, VALUES) + 0.5*np.random.rand(VALUES)
y2 = np.linspace(1, -1, VALUES) + 0.5*np.random.rand(VALUES)
 
# konstrukce matice se dvěma sloupci
Y= np.column_stack((y1, y2))
Poznámka: povšimněte si, že očekávané odpovědi opět tvoří body v rovině, ovšem body [x, y1n] jsou odlišné a nezávislé od bodů [x, y2n].

Skript po svém spuštění vypíše parametry obou přímek a samozřejmě provede vizualizaci do dvou nezávislých grafů:

import numpy as np
import matplotlib.pyplot as plt
 
from sklearn import linear_model
 
# počet vzorků ve vektorech x i y
VALUES = 50
 
# x je vektor
x = np.linspace(0, 10, VALUES)
 
# Y je matice vytvořená ze dvou vektorů
y1 = np.linspace(-1, 1, VALUES) + 0.5*np.random.rand(VALUES)
y2 = np.linspace(1, -1, VALUES) + 0.5*np.random.rand(VALUES)
 
# konstrukce matice se dvěma sloupci
Y= np.column_stack((y1, y2))
 
# převod vektoru na 2D matici
X = x.reshape(-1, 1)
 
# tvar matic X a Y
print("X shape:", X.shape)
print("Y shape:", Y.shape)
 
# konstrukce modelu
lr = linear_model.LinearRegression()
 
# trénink modelu
lr.fit(X, Y)
 
# predikce modelu
y_pred = lr.predict(X)
 
# výpis vypočtených koeficientů modelu
print("Coefficients: \n", lr.coef_)
print("Intercept: \n", lr.intercept_)
 
for dimension in range(0, 2):
    # vykreslení výsledku
    plt.scatter(x, Y[:, dimension], color="black", s=2)
    plt.plot(x, y_pred[:, dimension], color="blue", linewidth=2)
 
    # titulek grafu
    plt.title(f"Linear regression in dimension {dimension}")
 
    # osy
    plt.xticks()
    plt.yticks()
 
    # ulozeni diagramu do souboru
    plt.savefig(f"115_{dimension}.png")
 
    # zobrazeni diagramu
    plt.show()
 
    # druhy diagram
    plt.close()

Vykreslené obrázky přesně odpovídají našim předpokladům, tj. že každá z přímek bude interpolovat jednu sadu bodů:

Obrázek 6: Interpolace bodů [x, y1n] přímkou.

Obrázek 7: Interpolace bodů [x, y2n] odlišnou přímkou.

Je vhodné se podívat i na to, jakým způsobem jsou zobrazeny koeficienty obou přímek. Povšimněte si, že koeficienty nejsou v tomto případě tvořeny vektorem, ale dvourozměrnou maticí (i když tato matice obsahuje dva prvky). Tím odlišíme koeficienty jiného útvaru (roviny atd.) od koeficientů dvou přímek:

X shape: (50, 1)
Y shape: (50, 2)
Coefficients:
 [[ 0.20951354]
 [-0.20570636]]
Intercept:
 [-0.8033512   1.26249794]

Jedná se tedy o dvě přímky s rovnicemi:

y1 = 0.20951354*x - 0,8033512
y2 = -0.20570636*x + 1,26249794

což zhruba odpovídá očekávanému výsledku se směrnicemi 2/10 a –2/10.

8. Lineární regrese a proložení bodů rovinou

Připomeňme si výraz, který model lineární regrese interně používá pro předpovědi prováděné na základě zapamatovaného vektoru w:

y(w, x) = w0 + w1 x1 + w2 x2 + … + wp xp

Ovšem jednotlivé členy nemusí být skalárními hodnotami, ale může se opět jednat o vektory. To vlastně znamená, že jednotlivé hodnoty xn mohou být vícerozměrné. V praxi to znamená, že se můžeme pokusit proložit body v prostoru (již ne v rovině). Tentokrát však budeme prokládat nikoli přímkou, ale rovinou. A právě tento postup si ukážeme v navazujících kapitolách. Nejprve si však musíme ukázat (resp. připomenout) některé operace, které lze provádět v knihovně NumPy: vygenerování souřadné mřížky atd.

9. Konstrukce matice obsahující souřadnice bodů v mřížce

Připomeňme si, že pro trénink modelu potřebujeme mít k dispozici matici X, která obsahuje jednotlivé záznamy, na kterých se bude model trénovat. Každý záznam může mít více položek, tj. počet sloupců matice určuje i počet atributů, na kterých se model učí. Pro naši lineární interpolaci rovinou budeme potřebovat vytvořit matici se dvěma sloupci, která bude v prvním sloupci obsahovat x-ové souřadnice bodů a ve druhém sloupci souřadnice y-ové. Takovou matici můžeme vytvořit transformací matic s mřížkou souřadnic – jedna matice obsahuje x-ové souřadnice v mřížce, druhá matice souřadnice y-ové (výsledek operace meshgrid). Tyto matice „zploštíme“ do dvojice vektorů a dva výsledné vektory spojíme do nové dvourozměrné matice se dvěma sloupci. Zní to složitě? Podívejme se na celý postup:

import numpy as np
 
# počet vzorků v mřížce
VALUES = 5
 
# X je matice vytvořená z mřížky
# dvojice vektorů pro konstrukci mřížky
x1 = np.linspace(0, 100, VALUES)
x2 = np.linspace(0, 100, VALUES)
 
print("x1:", x1)
print("x2:", x2)
print()
 
# konstrukce mřížky
grid = np.meshgrid(x1, x2)
 
print("grid #1:\n", grid[0])
print()
print("grid #2:\n", grid[1])
print()
 
# změna tvaru na matici se dvěma sloupci
X = np.vstack([grid[0].flatten(), grid[1].flatten()]).T
 
print("X shape:", X.shape)
print(X)
print()
 
# y je vektor
y = (grid[0] + grid[1]).flatten()
 
print("y shape:", y.shape)
print(y)

Jednotlivé kroky budou více pochopitelné při pohledu na výstup skriptu.

Vstupní vektory x1 a x2 s hodnotami na osách souřadného systému:

x1: [  0.  25.  50.  75. 100.]
x2: [  0.  25.  50.  75. 100.]

Operací meshgrid vzniknou dvě matice, první s x1-ovými body v mřížce, druhá s body x2-ovými:

grid #1:
 [[  0.  25.  50.  75. 100.]
 [  0.  25.  50.  75. 100.]
 [  0.  25.  50.  75. 100.]
 [  0.  25.  50.  75. 100.]
 [  0.  25.  50.  75. 100.]]
 
grid #2:
 [[  0.   0.   0.   0.   0.]
 [ 25.  25.  25.  25.  25.]
 [ 50.  50.  50.  50.  50.]
 [ 75.  75.  75.  75.  75.]
 [100. 100. 100. 100. 100.]]

Po zploštění těchto matic do vektorů a spojení vektorů do matice dostaneme matici, v níž každý řádek obsahuje souřadnice v prvních dvou souřadných osách:

X shape: (25, 2)
[[  0.   0.]
 [ 25.   0.]
 [ 50.   0.]
 [ 75.   0.]
 [100.   0.]
 [  0.  25.]
 [ 25.  25.]
 [ 50.  25.]
 [ 75.  25.]
 [100.  25.]
 [  0.  50.]
 [ 25.  50.]
 [ 50.  50.]
 [ 75.  50.]
 [100.  50.]
 [  0.  75.]
 [ 25.  75.]
 [ 50.  75.]
 [ 75.  75.]
 [100.  75.]
 [  0. 100.]
 [ 25. 100.]
 [ 50. 100.]
 [ 75. 100.]
 [100. 100.]]

A vektor y obsahuje souřadnice bodů ve třetí ose:

y shape: (25,)
[  0.  25.  50.  75. 100.  25.  50.  75. 100. 125.  50.  75. 100. 125.
 150.  75. 100. 125. 150. 175. 100. 125. 150. 175. 200.]

10. Proložení bodů v prostoru rovinou

Nyní se již můžeme pokusit o proložení bodů, které leží v trojrozměrném prostoru, rovinou. x-ové a y-ové souřadnice bodů tvoří pravidelnou mřížku, z-ová souřadnice se mění podle zadaného vzorce (a později se bude měnit náhodně, resp. pseudonáhodně). Následně natrénujeme model takovým způsobem, aby tyto body proložil rovinou:

import numpy as np
import matplotlib.pyplot as plt
 
from sklearn import linear_model
 
# počet vzorků v mřížce
VALUES = 20
 
# X je matice vytvořená z mřížky
# dvojice vektorů pro konstrukci mřížky
x1 = np.linspace(1, 100, VALUES)
x2 = np.linspace(1, 100, VALUES)
 
# konstrukce mřížky
grid = np.meshgrid(x1, x2)
 
# změna tvaru na matici se dvěma sloupci
X = np.vstack([grid[0].flatten(), grid[1].flatten()]).T
 
# y je vektor
y = (grid[0] + grid[1]).flatten()
 
# tvar matice X a vektoru y
print("X shape:", X.shape)
print("y shape:", y.shape)
 
# konstrukce modelu
lr = linear_model.LinearRegression()
 
# trénink modelu
lr.fit(X, y)
 
# predikce modelu
y_pred = lr.predict(X).reshape((VALUES, VALUES))
print(y_pred)
 
# výpis vypočtených koeficientů modelu
print("Coefficients: \n", lr.coef_)
print("Intercept: \n", lr.intercept_)
 
# vykreslení výsledku do 3D grafu
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(projection='3d')
 
# body ze vstupní datové sady
ax.scatter(X[:, 0], X[:, 1], y, color="black", s=2)
 
# výsledkem modelu je rovina
ax.plot_surface(grid[0], grid[1], y_pred, alpha = 0.5)
 
# ulozeni diagramu do souboru
plt.savefig("117_.png")
 
# zobrazeni diagramu
plt.show()

Podívejme se na výsledky:

Coefficients:
 [1. 1.]
Intercept:
 -2.842170943040401e-14

Koeficienty jsou uloženy jako jednorozměrné pole a tedy představují rovnici roviny ve tvaru:

z = 1x + 1y - 2.84...

ovšem posun je prakticky nulový:

z = x + y

Vizuálně vypadá výsledek následovně:

Obrázek 8: Výchozí pohled.

Obrázek 9: Pohled zboku – skutečně se jedná o rovinu.

Obrázek 10: Pohled z jiného boku – skutečně se jedná o rovinu.

Obrázek 11: Půdorysný pohled ukazující, jak tvoří body pravidelnou mřížku v rovině x-y.

11. Proložení rovinou při přidání náhodnosti do pozic bodů v prostoru

Nyní k výšce bodů přidáme náhodnou hodnotu, takže již všechny body nebudou ležet v jedné rovině:

# y je vektor
y = (grid[0] + grid[1]).flatten() + 50*np.random.rand(VALUES**2)

Znovu provedeme stejné operace, jako tomu bylo v předchozí kapitole; včetně zobrazení proložení bodů rovinou:

import numpy as np
import matplotlib.pyplot as plt
 
from sklearn import linear_model
 
# počet vzorků v mřížce
VALUES = 20
 
# X je matice vytvořená z mřížky
# dvojice vektorů pro konstrukci mřížky
x1 = np.linspace(1, 100, VALUES)
x2 = np.linspace(1, 100, VALUES)
 
# konstrukce mřížky
grid = np.meshgrid(x1, x2)
 
# změna tvaru na matici se dvěma sloupci
X = np.vstack([grid[0].flatten(), grid[1].flatten()]).T
 
# y je vektor
y = (grid[0] + grid[1]).flatten() + 50*np.random.rand(VALUES**2)
 
# tvar matice X a vektoru y
print("X shape:", X.shape)
print("y shape:", y.shape)
 
# konstrukce modelu
lr = linear_model.LinearRegression()
 
# trénink modelu
lr.fit(X, y)
 
# predikce modelu
y_pred = lr.predict(X).reshape((VALUES, VALUES))
print(y_pred)
 
# výpis vypočtených koeficientů modelu
print("Coefficients: \n", lr.coef_)
print("Intercept: \n", lr.intercept_)
 
# vykreslení výsledku do 3D grafu
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(projection='3d')
 
# body ze vstupní datové sady
ax.scatter(X[:, 0], X[:, 1], y, color="black", s=2)
 
# výsledkem modelu je rovina
ax.plot_surface(grid[0], grid[1], y_pred, alpha = 0.5)
 
# ulozeni diagramu do souboru
plt.savefig("118_.png")
 
# zobrazeni diagramu
plt.show()

Obrázek 12: Výchozí pohled.

Obrázek 13: Pohled zboku – skutečně se jedná o rovinu, ovšem body jsou umístěny okolo ní, nikoli přímo na rovině.

Obrázek 14: Pohled z jiného boku – skutečně se jedná o rovinu.

Obrázek 15: Pohled ukazující, jak tvoří body pravidelnou mřížku v rovině x-y.

12. Kombinace předchozích příkladů: přechod z roviny do prostoru a více sad očekávaných výsledků

V předchozích demonstračních příkladech jsme si ukázali dvě možnosti poskytované modelem pro provádění lineární regrese. Jednalo se o přechod z roviny (známé hodnoty x, neznámé hodnoty y) do prostoru (známé hodnoty [x, y], neznámé hodnoty z) a taktéž o podporu více „sloupců“ neznámých hodnot, což znamená, že model bylo možné natrénovat tak, že interně obsahoval informace o několika přímkách, každou pro jiný sloupec neznámých hodnot. Nyní oba tyto koncepty v rámci dalšího textu zkombinujeme a ukážeme si, jak lze realizovat trénink modelu, který bude prokládat dvě sady bodů v prostoru, a to pochopitelně nikoli přímkami, ale rovinami. I tím se ukazuje všestrannost a univerzálnost zdánlivě triviálního modelu pro lineární regresi.

13. Proložení dvou sad bodů dvěma nezávislými rovinami

Jak bylo řečeno v předchozí kapitole, ukážeme si proložení dvou sad bodů (v prostoru) dvěma nezávislými rovinami. Zajímat nás bude jak vizuální výsledek, tak i způsob uložení koeficientů těchto dvou rovin v interní paměti (atributech) modelu.

Obě sady bodů budou mít stejné x-ové a y-ové souřadnice tvořící (po projekci do roviny x-y) pravidelnou mřížku:

# X je matice vytvořená z mřížky
# dvojice vektorů pro konstrukci mřížky
x1 = np.linspace(1, 100, VALUES)
x2 = np.linspace(1, 100, VALUES)
 
# konstrukce mřížky
grid = np.meshgrid(x1, x2)
 
# změna tvaru na matici se dvěma sloupci
X = np.vstack([grid[0].flatten(), grid[1].flatten()]).T

z-ové souřadnice bodů (zde ukládané do matice pojmenované Y, což je možná poněkud matoucí) budou nezávislé a budou tvořit dva sloupce hodnot, na které se model trénuje:

# Y je matice vytvořená ze dvou vektorů
y1 = (grid[0] + grid[1]).flatten() + 0*np.random.rand(VALUES**2)
y2 = (grid[0] - grid[1]).flatten() + 0*np.random.rand(VALUES**2)
 
# konstrukce matice se dvěma sloupci
Y= np.column_stack((y1, y2))

Celý skript, i s vykreslením příslušné dvojice diagramů, vypadá následovně:

import numpy as np
import matplotlib.pyplot as plt
 
from sklearn import linear_model
 
# počet vzorků v mřížce
VALUES = 20
 
# X je matice vytvořená z mřížky
# dvojice vektorů pro konstrukci mřížky
x1 = np.linspace(1, 100, VALUES)
x2 = np.linspace(1, 100, VALUES)
 
# konstrukce mřížky
grid = np.meshgrid(x1, x2)
 
# změna tvaru na matici se dvěma sloupci
X = np.vstack([grid[0].flatten(), grid[1].flatten()]).T
 
# Y je matice vytvořená ze dvou vektorů
y1 = (grid[0] + grid[1]).flatten() + 0*np.random.rand(VALUES**2)
y2 = (grid[0] - grid[1]).flatten() + 0*np.random.rand(VALUES**2)
 
# konstrukce matice se dvěma sloupci
Y= np.column_stack((y1, y2))
 
# tvar matic X a Y
print("X shape:", X.shape)
print("Y shape:", Y.shape)
 
# konstrukce modelu
lr = linear_model.LinearRegression()
 
# trénink modelu
lr.fit(X, Y)
 
# predikce modelu
y_pred = lr.predict(X).reshape((VALUES, VALUES, 2))
 
# výpis vypočtených koeficientů modelu
print("Coefficients: \n", lr.coef_)
print("Intercept: \n", lr.intercept_)
 
for dimension in range(0, 2):
    # vykreslení výsledku do 3D grafu
    fig = plt.figure(figsize=(8, 8))
    ax = fig.add_subplot(projection='3d')
 
    # body ze vstupní datové sady
    ax.scatter(X[:, 0], X[:, 1], Y[:, dimension], color="black", s=2)
 
    # výsledkem modelu je rovina
    ax.plot_surface(grid[0], grid[1], y_pred[:, :, dimension], alpha = 0.5)
 
    # ulozeni diagramu do souboru
    plt.savefig(f"119_{dimension}.png")
 
    # zobrazeni diagramu
    plt.show()

Podívejme se nejdříve na hodnoty, které model získal tréninkem:

X shape: (400, 2)
Y shape: (400, 2)
Coefficients:
 [[ 1.  1.]
 [ 1. -1.]]
Intercept:
 [-2.84217094e-14 -3.25739435e-14]

Koeficienty tvoří matici 2×2 hodnoty, z nichž lze odvodit rovnice dvou rovin:

z1 = 1x + 1y = x + y
z2 = 1x - 1y = x - y

To přesně odpovídá tomu, jak jsme body generovali.

Vizuální výsledek naznačuje orientaci a posun obou rovin v prostoru:

Obrázek 16: Orientace a posun první roviny.

Obrázek 17: Orientace a posun druhé roviny.

14. Přidání náhodné výšky bodů v datové sadě

V dalším kroku skript z předchozí kapitoly nepatrně upravíme, a to takovým způsobem, že body z obou sad posuneme o náhodnou hodnotu (pro jednoduchost jen ve směru osy z):

# Y je matice vytvořená ze dvou vektorů
y1 = (grid[0] + grid[1]).flatten() + 50*np.random.rand(VALUES**2)
y2 = (grid[0] - grid[1]).flatten() + 50*np.random.rand(VALUES**2)
 
# konstrukce matice se dvěma sloupci
Y= np.column_stack((y1, y2))

Úplný zdrojový kód takto upraveného skriptu bude vypadat následovně:

import numpy as np
import matplotlib.pyplot as plt
 
from sklearn import linear_model
 
# počet vzorků v mřížce
VALUES = 20
 
# X je matice vytvořená z mřížky
# dvojice vektorů pro konstrukci mřížky
x1 = np.linspace(1, 100, VALUES)
x2 = np.linspace(1, 100, VALUES)
 
# konstrukce mřížky
grid = np.meshgrid(x1, x2)
 
# změna tvaru na matici se dvěma sloupci
X = np.vstack([grid[0].flatten(), grid[1].flatten()]).T
 
# Y je matice vytvořená ze dvou vektorů
y1 = (grid[0] + grid[1]).flatten() + 50*np.random.rand(VALUES**2)
y2 = (grid[0] - grid[1]).flatten() + 50*np.random.rand(VALUES**2)
 
# konstrukce matice se dvěma sloupci
Y= np.column_stack((y1, y2))
 
# tvar matic X a Y
print("X shape:", X.shape)
print("Y shape:", Y.shape)
 
# konstrukce modelu
lr = linear_model.LinearRegression()
 
# trénink modelu
lr.fit(X, Y)
 
# predikce modelu
y_pred = lr.predict(X).reshape((VALUES, VALUES, 2))
 
# výpis vypočtených koeficientů modelu
print("Coefficients: \n", lr.coef_)
print("Intercept: \n", lr.intercept_)
 
for dimension in range(0, 2):
    # vykreslení výsledku do 3D grafu
    fig = plt.figure(figsize=(8, 8))
    ax = fig.add_subplot(projection='3d')
 
    # body ze vstupní datové sady
    ax.scatter(X[:, 0], X[:, 1], Y[:, dimension], color="black", s=2)
 
    # výsledkem modelu je rovina
    ax.plot_surface(grid[0], grid[1], y_pred[:, :, dimension], alpha = 0.5)
 
    # ulozeni diagramu do souboru
    plt.savefig(f"120_{dimension}.png")
 
    # zobrazeni diagramu
    plt.show()

Vizuální výsledky ukazují, že model skutečně dokázal proložit i (pseudo)náhodně rozmístěné body pomocí přímek:

Obrázek 18: Orientace a posun první roviny prokládající (pseudo)náhodně uspořádané body.

Obrázek 19: Orientace a posun druhé roviny prokládající (pseudo)náhodně uspořádané body.

15. Polynomická regrese

V mnoha případech je namísto modelu s interní lineární závislostí (nebo, jak již víme, s více lineárními závislostmi) mezi vstupními daty a očekávanými výsledky výhodnější použít polynom, resp. polynomy vyššího stupně. I to nám knihovna scikit-learn umožňuje, a to z toho důvodu, že model pro lineární regresi může být natrénován tak, že odvodí parametry polynomu/polynomů – z hlediska modelu totiž není rozdíl mezi vstupními daty, které prokládá lineárním objektem a parametry (polynomu), které opět prokládá tak, že volí váhy jednotlivých členů. Ovšem podobným způsobem lze zajistit například proložení dat sinusovkou atd.

Poznámka: jedná se vlastně o obecný případ lineární regrese, kdy se jedná o lineární kombinaci funkcí, v tomto případě funkcí typu xn pro nějaké omezené n. Hodnotu n se přitom snažíme volit co nejmenší, aby bylo možné z nalezených koeficientů odvodit, co se vlastně model naučil. Na druhou stranu musí být n dostatečně vysoké na to, aby model dokázal odhadovat výsledky.

16. Příklad jednoduché polynomické regrese

Podívejme se nyní – opět jen pro zopakování – na příklad realizace polynomické regrese, konkrétně pro proložení bodů v rovině křivkou určenou polynomem druhého stupně, jinými slovy parabolou. Model se tedy bude snažit o nalezení vah členů polynomu tak, aby průměr čtverců chyb byl co nejmenší:

import numpy as np
import matplotlib.pyplot as plt
 
from sklearn import linear_model
from sklearn.preprocessing import PolynomialFeatures
 
# počet vzorků ve vektorech x i y (delitelne tremi)
VALUES = 120
 
# x je vektor
x = np.linspace(0, 10, VALUES)
 
# mensi vektory pro slozeni y
y1 = 0.5*np.random.rand(VALUES//3)
y2 = 1 + 0.5*np.random.rand(VALUES//3)
y3 = 0.5*np.random.rand(VALUES//3)
 
# y je vektor
y = np.concatenate((y1, y2, y3))
 
# převod vektoru na 2D matici
X = x.reshape(-1, 1)
 
# tvar matice X a vektoru y
print("X shape:", X.shape)
print("y shape:", y.shape)
 
degree = 2
 
# konstrukce modelu
pr = linear_model.LinearRegression(fit_intercept=False)
 
poly = PolynomialFeatures(degree=degree)
 
poly_features = poly.fit_transform(X)
 
# trénink modelu (X musí být maticí)
pr.fit(poly_features, y)
 
# predikce modelu
y_pred = pr.predict(poly_features)
 
# výpis vypočtených koeficientů modelu
print("Coefficients: \n", pr.coef_)
print("Intercept: \n", pr.intercept_)
 
# vykreslení výsledku
plt.scatter(x, y, color="black", s=2)
plt.plot(x, y_pred, color="blue", linewidth=2)
 
# titulek grafu
plt.title(f"Degree={degree}")
 
# osy
plt.xticks(())
plt.yticks(())
 
# ulozeni diagramu do souboru
plt.savefig("121.png")
 
# zobrazeni diagramu
plt.show()

Výsledek by měl vypadat následovně – křivka je zvolena takovým způsobem, aby byla chyba co nejmenší:

Obrázek 20: Aproximace polynomem druhého stupně.

Koeficienty paraboly:

Coefficients:
 [-0.12242606  0.43023016 -0.04299919]
Intercept:
 0.0

17. Proložení bodů v prostoru plochou prvního stupně (rovinou)

Nyní si skript z předchozí kapitoly rozšíříme takovým způsobem, že proložíme body v prostoru (nikoli již v rovině) plochou n-tého stupně, tedy rovinou (to již známe), paraboloidem atd. Nejprve začneme běžnou rovinou, kterou se budeme snažit proložit body, které leží na sedlové ploše (což zajisté není rovina):

degree = 1
 
poly = PolynomialFeatures(degree=degree)

Celý skript:

import numpy as np
import matplotlib.pyplot as plt
 
from sklearn import linear_model
from sklearn.preprocessing import PolynomialFeatures
 
# počet vzorků v mřížce
VALUES = 20
 
# X je matice vytvořená z mřížky
# dvojice vektorů pro konstrukci mřížky
x1 = np.linspace(1, 100, VALUES)
x2 = np.linspace(1, 100, VALUES)
 
# konstrukce mřížky
grid = np.meshgrid(x1, x2)
 
# změna tvaru na matici se dvěma sloupci
X = np.vstack([grid[0].flatten(), grid[1].flatten()]).T
 
# y je vektor
y = ((grid[0]-50) * (grid[1]-50)).flatten()
 
# tvar matice X a vektoru y
print("X shape:", X.shape)
print("y shape:", y.shape)
 
degree = 1
 
# konstrukce modelu
pr = linear_model.LinearRegression()
 
poly = PolynomialFeatures(degree=degree)
 
poly_features = poly.fit_transform(X)
 
# trénink modelu
pr.fit(poly_features, y)
 
# predikce modelu
y_pred = pr.predict(poly_features).reshape((VALUES, VALUES))
print(y_pred)
 
# výpis vypočtených koeficientů modelu
print("Coefficients: \n", pr.coef_)
print("Intercept: \n", pr.intercept_)
 
# vykreslení výsledku do 3D grafu
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(projection='3d')
 
# body ze vstupní datové sady
ax.scatter(X[:, 0], X[:, 1], y, color="black", s=2)
 
# výsledkem modelu je rovina
ax.plot_surface(grid[0], grid[1], y_pred, alpha = 0.5)
 
# ulozeni diagramu do souboru
plt.savefig("122.png")
 
# zobrazeni diagramu
plt.show()

Výsledek nebude příliš dobrý, což jsme ovšem očekávali:

Obrázek 21: Pokus o proložení bodů, které ve skutečnosti leží na sedlové ploše, rovinou.

Obrázek 22: Půdorysný pohled.

18. Proložení bodů v prostoru plochou druhého stupně

Aby byl výsledek uspokojující, použijeme plochu druhého stupně:

degree = 2
 
poly = PolynomialFeatures(degree=degree)

Celý skript vypadá následovně:

import numpy as np
import matplotlib.pyplot as plt
 
from sklearn import linear_model
from sklearn.preprocessing import PolynomialFeatures
 
# počet vzorků v mřížce
VALUES = 20
 
# X je matice vytvořená z mřížky
# dvojice vektorů pro konstrukci mřížky
x1 = np.linspace(1, 100, VALUES)
x2 = np.linspace(1, 100, VALUES)
 
# konstrukce mřížky
grid = np.meshgrid(x1, x2)
 
# změna tvaru na matici se dvěma sloupci
X = np.vstack([grid[0].flatten(), grid[1].flatten()]).T
 
# y je vektor
y = ((grid[0]-50) * (grid[1]-50)).flatten()
 
# tvar matice X a vektoru y
print("X shape:", X.shape)
print("y shape:", y.shape)
 
degree = 2
 
# konstrukce modelu
pr = linear_model.LinearRegression()
 
poly = PolynomialFeatures(degree=degree)
 
poly_features = poly.fit_transform(X)
 
# trénink modelu
pr.fit(poly_features, y)
 
# predikce modelu
y_pred = pr.predict(poly_features).reshape((VALUES, VALUES))
print(y_pred)
 
# výpis vypočtených koeficientů modelu
print("Coefficients: \n", pr.coef_)
print("Intercept: \n", pr.intercept_)
 
# vykreslení výsledku do 3D grafu
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(projection='3d')
 
# body ze vstupní datové sady
ax.scatter(X[:, 0], X[:, 1], y, color="black", s=2)
 
# výsledkem modelu je rovina
ax.plot_surface(grid[0], grid[1], y_pred, alpha = 0.5)
 
# ulozeni diagramu do souboru
plt.savefig("123.png")
 
# zobrazeni diagramu
plt.show()

Nyní již budou výsledky mnohem lepší (ideální):

Obrázek 23: Proložení bodů plochou druhého stupně.

Obrázek 24: Proložení bodů plochou druhého stupně.

Koeficienty určují váhy členů plochy určené polynomy druhého stupně:

Coefficients:
 [ 0.00000000e+00 -5.00000000e+01 -5.00000000e+01  3.55271368e-15
  1.00000000e+00  2.84217094e-14]
Intercept:
 2500.0000000000223

Přitom váhy jsou zapsány v pořadí:

y(w, x) = w0 + w1 x1 + w2 x2 + w3 x12 + w4 x1 x2 + w5 x22

Což po zaokrouhlení a dosazení odpovídá ploše:

bitcoin_skoleni

y(w, x) = 2500 -50x1 - 50x2 + x1x2
Poznámka: y značí výšku, tedy z-ovou souřadnici a x1 a x2 souřadnice x a y (což je matoucí, protože souřadnice jsou v prostoru zatímco model pracuje se vstupní a výstupní maticí s podobnými jmény).

19. Repositář s demonstračními příklady

Všechny demonstrační příklady využívající knihovnu Scikit-learn lze nalézt v repositáři https://github.com/tisnik/most-popular-python-libs. Následují odkazy na jednotlivé příklady i na (Jupyter) diáře s postupem výpočtů a analýz:

# Příklad Stručný popis Adresa příkladu
1 01_show_matrix.py kooperace mezi knihovnami Matplotlib a NumPy: vizualizace obsahu 2D matice https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/01_show_ma­trix.py
2 02_get_digits.py datová množina obsahující naskenované ručně napsané číslice https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/02_get_di­gits.py
3 03_get_features.py další atributy datové množiny, které použijeme při trénování https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/03_get_fe­atures.py
4 04_get_images.py přečtení a následné vykreslení jednotlivých ručně nakreslených číslic https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/04_get_i­mages.py
5 05_show_grayscale_matrix.py odstranění umělé aplikované barvové palety (obrázky ve stupních šedi) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/05_show_gra­yscale_matrix.py
6 06_grayscale_images.py vykreslení ručně nakreslených číslic ve formě obrázků ve stupních šedi https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/06_gra­yscale_images.py
7 07_multiplot.py rozdělení plochy grafu do oblastí; vykreslení více obrázků do jediného grafu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/07_mul­tiplot.py
8 08_model_preperation1.py obrázky s jejich ohodnocením https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/08_mo­del_preperation1.py
9 09_training_set.py příprava dat pro trénink https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/09_tra­ining_set.py
10 10_classification.py klasifikace obrázků https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/10_clas­sification.py
11 11_results.py vykreslení obrázků společně s jejich klasifikací https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/11_results.py
12 12_change_training_set.py změna poměru rozdělení dat na tréninkovou a testovací množinu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/12_chan­ge_training_set.py
       
13 13_blobs.py použití funkce make_blobs pro vygenerování sady bodů v rovině sdružených do oblastí https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/13_blobs.py
14 14_swap_coords.py úprava předchozího příkladu: prohození souřadnic na osách https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/14_swap_co­ords.py
15 15_blobs_scatter_plot.py základní podoba bodového diagramu (scatter plot) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/15_blob­s_scatter_plot.py
16 16_blobs_scatter_plot.py úprava bodového diagramu při zobrazení většího množství bodů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/16_blob­s_scatter_plot.py
17 17_colorized_blobs.py obarvení bodů podle oblastí https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/17_co­lorized_blobs.py
18 18_k-means.py základní použití algoritmu K-means pro clustering https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/18_k-means.py
19 19_combination.py zobrazení centroidů společně s původními body https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/19_com­bination.py
20 20_combinations.py vizualizace clusteringu původní množiny bodů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/20_com­binations.py
21 21_other_settings.py vizualizace clusteringu původní množiny bodů pro odlišnou množinu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/21_ot­her_settings.py
22 22_random_points.py clustering pro náhodná data https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/22_ran­dom_points.py
       
23 23_circles.py pseudonáhodné rozmístění bodů do kružnic, menší náhodnost výsledku https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/23_circles.py
24 24_more_noise_circles.py pseudonáhodné rozmístění bodů do kružnic, větší náhodnost výsledku https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/24_mo­re_noise_circles.py
25 25_moons.py pseudonáhodné rozmístění bodů do tvaru dvou půlměsíců, menší náhodnost https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/25_moons.py
26 26_more_noisy_moons.py pseudonáhodné rozmístění bodů do tvaru dvou půlměsíců, větší náhodnost https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/26_mo­re_noisy_moons.py
27 27_circles_kmeans.py výsledek clusteringu provedeného algoritmem K-means na „kružnice“ https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/27_cir­cles_kmeans.py
28 28_moons_kmeans.py výsledek clusteringu provedeného algoritmem K-means na „půlměsíce“ https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/28_mo­ons_kmeans.py
29 29_blobs_spectral_clustering.py spectral clustering pro body rozmístěné pomocí make_blobs https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/29_blob­s_spectral_clustering.py
30 30_circles_spectral_clustering.py spectral clustering pro body rozmístěné do kružnic https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/30_cir­cles_spectral_clustering.py
31 31_moons_spectral_clustering.py spectral clustering pro body rozmístěné do půlměsíců https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/31_mo­ons_spectral_clustering.py
32 32_moons_spectral_clustering_limits.py vyhledání limitů algoritmu spectral clustering https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/32_mo­ons_spectral_clustering_li­mits.py
       
33 33_particles_load.py načtení souřadnic částic uložených v souboru formátu CSV https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/33_par­ticles_load.py
       
34 34_lorenz_attractor.py zobrazení Lorenzova atraktoru formou bodů propojených úsečkami https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/34_lo­renz_attractor.py
35 35_lorenz_attractor_points.py Lorenzův atraktor vykreslený formou jednotlivých bodů s definovaným stylem zobrazení a velikostí stopy https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/35_lo­renz_attractor_points.py
36 36_blobs_3d.py vygenerování a zobrazení sady bodů v 3D prostoru https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/36_blob­s_3d.py
37 37_spread_blobs_3d.py vygenerování a zobrazení sady bodů v 3D prostoru, odlišné parametry při generování https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/37_spre­ad_blobs_3d.py
38 38_views.py různé pohledy na 3D graf https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/38_views.py
39 39_colorized_3d_blobs.py obarvení bodů v prostoru na základě vstupních dat https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/39_co­lorized_3d_blobs.py
40 40_kmeans_3d_blobs.py shluková analýza v 3D prostoru https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/40_kme­ans_3d_blobs.py
41 41_kmeans_spread_3d_blobs.py shluková analýza v 3D prostoru pro odlišnou množinu bodů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/41_kme­ans_spread_3d_blobs.py
42 42_kmeans_random_3d.py shluková analýza pro body rozmístěné zcela náhodně v omezeném prostoru https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/42_kme­ans_random_3d.py
       
43 43_speed_measurements.py benchmark pro postupně rostoucí počet bodů tvořících shluky https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/43_spe­ed_measurements.py
44 44_speed_measurements.py benchmark pro postupně rostoucí počet bodů rozmístěných náhodně https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/44_spe­ed_measurements.py
45 45_speed_measurements.py benchmark pro stále stejný počet bodů, u jejichž rozmístění v prostoru se používá stále větší směrodatná odchylka https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/45_spe­ed_measurements.py
       
46 46_iris_dataset.py načtení datové kolekce https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/46_i­ris_dataset.py
47 47_iris_description.py metadata o datové kolekci https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/47_i­ris_description.py
48 48_iris_data.py tvar dat – počet záznamů a počet proměnných https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/48_i­ris_data.py
49 49_iris_targets.py jména atributů, vztah mezi numerickou hodnotou atributu a jeho jménem https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/49_i­ris_targets.py
       
50 50_iris_scatter_plot1.py korelační diagram pro dvojici vybraných proměnných https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/50_i­ris_scatter_plot1.py
51 51_iris_scatter_plot2.py příprava pro tvorbu složitějších grafů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/51_i­ris_scatter_plot2.py
52 52_iris_mutliplot.py mřížka obsahující více korelačních diagramů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/52_i­ris_mutliplot.py
       
53 53_iris_histograms.py zobrazení základního histogramu pro data v sadě Iris https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/53_i­ris_histograms.py
54 54_iris_histograms.py úprava histogramu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/54_i­ris_histograms.py
       
55 55_pca.py analýza hlavních komponent (PCA), výsledek zobrazený v 2D grafu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/55_pca.py
56 56_pca_3d.py analýza hlavních komponent (PCA), výsledek zobrazený v 3D grafu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/56_pca_3d.py
57 57_kmeans.py základní shluková analýza https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/57_kmeans.py
58 58_multiple_kmeans.py větší množství výsledků shlukové analýzy pro různé atributy https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/58_mul­tiple_kmeans.py
59 59_kmeans_errors.py korektní a nekorektní výsledky základní shlukové analýzy https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/59_kme­ans_errors.py
       
60 60_basic_classifier.py aplikace jednoduchého modelu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/60_ba­sic_classifier.py
61 61_changed_model_parameters.py změna parametrů modelu pro zjištění druhů rostil https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/61_chan­ged_model_parameters.py
62 62_different_model.py použití odlišného modelu pro zjištění druhů rostlin https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/62_dif­ferent_model.py
       
63 63_verify_on_whole_data1.py otestování naučeného modelu s využitím tréninkových dat https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/63_ve­rify_on_whole_data1.py
64 64_verify_on_whole_data2.py využití funkce metrics.accuracy_score pro zjištění kvality modelu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/64_ve­rify_on_whole_data2.py
65 65_basic_comparison.py porovnání vlastností různých modelů (prozatím nekorektní řešení) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/65_ba­sic_comparison.py
66 66_training_testing_split1.py rozdělení datové sady na trénovací data a testovací data (základní varianta) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/66_tra­ining_testing_split1.py
67 67_training_testing_split2.py rozdělení datové sady na trénovací data a testovací data (náhodné rozdělení sady) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/67_tra­ining_testing_split2.py
68 68_training_testing_split3.py rozdělení datové sady na trénovací data a testovací data (využití vestavěné funkce) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/68_tra­ining_testing_split3.py
69 69_better_comparison.py vylepšené porovnání vlastností různých modelů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/69_bet­ter_comparison.py
70 70_multiple_runs.py vliv generátoru náhodných čísel na změřené výsledky https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/70_mul­tiple_runs.py
71 71_stable_multiple_runs.py generátor náhodných čísel a použití hodnoty random_state https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/71_sta­ble_multiple_runs.py
       
72 72_housings_dataset.py načtení datové sady California housings https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/72_hou­sings_dataset.py
73 73_housings_dataset_description.py metainformace o datové sadě California housings https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/73_hou­sings_dataset_description­.py
74 74_housings_data.py n-rozměrné pole s atributy jednotlivých domů/bloků https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/74_hou­sings_data.py
75 75_housings_targets.py jména atributů, ceny domů atd. https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/75_hou­sings_targets.py
76 76_housings_scatter_plot.py korelační diagram pro dvojici vybraných proměnných https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/76_hou­sings_scatter_plot.py
77 77_housings_mutliplot.py korelační diagram pro všechny kombinace dvojic proměnných https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/77_hou­sings_mutliplot.py
78 78_scatter.py dvourozměrné hodnoty reprezentované jako dvojice atributů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/78_scatter.py
79 79_linear_regression_gen_data.py model LinearRegression nad uměle vytvořenými daty https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/79_li­near_regression_gen_data.py
80 80_linear_regression_predictions.py predikce modelu provádějícího lineární regresi https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/80_li­near_regression_prediction­s.py
81 81_linear_regression_random_data.py chování modelu pro zcela náhodná data https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/81_li­near_regression_random_da­ta.py
82 82_linear_regression_housings.py model LinearRegression pro datovou sadu California housings https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/82_li­near_regression_housings.py
83 83_polynomial_regression_gen_data.py polynomiální regrese (základní příklad) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/83_po­lynomial_regression_gen_da­ta.py
84 84_polynomial_regression_housings.py polynomiální regrese a datová sada California housings, první příklad https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/84_po­lynomial_regression_housin­gs.py
85 85_polynomial_regression_housings2.py polynomiální regrese a datová sada California housings, druhý příklad https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/85_po­lynomial_regression_housin­gs2.py
86 86_polynomial_regression_housings3.py polynomiální regrese a datová sada California housings, třetí příklad https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/86_po­lynomial_regression_housin­gs3.py
87 87_linear_regression_errors.py výpočet chyby a skóre modelu lineární regrese https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/87_li­near_regression_errors.py
88 88_linear_regression_non_linear_data.py lineární regrese nad nelineárními daty https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/88_li­near_regression_non_linear_da­ta.py
89 89_polynomial_regression_error.py https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/89_po­lynomial_regression_error­.py
       
90 90_housings_prediction1.py regresní analýza nad daty California housings https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/90_hou­sings_prediction1.py
91 91_housings_prediction2.py korektní natrénování modelu pro regresi https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/91_hou­sings_prediction2.py
92 92_housings_prediction3.py omezení množství atributů (proměnných), na kterých je model natrénován https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/92_hou­sings_prediction3.py
93 93_housings_prediction_errors1.py chybně natrénovaný model při náhodné volbě dat https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/93_hou­sings_prediction_errors1.py
94 94_housings_prediction_errors2.py omezení atributů + chybně natrénovaný model https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/94_hou­sings_prediction_errors2.py
95 95_housings_histograms.py histogramy pro jednotlivé atributy (proměnné) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/95_hou­sings_histograms.py
96 96_housings_statistic.py statistické údaje pro jednotlivé atributy (proměnné) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/96_hou­sings_statistic.py
97 97_housings_statistic_normalized.py statistické údaje získané po normalizaci https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/97_hou­sings_statistic_normalized­.py
       
98 98_k_fold_help.py zobrazení nápovědy ke třídě s realizací k-foldingu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/98_k_fol­d_help.py
99 99_k_fold_old.py původní (nepodporovaná) varianta provedení k-foldingu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/99_k_fol­d_old.py
100 100_k_fold1.py interní chování algoritmu k-foldingu (základní parametry) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/100_k_fol­d1.py
101 101_k_fold2.py interní chování algoritmu k-foldingu (odlišné parametry) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/101_k_fol­d2.py
102 102_k_fold_selection.py k-folding a výběr dat pro otestování modelů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/102_k_fol­d_selection.py
103 103_average_score.py realizace výpočtu průměrného skóre pro otestování modelů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/103_a­verage_score.py
104 104_hyperparams_score.py změna hyperparametrů s výpočtem průměrného skóre (tabulka) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/104_hy­perparams_score.py
105 105_hyperparams_score_plot.py změna hyperparametrů s výpočtem průměrného skóre (graf) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/105_hy­perparams_score_plot.py
106 106_model_selection.py výběr nejlepšího modelu s využitím k-foldingu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/106_mo­del_selection.py
107 107_features_selection_basic.py výběr atributů (proměnných) pro trénink modelu (základní varianta) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/107_fe­atures_selection_basic.py
108 108_features_selection_iris.py výběr atributů (proměnných) pro trénink modelu (datová sada Iris) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/108_fe­atures_selection_iris.py
109 109_features_selection_houses.py výběr atributů (proměnných) pro trénink modelu (datová sada California Housings) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/109_fe­atures_selection_houses.py
110 110_best_features_selection_houses.py získání nejlepší sady atributů (proměnných) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/110_bes­t_features_selection_houses­.py
111 111_features_selection_graphical.py výběr atributů (proměnných) pro trénink modelu (datová sada Iris), grafický výstup https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/111_fe­atures_selection_graphical­.py
       
112 112_simplest_linear_regression.py lineární regrese bodů ležících v rovině https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/112_sim­plest_linear_regression.py
113 113_linear_regression_no_intercept.py lineární regrese při vynucení w0=0 pro obecná data https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/113_li­near_regression_no_intercep­t.py
114 114_linear_regression_from0_0.py lineární regrese při vynucení w0=0 v případě, že vstupní body obsahují počátek souřadného systému https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/114_li­near_regression_from0_0.py
115 115_linear_regression_multiple_y.py model předpovídající pro každou vstupní hodnotu dvě výstupní hodnoty (odpovědi) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/115_li­near_regression_multiple_y­.py
116 116_grid_operations.py konstrukce matice obsahující souřadnice bodů v mřížce https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/116_grid_o­perations.py
117 117_linear_regression_multiple_x.py proložení bodů v prostoru rovinou https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/117_li­near_regression_multiple_x­.py
118 118_linear_regression_multiple_x.py proložení bodů s náhodnou výškou rovinou https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/118_li­near_regression_multiple_x­.py
119 119_linear_regression_mul­tiple_x_and_y.py proložení dvou sad bodů dvojicí rovin https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/119_li­near_regression_multiple_x_an­d_y.py
120 120_linear_regression_mul­tiple_x_and_y.py proložení dvou sad bodů dvojicí rovin https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/120_li­near_regression_multiple_x_an­d_y.py
121 121_linear_regression_poly.py základní polynomická regrese https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/121_li­near_regression_poly.py
122 122_linear_regression_poly_mul­tiple_x.py polynomická regrese a body v prostoru, první příklad https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/122_li­near_regression_poly_multi­ple_x.py
123 123_linear_regression_poly_mul­tiple_x.py polynomická regrese a body v prostoru, druhý příklad https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/123_li­near_regression_poly_multi­ple_x.py

V repositáři nalezneme taktéž projektový soubor a Jupyter Notebook s vysvětlením, jak lze modely využít pro rozpoznávání obsahu rastrových obrázků:

# Příklad Stručný popis Adresa příkladu
1 pyproject.toml projektový soubor (pro PDM) se všemi závislostmi https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/py­project.toml
       
2 pdm.lock lock soubor s konkrétními verzemi všech přímých i tranzitivních závislostí https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/pdm.lock
       
3 Rozpoznání_obrazu_scikit-learn.ipynb Jupyter notebook s celým postupem https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/Roz­poznání_obrazu_scikit-learn.ipynb
       
4 particle_life.py emergence: příklad vzniku struktury https://github.com/tisnik/most-popular-python-libs/blob/master/particles/par­ticle_life.py

20. Odkazy na Internetu

  1. Shluková analýza (clustering) a knihovna Scikit-learn
    https://www.root.cz/clanky/shlukova-analyza-clustering-a-knihovna-scikit-learn/
  2. Shluková analýza (clustering) a knihovna Scikit-learn (2)
    https://www.root.cz/clanky/shlukova-analyza-clustering-a-knihovna-scikit-learn-2/
  3. Shluková analýza (clustering) a knihovna Scikit-learn (z plochy do 3D prostoru)
    https://www.root.cz/clanky/shlukova-analyza-clustering-a-knihovna-scikit-learn-z-plochy-do-3d-prostoru/
  4. Rozpoznávání obrázků knihovnou Scikit-learn: první kroky
    https://www.root.cz/clanky/roz­poznavani-obrazku-knihovnou-scikit-learn-prvni-kroky/
  5. scikit-learn: Machine Learning in Python
    https://scikit-learn.org/stable/index.html
  6. Sklearn-pandas
    https://github.com/scikit-learn-contrib/sklearn-pandas
  7. sklearn-xarray
    https://github.com/phausamann/sklearn-xarray/
  8. Clustering
    https://scikit-learn.org/stable/modules/clus­tering.html
  9. Cluster analysis (Wikipedia)
    https://en.wikipedia.org/wi­ki/Cluster_analysis
  10. Shluková analýza (Wikipedia)
    https://cs.wikipedia.org/wi­ki/Shlukov%C3%A1_anal%C3%BDza
  11. K-means
    https://cs.wikipedia.org/wiki/K-means
  12. k-means clustering
    https://en.wikipedia.org/wiki/K-means_clustering
  13. Spectral clustering
    https://en.wikipedia.org/wi­ki/Spectral_clustering
  14. Emergence
    https://cs.wikipedia.org/wi­ki/Emergence
  15. Particle Life: Vivid structures from rudimentary rules
    https://particle-life.com/
  16. Hertzsprungův–Russellův diagram
    https://cs.wikipedia.org/wi­ki/Hertzsprung%C5%AFv%E2%80%93Rus­sell%C5%AFv_diagram
  17. Using Machine Learning in an HR Diagram
    https://cocalc.com/share/pu­blic_paths/08b6e03583cbdef3cdb98­13a54ec68ff773c747f
  18. Gaia H-R diagrams: Querying Gaia data for one million nearby stars
    https://vlas.dev/post/gaia-dr2-hrd/
  19. The Hertzsprung–Russell diagram
    https://scipython.com/book2/chapter-9-data-analysis-with-pandas/problems/p92/the-hertzsprung-russell-diagram/
  20. Animated Hertzsprung-Russell Diagram with 119,614 datapoints
    https://github.com/zonination/h-r-diagram
  21. Neuraxle Pipelines
    https://github.com/Neuraxio/Neuraxle
  22. scikit-learn: Getting Started
    https://scikit-learn.org/stable/getting_started.html
  23. Support Vector Machines
    https://scikit-learn.org/stable/modules/svm.html
  24. Use Deep Learning to Detect Programming Languages
    http://searene.me/2017/11/26/use-neural-networks-to-detect-programming-languages/
  25. Natural-language processing
    https://en.wikipedia.org/wiki/Natural-language_processing
  26. THE MNIST DATABASE of handwritten digits
    http://yann.lecun.com/exdb/mnist/
  27. MNIST database (Wikipedia)
    https://en.wikipedia.org/wi­ki/MNIST_database
  28. MNIST For ML Beginners
    https://www.tensorflow.or­g/get_started/mnist/begin­ners
  29. Stránka projektu Torch
    http://torch.ch/
  30. Torch: Serialization
    https://github.com/torch/tor­ch7/blob/master/doc/seria­lization.md
  31. Torch: modul image
    https://github.com/torch/i­mage/blob/master/README.md
  32. Data pro neuronové sítě
    http://archive.ics.uci.edu/ml/in­dex.php
  33. Torch na GitHubu (několik repositářů)
    https://github.com/torch
  34. Torch (machine learning), Wikipedia
    https://en.wikipedia.org/wi­ki/Torch_%28machine_learnin­g%29
  35. Torch Package Reference Manual
    https://github.com/torch/tor­ch7/blob/master/README.md
  36. Torch Cheatsheet
    https://github.com/torch/tor­ch7/wiki/Cheatsheet
  37. Neural network containres (Torch)
    https://github.com/torch/nn/blob/mas­ter/doc/containers.md
  38. Simple layers
    https://github.com/torch/nn/blob/mas­ter/doc/simple.md#nn.Line­ar
  39. Transfer Function Layers
    https://github.com/torch/nn/blob/mas­ter/doc/transfer.md#nn.tran­sfer.dok
  40. Feedforward neural network
    https://en.wikipedia.org/wi­ki/Feedforward_neural_net­work
  41. Biologické algoritmy (4) – Neuronové sítě
    https://www.root.cz/clanky/biologicke-algoritmy-4-neuronove-site/
  42. Biologické algoritmy (5) – Neuronové sítě
    https://www.root.cz/clanky/biologicke-algoritmy-5-neuronove-site/
  43. Umělá neuronová síť (Wikipedia)
    https://cs.wikipedia.org/wi­ki/Um%C4%9Bl%C3%A1_neuronov%C3%A1_s%C3%AD%C5%A5
  44. PyTorch
    http://pytorch.org/
  45. JupyterLite na PyPi
    https://pypi.org/project/jupyterlite/
  46. JupyterLite na GitHubu
    https://github.com/jupyter­lite/jupyterlite
  47. Dokumentace k projektu JupyterLite
    https://github.com/jupyter­lite/jupyterlite
  48. Matplotlib Home Page
    http://matplotlib.org/
  49. Matplotlib (Wikipedia)
    https://en.wikipedia.org/wi­ki/Matplotlib
  50. Popis barvových map modulu matplotlib.cm
    https://gist.github.com/en­dolith/2719900#id7
  51. Ukázky (palety) barvových map modulu matplotlib.cm
    http://matplotlib.org/exam­ples/color/colormaps_refe­rence.html
  52. Galerie grafů vytvořených v Matplotlibu
    https://matplotlib.org/3.2.1/gallery/
  53. 3D rendering
    https://en.wikipedia.org/wi­ki/3D_rendering
  54. 3D computer graphics
    https://en.wikipedia.org/wi­ki/3D_computer_graphics
  55. Primary 3D view planes
    https://matplotlib.org/sta­ble/gallery/mplot3d/view_pla­nes_3d.html
  56. Getting started in scikit-learn with the famous iris dataset
    https://www.youtube.com/wat­ch?v=hd1W4CyPX58
  57. Training a machine learning model with scikit-learn
    https://www.youtube.com/wat­ch?v=RlQuVL6-qe8
  58. Iris (plant)
    https://en.wikipedia.org/wi­ki/Iris_(plant)
  59. Kosatec
    https://cs.wikipedia.org/wiki/Kosatec
  60. Iris setosa
    https://en.wikipedia.org/wi­ki/Iris_setosa
  61. Iris versicolor
    https://en.wikipedia.org/wi­ki/Iris_versicolor
  62. Iris virginica
    https://en.wikipedia.org/wi­ki/Iris_virginica
  63. Druh
    https://cs.wikipedia.org/wiki/Druh
  64. Iris subg. Limniris
    https://en.wikipedia.org/wi­ki/Iris_subg._Limniris
  65. Iris Dataset Classification with Python: A Tutorial
    https://www.pycodemates.com/2022/05/i­ris-dataset-classification-with-python.html
  66. Iris flower data set
    https://en.wikipedia.org/wi­ki/Iris_flower_data_set
  67. List of datasets for machine-learning research
    https://en.wikipedia.org/wi­ki/List_of_datasets_for_machi­ne-learning_research
  68. Analýza hlavních komponent
    https://cs.wikipedia.org/wi­ki/Anal%C3%BDza_hlavn%C3%AD­ch_komponent
  69. Principal component analysis
    https://en.wikipedia.org/wi­ki/Principal_component_ana­lysis
  70. Scikit-learn Crash Course – Machine Learning Library for Python
    https://www.youtube.com/wat­ch?v=0B5eIE_1vpU
  71. calm-notebooks
    https://github.com/koaning/calm-notebooks
  72. Should you teach Python or R for data science?
    https://www.dataschool.io/python-or-r-for-data-science/
  73. nbviewer: A simple way to share Jupyter Notebooks
    https://nbviewer.org/
  74. AI vs Machine Learning (Youtube)
    https://www.youtube.com/wat­ch?v=4RixMPF4×is
  75. Machine Learning | What Is Machine Learning? | Introduction To Machine Learning | 2024 | Simplilearn (Youtube)
    https://www.youtube.com/wat­ch?v=ukzFI9rgwfU
  76. A Gentle Introduction to Machine Learning (Youtube)
    https://www.youtube.com/wat­ch?v=Gv9_4yMHFhI
  77. Machine Learning vs Deep Learning
    https://www.youtube.com/wat­ch?v=q6kJ71tEYqM
  78. Umělá inteligence (slajdy)
    https://slideplayer.cz/sli­de/12119218/
  79. Úvod do umělé inteligence
    https://slideplayer.cz/slide/2505525/
  80. Umělá inteligence I / Artificial Intelligence I
    https://ktiml.mff.cuni.cz/~bartak/ui/
  81. Matplotlib vs. seaborn vs. Plotly vs. MATLAB vs. ggplot2 vs. pandas
    https://ritza.co/articles/matplotlib-vs-seaborn-vs-plotly-vs-MATLAB-vs-ggplot2-vs-pandas/
  82. Matplotlib, Seaborn or Plotnine?
    https://www.reddit.com/r/da­tascience/comments/jvrqxt/mat­plotlib_seaborn_or_plotni­ne/
  83. @Rabeez: Rabeez/plotting_comparison.ipynb
    https://gist.github.com/Ra­beez/ffc0b59d4a41e20fa8d94­4c44a96adbc
  84. Matplotlib, Seaborn, Plotly and Plotnine Comparison
    https://python.plainenglish­.io/matplotlib-seaborn-plotly-and-plotnine-comparison-baf2db5a9c40
  85. Data Visualization 101: How to Choose a Python Plotting Library
    https://towardsdatascience.com/data-visualization-101-how-to-choose-a-python-plotting-library-853460a08a8a
  86. Data science in Python: pandas, seaborn, scikit-learn
    https://www.youtube.com/wat­ch?v=3ZWuPVWq7p4
  87. 7.2. Real world datasets
    https://scikit-learn.org/stable/datasets/re­al_world.html#california-housing-dataset
  88. 7.2.7. California Housing dataset
    https://scikit-learn.org/stable/datasets/re­al_world.html#california-housing-dataset
  89. Comprehensive Guide to Classification Models in Scikit-Learn
    https://www.geeksforgeeks­.org/comprehensive-guide-to-classification-models-in-scikit-learn/
  90. Tidy Data Visualization: ggplot2 vs seaborn
    https://blog.tidy-intelligence.com/posts/ggplot2-vs-seaborn/
  91. seaborn: statistical data visualization
    https://seaborn.pydata.org/
  92. Linear regression (Wikipedia)
    https://en.wikipedia.org/wi­ki/Linear_regression
  93. Lineární regrese (Wikipedia)
    https://cs.wikipedia.org/wi­ki/Line%C3%A1rn%C3%AD_regre­se

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.