Neuronové sítě v knihovně scikit-learn: dokončení

24. 10. 2024
Doba čtení: 49 minut

Sdílet

Autor: Depositphotos
Prozkoumáme, jaký vliv mají hyperparametry modelů MLPRegressor i MLPClassifier na kvalitu natrénované neuronové sítě. Budeme přitom sledovat interní stav velmi jednoduché sítě s pouhými třemi neurony.

Obsah

1. Nejjednodušší prakticky použitelná neuronová síť: výběr jednoho vstupu ze dvou dostupných

2. Výsledky získané otestování jednoduché neuronové sítě

3. Odstranění náhody z procesu tréninku a testování neuronové sítě

4. Skript pro trénink a otestování neuronové sítě se stabilními výsledky

5. Stabilní výsledky získané předchozím skriptem

6. Vylepšení tréninku neuronové sítě zvýšením počtu trénovacích vzorků

7. Skript, který postupně zvětšuje počet vzorků použitých pro trénink neuronové sítě

8. Výsledky běhu předchozího skriptu

9. Grafické znázornění závislosti MSE, vah neuronů a biasu na počtu vzorků

10. Výsledky získané po běhu skriptu

11. Zrychlení tréninku neuronové sítě snížením počtu iterací

12. Výsledky získané po běhu skriptu: snížení počtu iterací při tréninku neuronové sítě

13. Vyšší míra změny vah na vstupu neuronů při tréninku

14. Výsledky získané po běhu skriptu: vyšší míra změna vah neuronů

15. Riziko příliš vysoké hodnoty learning_rate_init

16. Výsledky získané po běhu skriptu: vysoká míra změny vah neuronů

17. Opačný extrém – příliš malá hodnota learning_rate_init

18. Výsledek běhu dnešního posledního demonstračního příkladu

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

20. Odkazy na Internetu

1. Nejjednodušší prakticky použitelná neuronová síť: výběr jednoho vstupu ze dvou dostupných

Pro pochopení toho, jaký vliv mají hyperparametry modelu na výslednou neuronovou síť si vytvoříme tu nejjednodušší ještě prakticky použitelnou síť, která bude mít dva vstupy a jediný výstup. Bude se jednat o regresní síť, která bude natrénována tak, aby z obou vstupů vybrala vždy hodnotu z jednoho předem určeného vstupu (určení, o který vstup se jedná, se provádí tréninkem). Například síť natrénujeme takovým způsobem, aby vždy vybrala hodnotu druhého vstupu a tu poslala na výstup (jedná se o „analogovou“ hodnotu, ne o logické hradlo, resp. demultiplexor). A navíc síť zjednodušíme do nejmenší možné velikosti, protože bude mít pouze dva neurony ve vstupní vrstvě a jediný neuron ve vrstvě výstupní. Skryté vrstvy nebudou existovat. To tedy znamená, že namísto relativně složité sítě typu:

Obrázek 1: Neuronová síť s více skrytými vrstvami.

Budeme mít síť s celkem pouze třemi neurony:

Obrázek 2: Neuronová síť bez skrytých vrstev; vstupní vrstva má dva neurony, výstupní vrstva neuron jediný.

Skript, který si připraví data pro trénink a testování (začneme na 10 záznamech), zkonstruuje síť a následně ověří její (ne)funkčnost, může vypadat následovně. Naprostou většinu konceptů použitých v tomto skriptu již známe:

import numpy as np
 
import random
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
 
# model zalozeny na neuronove siti
from sklearn.neural_network import MLPRegressor
 
# velikost vstupu
MAX_N = 10
 
# X je matice, y je vektor
X = np.zeros( (MAX_N, 2) )   # kombinace vstupu
y = np.zeros( (MAX_N, ))     # vektor vysledku
 
# priprava dat pro trenink i otestovani neuronove site
for i in range(0, MAX_N):
    X[i, 0] = random.randint(-10, 10)
    X[i, 1] = random.randint(-10, 10)
    y[i] = X[i, 1]
 
# rozdeleni dat na treninkovou a testovaci mnozinu
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
 
# konstrukce modelu
nn = MLPRegressor(max_iter=5000, hidden_layer_sizes=())
 
# trénink modelu
nn.fit(X_train, y_train)
 
# predikce modelu
y_pred = nn.predict(X_test)
 
# chyba predikce
print("Mean squared error: %.2f" % mean_squared_error(y_test, y_pred))
 
# 1 = nejlepší predikce modelu
print("Coefficient of determination: %.2f" % r2_score(y_test, y_pred))
 
# zobrazit parametry neuronove site
print(f"Features: {nn.n_features_in_}")
print(f"Layers:   {nn.n_layers_}")
print(f"Outputs:  {nn.n_outputs_}")
print("Weights:")
 
# vahy neuronu
for layer, weights in enumerate(nn.coefs_):
    print("\t", layer, weights.shape)
    print(weights)
print()
 
# posuny (dalsi vstup do neuronu)
print("Biases:")
for layer, biases in enumerate(nn.intercepts_):
    print("\t", layer, biases.shape)
    print(biases)
print()
 
# test neuronove site na (potencialne) nezname vstupy
inputs = []
for i in range(0, MAX_N):
    for j in range(0, MAX_N):
        inputs.append([i, j])
predicted = nn.predict(inputs)
 
print()
 
# odhady neuronove site po zaokrouhleni
all = 0
wrong = 0
 
# projit vsemi odhady a najit spatne vystupy site
for i, p in zip(inputs, predicted):
    # spatny odhad?
    if i[1] != round(p):
        print(f"{i[0]:2}, {i[1]:2} = {round(p):2}")
        wrong += 1
    all += 1
 
# vysledna statistika
print(f"{wrong}/{all}")

2. Výsledky získané otestování jednoduché neuronové sítě

Užitečné bude zjistit, jak se bude výše nakonfigurovaná neuronová síť chovat. Ovšem vzhledem k tomu, že se v průběhu tréninku používají náhodná čísla, nebudou výsledky vždy totožné. Ovšem poměrně často je síť natrénována tak vhodným způsobem, že má prakticky stoprocentní odpovědi:

Mean squared error: 0.10
Coefficient of determination: 0.00

Interní struktura takové sítě vypadá následovně:

Features: 2
Layers:   2
Outputs:  1
Weights:
     0 (2, 1)
[[-0.00311307]
 [ 0.96168339]]
 
Biases:
     0 (1,)
[-0.08298607]

Povšimněte si toho, že váhy na vstupu neuronu ve výstupní vrstvě jsou poměrně blízko hodnotám 0,0 a 1,0, což odpovídá požadované funkci sítě. A bias (tedy váha pro posuny hodnot na vstupu tohoto neuronu) je taky prakticky nulový. Neuron tedy skutečně vybere druhou vstupní hodnotu, kterou předá do aktivační funkce. Ta je pro kladné hodnoty funkcí lineární, takže ji můžeme ignorovat. Ze vztahu:

y = f(w0 + w1x1 + w2x2 + … + wnxn)

Tedy získáme tento výpočet, který neuron provádí:

y = w0 + w1x1 + w2x2

A po dosazení ideálních hodnot:

y = 0×1 + 1×2 = x2

Ideálně natrénované neuronové síti odpovídá tento výsledek:

rounded:
0/100
Poznámka: naše síť sice není natrénována ideálně, ale pro zvolenou testovací sadu jsme tuto vlastnost (zatím) neodhalili.

Ovšem v některých případech dopadne trénink odlišně, a to opět kvůli (pseudo)náhodným hodnotám, které do celého procesu vstupují. Povšimněte si odlišných vah a o snahu sítě vše „vyvážit“ vyšším biasem:

Mean squared error: 0.49
Coefficient of determination: 0.92
Features: 2
Layers:   2
Outputs:  1
Weights:
     0 (2, 1)
[[0.04786446]
 [0.95183809]]
 
Biases:
     0 (1,)
[0.47868983]
 
 
rounded:
 1,  0 =  1
 2,  0 =  1
 2,  1 =  2
 3,  0 =  1
 3,  1 =  2
 3,  2 =  3
 4,  0 =  1
 4,  1 =  2
 4,  2 =  3
 4,  3 =  4
 5,  0 =  1
 5,  1 =  2
 5,  2 =  3
 5,  3 =  4
 5,  4 =  5
 6,  0 =  1
 6,  1 =  2
 6,  2 =  3
 6,  3 =  4
 6,  4 =  5
 6,  5 =  6
 7,  0 =  1
 7,  1 =  2
 7,  2 =  3
 7,  3 =  4
 7,  4 =  5
 7,  5 =  6
 7,  6 =  7
 8,  0 =  1
 8,  1 =  2
 8,  2 =  3
 8,  3 =  4
 8,  4 =  5
 8,  5 =  6
 8,  6 =  7
 8,  7 =  8
 9,  0 =  1
 9,  1 =  2
 9,  2 =  3
 9,  3 =  4
 9,  4 =  5
 9,  5 =  6
 9,  6 =  7
 9,  7 =  8
 9,  8 =  9
45/100

3. Odstranění náhody z procesu tréninku a testování neuronové sítě

Abychom se vyhnuli tomu, že po každém spuštění procesu tréninku a testování získáme poněkud odlišné hodnoty, pokusíme se odstranit všechny náhody (náhodná čísla), která jsou používána. Nejprve nastavíme konstantní „semínko“ (seed) použité pro inicializaci generátoru pseudonáhodných čísel. Tím zajistíme, že stejné pořadí volání funkce random.randint() bude vracet stejné pořadí výsledků:

# zadne skutecne nahodne hodnoty
random.seed(19)
 
# priprava dat pro trenink i otestovani neuronove site
for i in range(0, MAX_N):
    X[i, 0] = random.randint(-10, 10)
    X[i, 1] = random.randint(-10, 10)
    y[i] = X[i, 1]

Náhodu odstraníme i z procesu rozdělení datové sady na trénovací a validační data:

# rozdeleni dat na treninkovou a testovaci mnozinu
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

A konečně předáme „náhodný stav“, který ovšem evidentně náhodný není, i jako hyperparametr modelu:

# konstrukce modelu
nn = MLPRegressor(max_iter=5000, hidden_layer_sizes=(), random_state=1000)

4. Skript pro trénink a otestování neuronové sítě se stabilními výsledky

Po úpravě zdrojového kódu tak, aby se v něm nevyskytovaly žádné náhodné hodnoty, dojdeme k následujícímu skriptu, jenž by měl při každém spuštění vždy odpovědět stejně:

import numpy as np
 
import random
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
 
# model zalozeny na neuronove siti
from sklearn.neural_network import MLPRegressor
 
# velikost vstupu
MAX_N = 20
 
# X je matice, y je vektor
X = np.zeros( (MAX_N, 2) )   # kombinace vstupu
y = np.zeros( (MAX_N, ))     # vektor vysledku
 
# zadne skutecne nahodne hodnoty
random.seed(19)
 
# priprava dat pro trenink i otestovani neuronove site
for i in range(0, MAX_N):
    X[i, 0] = random.randint(-10, 10)
    X[i, 1] = random.randint(-10, 10)
    y[i] = X[i, 1]
 
 
# rozdeleni dat na treninkovou a testovaci mnozinu
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
 
# konstrukce modelu
nn = MLPRegressor(max_iter=5000, hidden_layer_sizes=(), random_state=1000)
 
# trénink modelu
nn.fit(X_train, y_train)
 
# predikce modelu
y_pred = nn.predict(X_test)
 
# chyba predikce
print("Mean squared error: %.2f" % mean_squared_error(y_test, y_pred))
 
# 1 = nejlepší predikce modelu
print("Coefficient of determination: %.2f" % r2_score(y_test, y_pred))
 
# zobrazit parametry neuronove site
print(f"Features: {nn.n_features_in_}")
print(f"Layers:   {nn.n_layers_}")
print(f"Outputs:  {nn.n_outputs_}")
print("Weights:")
 
# vahy neuronu
for layer, weights in enumerate(nn.coefs_):
    print("\t", layer, weights.shape)
    print(weights)
print()
 
# posuny (dalsi vstup do neuronu)
print("Biases:")
for layer, biases in enumerate(nn.intercepts_):
    print("\t", layer, biases.shape)
    print(biases)
print()
 
# test neuronove site na (potencialne) nezname vstupy
inputs = []
for i in range(0, MAX_N):
    for j in range(0, MAX_N):
        inputs.append([i, j])
predicted = nn.predict(inputs)
 
print()
 
# odhady neuronove site po zaokrouhleni
all = 0
wrong = 0
 
for i, p in zip(inputs, predicted):
    # spatny odhad?
    if i[1] != round(p):
        print(f"{i[0]:2}, {i[1]:2} = {round(p):2}")
        wrong += 1
    all += 1
 
# vysledna statistika
print(f"{wrong}/{all}")

5. Stabilní výsledky získané předchozím skriptem

Výsledky, které získáme po každém spuštění skriptu popsaného v předchozí kapitole, vypadají na mém počítači následovně (teoreticky se totiž mohou výsledky na jiném počítači odlišovat, pokud je použitý jiný algoritmus generování náhodných čísel):

Mean squared error: 0.08
Coefficient of determination: 1.00
Features: 2
Layers:   2
Outputs:  1
Weights:
     0 (2, 1)
[[0.01515987]
 [0.96449027]]
 
Biases:
     0 (1,)
[0.08740665]

Povšimněte si, že síť nebyla natrénována zcela ideálně, protože váha u druhého vstupu neuronu by mohla být blíže jedničce a naopak bias by mohl být blíže k nule. Ne zcela ideálnímu natrénovaní odpovídá i několik chybných odhadů nalezených při testování, ovšem není jich příliš mnoho – tři procenta:

 0, 17 = 16
 0, 18 = 17
 0, 19 = 18
 1, 17 = 16
 1, 18 = 17
 1, 19 = 18
 2, 18 = 17
 2, 19 = 18
 3, 18 = 17
 3, 19 = 18
 4, 19 = 18
 5, 19 = 18
12/400

6. Vylepšení tréninku neuronové sítě zvýšením počtu trénovacích vzorků

Jak můžeme vylepšit chování neuronové sítě s pouhými dvěma vrstvami (vstupní a výstupní) a třemi neurony? Z teoretického pohledu nemá smysl zvyšovat počet vrstev ani neuronů, protože i jediný neuron dokáže jeden ze vstupů vynásobit váhou 0 a druhý vstup vynásobit jedničkou – což je přesně to, co od této sítě očekáváme. Ovlivnit však můžeme natrénování sítě, tj. dosažení toho, aby váhové faktory byly skutečně nastaveny na [0.0, 1.0] a bias na 0.0. První způsob je ten nejznámější – jednoduše zvýšíme počet vzorků použitých při tréninku neuronové sítě. Jaký vliv počet vzorků pro trénink má, si lze relativně snadno ověřit (ovšem opět se vyhneme použití náhodných čísel).

7. Skript, který postupně zvětšuje počet vzorků použitých pro trénink neuronové sítě

Podívejme se nyní na to, jak snadno bylo možné upravit skript ze čtvrté kapitoly takovým způsobem, že se postupně zvětšuje počet vzorků určených pro trénink (vzorky pro ověření sítě se nemění). Jednoduše jsme do funkce train_and_testnn předáme celočíselnou hodnotu, kterou použijeme pro „vyseknutí“ trénovacích a validačních dat z připravené sady čtyřiceti vzorků. Využijeme k tomu operaci řezu (slice):

import numpy as np
 
import random
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
 
# model zalozeny na neuronove siti
from sklearn.neural_network import MLPRegressor
 
# velikost vstupu
MAX_N = 40
 
# X je matice, y je vektor
X = np.zeros( (MAX_N, 2) )   # kombinace vstupu
y = np.zeros( (MAX_N, ))     # vektor vysledku
 
# zadne skutecne nahodne hodnoty
random.seed(19)
 
# priprava dat pro trenink i otestovani neuronove site
for i in range(0, MAX_N):
    X[i, 0] = random.randint(-10, 10)
    X[i, 1] = random.randint(-10, 10)
    y[i] = X[i, 1]
 
 
# rozdeleni dat na treninkovou a testovaci mnozinu
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
 
 
def train_and_test_nn(size: int):
    X_train_ = X_train[:size]
    y_train_ = y_train[:size]
 
    # konstrukce modelu
    nn = MLPRegressor(max_iter=5000, hidden_layer_sizes=(), random_state=1000)
 
    # trénink modelu
    nn.fit(X_train_, y_train_)
 
    # predikce modelu
    y_pred = nn.predict(X_test)
 
    # chyba predikce
    # 1 = nejlepší predikce modelu
    print("%2d" % size, "%.2f" % mean_squared_error(y_test, y_pred), "%.2f" % r2_score(y_test, y_pred))
 
 
# postupne zvetsovani datove sady
for i in range(1, MAX_N+1):
    train_and_test_nn(i)

8. Výsledky běhu předchozího skriptu

V případě, že skript popsaný v předchozí kapitole spustíme, poměrně snadno zjistíme, že už pro relativně malý počet trénovacích vzorků se neuronová síť (tedy přesněji řečeno váhy na vstupech neuronů) natrénuje takovým způsobem, že se zmenší MSE, tedy odchylka odpovědí sítě od očekávané odpovědi (připomeňme si, že pro regresní síť se jedná o dvojici reálných čísel, které od sebe odečteme a vypočteme čtverec jejich rozdílu). Už pro cca jedenáct trénovacích vzorků se přibližně dosáhne maximální (v této chvíli možné) přesnosti natrénování:

 1 106.64 -1.06
 2 88.05 -0.70
 3 0.15 1.00
 4 0.15 1.00
 5 0.14 1.00
 6 0.18 1.00
 7 0.16 1.00
 8 0.17 1.00
 9 0.20 1.00
10 0.12 1.00
11 0.08 1.00
12 0.08 1.00
13 0.06 1.00
14 0.07 1.00
15 0.08 1.00
16 0.09 1.00
17 0.07 1.00
18 0.08 1.00
19 0.09 1.00
20 0.06 1.00
21 0.07 1.00
22 0.08 1.00
23 0.08 1.00
24 0.09 1.00
25 0.07 1.00
26 0.07 1.00
27 0.07 1.00
28 0.08 1.00
29 0.09 1.00
30 0.09 1.00
31 0.08 1.00
32 0.08 1.00
33 0.08 1.00
34 0.08 1.00
35 0.08 1.00
36 0.08 1.00
37 0.08 1.00
38 0.08 1.00
39 0.08 1.00
40 0.08 1.00

9. Grafické znázornění závislosti MSE, vah neuronů a biasu na počtu vzorků

Fakt, že se neuronová síť dokáže kvalitněji naučit v případě, že jí předáme na trénink větší množství vzorků, jsme si již ověřili, a to dokonce několikrát. Nyní nás ovšem bude zajímat, jak konkrétně toto vylepšení vlastností neuronové sítě vypadá interně, tedy jak (a zda vůbec) se mění váhy a biasy na vstupech neuronů. Pro naši jednoduchou síť se třemi neurony tedy budeme sledovat dvě váhy (vstup do posledního neuronu) a jeho bias. Pro větší přehlednost si necháme vykreslit i průběh MSE a hodnoty R2 score, tedy veličin, které souhrnně určují kvalitu odpovědí sítě (pro klasifikační sítě jsou však lepší matice záměn):

from types import NoneType
import matplotlib.pyplot as plt
import numpy as np
 
import random
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
 
# model zalozeny na neuronove siti
from sklearn.neural_network import MLPRegressor
 
# velikost vstupu
MAX_N = 50
 
# X je matice, y je vektor
X = np.zeros( (MAX_N, 2) )   # kombinace vstupu
y = np.zeros( (MAX_N, ))     # vektor vysledku
 
# zadne skutecne nahodne hodnoty
random.seed(19)
 
# priprava dat pro trenink i otestovani neuronove site
for i in range(0, MAX_N):
    X[i, 0] = random.randint(-10, 10)
    X[i, 1] = random.randint(-10, 10)
    y[i] = X[i, 1]
 
 
# rozdeleni dat na treninkovou a testovaci mnozinu
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
 
 
def train_and_test_nn(size: int):
    X_train_ = X_train[:size]
    y_train_ = y_train[:size]
 
    # konstrukce modelu
    nn = MLPRegressor(max_iter=5000, hidden_layer_sizes=(), random_state=1000)
 
    # trénink modelu
    nn.fit(X_train_, y_train_)
 
    # predikce modelu
    y_pred = nn.predict(X_test)
 
    # chyba predikce
    # 1 = nejlepší predikce modelu
    mse = mean_squared_error(y_test, y_pred)
    r2 = r2_score(y_test, y_pred)
    print("%2d" % size, "%.2f" % mse, "%.2f" % r2)
 
    # vahy na vstupu neuronu ve vystupni vrstve
    w = nn.coefs_[0]
 
    # bias na vstupu neuronu ve vystupni vrstve
    b = nn.intercepts_[0]
 
    # vratit obe vahy i bias
    return mse, r2, w[0][0], w[1][0], b[0]
 
 
# trening site az do poctu prvku MAX_N
r = range(1, MAX_N+1)
 
weights1 = []
weights2 = []
biases = []
mses = []
r2s = []
 
# postupne provest trenink site, vyplneni poli s vahami a biasy
for i in r:
    mse, r2, weight1, weight2, bias = train_and_test_nn(i)
    mses.append(mse)
    r2s.append(r2)
    weights1.append(weight1)
    weights2.append(weight2)
    biases.append(bias)
 
print(weights1)
print(weights2)
print(biases)
 
plt.plot(r, mses, r, r2s)
plt.legend(["MSE", "R2 score"])
plt.savefig("mse_r2.png")
plt.show()
 
plt.plot(r, weights1, r, weights2)
plt.legend(["weight1", "weight2"])
plt.savefig("weights.png")
plt.show()
 
plt.plot(r, biases)
plt.legend(["bias"])
plt.savefig("biases.png")
plt.show()
Poznámka: povšimněte si, že síť vždy trénujeme od začátku. Bylo by sice možné síť „dotrénovávat“ (použitá knihovna scikit-learn to umožňuje), ale výsledky nebudou v takovém případě stejné s výsledky získanými tak, že síť budeme vždy učit znovu, bez předchozích znalostí. To může být poměrně problematická vlastnost, protože neuronové sítě se „dotrénovávají“ běžně – například tehdy, pokud se trénovaná data nevejdou do operační paměti.

10. Výsledky získané po běhu skriptu

Podívejme se nyní, jak vypadá trénink neuronové sítě po jeho vizualizaci do grafů:

Obrázek 3: Změna vah na vstupu jediného neuronu ve výstupní vrstvě. Po několika kolech učení se síť skutečně naučila správné váhy 0,0 a 1,0.

Obrázek 4: Změna biasu na vstupu jediného neuronu ve výstupní vrstvě. Opět zde můžeme vidět, že po několika iteracích tréninku se bias ustálil na očekávané nulové hodnotě.

Obrázek 5: Četnost chybných odpovědí, které síť při testování produkuje, se postupně zmenšuje a odpovídá předchozím dvěma grafům.

11. Zrychlení tréninku neuronové sítě snížením počtu iterací

Hyperparametrem nazvaným max_iter lze modifikovat počet iterací při tréninku neuronové sítě. Prozatím jsme používali výchozí hodnotu 5000, takže konstrukce neuronové sítě vypadala následovně:

# konstrukce modelu
nn = MLPRegressor(max_iter=5000, hidden_layer_sizes=(), random_state=1000)

Ovšem celý proces učení můžeme urychlit zadáním menší hodnoty. Samotná topologie neuronové sítě se vůbec nezmění:

# konstrukce modelu
nn = MLPRegressor(max_iter=1000, hidden_layer_sizes=(), random_state=1000)

Opět se podívejme na to, jak může vypadat skript, který neuronovou síť natrénuje a použije přitom menší počet iterací, než je výchozí hodnota 5000. Oproti předchozímu skriptu se změnil jen jediný řádek se specifikací hyperparametrů modelu:

from types import NoneType
import matplotlib.pyplot as plt
import numpy as np
 
import random
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
 
# model zalozeny na neuronove siti
from sklearn.neural_network import MLPRegressor
 
# velikost vstupu
MAX_N = 50
 
# X je matice, y je vektor
X = np.zeros( (MAX_N, 2) )   # kombinace vstupu
y = np.zeros( (MAX_N, ))     # vektor vysledku
 
random.seed(19)
 
for i in range(0, MAX_N):
    X[i, 0] = random.randint(-10, 10)
    X[i, 1] = random.randint(-10, 10)
    y[i] = X[i, 1]
 
 
# rozdeleni dat na treninkovou a testovaci mnozinu
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
 
 
def train_and_test_nn(size: int):
    X_train_ = X_train[:size]
    y_train_ = y_train[:size]
 
    # konstrukce modelu
    nn = MLPRegressor(max_iter=1000, hidden_layer_sizes=(), random_state=1000)
 
    # trénink modelu
    nn.fit(X_train_, y_train_)
 
    # predikce modelu
    y_pred = nn.predict(X_test)
 
    # chyba predikce
    # 1 = nejlepší predikce modelu
    mse = mean_squared_error(y_test, y_pred)
    r2 = r2_score(y_test, y_pred)
    print("%2d" % size, "%.2f" % mse, "%.2f" % r2)
 
    # vahy na vstupu neuronu ve vystupni vrstve
    w = nn.coefs_[0]
 
    # bias na vstupu neuronu ve vystupni vrstve
    b = nn.intercepts_[0]
 
    # vratit obe vahy i bias
    return mse, r2, w[0][0], w[1][0], b[0]
 
 
# trening site az do poctu prvku MAX_N
r = range(1, MAX_N+1)
 
weights1 = []
weights2 = []
biases = []
mses = []
r2s = []
 
# postupne provest trening site, vyplneni poli s vahami a biasy
for i in r:
    mse, r2, weight1, weight2, bias = train_and_test_nn(i)
    mses.append(mse)
    r2s.append(r2)
    weights1.append(weight1)
    weights2.append(weight2)
    biases.append(bias)
 
print(weights1)
print(weights2)
print(biases)
 
plt.plot(r, mses, r, r2s)
plt.legend(["MSE", "R2 score"])
plt.savefig("mse_r2.png")
plt.show()
 
plt.plot(r, weights1, r, weights2)
plt.legend(["weight1", "weight2"])
plt.savefig("weights.png")
plt.show()
 
plt.plot(r, biases)
plt.legend(["bias"])
plt.savefig("biases.png")
plt.show()

12. Výsledky získané po běhu skriptu: snížení počtu iterací při tréninku neuronové sítě

Výsledky nyní budou vypadat odlišně:

Obrázek 6: Změna vah na vstupu jediného neuronu ve výstupní vrstvě. Neuronová síť se sice učí rychleji, váhy neuronů jsou ale nastaveny špatně. A navíc větší počet trénovacích dat pravděpodobně již nepomůže, což naznačuje pravá strana grafu).

Obrázek 7: Změna biasu na vstupu jediného neuronu ve výstupní vrstvě. Opět si povšimněte, jak špatně se síť naučila – evidentně skončila v lokálním maximu, nikoli v maximu globálním.

Obrázek 8: Četnost chybných odpovědí je oproti původní síti mnohem větší – síť nedokáže odpovídat korektně.

13. Vyšší míra změny vah na vstupu neuronů při tréninku

Kromě počtu iterací můžeme modifikovat i míru změny vah na vstupech jednotlivých neuronů při tréninku. Příliš velká míra změny může znamenat, že sít bude „vyskakovat“ z optimálního stavu (každý nový vstup při tréninku ji bude z tohoto stavu posouvat), na druhou stranu se však může trénink urychlit a dokonce lze překonat lokální maxima. Výchozí hodnotou learning_rate_init je 0.001 a důležité je, že se změna projeví jen u trénovacích algoritmů „adam“ a „sgd“ (viz též předchozí článek).

Pokusme se tuto hodnotu padesátkrát zvýšit:

# konstrukce modelu
nn = MLPRegressor(max_iter=5000, hidden_layer_sizes=(), random_state=1000, learning_rate_init=0.05)

Upravený skript bude vypadat následovně:

from types import NoneType
import matplotlib.pyplot as plt
import numpy as np
 
import random
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
 
# model zalozeny na neuronove siti
from sklearn.neural_network import MLPRegressor
 
# velikost vstupu
MAX_N = 50
 
# X je matice, y je vektor
X = np.zeros( (MAX_N, 2) )   # kombinace vstupu
y = np.zeros( (MAX_N, ))     # vektor vysledku
 
random.seed(19)
 
for i in range(0, MAX_N):
    X[i, 0] = random.randint(-10, 10)
    X[i, 1] = random.randint(-10, 10)
    y[i] = X[i, 1]
 
 
# rozdeleni dat na treninkovou a testovaci mnozinu
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
 
 
def train_and_test_nn(size: int):
    X_train_ = X_train[:size]
    y_train_ = y_train[:size]
 
    # konstrukce modelu
    nn = MLPRegressor(max_iter=5000, hidden_layer_sizes=(), random_state=1000, learning_rate_init=0.05)
 
    # trénink modelu
    nn.fit(X_train_, y_train_)
 
    # predikce modelu
    y_pred = nn.predict(X_test)
 
    # chyba predikce
    # 1 = nejlepší predikce modelu
    mse = mean_squared_error(y_test, y_pred)
    r2 = r2_score(y_test, y_pred)
    print("%2d" % size, "%.2f" % mse, "%.2f" % r2)
 
    # vahy na vstupu neuronu ve vystupni vrstve
    w = nn.coefs_[0]
 
    # bias na vstupu neuronu ve vystupni vrstve
    b = nn.intercepts_[0]
 
    # vratit obe vahy i bias
    return mse, r2, w[0][0], w[1][0], b[0]
 
 
# trening site az do poctu prvku MAX_N
r = range(1, MAX_N+1)
 
weights1 = []
weights2 = []
biases = []
mses = []
r2s = []
 
# postupne provest trening site, vyplneni poli s vahami a biasy
for i in r:
    mse, r2, weight1, weight2, bias = train_and_test_nn(i)
    mses.append(mse)
    r2s.append(r2)
    weights1.append(weight1)
    weights2.append(weight2)
    biases.append(bias)
 
print(weights1)
print(weights2)
print(biases)
 
plt.plot(r, mses, r, r2s)
plt.legend(["MSE", "R2 score"])
plt.savefig("mse_r2.png")
plt.show()
 
plt.plot(r, weights1, r, weights2)
plt.legend(["weight1", "weight2"])
plt.savefig("weights.png")
plt.show()
 
plt.plot(r, biases)
plt.legend(["bias"])
plt.savefig("biases.png")
plt.show()

14. Výsledky získané po běhu skriptu: vyšší míra změna vah neuronů

Podívejme se nyní, jak vypadá trénink neuronové sítě po jeho vizualizaci do grafů:

Obrázek 9: Změna vah na vstupu jediného neuronu ve výstupní vrstvě. Po několika kolech učení se síť skutečně naučila správné váhy 0,0 a 1,0.

Obrázek 10: Změna biasu na vstupu jediného neuronu ve výstupní vrstvě. Opět zde můžeme vidět, že po několika iteracích tréninku se bias ustálil na očekávané nulové hodnotě.

Obrázek 11: Četnost chybných odpovědí, které síť při testování produkuje, se postupně zmenšuje a odpovídá předchozím dvěma grafům.

Poznámka: nyní jsme tedy měli štěstí, protože se síť natrénovala nejenom korektně, ale i velmi rychle. Ovšem další zvyšování hodnoty learning_rate_init s sebou nese poměrně velká rizika.

15. Riziko příliš vysoké hodnoty learning_rate_init

Hodnotu learning_rate_init samozřejmě můžeme dále zvyšovat ve smyslu logiky „když poněkud vyšší hodnota pomohla, ještě vyšší hodnota povede k mnohem lepším výsledkům“. Pokusme se tedy tuto hodnotu zvýšit na 0,2, což je v praxi již příliš mnoho (jak posléze uvidíme):

# konstrukce modelu
nn = MLPRegressor(max_iter=5000, hidden_layer_sizes=(), random_state=1000, learning_rate_init=0.2)

Celý skript:

from types import NoneType
import matplotlib.pyplot as plt
import numpy as np
 
import random
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
 
# model zalozeny na neuronove siti
from sklearn.neural_network import MLPRegressor
 
# velikost vstupu
MAX_N = 50
 
# X je matice, y je vektor
X = np.zeros( (MAX_N, 2) )   # kombinace vstupu
y = np.zeros( (MAX_N, ))     # vektor vysledku
 
random.seed(19)
 
for i in range(0, MAX_N):
    X[i, 0] = random.randint(-10, 10)
    X[i, 1] = random.randint(-10, 10)
    y[i] = X[i, 1]
 
 
# rozdeleni dat na treninkovou a testovaci mnozinu
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
 
 
def train_and_test_nn(size: int):
    X_train_ = X_train[:size]
    y_train_ = y_train[:size]
 
    # konstrukce modelu
    nn = MLPRegressor(max_iter=5000, hidden_layer_sizes=(), random_state=1000, learning_rate_init=0.2)
 
    # trénink modelu
    nn.fit(X_train_, y_train_)
 
    # predikce modelu
    y_pred = nn.predict(X_test)
 
    # chyba predikce
    # 1 = nejlepší predikce modelu
    mse = mean_squared_error(y_test, y_pred)
    r2 = r2_score(y_test, y_pred)
    print("%2d" % size, "%.2f" % mse, "%.2f" % r2)
 
    # vahy na vstupu neuronu ve vystupni vrstve
    w = nn.coefs_[0]
 
    # bias na vstupu neuronu ve vystupni vrstve
    b = nn.intercepts_[0]
 
    # vratit obe vahy i bias
    return mse, r2, w[0][0], w[1][0], b[0]
 
 
# trening site az do poctu prvku MAX_N
r = range(1, MAX_N+1)
 
weights1 = []
weights2 = []
biases = []
mses = []
r2s = []
 
# postupne provest trening site, vyplneni poli s vahami a biasy
for i in r:
    mse, r2, weight1, weight2, bias = train_and_test_nn(i)
    mses.append(mse)
    r2s.append(r2)
    weights1.append(weight1)
    weights2.append(weight2)
    biases.append(bias)
 
print(weights1)
print(weights2)
print(biases)
 
plt.plot(r, mses, r, r2s)
plt.legend(["MSE", "R2 score"])
plt.savefig("mse_r2.png")
plt.show()
 
plt.plot(r, weights1, r, weights2)
plt.legend(["weight1", "weight2"])
plt.savefig("weights.png")
plt.show()
 
plt.plot(r, biases)
plt.legend(["bias"])
plt.savefig("biases.png")
plt.show()

16. Výsledky získané po běhu skriptu: vysoká míra změny vah neuronů

Neuronová síť již pro hodnotu learning_rate_init==0.2 nebude dobře natrénovaná, což je jasně patrné z následujících průběhů:

Obrázek 12: Změna vah na vstupu jediného neuronu ve výstupní vrstvě. Nyní je síť naučena (zcela) špatně, protože váhy nejsou rovny 0,0 a 1,0.

Obrázek 13: Změna biasu na vstupu jediného neuronu ve výstupní vrstvě. Opět zde můžeme vidět, že po několika iteracích tréninku se bias ustálil, ovšem na nekorektní (nenulové) hodnotě.

Obrázek 14: Četnost chybných odpovědí, které síť při testování produkuje, se již nikdy nezmenší na nulu.

17. Opačný extrém – příliš malá hodnota learning_rate_init

Příliš velká hodnota learning_rate_init nám příliš nepomohla, takže zkusíme opačný extrém, tj. nastavit tento hyperparametr na příliš malou hodnotu, konkrétně na desetinu výchozí hodnoty:

# konstrukce modelu
nn = MLPRegressor(max_iter=5000, hidden_layer_sizes=(), random_state=1000, learning_rate_init=0.0001)

Opět si – pouze pro úplnost – uvedeme celý skript:

from types import NoneType
import matplotlib.pyplot as plt
import numpy as np
 
import random
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
 
# model zalozeny na neuronove siti
from sklearn.neural_network import MLPRegressor
 
# velikost vstupu
MAX_N = 50
 
# X je matice, y je vektor
X = np.zeros( (MAX_N, 2) )   # kombinace vstupu
y = np.zeros( (MAX_N, ))     # vektor vysledku
 
random.seed(19)
 
for i in range(0, MAX_N):
    X[i, 0] = random.randint(-10, 10)
    X[i, 1] = random.randint(-10, 10)
    y[i] = X[i, 1]
 
 
# rozdeleni dat na treninkovou a testovaci mnozinu
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
 
 
def train_and_test_nn(size: int):
    X_train_ = X_train[:size]
    y_train_ = y_train[:size]
 
    # konstrukce modelu
    nn = MLPRegressor(max_iter=5000, hidden_layer_sizes=(), random_state=1000, learning_rate_init=0.0001)
 
    # trénink modelu
    nn.fit(X_train_, y_train_)
 
    # predikce modelu
    y_pred = nn.predict(X_test)
 
    # chyba predikce
    # 1 = nejlepší predikce modelu
    mse = mean_squared_error(y_test, y_pred)
    r2 = r2_score(y_test, y_pred)
    print("%2d" % size, "%.2f" % mse, "%.2f" % r2)
 
    # vahy na vstupu neuronu ve vystupni vrstve
    w = nn.coefs_[0]
 
    # bias na vstupu neuronu ve vystupni vrstve
    b = nn.intercepts_[0]
 
    # vratit obe vahy i bias
    return mse, r2, w[0][0], w[1][0], b[0]
 
 
# trening site az do poctu prvku MAX_N
r = range(1, MAX_N+1)
 
weights1 = []
weights2 = []
biases = []
mses = []
r2s = []
 
# postupne provest trening site, vyplneni poli s vahami a biasy
for i in r:
    mse, r2, weight1, weight2, bias = train_and_test_nn(i)
    mses.append(mse)
    r2s.append(r2)
    weights1.append(weight1)
    weights2.append(weight2)
    biases.append(bias)
 
print(weights1)
print(weights2)
print(biases)
 
plt.plot(r, mses, r, r2s)
plt.legend(["MSE", "R2 score"])
plt.savefig("mse_r2.png")
plt.show()
 
plt.plot(r, weights1, r, weights2)
plt.legend(["weight1", "weight2"])
plt.savefig("weights.png")
plt.show()
 
plt.plot(r, biases)
plt.legend(["bias"])
plt.savefig("biases.png")
plt.show()

18. Výsledek běhu dnešního posledního demonstračního příkladu

Již naposledy se dnes podívejme na vizualizovanou interní strukturu naší neuronové sítě se třemi neurony:

Obrázek 15: Změna vah na vstupu jediného neuronu ve výstupní vrstvě. Nyní je síť opět naučena (zcela) špatně, protože váhy nejsou rovny 0,0 a 1,0.

Obrázek 16: Změna biasu na vstupu jediného neuronu ve výstupní vrstvě. Opět zde můžeme vidět, že po několika iteracích tréninku se bias ustálil, ovšem na nekorektní (nenulové) hodnotě.

Obrázek 17: Četnost chybných odpovědí, které síť při testování produkuje, se již nikdy nezmenší na nulu a navíc je hodnota MSE obrovská (měla by být ideálně desetinová nebo ještě menší).

docker + kubernetes školení s dotací tip

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
       
124 124_iris_set_statistic.py získání statistických informací o datové sadě Iris https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/124_i­ris_set_statistic.py
125 125_california_housings_statistic.py získání statistických informací o datové sadě California Housings https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/125_ca­lifornia_housings_statistic­.py
126 126_variance_threshold1.py výběr atributů pro trénink modelu pomocí VarianceThreshold https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/126_va­riance_threshold1.py
127 127_variance_threshold2.py výběr atributů pro trénink modelu pomocí VarianceThreshold https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/127_va­riance_threshold2.py
128 128_variance_threshold3.py výběr atributů pro trénink modelu pomocí VarianceThreshold https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/128_va­riance_threshold3.py
129 129_select_best_iris.py výběr nejvhodnějších atributů pro datovou sadu Iris https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/129_se­lect_best_iris.py
130 130_select_best_housings.py výběr nejvhodnějších atributů pro datovou sadu California Housings https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/130_se­lect_best_housings.py
131 131_select_k_best_housings.py výběr K nejvhodnějších atributů pro datovou sadu California Housings https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/131_se­lect_k_best_housings.py
132 132_select_from_model.py výběr atributů na základě k tomu určeného modelu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/132_se­lect_from_model.py
133 133_cross_validation1.py křížová validace po výběru (filtraci) modelů (datová sada Iris) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/133_cros­s_validation1.py
134 134_cross_validation2.py křížová validace po výběru (filtraci) modelů (datová sada California Housings) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/134_cros­s_validation2.py
135 135_cross_validation3.py křížová validace po výběru (filtraci) modelů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/135_cros­s_validation3.py
       
136 136_mlp_classifier01.py použití neuronové sítě pro klasifikaci https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/136_mlp_clas­sifier01.py
137 137_mlp_classifier02.py výpočet úspěšnosti modelu založeného na neuronové síti https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/137_mlp_clas­sifier02.py
138 138_mlp_classifier03.py konfigurace vrstev neuronové sítě https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/138_mlp_clas­sifier03.py
139 139_mlp_classifier04.py proměnný počet neuronů ve vrstvách neuronové sítě https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/139_mlp_clas­sifier04.py
140 140_mlp_classifier05.py proměnný počet neuronů ve více vrstvách neuronové sítě https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/140_mlp_clas­sifier05.py
       
141 141_mlp_regression1.py použití neuronové sítě pro regresi https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/141_mlp_re­gression1.py
142 142_mlp_regression2.py modifikace parametrů neuronové sítě https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/142_mlp_re­gression2.py
143 143_mlp_regression2.py další modifikace parametrů neuronové sítě https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/143_mlp_re­gression2.py
144 144_mlp_regression3.py postupná změna počtu neuronů v jedné skryté vrstvě https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/144_mlp_re­gression3.py
145 145_mlp_regression4.py postupná změna počtu neuronů ve třech skrytých vrstvách https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/145_mlp_re­gression4.py
146 146_mlp_regression5.py postupná změna počtu neuronů v pěti skrytých vrstvách https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/146_mlp_re­gression5.py
147 147_mlp_regression6.py postupná změna počtu skrytých vrstev při zachování počtu neuronů v každé vrstvě https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/147_mlp_re­gression6.py
       
148 148_confusion_matrix1.py zjištění kvality modelu s využitím matice záměn (confusion matrix) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/148_con­fusion_matrix1.py
149 149_confusion_matrix2.py zjištění kvality modelu hledajícího K nejbližších sousedů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/149_con­fusion_matrix2.py
150 150_confusion_matrix3.py zjištění kvality modelu tvořeného neuronovou sítí https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/150_con­fusion_matrix3.py
       
151 151_multiplication_table.py využití neuronové sítě pro odhad výsledků součinu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/151_mul­tiplication_table.py
152 152_multiplication_table.py odhad/vygenerování celé matice malé násobilky neuronovou sítí https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/152_mul­tiplication_table.py
153 153_multiplication_table.py rozšíření výpočtu součinu na rozsah 20×20 (při zachování původní sítě) https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/153_mul­tiplication_table.py
       
154 154_images1.py rozpoznání číslic modelem provádějícím logistickou regresi https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/154_i­mages1.py
155 155_images2.py rozpoznání číslic: využití modelu SVM (metoda podpůrných vektorů) pro klasifikaci obrázků https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/155_i­mages2.py
156 156_images3.py rozpoznání číslic: využití modelu pro hledání K nejbližších sousedů https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/156_i­mages3.py
157 157_images4.py rozpoznání rastrových obrázků neuronovou sítí https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/157_i­mages4.py
158 158_all_predictions.py zobrazení původních obrázků i predikovaných výsledků ve vizuální podobě https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/158_a­ll_predictions.py
159 159_wrong_predictions.py zobrazení 25 nekorektních odhadů modelu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/159_wron­g_predictions.py
160 160_nn_wrong_predictions.py zobrazení 25 nekorektních odhadů neuronové sítě https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/160_nn_wron­g_predictions.py
       
161 161_activation_function.py specifikace aktivační funkce neuronové sítě https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/161_ac­tivation_function.py
162 162_solver.py specifikace trénovacího a učícího algoritmu neuronové sítě https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/162_solver.py
163 163_best_combination.py kombinace nejlepší aktivační funkce a nejlepšího trénovacího algoritmu https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/163_bes­t_combination.py
       
164 164_simplestnn.py neuronová síť s pouhými třemi neurony https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/164_sim­plestnn.py
165 165_no_randomization.py odstranění náhody z procesu tréninku a testování neuronové sítě https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/165_no_ran­domization.py
166 166_step_by_step.py postupné zvětšování počtu vzorků použitých pro trénink neuronové sítě https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/166_step_by_step­.py
167 167_weights_biases.py grafické znázornění závislosti MSE, vah neuronů a biasu na počtu vzorků https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/167_we­ights_biases.py
168 168_maxiter.py zrychlení tréninku neuronové sítě snížením počtu iterací https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/168_ma­xiter.py
169 169_learning_rate.py vyšší míra změny vah na vstupu neuronů při tréninku https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/169_le­arning_rate.py
170 170_too_fast_rate.py riziko příliš vysoké hodnoty learning_rate_init https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/170_to­o_fast_rate.py
171 171_too_slow_rate.py opačný extrém – příliš malá hodnota learning_rate_init https://github.com/tisnik/most-popular-python-libs/blob/master/sklearn/171_to­o_slow_rate.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
  94. Iris Flower Classification with MLP Classifier
    https://www.metriccoders.com/post/iris-flower-classification-with-mlp-classifier

Autor článku

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