NI-ROZ / ANI-ROZ

Pseudokódy ukázekExample pseudocode

Postupy odpovídající jednotlivým klikátkům. Proměnné i jednotlivé kroky jsou popsané česky a anglicky.Procedures matching the interactive examples. Variables and steps are explained in Czech and English.

PCA: učení modeluPCA: fitting the model

Vstupem je pouze trénovací matice X s n řádky (objekty) a d sloupci (příznaky), n > 1. Model uloží průměr, hlavní směry a jejich rozptyly.Input is the training matrix X only, with n rows (objects) and d columns (features), n > 1. The model stores the mean, principal directions and their variances.

μ ← průměr řádků X
A ← od každého řádku X odečti μ
C ← Aᵀ A / (n − 1)
(λⱼ, uⱼ) ← vlastní dvojice symetrické matice C
Seřaď dvojice podle λ₁ ≥ λ₂ ≥ … ≥ λ_d
Každý uⱼ má délku 1, různé směry jsou kolmé
U ← matice se sloupci u₁, …, u_d
Pokud součet λ > 0:
  rⱼ ← λⱼ / součet všech λ
Jinak: podíly rozptylu nejsou definované
Vrať model (μ, U, λ, r)
μ ← mean of the rows of X
A ← subtract μ from each row of X
C ← Aᵀ A / (n − 1)
(λⱼ, uⱼ) ← eigenpairs of symmetric matrix C
Sort pairs so that λ₁ ≥ λ₂ ≥ … ≥ λ_d
Each uⱼ has length 1; different directions are orthogonal
U ← matrix with columns u₁, …, u_d
If the sum of λ is positive:
  rⱼ ← λⱼ / sum of all λ
Otherwise: variance fractions are undefined
Return model (μ, U, λ, r)

Toto je výklad přes kovarianci. U číslic jsme ekvivalentní model spočítali pomocí SVD centrované trénovací matice: pravé singulární vektory dávají směry a λⱼ = sⱼ² / (n − 1). Prohlížeč už tento model načítá hotový. Posuvník ho znovu neučí.This explanation uses covariance. For digits, we computed the equivalent model using the SVD of the centred training matrix: right singular vectors give the directions and λⱼ = sⱼ² / (n − 1). The browser loads that precomputed model. The slider does not fit it again.

scikit-learn

PCA: počet složek a rekonstrukcePCA: component count and reconstruction

Vstupem je naučený model, jeden odložený obrázek x s d = 64 pixely a počet k od 0 do 64. Symbol zⱼ označuje souřadnici obrázku v j-tém naučeném směru.Input is a fitted model, one held-out image x with d = 64 pixels, and k from 0 to 64. Symbol zⱼ denotes the image coordinate along learned direction j.

Při změně posuvníku nebo obrázku:
  x̂ ← μ
  Pro j od 1 do k:
    zⱼ ← uⱼᵀ (x − μ)
    x̂ ← x̂ + zⱼ uⱼ
  zachovaný_podíl ← součet r₁, …, r_k
  MSE ← součet (x_pixel − x̂_pixel)² / d
  V horním grafu zvýrazni prvních k sloupců
  V dolním grafu označ (k, zachovaný_podíl)
  Zobraz x̂ jako mřížku 8 × 8
  Pouze pro zobrazení omez hodnoty na 0 až 16
When the slider or selected image changes:
  x̂ ← μ
  For j from 1 to k:
    zⱼ ← uⱼᵀ (x − μ)
    x̂ ← x̂ + zⱼ uⱼ
  retained_fraction ← sum of r₁, …, r_k
  MSE ← sum of (x_pixel − x̂_pixel)² / d
  Highlight the first k bars in the upper plot
  Mark (k, retained_fraction) in the lower plot
  Display x̂ as an 8 × 8 grid
  Limit values to 0 through 16 for display only

Při k = 0 je součet prázdný a rekonstrukce se rovná průměru. Tlačítka 90 %, 95 % a 99 % hledají nejmenší k, jehož kumulativní podíl dosáhne alespoň daného prahu. MSE se počítá před ořezáním zobrazení. Rozptyl patří trénovací sadě, MSE právě vybranému obrázku.At k = 0, the sum is empty and reconstruction equals the mean. The 90%, 95% and 99% buttons find the smallest k whose cumulative fraction reaches at least the requested threshold. MSE is computed before display clipping. Variance describes the training set; MSE describes the selected image.

scikit-learn

Projekce a variance při otáčení osyProjection and variance while rotating an axis

Vstupem je n bodů v rovině, n > 1, a úhel θ. V této ukázce každý bod dostane jedinou souřadnici zᵢ.Input is n points in a plane, n > 1, and angle θ. This example assigns one coordinate zᵢ to each point.

μ ← průměr bodů
u ← (cos θ, sin θ)
Pro každý bod xᵢ:
  zᵢ ← uᵀ (xᵢ − μ)
  x̂ᵢ ← μ + zᵢ u
Variance ← součet zᵢ² / (n − 1)
Celkový_rozptyl ← rozptyl příznaku 1 + rozptyl příznaku 2
Pokud Celkový_rozptyl > 0:
  Zachováno ← Variance / Celkový_rozptyl
Jinak: zachovaný podíl není definovaný
Nakresli původní body, projekce a souřadnice zᵢ
μ ← mean of the points
u ← (cos θ, sin θ)
For each point xᵢ:
  zᵢ ← uᵀ (xᵢ − μ)
  x̂ᵢ ← μ + zᵢ u
Variance ← sum of zᵢ² / (n − 1)
Total_variance ← variance of feature 1 + variance of feature 2
If Total_variance > 0:
  Retained ← Variance / Total_variance
Otherwise: the retained fraction is undefined
Draw original points, projections and coordinates zᵢ

Dvojice (cos θ, sin θ) má jednotkovou délku. Při ručním otáčení porovnáváme skutečné směry, ne různě dlouhé vektory. Při výpočtu používáme všechny body, i když pro čitelnost nekreslíme všechny spojnice.The pair (cos θ, sin θ) has unit length. Manual rotation compares directions, rather than vectors of different lengths. Every point enters the calculation, even when we omit some projection lines for readability.

scikit-learn

DBSCAN: okolí a růst shlukůDBSCAN: neighbourhoods and cluster expansion

Vstupem jsou body, poloměr ε > 0 a kladné celé min_samples. Okolí zahrnuje všechny body ve vzdálenosti nejvýše ε, včetně bodu samotného.Input is the point set, radius ε > 0 and positive integer min_samples. A neighbourhood includes all points at distance at most ε, including the point itself.

Pro každý bod i:
  Nᵢ ← jeho ε-okolí včetně něj samotného
  jádro[i] ← počet bodů v Nᵢ ≥ min_samples
Všechny štítky ← NEPROZKOUMÁNO
Pro každý bod i v daném pořadí:
  Pokud už má štítek, přeskoč ho
  Pokud není jádro: štítek[i] ← ŠUM; pokračuj
  Založ nový shluk c a přiřaď do něj i
  fronta ← [i]
  Dokud fronta není prázdná:
    p ← odeber první bod z fronty
    Pro každý bod q v Nₚ:
      Pokud štítek[q] = NEPROZKOUMÁNO:
        štítek[q] ← c
        Pokud jádro[q]: přidej q do fronty
      Jinak pokud štítek[q] = ŠUM:
        štítek[q] ← c
Vrať štítky, jádrové body a počty
For each point i:
  Nᵢ ← its ε-neighbourhood, including itself
  core[i] ← number of points in Nᵢ ≥ min_samples
All labels ← UNVISITED
For each point i in the given order:
  If it already has a label, skip it
  If not core: label[i] ← NOISE; continue
  Start a new cluster c and assign i to it
  queue ← [i]
  While the queue is not empty:
    p ← remove the first point from the queue
    For each point q in Nₚ:
      If label[q] = UNVISITED:
        label[q] ← c
        If core[q]: append q to the queue
      Else if label[q] = NOISE:
        label[q] ← c
Return labels, core points and counts

Do fronty se dostávají pouze jádrové body. Dříve označený šum se může stát okrajovým bodem shluku. Sporné okrajové body může pořadí průchodu přiřadit různě. Šedé body během animace prvního shluku ještě nepředstavují konečný šum.Only core points enter the queue. A point previously labelled noise can become a cluster border point. Traversal order can change the assignment of ambiguous border points. Grey points during the first cluster’s animation are not final noise labels.

scikit-learn

Nový příznak a ručně nastavená hraniceA new feature and a manually chosen boundary

Vstupem jsou body (x, y), zvolený střed (cₓ, cᵧ) a výška roviny h > 0. Skutečné třídní štítky používáme jen k vyhodnocení chyb.Input is the points (x, y), chosen centre (cₓ, cᵧ), and plane height h > 0. True class labels are used only to count errors.

Pro každý bod (x, y):
  z ← (x − cₓ)² + (y − cᵧ)²
  Nový_bod ← (x, y, z)
  Pokud z < h: predikce ← vnitřní třída
  Jinak: predikce ← vnější třída
Počet_chyb ← počet predikcí odlišných od skutečné třídy
Ve 2D nakresli kružnici s poloměrem √h
Ve 3D nakresli stejné body a rovinu z = h
Při otáčení kamery změň pouze zobrazení
For each point (x, y):
  z ← (x − cₓ)² + (y − cᵧ)²
  New_point ← (x, y, z)
  If z < h: prediction ← inner class
  Otherwise: prediction ← outer class
Error_count ← predictions different from the true class
In 2D, draw a circle with radius √h
In 3D, draw the same points and plane z = h
When rotating the camera, change only the view

Tento postup odpovídá našemu klikátku. Hranici nastavujeme ručně, neoptimalizujeme margin a netrénujeme SVM. Explicitně počítaný příznak z není obecný RBF kernel.This procedure matches our interactive example. We set the boundary manually, without optimizing a margin or fitting an SVM. The explicitly computed feature z is not a general RBF kernel.

scikit-learn

K-means: přiřazení a nové středyK-means: assignment and updated centres

Vstupem jsou body a počet k. Počáteční středy vybíráme z k různých bodů pomocí uloženého seedu.Input is the points and cluster count k. A saved seed selects k different points as initial centres.

Zvol k různých počátečních středů
Opakuj:
  Přiřaď každý bod k nejbližšímu středu
  Pokud se přiřazení nezměnilo: skonči
  Každý střed přesuň do průměru své skupiny
  Pro prázdnou skupinu ponech původní střed
Vrať přiřazení a středy
Choose k distinct initial centres
Repeat:
  Assign each point to its nearest centre
  If assignments did not change: stop
  Move each centre to its group mean
  For an empty group, keep its previous centre
Return assignments and centres

Klikátko uchovává snímek po přiřazení i po přesunu středů. Vzdálenost je eukleidovská; přiřazení porovnává její čtverec. Omezujeme výpočet na 60 iterací. Změna počátečních středů může vést k jinému lokálnímu řešení.The example records a frame after assignment and after updating centres. Distance is Euclidean; assignment compares squared distances. We cap computation at 60 iterations. Changing initial centres can lead to a different local solution.

scikit-learn

SVM: učení a použití modeluSVM: fitting and applying a model

Tento postup učí skutečné SVM. Výběr parametrů oddělujeme od závěrečného testování.This procedure fits an actual SVM. Parameter selection is separate from final testing.

Odděl trénovací, validační a závěrečnou testovací část
Pro zvolený kernel a kandidáty C, případně γ:
  Nauč SVC pouze na trénovací části
  Parametry posuzuj na validační části
Po volbě parametrů uchovej naučený model
Pro nový bod x:
  f ← rozhodovací funkce naučeného modelu
  Pokud f(x) > 0: předpověz třídu 1
  Jinak: předpověz třídu 0
Závěrečný test použij až pro konečné vyhodnocení
Separate training, validation and final test data
For the chosen kernel and candidate C, optionally γ:
  Fit SVC on the training part only
  Assess parameters on the validation part
After selecting parameters, keep the fitted model
For a new point x:
  f ← decision function of the fitted model
  If f(x) > 0: predict class 1
  Otherwise: predict class 0
Use the final test only for final evaluation

U naší ukázky jsou jednotlivé modely předpočítané v Pythonu a přepínače vybírají jeden z nich. Odložené body jsou ilustrační kontrola; tento přehled nemá další nedotčený závěrečný test. Podpůrné vektory a chyby pocházejí ze skutečného SVC.Our example precomputes each model in Python and its controls select one. Held-out points provide an illustrative check; this demonstration has no further untouched final test. Support vectors and errors come from the actual SVC.

scikit-learn

LDA pro dvě třídyLDA for two classes

Vstupem jsou body se známými štítky 0 a 1. Pro tuto ukázku je vnitrotřídní kovarianční matice invertibilní.Input is points with known labels 0 and 1. The within-class covariance matrix is invertible in this example.

μ₀, μ₁ ← průměry obou tříd
S_w ← nulová matice 2 × 2
Pro každý bod xᵢ se štítkem yᵢ:
  odchylka ← xᵢ − μ_yᵢ
  S_w ← S_w + odchylka × odchylkaᵀ
S_w ← S_w / (n − 2)
Vyřeš S_w w = μ₁ − μ₀
u ← w / ‖w‖
Promítni body do směru u
μ₀, μ₁ ← means of the two classes
S_w ← zero 2 × 2 matrix
For each point xᵢ with label yᵢ:
  deviation ← xᵢ − μ_yᵢ
  S_w ← S_w + deviation × deviationᵀ
S_w ← S_w / (n − 2)
Solve S_w w = μ₁ − μ₀
u ← w / ‖w‖
Project the points onto direction u

PCA by místo odchylek od třídních průměrů použilo odchylky od společného průměru a štítky by nepotřebovalo. Pro singulární matici S_w bychom potřebovali vhodnou regularizaci nebo jiný numerický postup.PCA would use deviations from the overall mean rather than class means, without needing labels. A singular S_w would require suitable regularization or another numerical procedure.

scikit-learn