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.
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ž 16When 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 onlyPř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.
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.
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čtyFor 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 countsDo 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.
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 viewTento 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.
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ředyChoose 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 centresKliká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.
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 evaluationU 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.
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 uPCA 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.