Nástroje pro UI
Nástroje pro UI
Naprostá většina současných projektů v oblasti umělé inteligence a strojového učení se realizuje v jazyce Python. Je to zvláštní volba - Python je jeden z nejpomalejších běžně používaných jazyků a numerické výpočty jsou to poslední, na co byste ho čekali.
Vysvětlení je v tom, že v Pythonu se skoro nic nepočítá. Kombinace jednoduché syntaxe, bohatého ekosystému knihoven a optimalizovaných numerických jader napsaných v C/C++ a CUDA znamená, že Python jen říká, co se má stát, a stane se to jinde. Když napíšeš A @ B, proběhne to v BLAS knihovně napsané v assembleru. Python u toho čeká.
Tahle stránka je referenční - vrátíš se k ní, když budeš potřebovat příkaz nebo název funkce. Předpokládá to znalost Pythonu na úrovni „umím funkci a cyklus". Teorie za jednotlivými metodami je na příznakových metodách, MLP a dalších stránkách.
Mapa nástrojů
| Skupina | K čemu | Knihovny |
|---|---|---|
| Základní numerické | práce s poli, tabulkami, statistika | NumPy, Pandas |
| Strojové učení | klasické algoritmy | Scikit-learn |
| Hluboké učení | trénování sítí na GPU | PyTorch, TensorFlow |
| Vizualizace | grafy, matice záměn | Matplotlib, Seaborn |
| Správa prostředí | izolované instalace balíků | Anaconda/Conda |
Doporučení: nauč se Scikit-learn a NumPy pořádně, zbytek podle potřeby. Většina úloh z téhle wiki se dá vyřešit deseti řádky ve Scikit-learn a hluboké učení potřebuješ, teprve když jde o obrázky, zvuk nebo text.
Scikit-learn
Nejpoužívanější knihovna pro klasické strojové učení. Obsahuje desítky algoritmů se stejným, velmi jednoduchým programovým rozhraním.
Jednotné API
Každý model (odhadovač, estimator) implementuje trojici metod:
.fit(X, y)- natrénuje model na datechXs označenímiy,.predict(X)- vrací predikce pro nová data,.score(X, y)- vrací přesnost modelu na daných datech.
Tohle je nejužitečnější věc na celé knihovně. Vyměníš GaussianNB() za KNeighborsClassifier() a nezměníš ani řádek zbytku kódu. Porovnání pěti klasifikátorů je pak cyklus přes seznam, ne pět různých programů - viz příklad níž.
Co v ní je
| Algoritmus | Třída | Stránka |
|---|---|---|
| K nejbližších sousedů | KNeighborsClassifier |
příznakové metody |
| Naivní Bayes | GaussianNB, MultinomialNB |
Bayesova klasifikace |
| Support Vector Machines | SVC, LinearSVC |
- |
| Rozhodovací stromy a lesy | DecisionTreeClassifier, RandomForestClassifier |
příznakové metody |
| Minimální vzdálenost | NearestCentroid |
příznakové metody |
| Lineární a logistická regrese | LinearRegression, LogisticRegression |
lineární regrese |
| Shlukování | KMeans, DBSCAN |
shlukování |
Velmi silnou stránkou knihovny je jednotná podpora pro předzpracování dat (škálování, PCA, dělení na trénovací a testovací množinu funkcí train_test_split) a pro vyhodnocení (křížová validace, metriky, matice záměn).
NumPy a Pandas
NumPy
Základní knihovna pro numerické výpočty. Jádrem je typ ndarray - n-rozměrné pole uložené souvisle v paměti. Umožňuje rychlé vektorové operace (sčítání, násobení matic, řešení soustav) bez nutnosti psát cykly v Pythonu.
Prakticky všechny ML knihovny přijímají vstupy jako NumPy pole. Výpočty v NumPy probíhají v optimalizovaném C kódu a jsou řádově rychlejší než nativní Python smyčky.
To „souvisle v paměti" je celý důvod. Pythonovský seznam je pole ukazatelů na objekty rozházené po haldě. NumPy pole je jeden blok bajtů, který procesor přečte naráz a zpracuje vektorovými instrukcemi.
# správně - vektorově
vzdalenosti = np.sqrt(((X - stred)**2).sum(axis=1))
# špatně - Python cyklus, řádově pomalejší
vzdalenosti = [math.sqrt(sum((x[i]-stred[i])**2 for i in range(n))) for x in X]
Pandas
Rozšiřuje NumPy o datové struktury inspirované tabulkami:
Series- jednorozměrná řada s pojmenovaným indexem,DataFrame- dvourozměrná tabulka s pojmenovanými sloupci.
Hodí se pro načítání dat z CSV a Excelu, filtrování, agregaci, slučování tabulek a statistický průzkum dat. Úzce spolupracuje se Scikit-learn - DataFrame se dá předat přímo do metody .fit().
Matplotlib a Seaborn
Matplotlib je nejstarší a dodnes nejpoužívanější knihovna pro vykreslování 2D grafů. Modul pyplot poskytuje rozhraní podobné prostředí MATLABu.
| Funkce | Význam |
|---|---|
plt.plot(x, y) |
liniový graf |
plt.imshow(A) |
zobrazení matice nebo obrázku |
plt.hist(data) |
histogram |
plt.scatter(x, y) |
bodový graf |
plt.show() |
zobrazení figury |
Seaborn je nadstavba nad Matplotlibem zaměřená na statistické vizualizace - distribuční grafy, regresní diagramy, tepelné mapy korelací. Automaticky používá estetičtější výchozí styly.
Pro klasifikační úlohy se často kreslí matice záměn pomocí třídy ConfusionMatrixDisplay ze Scikit-learn. Metoda ConfusionMatrixDisplay.from_predictions(y_true, y_pred) vykreslí matici přímo, bez nutnosti ručního výpočtu.
Knihovny pro hluboké učení
PyTorch
Meta/Facebook AI, 2016. Dnes nejpoužívanější framework v akademické sféře i ve výzkumu. Výpočetní graf se buduje dynamicky (define-by-run), což je přirozené pro pythonovský styl programování a zjednodušuje ladění - můžeš do modelu vložit print nebo breakpoint a funguje to, protože se graf staví za běhu.
- tenzory (
torch.Tensor) s podporou automatického derivování (autograd), - vrstvy a modely (
torch.nn), - optimalizátory (
torch.optim: SGD, Adam, RMSprop), - běh na GPU pomocí CUDA (
.to("cuda")).
Ten autograd je to, co ti ušetří ruční psaní backpropagation. Zapíšeš dopředný průchod a knihovna si derivace odvodí sama.
TensorFlow a Keras
Google, 2015. Druhý hlavní framework. Původně používal statický výpočetní graf, od verze 2.x podporuje i dynamický (eager) režim. Obsahuje vysokoúrovňové rozhraní Keras, v němž se modely staví velmi deklarativně:
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
model = Sequential([
Dense(128, activation='relu', input_shape=(784,)),
Dense(64, activation='relu'),
Dense(10, activation='softmax'),
])
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit(X_train, y_train, epochs=10, batch_size=32)
Přečti si těch pár řádků optikou MLP. 784 je vstup, tedy obrázek 28×28 zploštělý do vektoru. Dvě skryté vrstvy s ReLU. Výstup deset neuronů se softmaxem, tedy pravděpodobnostní rozdělení přes deset číslic. Optimalizátor Adam, ztráta křížová entropie. Celá teorie z několika stránek se vejde do sedmi řádků - a proto je důležité té teorii rozumět, protože jinak nebudeš mít co ladit, až to nebude fungovat.
Hugging Face Transformers
Knihovna Transformers poskytuje stovky předtrénovaných modelů (BERT, GPT, T5) pro zpracování přirozeného jazyka, obrazu i zvuku. S několika řádky kódu lze model stáhnout a použít:
from transformers import pipeline
clf = pipeline("sentiment-analysis")
print(clf("I really enjoyed this movie."))
# [{'label': 'POSITIVE', 'score': 0.9998}]
Tohle je dnes výchozí postup u textových úloh. Netrénuj LSTM od nuly, vezmi předtrénovaný model a dotrénuj jeho poslední vrstvu. Stejná úvaha jako transfer learning u CNN.
Anaconda a správa prostředí
Anaconda je distribuce jazyka Python zaměřená na vědecké výpočty. Obsahuje správce balíků Conda, který řeší závislosti mezi knihovnami včetně ne-pythonovských - CUDA, MKL. Minimální varianta se jmenuje Miniconda.
To je hlavní rozdíl proti pip. Pip umí jen Python balíky. Conda umí i nainstalovat správnou verzi CUDA k tvé grafické kartě, a to je přesně to místo, kde instalace hlubokého učení obvykle padne.
Postup instalace
- Stáhnout instalátor z
anaconda.compro příslušný operační systém. - Spustit instalaci - Windows klikací průvodce, Linux a macOS
bash Anaconda-*.sh. - Ověřit instalaci příkazem
conda --version.
Tahák
conda create --name ui python=3.11 # vytvoření nového prostředí
conda activate ui # přepnutí do prostředí
conda deactivate # ukončení prostředí
conda install numpy pandas # instalace balíků
conda install -c conda-forge scikit-learn # instalace z jiného kanálu
conda list # výpis nainstalovaných balíků
conda env list # výpis všech prostředí
conda remove --name ui --all # smazání prostředí
Vždycky si založ prostředí pro projekt. Instalace do základního prostředí skončí konfliktem verzí, typicky ve chvíli, kdy budeš potřebovat starší TensorFlow pro cizí kód.
Google Colab
Alternativou bez vlastní instalace je Google Colab - webový notebook s GPU/TPU zdarma, předinstalovanými knihovnami a integrací na Google Drive. Vhodný zejména pro rychlé zkoušení a experimenty s hlubokým učením.
Pro první projekt s neuronovou sítí je to nejrychlejší cesta. Bez GPU trvá trénink CNN na notebooku hodiny, v Colabu minuty. Omezení: session se po pár hodinách nečinnosti ukončí a data z ní zmizí, takže si výsledky průběžně ukládej na Drive.
Příklad: klasifikace datové sady Digits
Praktická ukázka typického workflow. Dataset Digits obsahuje ručně psané číslice jako šedotónové obrázky 8×8 v deseti třídách a je součástí Scikit-learn.
Načtení a vizualizace
from sklearn import datasets
import matplotlib.pyplot as plt
digits = datasets.load_digits()
print(digits.data.shape) # (1797, 64)
# zobrazeni prvnich 8 cislic
fig, axes = plt.subplots(1, 8, figsize=(10, 2))
for ax, img, lbl in zip(axes, digits.images, digits.target):
ax.imshow(img, cmap='gray')
ax.set_title(lbl); ax.axis('off')
plt.show()
To (1797, 64) je celý datový model: 1797 vzorků, každý jako vektor 64 čísel, tedy 8×8 pixelů zploštělých do řádku. Prostorová struktura se tím ztratí - a přesně tuhle informaci CNN na rozdíl od klasických metod využívá.
Trénování tří klasifikátorů
from sklearn.model_selection import train_test_split
from sklearn.neighbors import NearestCentroid, KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score, ConfusionMatrixDisplay
X_train, X_test, y_train, y_test = train_test_split(
digits.data, digits.target, test_size=0.3, random_state=42)
modely = {
"NearestCentroid": NearestCentroid(),
"KNN (k=3)": KNeighborsClassifier(n_neighbors=3),
"Gaussian Naive Bayes": GaussianNB(),
}
for jmeno, model in modely.items():
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
acc = accuracy_score(y_test, y_pred)
print(f"{jmeno:22s} accuracy = {acc:.3f}")
ConfusionMatrixDisplay.from_predictions(y_test, y_pred)
plt.title(jmeno); plt.show()
Typické výsledky dosahují přesnosti kolem 90-98 %, přičemž KNN obvykle převyšuje jednoduchý NearestCentroid. Matice záměn pomáhá identifikovat, které číslice si model nejčastěji plete - typicky 8 versus 3.
Tři věci na tom kódu stojí za zvýraznění:
random_state=42 dělá rozdělení reprodukovatelné. Bez něj dostaneš pokaždé jinou přesnost a nebudeš vědět, jestli je rozdíl mezi modely skutečný, nebo jen šum.
Cyklus přes slovník modelů funguje jen díky jednotnému API. Tohle je ta úspora, o které byla řeč nahoře.
Matice záměn se kreslí ke každému modelu, ne jen přesnost. Samotné číslo neřekne, která číslice nefunguje.
Časté chyby
„Přesnost 98 %, hotovo." U nevyvážených dat to nic neznamená. Podívej se na matici záměn a na precision s recall.
„Netrénoval jsem, jen jsem vybral příznaky na celých datech." Testovací data už model ovlivnila a přesnost je nadhodnocená. Výběr příznaků patří dovnitř křížové validace.
„Nemusím škálovat, je to jen k-NN." Právě u k-NN a k-means na škálování všechno stojí. Viz normalizace.
„Nainstaluju to pipem do systémového Pythonu." Skončíš konfliktem verzí. Založ si conda prostředí.
„Neuronová síť bude lepší než rozhodovací strom." Na tabulkových datech obvykle není. Zkus obojí a změř to.
Kam dál
- Příznakové metody - teorie za
KNeighborsClassifieraDecisionTreeClassifier - Bayesova klasifikace - teorie za
GaussianNB - Metriky a vyhodnocení - co
accuracy_scoredoopravdy měří a kdy lže - MLP a backpropagation - co dělá
model.fit()uvnitř - Konvoluční sítě - kdy sáhnout po PyTorchi místo Scikit-learn