Volba funkcí a algoritmů pro trénink neuronových sítí ve scikit-learn

17. 10. 2024
Doba čtení: 44 minut

Sdílet

Autor: Depositphotos
Popíšeme si aktivační funkce, které lze vybrat při konstrukci neuronových sítí. Taktéž se zmíníme o možnosti výběru algoritmů použitých při tréningu neuronových sítí a jejich vlivu na kvalitu výsledků.

Obsah

1. Role aktivačních funkcí v neuronových sítích

2. Aktivační funkce používané v oblasti strojového učení

3. Aktivační funkce, které nejsou diferencovatelné

4. Diferencovatelné aktivační funkce

5. Rozdíly mezi funkcemi Tanh, Sigmoid a SoftSign

6. Aktivační funkce v knihovně scikit-learn

7. Skript pro zobrazení průběhů aktivačních funkcí

8. Specifikace typu aktivační funkce při konstrukci neuronové sítě

9. Matice záměn a přesnosti modelů založených na neuronové síti s různými aktivačními funkcemi

10. Jaké číslice nebyly rozpoznány jednotlivými neuronovými sítěmi?

11. Porovnání přesností všech čtyř neuronových sítí

12. Specifikace algoritmu pro trénink neuronové sítě

13. Skript, který použije různé algoritmy pro trénink neuronové sítě

14. Matice záměn a přesnosti modelů pro různé trénovací algoritmy

15. Jaké číslice nebyly rozpoznány jednotlivými neuronovými sítěmi?

16. Kombinace nejlepší aktivační funkce a nejlepšího algoritmu = nejlepší výsledky?

17. Dosažené výsledky

18. Obsah navazujícího článku

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

20. Odkazy na Internetu

1. Role aktivačních funkcí v neuronových sítích

Připomeňme si nejprve, jak vlastně vypadá idealizovaný model neuronu, který je většinou v umělých neuronových sítích používán. Tento model si můžeme vizualizovat následovně:

Obrázek 1: Idealizovaný model neuronu.

Neuron tedy provádí tento výpočet:

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

Ve skutečnosti není stav neuronu pro n vstupů x1xn určen pouze n vahami w1wn. Musíme přidat ještě váhu w0, na kterou je připojena konstanta 1 (někdy se proto můžeme setkat s nákresem neuronové sítě, v níž se nachází speciální neurony bez vstupů a s jedničkou na výstupu). Model neuronu se přidáním nového vstupu nepatrně zkomplikuje:

Obrázek 2: Idealizovaný model neuronu s biasem.

Důležitá je však aktivační funkce, která zajistí, že výstup neuronu nebude pouhým součtem váhovaných vstupů, ale do celého výpočtu se navíc přidá vhodně zvolená nelinearita. Nejjednodušší aktivační funkce může pro vstupní hodnoty <0 vracet –1 a pro hodnoty ≥0 vracet 1, což vlastně říká, že je nutné dosáhnout určité hraniční hodnoty váženého součtu vstupů, aby byl neuron aktivován (tj. na výstup vyslal jedničku a nikoli –1). Ostatně právě zde znovu vidíme význam biasu, který onu hraniční hodnotu posunuje. Ovšem v praxi se setkáme i s dalšími typy aktivačních funkcí.

Poznámka: neuronová síť se „učí“ takovým způsobem, že si postupně mění váhy na vstupu neuronů. To jsou jediné informace určující stavový prostor neuronové sítě. Naproti tomu aktivační funkce je zvolena globálně pro celou síť nebo (méně často) pro jednotlivé vrstvy sítě.

2. Aktivační funkce používané v oblasti strojového učení

Prozatím jsme v našich testovacích neuronových sítích používali pouze jeden výchozí typ aktivační funkce. Jednalo se konkrétně o funkci nazývanou ReLU neboli celým jménem REctified Linear Unit, která se v této oblasti používá již velmi dlouho. Mezi velké výhody této funkce patří velmi rychlý výpočet, což se pozitivně projeví v rozsáhlých neuronových sítích (rozpoznávání obrazu atd.), mezi určité nevýhody pak to, že není v celém svém oboru diferencovatelná. Ovšem k dispozici máme i mnoho dalších aktivačních funkcí, z nichž některé (konkrétně ty podporované knihovnou scikit-learn) budou popsány v navazujícím textu.

3. Aktivační funkce, které nejsou diferencovatelné

Nejprve si ve stručnosti popíšeme ty aktivační funkce, které nejsou diferencovatelné v celém svém rozsahu platnosti. Tyto funkce většinou obsahují buď jedno „koleno“ nebo dokonce jeden či dva skoky, což v praxi znamená, že se výstupní hodnota z neuronu může prudce změnit, a to i pro malé rozdíly na vstupu. V některých případech může být tato vlastnost neuronů užitečná, ovšem o to víc je chování sítě závislé na jejím správném natrénování. Mezi tyto funkce patří především:

Jméno funkce Hodnoty Základní vlastnosti
ReLU f(x)=0 pro x≤0, f(x)=x pro x>0 má jedno koleno při vstupu 0, velmi často používaná v praxi
ReLU6 f(x)=0 pro x≤0, f(x)=x pro 0<x<6, f(x)=6 pro x≥6 má dvě kolena při vstupech 0 a 6, opět velmi často používaná v praxi
HardTanh f(x)=-1 pro x< –1, f(x)=1 pro x>1, jinak f(x)=x funkce s lineárním průběhem pro –1≤x≤1, má dvě kolena
     
ELU f(x) = max(0, x) + min(0, α * (ex – 1)) pro některé hodnoty α je diferencovatelná
     
SoftShrink f(x)=x-λ pro x>λ, f(x)=x+λ pro x< -λ, jinak f(x)=0 funkce s lineárním průběhem pro x>λ a x< -λ, dvě kolena na hodnotách -λ a λ
HardShrink f(x)=x pro x< -λ a x>λ, jinak f(x)=0 funkce s lineárním průběhem a dvěma skoky na hodnotách -λ a λ
PReLU podobné funkci ReLU, ale má volitelný sklon pro záporné hodnoty x
RReLU podobné předchozí funkce, ale pro záporné hodnoty x je vstup náhodně posunut (jen v režimu tréninku)
AddConstant f(x)=x+k používá se například při ladění, k je skalární a neměnná hodnota
MulConstant f(x)=x*k používá se například při ladění, k je skalární a neměnná hodnota
Poznámka: diferencovatelnost je poměrně důležitá vlastnost, která se mj. projeví i při tréninku umělé neuronové sítě.

Obrázek 3: Průběh funkcí ReLU, ReLU6, HardTanh, SoftShrink i HardShrink.

Obrázek 4: Průběh funkcí ReLU, ReLU6, HardTanh, SoftShrink i HardShrink, zvětšení na okolí počátku souřadného systému.

4. Diferencovatelné aktivační funkce

Další funkce, které jsou v oblasti strojového učení často používány, jsou již diferencovatelné. Nejčastěji se v praxi setkáme s prvními dvěma funkcemi, tedy konkrétně s funkcí Sigmoid a Tanh:

Jméno funkce Způsob výpočtu
Sigmoid f(x) = 1 / (1 + e-x) = ex / (ex+1)
Tanh f(x) = (ex – e-x) / (ex + e-x)
   
SoftMax provede normalizaci vstupního tenzoru, provede výpočet fi(x) = exi – maxi(xi) / sumj expxj – max_i(xi)
SoftMin dtto, ale vypočte fi(x) = e-xi – maxi(-xi) / sumj e-xj – maxi(-xi)
SoftPlus fi(x) = 1/beta * log(1 + ebeta * xi)
SoftSign fi(x) = xi / (1+|xi|)

Obrázek 5: Průběh funkce SoftPlus.

5. Rozdíly mezi funkcemi Tanh, Sigmoid a SoftSign

Funkce Tanh, Sigmoid a SoftSign sice mají podobný tvar křivky, ovšem jejich skutečný průběh je ve skutečnosti odlišný. O tom se můžeme velmi snadno přesvědčit, když si všechny funkce necháme vykreslit do jednoho grafu a budeme měnit rozsah hodnot na x-ové ose:

Obrázek 6: Průběh funkcí Tanh, Sigmoid a SoftSign pro rozsah vstupních hodnot < –5, 5>.

Vidíme, že se kromě tvaru průběhů funkce liší i obor hodnot.

Obrázek 7: Průběh funkcí Tanh, Sigmoid a SoftSign pro rozsah vstupních hodnot < –10, 10>.

Obrázek 8: Průběh funkcí Tanh, Sigmoid a SoftSign pro rozsah vstupních hodnot < –20, 20>.

6. Aktivační funkce v knihovně scikit-learn

Připomeňme si, že v knihovně scikit-learn se s neuronovými sítěmi pracuje stejně jako s ostatními modely; pouze se liší atributy těchto modelů, jejich hyperparametry a tím pádem i jejich konstruktory. K dispozici máme dva typy modelů/neuronových sítí, které jsou realizovány třídami nazvanými MLPClassifier (model pro klasifikaci) a MLPRegressor (model pro regresi). Při konstrukci instance těchto tříd, tj. při inicializaci modelů, můžeme oběma konstruktorům předat i nepovinný parametr activation, který může nabývat hodnot „identity“, „logistic“, „tanh“ nebo „relu“. První hodnota (jde o řetězec!) představuje lineární funkci y=x, hodnota „logistic“ odpovídá sigmoidu (viz předchozí text) a další dvě možné hodnoty již zajisté rozpoznáte sami.

7. Skript pro zobrazení průběhů aktivačních funkcí

Pro zobrazení průběhu aktivačních funkcí poněkud předběhneme obsah tohoto seriálu, protože využijeme framework Torch, který umožňuje výpočet hodnot těchto funkcí. Výsledek si pak můžeme nechat zobrazit pomocí Matplotlibu, což již dobře známe:

import matplotlib.pyplot as plt
import torch
import torch.nn as nn
 
# hodnoty na x-ové ose
x = torch.linspace(-4, 4, 200)
 
# výpočet hodnot aktivačních funkcí
relu = nn.ReLU()(x)
tanh = nn.Tanh()(x)
sigmoid = nn.Sigmoid()(x)
 
# nový graf s průběhem tří aktivačních funkcí
plt.plot(x, sigmoid, label="sigmoid")
plt.plot(x, tanh, label="tanh")
plt.plot(x, relu, label="ReLU")
plt.ylim(-1.5, 2)
 
# zobrazení legendy
plt.legend()
 
# uložení do souboru
plt.savefig("activation_functions.png")
 
# zobrazení v novém okně
plt.show()

Obrázek 9: Průběh aktivačních funkcí, které využijeme v dalších demonstračních příkladech.

8. Specifikace typu aktivační funkce při konstrukci neuronové sítě

Jak jsme si již řekli v předchozím textu, knihovna scikit-learn nám umožňuje specifikovat čtyři typy aktivačních funkcí při konstrukci modelů MLPRegressorMLPClassifier. Pokusme se nyní zjistit, jak (a zda vůbec) má volba aktivační funkce vliv na kvalitu předpovědí modelu natrénovaného pro rozpoznání číslic. Připravíme si tedy n-tici s názvy všech použitelných aktivačních funkcí:

activation_functions = ("identity", "logistic", "tanh", "relu")

Následně si pro každou s funkcí necháme vytvořit novou neuronovou síť, tu natrénujeme, zvalidujeme a necháme si odvodit matici záměn, přesnost modelu atd. Stále budeme používat stejná data, konkrétně datovou sadu s ručně nakreslenými číslicemi:

for activation_function in activation_functions:
    score = train_and_test_model(activation_function)
    scores.append(score)

Celý skript, který tuto operaci provede, bude vypadat následovně:

# Rozpoznání obrazu s využitím knihovny scikit-learn
 
import matplotlib.pyplot as plt
import numpy as np
 
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.metrics import ConfusionMatrixDisplay
 
# Databáze ručně zapsaných číslic
from sklearn.datasets import load_digits
 
# načtení obrázků, s nimiž budeme dále pracovat
digits = load_digits()
 
# zjištění základních informací o obrázcích
print("Description:", digits.DESCR)
 
print("Data:", digits.data.shape)
print("Obrázky:", digits.images.shape)
 
# X je matice (feature matrix)
X = digits.data
 
# y je vektor (response vector)
y = digits.target
 
for_training = len(y) * 8 // 10
print("Vzorků pro trénink:", for_training)
print("\n\n")
 
# rozdělení dat
trainX = X[:for_training]
testX = X[for_training:]
trainY = y[:for_training]
testY = y[for_training:]
 
 
def train_and_test_model(activation_function: str, show_results: bool = False):
    print(f"Neural network with activation function '{activation_function}'")
 
    # provést klasifikaci
    # konstrukce klasifikatoru
    # (s hyperparametrem)
    classifier = MLPClassifier(max_iter=5000, activation=activation_function)
 
    # vypocet skore
    scores = cross_val_score(classifier, X, y, cv=10, scoring="accuracy")
 
    avg_score = scores.mean()
 
    # vypsani prumerneho skore
    print("Accuracy:", avg_score)
    print()
 
    # trening modelu
    classifier.fit(trainX, trainY)
 
    class_names = digits.target_names
 
    # absolutni hodnoty
    disp = ConfusionMatrixDisplay.from_estimator(
        classifier,
        testX,
        testY,
        display_labels=class_names,
        cmap=plt.cm.Blues,
        normalize=None,
    )
 
    # zobrazeni matice
    print(disp.confusion_matrix)
    print()
 
    # ulozeni vysledku
    plt.savefig(f"{activation_function}_confusion_matrix_abs.png")
 
    # vizualizace matice
    if show_results:
        plt.show()
 
    # relativni hodnoty
    disp = ConfusionMatrixDisplay.from_estimator(
        classifier,
        testX,
        testY,
        display_labels=class_names,
        cmap=plt.cm.Blues,
        normalize="true",
    )
 
    # zobrazeni matice
    print(disp.confusion_matrix)
 
    # ulozeni vysledku
    plt.savefig(f"{activation_function}_confusion_matrix_rel.png")
 
    # vizualizace matice
    if show_results:
        plt.show()
 
    predicted_labels = classifier.predict(testX)
    images = digits.images[for_training:]
 
    fig = plt.figure(figsize=(6.4, 10.0))
 
    # zobrazit patnáct výsledků
    wrong = 0
    i = 0
    while wrong < 30:
        predicted_digit = classifier.predict([testX[i]])[0]
        correct_digit = testY[i]
        if predicted_digit != correct_digit:
            image = images[i]
            wrong += 1
            plt.subplot(6, 5, wrong)
            plt.axis("off")
            # zobrazení obrázku
            plt.imshow(image, cmap=plt.cm.gray_r, interpolation="nearest")
            # a přidání predikce - o jakou číslici se jedná
            plt.title(f"{predicted_digit} <> {correct_digit}")
        i += 1
        # nenasli jsme vice cislic
        if i >= len(testX):
            break
 
    # nakonec vše uložíme a zobrazíme
    plt.savefig(f"{activation_function}_wrong_digits.png")
    if show_results:
        plt.show()
    print()
    print("-" * 70)
    return avg_score
 
 
activation_functions = ("identity", "logistic", "tanh", "relu")
 
scores = []
 
for activation_function in activation_functions:
    score = train_and_test_model(activation_function)
    scores.append(score)
 
fig, ax = plt.subplots()
 
ax.bar(activation_functions, scores)
 
ax.set_ylabel("Model accuracy")
ax.set_title("Activation function")
 
plt.savefig("accuracy.png")
plt.show()

9. Matice záměn modelů založených na neuronové síti s různými aktivačními funkcemi

Podívejme se nyní na vypočtené matice záměn pro modely založené na neuronových sítích, u nichž byly použity odlišné aktivační funkce:

Obrázek 10: Použita aktivační funkce „identity“, matice záměn s absolutními hodnotami.

Obrázek 11: Použita aktivační funkce „logistic“ (sigmoid), matice záměn s absolutními hodnotami.

Obrázek 12: Použita aktivační funkce „ReLU“, matice záměn s absolutními hodnotami.

Obrázek 13: Použita aktivační funkce „TanH“, matice záměn s absolutními hodnotami.

Stejné matice záměn, ovšem pro hodnoty relativní:

Obrázek 14: Použita aktivační funkce „identity“, matice záměn s relativními hodnotami.

Obrázek 15: Použita aktivační funkce „logistic“, matice záměn s relativními hodnotami.

Obrázek 16: Použita aktivační funkce „ReLU“, matice záměn s relativními hodnotami.

Obrázek 17: Použita aktivační funkce „TanH“, matice záměn s relativními hodnotami.

Poznámka: žádné podstatné rozdíly mezi jednotlivými sítěmi zde nejsou patrné. Síť je natolik velká a relativně dobře natrénovaná, že vylepšení tímto způsobem nedosáhneme.

Výsledky v textové podobě:

Data: (1797, 64)
Obrázky: (1797, 8, 8)
Vzorků pro trénink: 1437
 
 
 
Neural network with activation function 'identity'
Accuracy: 0.9276505276225947
 
[[33  0  0  0  1  0  1  0  0  0]
 [ 0 30  0  1  0  0  0  0  0  5]
 [ 0  0 35  0  0  0  0  0  0  0]
 [ 0  0  0 26  0  1  0  2  8  0]
 [ 0  0  0  0 34  0  0  0  0  3]
 [ 0  1  0  0  0 36  0  0  0  0]
 [ 0  0  0  0  0  0 37  0  0  0]
 [ 0  1  0  0  1  0  0 32  1  1]
 [ 0  2  0  0  0  0  0  1 30  0]
 [ 0  2  0  0  0  0  0  1  1 33]]
 
[[0.94285714 0.         0.         0.         0.02857143 0.
  0.02857143 0.         0.         0.        ]
 [0.         0.83333333 0.         0.02777778 0.         0.
  0.         0.         0.         0.13888889]
 [0.         0.         1.         0.         0.         0.
  0.         0.         0.         0.        ]
 [0.         0.         0.         0.7027027  0.         0.02702703
  0.         0.05405405 0.21621622 0.        ]
 [0.         0.         0.         0.         0.91891892 0.
  0.         0.         0.         0.08108108]
 [0.         0.02702703 0.         0.         0.         0.97297297
  0.         0.         0.         0.        ]
 [0.         0.         0.         0.         0.         0.
  1.         0.         0.         0.        ]
 [0.         0.02777778 0.         0.         0.02777778 0.
  0.         0.88888889 0.02777778 0.02777778]
 [0.         0.06060606 0.         0.         0.         0.
  0.         0.03030303 0.90909091 0.        ]
 [0.         0.05405405 0.         0.         0.         0.
  0.         0.02702703 0.02702703 0.89189189]]
 
----------------------------------------------------------------------
Neural network with activation function 'logistic'
Accuracy: 0.9587895716945996
 
[[33  0  0  0  1  0  1  0  0  0]
 [ 0 31  0  0  0  0  0  0  0  5]
 [ 0  0 35  0  0  0  0  0  0  0]
 [ 0  0  1 28  0  2  0  1  5  0]
 [ 0  0  0  0 34  0  0  0  0  3]
 [ 0  0  0  0  0 37  0  0  0  0]
 [ 0  1  0  0  0  0 36  0  0  0]
 [ 0  0  0  0  0  0  0 35  1  0]
 [ 0  2  0  1  0  0  0  0 30  0]
 [ 0  0  0  0  0  2  0  1  1 33]]
 
[[0.94285714 0.         0.         0.         0.02857143 0.
  0.02857143 0.         0.         0.        ]
 [0.         0.86111111 0.         0.         0.         0.
  0.         0.         0.         0.13888889]
 [0.         0.         1.         0.         0.         0.
  0.         0.         0.         0.        ]
 [0.         0.         0.02702703 0.75675676 0.         0.05405405
  0.         0.02702703 0.13513514 0.        ]
 [0.         0.         0.         0.         0.91891892 0.
  0.         0.         0.         0.08108108]
 [0.         0.         0.         0.         0.         1.
  0.         0.         0.         0.        ]
 [0.         0.02702703 0.         0.         0.         0.
  0.97297297 0.         0.         0.        ]
 [0.         0.         0.         0.         0.         0.
  0.         0.97222222 0.02777778 0.        ]
 [0.         0.06060606 0.         0.03030303 0.         0.
  0.         0.         0.90909091 0.        ]
 [0.         0.         0.         0.         0.         0.05405405
  0.         0.02702703 0.02702703 0.89189189]]
 
----------------------------------------------------------------------
Neural network with activation function 'tanh'
Accuracy: 0.9510180012414648
 
[[33  0  0  0  1  0  1  0  0  0]
 [ 0 32  0  0  0  0  0  0  0  4]
 [ 0  0 35  0  0  0  0  0  0  0]
 [ 0  0  2 27  0  2  0  2  4  0]
 [ 0  0  0  0 34  0  0  0  1  2]
 [ 0  0  0  0  0 37  0  0  0  0]
 [ 0  1  0  0  0  0 36  0  0  0]
 [ 0  0  0  0  0  0  0 35  1  0]
 [ 1  2  0  1  1  1  0  0 27  0]
 [ 0  0  0  0  0  1  0  2  1 33]]
 
[[0.94285714 0.         0.         0.         0.02857143 0.
  0.02857143 0.         0.         0.        ]
 [0.         0.88888889 0.         0.         0.         0.
  0.         0.         0.         0.11111111]
 [0.         0.         1.         0.         0.         0.
  0.         0.         0.         0.        ]
 [0.         0.         0.05405405 0.72972973 0.         0.05405405
  0.         0.05405405 0.10810811 0.        ]
 [0.         0.         0.         0.         0.91891892 0.
  0.         0.         0.02702703 0.05405405]
 [0.         0.         0.         0.         0.         1.
  0.         0.         0.         0.        ]
 [0.         0.02702703 0.         0.         0.         0.
  0.97297297 0.         0.         0.        ]
 [0.         0.         0.         0.         0.         0.
  0.         0.97222222 0.02777778 0.        ]
 [0.03030303 0.06060606 0.         0.03030303 0.03030303 0.03030303
  0.         0.         0.81818182 0.        ]
 [0.         0.         0.         0.         0.         0.02702703
  0.         0.05405405 0.02702703 0.89189189]]
 
----------------------------------------------------------------------
Neural network with activation function 'relu'
Accuracy: 0.9465704531346988
 
[[33  0  0  0  1  0  1  0  0  0]
 [ 0 35  0  0  0  0  0  0  0  1]
 [ 0  0 34  1  0  0  0  0  0  0]
 [ 0  0  0 26  0  2  0  3  6  0]
 [ 0  0  0  0 34  0  0  0  1  2]
 [ 0  0  0  0  0 37  0  0  0  0]
 [ 0  1  0  0  0  0 36  0  0  0]
 [ 0  0  0  0  2  0  0 31  3  0]
 [ 0  5  0  0  0  0  0  0 28  0]
 [ 0  0  0  0  0  1  0  0  2 34]]
 
[[0.94285714 0.         0.         0.         0.02857143 0.
  0.02857143 0.         0.         0.        ]
 [0.         0.97222222 0.         0.         0.         0.
  0.         0.         0.         0.02777778]
 [0.         0.         0.97142857 0.02857143 0.         0.
  0.         0.         0.         0.        ]
 [0.         0.         0.         0.7027027  0.         0.05405405
  0.         0.08108108 0.16216216 0.        ]
 [0.         0.         0.         0.         0.91891892 0.
  0.         0.         0.02702703 0.05405405]
 [0.         0.         0.         0.         0.         1.
  0.         0.         0.         0.        ]
 [0.         0.02702703 0.         0.         0.         0.
  0.97297297 0.         0.         0.        ]
 [0.         0.         0.         0.         0.05555556 0.
  0.         0.86111111 0.08333333 0.        ]
 [0.         0.15151515 0.         0.         0.         0.
  0.         0.         0.84848485 0.        ]
 [0.         0.         0.         0.         0.         0.02702703
  0.         0.         0.05405405 0.91891892]]
 
----------------------------------------------------------------------

10. Jaké číslice nebyly rozpoznány jednotlivými neuronovými sítěmi?

I přesto, že matice záměn vypadaly pro neuronové sítě s různými aktivačními funkcemi podobně, můžeme nalézt rozdíly v tom, které číslice jednotlivé sítě nerozeznávají správně. Podívejme se tedy na příklady. Pro každý typ neuronové sítě (přesněji řečeno sítě používající odlišnou aktivační funkci) se pokusíme zobrazit 30 špatně rozpoznaných číslic. Je zde ovšem jedna výjimka – síť založená na logistické funkci (sigmoidu) je natolik kvalitní, že nerozeznala pouze 28 číslic z celkového počtu 360 neznámých obrázků, takže na grafu je zobrazeno jen oněch 28 špatně určených číslic:

Obrázek 18: Špatně rozeznané číslice pro neuronovou síť používající aktivační funkci „identity“.

Obrázek 19: Špatně rozeznané číslice pro neuronovou síť používající aktivační funkci „logistic“ (sigmoid).

Obrázek 20: Špatně rozeznané číslice pro neuronovou síť používající aktivační funkci „ReLU“.

Obrázek 21: Špatně rozeznané číslice pro neuronovou síť používající aktivační funkci „TanH“.

11. Porovnání přesností všech čtyř neuronových sítí

A nakonec si ukážeme graf s porovnáním celkové přesnosti všech čtyř neuronových sítí. Jedná se o prakticky shodné hodnoty, což ostatně bylo patrné i při prozkoumání a porovnání matic záměn:

Obrázek 22: Graf ukazující přesnosti všech čtyř neuronových sítí.

12. Specifikace algoritmu pro trénink neuronové sítě

V knihovně scikit-learn můžeme kromě volby aktivační funkce specifikovat i algoritmus použitý při tréninku. Ten mj. určuje způsob aplikace zpětné vazby na základě odpovědi trénované sítě a správné odpovědi. K dispozici máme tři algoritmy pojmenované „adam“, „lbfgs“ a „sgd“. Algoritmus „sgd“ je založen na metodě nazvané stochastic gradient descent a „adam“ je její optimalizovanou verzí. K popisu této metody se ještě vrátíme v souvislosti s knihovnou PyTorch. A „lbfgs“ je odvozen z názvu Limited-memory BFGS, kde BFGS značí Broyden–Fletcher–Goldfarb–Shanno algorithm. I k popisu této metody se ještě vrátíme, ovšem nyní je pouze nutné vědět, že si mezi třemi výše uvedenými algoritmy budeme moci vybrat a ovlivnit tak vlastně kvalitu výsledné neuronové sítě, tj. schopnosti její predikce.

13. Skript, který použije různé algoritmy pro trénink neuronové sítě

Výše uvedené trénovací algoritmy si pochopitelně opět můžeme zvolit, a to předáním pojmenovaného parametru solver do konstruktoru modelu, tedy konkrétně do konstruktorů MLPClassifier nebo MLPRegressor. Opět si tedy můžeme vyzkoušet jak (a zda vůbec) volba algoritmu ovlivní kvalitu natrénování a tím pádem i odhadu neuronové sítě:

solvers = ("lbfgs", "sgd", "adam")
 
scores = []
 
for solver in solvers:
    score = train_and_test_model(solver)
    scores.append(score)

Celý skript, který toto srovnání provádí, vypadá následovně:

# Rozpoznání obrazu s využitím knihovny scikit-learn
 
import matplotlib.pyplot as plt
import numpy as np
 
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.metrics import ConfusionMatrixDisplay
 
# Databáze ručně zapsaných číslic
from sklearn.datasets import load_digits
 
# načtení obrázků, s nimiž budeme dále pracovat
digits = load_digits()
 
# zjištění základních informací o obrázcích
print("Description:", digits.DESCR)
 
print("Data:", digits.data.shape)
print("Obrázky:", digits.images.shape)
 
# X je matice (feature matrix)
X = digits.data
 
# y je vektor (response vector)
y = digits.target
 
for_training = len(y) * 8 // 10
print("Vzorků pro trénink:", for_training)
print("\n\n")
 
# rozdělení dat
trainX = X[:for_training]
testX = X[for_training:]
trainY = y[:for_training]
testY = y[for_training:]
 
 
def train_and_test_model(solver: str, show_results: bool = False):
    print(f"Neural network with solver '{solver}'")
 
    # provést klasifikaci
    # konstrukce klasifikatoru
    # (s hyperparametrem)
    classifier = MLPClassifier(max_iter=5000, solver=solver)
 
    # vypocet skore
    scores = cross_val_score(classifier, X, y, cv=10, scoring="accuracy")
 
    avg_score = scores.mean()
 
    # vypsani prumerneho skore
    print("Accuracy:", avg_score)
    print()
 
    # trening modelu
    classifier.fit(trainX, trainY)
 
    class_names = digits.target_names
 
    # absolutni hodnoty
    disp = ConfusionMatrixDisplay.from_estimator(
        classifier,
        testX,
        testY,
        display_labels=class_names,
        cmap=plt.cm.Blues,
        normalize=None,
    )
 
    # zobrazeni matice
    print(disp.confusion_matrix)
    print()
 
    # ulozeni vysledku
    plt.savefig(f"{solver}_confusion_matrix_abs.png")
 
    # vizualizace matice
    if show_results:
        plt.show()
 
    # relativni hodnoty
    disp = ConfusionMatrixDisplay.from_estimator(
        classifier,
        testX,
        testY,
        display_labels=class_names,
        cmap=plt.cm.Blues,
        normalize="true",
    )
 
    # zobrazeni matice
    print(disp.confusion_matrix)
 
    # ulozeni vysledku
    plt.savefig(f"{solver}_confusion_matrix_rel.png")
 
    # vizualizace matice
    if show_results:
        plt.show()
 
    predicted_labels = classifier.predict(testX)
    images = digits.images[for_training:]
 
    fig = plt.figure(figsize=(6.4, 10.0))
 
    # zobrazit patnáct výsledků
    wrong = 0
    i = 0
    while wrong < 30:
        predicted_digit = classifier.predict([testX[i]])[0]
        correct_digit = testY[i]
        if predicted_digit != correct_digit:
            image = images[i]
            wrong += 1
            plt.subplot(6, 5, wrong)
            plt.axis("off")
            # zobrazení obrázku
            plt.imshow(image, cmap=plt.cm.gray_r, interpolation="nearest")
            # a přidání predikce - o jakou číslici se jedná
            plt.title(f"{predicted_digit} <> {correct_digit}")
        i += 1
        # nenasli jsme vice cislic
        if i >= len(testX):
            break
 
    # nakonec vše uložíme a zobrazíme
    plt.savefig(f"{solver}_wrong_digits.png")
    if show_results:
        plt.show()
    print()
    print("-" * 70)
    return avg_score
 
 
solvers = ("lbfgs", "sgd", "adam")
 
scores = []
 
for solver in solvers:
    score = train_and_test_model(solver)
    scores.append(score)
 
fig, ax = plt.subplots()
 
ax.bar(solvers, scores)
 
ax.set_ylabel("Model accuracy")
ax.set_title("Solver")
 
plt.savefig("accuracy.png")
plt.show()

14. Matice záměn a přesnosti modelů pro různé trénovací algoritmy

Výše uvedený skript zobrazí mj. i matice záměn pro jednotlivé algoritmy. Nejprve si uvedeme matice záměn s absolutními hodnotami:

Obrázek 23: Matice záměn s absolutními hodnotami pro neuronovou síť natrénovanou algoritmem „adam“.

Obrázek 24: Matice záměn s absolutními hodnotami pro neuronovou síť natrénovanou algoritmem „lbfgs“.

Obrázek 25: Matice záměn s absolutními hodnotami pro neuronovou síť natrénovanou algoritmem „sgd“.

Matice záměn s hodnotami relativními:

Obrázek 26: Matice záměn s absolutními hodnotami pro neuronovou síť natrénovanou algoritmem „adam“.

Obrázek 27: Matice záměn s absolutními hodnotami pro neuronovou síť natrénovanou algoritmem „lbfgs“.

Obrázek 28: Matice záměn s absolutními hodnotami pro neuronovou síť natrénovanou algoritmem „sgd“.

Textová podoba výsledků:

Data: (1797, 64)
Obrázky: (1797, 8, 8)
Vzorků pro trénink: 1437
 
 
 
Neural network with solver 'lbfgs'
Accuracy: 0.948786468032278
 
[[33  0  0  0  1  0  1  0  0  0]
 [ 0 32  0  1  0  0  0  0  0  3]
 [ 0  0 35  0  0  0  0  0  0  0]
 [ 0  0  0 31  0  2  0  1  3  0]
 [ 0  1  0  0 34  0  0  0  0  2]
 [ 0  0  0  0  0 37  0  0  0  0]
 [ 0  1  0  0  0  0 36  0  0  0]
 [ 0  1  0  0  1  0  0 33  1  0]
 [ 0  2  0  1  1  2  0  0 27  0]
 [ 0  1  0  1  0  1  0  2  0 32]]
 
[[0.94285714 0.         0.         0.         0.02857143 0.
  0.02857143 0.         0.         0.        ]
 [0.         0.88888889 0.         0.02777778 0.         0.
  0.         0.         0.         0.08333333]
 [0.         0.         1.         0.         0.         0.
  0.         0.         0.         0.        ]
 [0.         0.         0.         0.83783784 0.         0.05405405
  0.         0.02702703 0.08108108 0.        ]
 [0.         0.02702703 0.         0.         0.91891892 0.
  0.         0.         0.         0.05405405]
 [0.         0.         0.         0.         0.         1.
  0.         0.         0.         0.        ]
 [0.         0.02702703 0.         0.         0.         0.
  0.97297297 0.         0.         0.        ]
 [0.         0.02777778 0.         0.         0.02777778 0.
  0.         0.91666667 0.02777778 0.        ]
 [0.         0.06060606 0.         0.03030303 0.03030303 0.06060606
  0.         0.         0.81818182 0.        ]
 [0.         0.02702703 0.         0.02702703 0.         0.02702703
  0.         0.05405405 0.         0.86486486]]
 
----------------------------------------------------------------------
Neural network with solver 'sgd'
Accuracy: 0.9465611421477342
 
[[33  0  0  0  1  0  1  0  0  0]
 [ 0 31  0  0  0  0  0  0  0  5]
 [ 0  0 35  0  0  0  0  0  0  0]
 [ 0  0  2 27  0  3  0  1  4  0]
 [ 0  1  0  0 34  0  0  0  0  2]
 [ 0  0  0  0  0 37  0  0  0  0]
 [ 0  1  0  0  0  0 36  0  0  0]
 [ 0  0  0  0  1  0  0 34  1  0]
 [ 0  3  0  1  0  1  0  1 27  0]
 [ 1  0  0  0  0  1  0  0  1 34]]
 
[[0.94285714 0.         0.         0.         0.02857143 0.
  0.02857143 0.         0.         0.        ]
 [0.         0.86111111 0.         0.         0.         0.
  0.         0.         0.         0.13888889]
 [0.         0.         1.         0.         0.         0.
  0.         0.         0.         0.        ]
 [0.         0.         0.05405405 0.72972973 0.         0.08108108
  0.         0.02702703 0.10810811 0.        ]
 [0.         0.02702703 0.         0.         0.91891892 0.
  0.         0.         0.         0.05405405]
 [0.         0.         0.         0.         0.         1.
  0.         0.         0.         0.        ]
 [0.         0.02702703 0.         0.         0.         0.
  0.97297297 0.         0.         0.        ]
 [0.         0.         0.         0.         0.02777778 0.
  0.         0.94444444 0.02777778 0.        ]
 [0.         0.09090909 0.         0.03030303 0.         0.03030303
  0.         0.03030303 0.81818182 0.        ]
 [0.02702703 0.         0.         0.         0.         0.02702703
  0.         0.         0.02702703 0.91891892]]
 
----------------------------------------------------------------------
Neural network with solver 'adam'
Accuracy: 0.9549130974549968
 
[[33  0  0  0  1  0  1  0  0  0]
 [ 0 35  0  0  0  0  0  0  0  1]
 [ 0  0 34  1  0  0  0  0  0  0]
 [ 0  0  0 30  0  3  0  1  3  0]
 [ 0  0  0  0 34  0  0  0  0  3]
 [ 0  1  0  0  0 36  0  0  0  0]
 [ 0  1  0  0  0  0 36  0  0  0]
 [ 0  0  0  0  1  0  0 35  0  0]
 [ 0  2  0  0  1  0  0  0 29  1]
 [ 0  1  0  1  0  0  0  3  1 31]]
 
[[0.94285714 0.         0.         0.         0.02857143 0.
  0.02857143 0.         0.         0.        ]
 [0.         0.97222222 0.         0.         0.         0.
  0.         0.         0.         0.02777778]
 [0.         0.         0.97142857 0.02857143 0.         0.
  0.         0.         0.         0.        ]
 [0.         0.         0.         0.81081081 0.         0.08108108
  0.         0.02702703 0.08108108 0.        ]
 [0.         0.         0.         0.         0.91891892 0.
  0.         0.         0.         0.08108108]
 [0.         0.02702703 0.         0.         0.         0.97297297
  0.         0.         0.         0.        ]
 [0.         0.02702703 0.         0.         0.         0.
  0.97297297 0.         0.         0.        ]
 [0.         0.         0.         0.         0.02777778 0.
  0.         0.97222222 0.         0.        ]
 [0.         0.06060606 0.         0.         0.03030303 0.
  0.         0.         0.87878788 0.03030303]
 [0.         0.02702703 0.         0.02702703 0.         0.
  0.         0.08108108 0.02702703 0.83783784]]
 
----------------------------------------------------------------------

15. Jaké číslice nebyly rozpoznány jednotlivými neuronovými sítěmi?

Samozřejmě si taktéž ukážeme, jaký vliv měla volba trénovacích algoritmů na to, které číslice jsou rozeznány či naopak nerozeznány jednotlivými natrénovanými sítěmi. Opět se pokusíme zobrazit 30 špatných výsledků z celkem 360 pokusů o rozeznání, které každá síť provedla. Pokud je některá ze sítí tak dobře natrénovaná, že neměla víc než 30 chybných odhadů, bude ve výsledku zobrazeno menší množství číslic:

Obrázek 29: Číslice, které nebyly rozeznány sítí natrénovanou algoritmem „adam“.

Obrázek 30: Číslice, které nebyly rozeznány sítí natrénovanou algoritmem „lbfgs“.

Obrázek 31: Číslice, které nebyly rozeznány sítí natrénovanou algoritmem „sgd“.

16. Kombinace nejlepší aktivační funkce a nejlepšího algoritmu = nejlepší výsledky?

Z předchozích výsledků vyplývá, že použitím aktivační funkce jsme dostali (beze změny trénovacího algoritmu) ty nejlepší výsledky. A naopak, pokud pouze měníme trénovací algoritmy, dosáhneme nejlepších výsledků při výběru algoritmu „adam“:

Obrázek 32: Přesnosti odpovědí neuronových sítí natrénovaných různými algoritmy. Nejlépe dopadlo použití algoritmu „adam“.

Mohlo by se tedy zdát, že pokud zkombinujeme tu nejlepší aktivační funkci s nejlepším trénovacím algoritmem, dostaneme vždy ty nejlepší výsledky – ideálně natrénovanou neuronovou síť. V praxi to tak ovšem není, a to z mnoha důvodů. Jedním z nich je fakt, že se při tréninku používají náhodné hodnoty a ani samotná kombinace dvou „nejlepších“ parametrů obecně nedává nejlepší výsledek. Jedinou spolehlivou metodou je vyzkoušet všechno možnosti a navíc použít i křížovou validaci – což je ovšem v případě neuronových sítí časově velmi složité.

Ostatně si vyzkoušejme kombinaci „nejlepších“ algoritmů v praxi:

# Rozpoznání obrazu s využitím knihovny scikit-learn
 
import matplotlib.pyplot as plt
import numpy as np
 
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.metrics import ConfusionMatrixDisplay
 
# Databáze ručně zapsaných číslic
from sklearn.datasets import load_digits
 
ACTIVATION_FUNCTION="logistic"
SOLVER="adam"
 
# načtení obrázků, s nimiž budeme dále pracovat
digits = load_digits()
 
# zjištění základních informací o obrázcích
print("Description:", digits.DESCR)
 
print("Data:", digits.data.shape)
print("Obrázky:", digits.images.shape)
 
# X je matice (feature matrix)
X = digits.data
 
# y je vektor (response vector)
y = digits.target
 
for_training = len(y) * 8 // 10
print("Vzorků pro trénink:", for_training)
print("\n\n")
 
# rozdělení dat
trainX = X[:for_training]
testX = X[for_training:]
trainY = y[:for_training]
testY = y[for_training:]
 
 
def train_and_test_model(show_results: bool = False):
    # provést klasifikaci
    # konstrukce klasifikatoru
    # (s hyperparametrem)
    classifier = MLPClassifier(max_iter=5000, activation=ACTIVATION_FUNCTION, solver=SOLVER)
 
    # vypocet skore
    scores = cross_val_score(classifier, X, y, cv=10, scoring="accuracy")
 
    avg_score = scores.mean()
 
    # vypsani prumerneho skore
    print("Accuracy:", avg_score)
    print()
 
    # trening modelu
    classifier.fit(trainX, trainY)
 
    class_names = digits.target_names
 
    # absolutni hodnoty
    disp = ConfusionMatrixDisplay.from_estimator(
        classifier,
        testX,
        testY,
        display_labels=class_names,
        cmap=plt.cm.Blues,
        normalize=None,
    )
 
    # zobrazeni matice
    print(disp.confusion_matrix)
    print()
 
    # ulozeni vysledku
    plt.savefig("confusion_matrix_abs.png")
 
    # vizualizace matice
    if show_results:
        plt.show()
 
    # relativni hodnoty
    disp = ConfusionMatrixDisplay.from_estimator(
        classifier,
        testX,
        testY,
        display_labels=class_names,
        cmap=plt.cm.Blues,
        normalize="true",
    )
 
    # zobrazeni matice
    print(disp.confusion_matrix)
 
    # ulozeni vysledku
    plt.savefig("confusion_matrix_rel.png")
 
    # vizualizace matice
    if show_results:
        plt.show()
 
    predicted_labels = classifier.predict(testX)
    images = digits.images[for_training:]
 
    fig = plt.figure(figsize=(6.4, 10.0))
 
    # zobrazit patnáct výsledků
    wrong = 0
    i = 0
    while wrong < 30:
        predicted_digit = classifier.predict([testX[i]])[0]
        correct_digit = testY[i]
        if predicted_digit != correct_digit:
            image = images[i]
            wrong += 1
            plt.subplot(6, 5, wrong)
            plt.axis("off")
            # zobrazení obrázku
            plt.imshow(image, cmap=plt.cm.gray_r, interpolation="nearest")
            # a přidání predikce - o jakou číslici se jedná
            plt.title(f"{predicted_digit} <> {correct_digit}")
        i += 1
        # nenasli jsme vice cislic
        if i >= len(testX):
            break
 
    # nakonec vše uložíme a zobrazíme
    plt.savefig("wrong_digits.png")
    if show_results:
        plt.show()
    print()
    print("-" * 70)
    return avg_score
 
 
train_and_test_model()

17. Dosažené výsledky

Výsledky získané spuštěním předchozího skriptu mohou být následující (ovšem bez křížové validace nebude skóre vždy stejné):

Obrázek 33: Matice záměn s absolutními hodnotami.

Obrázek 34: Matice záměn s relativními hodnotami.

Obrázek 35: Špatně rozpoznané číslice z 360 vzorků (více jich není).

Poznámka: můžete se zeptat, jestli má smysl zkombinovat více neuronových sítí a zvolit si vždy tu odpověď, která je nejčastější. To obecně nemusí vést k lepším výsledkům, což si ostatně ukážeme příště.

18. Obsah navazujícího článku

V dnešním článku jsme dokončili popis většiny užitečných vlastností knihovny scikit-learn. Příště se ještě na chvíli zastavíme u sledování jednotlivých fází učení neuronových sítí. Ovšem knihovna scikit-learn má i některá omezení, která se týkají právě problematiky neuronových sítí. Z tohoto důvodu se v navazujících článcích seznámíme s knihovnou, která je přímo určena pro trénink a aplikaci neuronových sítí. Tato knihovna se jmenuje PyTorch. Původně tato knihovna částečně vycházela z knihovny Torch, s níž jsme se již na stránkách Roota setkali v seriálu Torch: framework pro strojové učení. Nicméně později PyTorch dospěl do zcela samostatného projektu, který je navíc v praxi poměrně intenzivně používán, takže je dobré znát koncepty, na kterých je postaven.

Obrázek 36: Logo projektu PyTorch.

prace_s_linuxem_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

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.