Begreper & referanser
Alle nøkkelbegrepene, formlene og referansene fra Dimensjonsreduksjon og anomalideteksjon, samlet på én side. Bruk denne som oppslag når du leser, øver flashcards eller tar quiz.
Begreper
Sentrale begreper fra kapittelet med korte definisjoner.
Samlebetegnelse for problemer som oppstår når datarommet blir svært glissent etter hvert som antall dimensjoner øker.
Å representere data med færre variable samtidig som valgt struktur bevares best mulig.
En lineær metode som finner ortogonale retninger med størst mulig varians i sentrerte data.
En retning som bare skaleres, ikke roteres, når en lineærtransformasjon anvendes.
Mengden eller andelen av datasettets totale varians som fanges av en hovedkomponent.
En ikke-lineær visualiseringsmetode som prøver å bevare lokale naboskap i en lavdimensjonal projeksjon.
En lavdimensjonal representasjon der observasjoner uttrykkes med nye koordinater.
Å identifisere observasjoner som avviker tydelig fra hovedmønsteret i dataene.
En ensemblemetode som finner anomalier ved at uvanlige punkter vanligvis isoleres med få tilfeldige splitter.
Plott av forklart variansandel (eller egenverdi) per hovedkomponent i synkende rekkefølge. Brukes til å velge hvor mange komponenter som skal beholdes, gjerne der kurven flater ut.
Parameter i t-SNE som omtrent angir hvor mange naboer hvert punkt tar hensyn til. Lav verdi gir mange småklynger, høy verdi visker ut lokale detaljer.
I anomalideteksjon: et normalt punkt som blir flagget som avvik. Fordi normale punkter er i stort flertall, kan en lav falsk positiv-rate likevel gi mange falske alarmer.
Formler
Hver formel: hva den heter, hvordan den ser ut, og hva symbolene betyr.
Sentrering
PCA starter med å trekke middelverdien fra hver observasjon.
Kovariansmatrise
Kovariansmatrisen beskriver varians og samvariasjon mellom featureaksene.
Egenvektorligning
PCA-retningene er egenvektorer til kovariansmatrisen, sortert etter egenverdiene.
PCA-projeksjon
Kolonnene i er de viktigste hovedkomponentene som dataene projiseres på.
Forklart variansandel
Andelen viser hvor mye av total varians hovedkomponent forklarer.
KL-divergens
t-SNE minimerer en KL-divergens mellom nabosannsynligheter i originalrommet og projeksjonen.
Isolation Forest-score
Kort forventet isolasjonssti gir en score nær 1 og tyder på at observasjonen er uvanlig.
Kumulativ forklart varians
Andelen av den totale variansen som de første hovedkomponentene forklarer til sammen. Velg for eksempel minste med .
Normalisering i Isolation Forest
Forventet stilengde for et vanlig punkt i et utvalg på punkter. Scoren deler på , slik at den kan sammenlignes på tvers av utvalgsstørrelser.
Kodesnutter
Kodesnutter fra kapittelet, vist literal.
Avstander mister kontrast i høy dimensjon
import numpy as npimport matplotlib.pyplot as plt n = 500 # antall punkterd = 1000 # @param 1..5000 def kontrast(dim): rng = np.random.default_rng(dim) X = rng.random((n, dim)) # punkter jevnt fordelt i enhetskuben q = rng.random(dim) # et spørrepunkt avstand = np.linalg.norm(X - q, axis=1) return avstand.min(), avstand.max(), (avstand.max() - avstand.min()) / avstand.min() for dim in sorted({2, d}): # d = 2 står med som referanse lav, hoy, k = kontrast(dim) print(f"d = {dim:4d}: nærmeste {lav:5.2f}, fjerneste {hoy:5.2f}, relativ kontrast {k:6.2f}") dims = [2, 5, 10, 30, 100, 300, 1000, 3000, 5000]plt.figure()plt.loglog(dims, [kontrast(m)[2] for m in dims], marker="o", label="relativ kontrast")plt.scatter([d], [kontrast(d)[2]], color="C1", zorder=3, label=f"d = {d}")plt.xlabel("Dimensjon d")plt.ylabel("Relativ kontrast")plt.legend()plt.tight_layout()plt.show()Prøv: Dra d fra 2 mot 5000 og se «relativ kontrast» falle mot null: nærmeste og fjerneste punkt blir nesten like langt unna.
PCA med egenverdidekomponering
import numpy as np rng = np.random.default_rng(4172)x1 = rng.normal(size=80)x2 = 1.8 * x1 + rng.normal(0, 0.35, size=80)x3 = rng.normal(0, 0.25, size=80)X = np.column_stack([x1, x2, x3]) Xc = X - X.mean(axis=0)S = Xc.T @ Xc / (len(Xc) - 1)egenverdier, egenvektorer = np.linalg.eigh(S)rekkefolge = np.argsort(egenverdier)[::-1]egenverdier = egenverdier[rekkefolge]W = egenvektorer[:, rekkefolge]Z = Xc @ W[:, :2] print("forklart varians:", np.round(egenverdier / egenverdier.sum(), 3))print("form før/etter:", X.shape, Z.shape)Koden følger definisjonene direkte: sentrering, kovarians, sorterte egenvektorer og projeksjon. eigh brukes fordi kovariansmatrisen er symmetrisk, og den returnerer egenverdiene i stigende rekkefølge, derfor sorteringen.
Forklart varians med scikit-learn
import numpy as npimport matplotlib.pyplot as pltfrom sklearn.decomposition import PCAfrom sklearn.preprocessing import StandardScaler rng = np.random.default_rng(4172)n = 300hoyde = rng.normal(175, 8, n) # cmvekt = 0.9 * hoyde - 85 + rng.normal(0, 6, n) # kg, følger høydenskritt = 4.5 * hoyde + rng.normal(0, 20, n) # mm, følger høydenpuls = rng.normal(65, 9, n) # uavhengig av restenX = np.column_stack([hoyde, vekt, skritt, puls])standardiser = 1 # @param 0..1pca = PCA().fit(StandardScaler().fit_transform(X) if standardiser else X) andel = pca.explained_variance_ratio_print(f"komponenter for minst 90 %: {np.argmax(np.cumsum(andel) >= 0.9) + 1}")print(f"|ladninger| på PC1 (høyde, vekt, skritt, puls): {np.round(np.abs(pca.components_[0]), 2)}") k = np.arange(1, 5)plt.figure()plt.bar(k, andel, label="per komponent")plt.plot(k, np.cumsum(andel), label="kumulativ", color="C1")plt.xticks(k, [f"PC{i}" for i in k])plt.ylim(0, 1.05)plt.ylabel("forklart variansandel")plt.legend()plt.tight_layout()plt.show()Prøv: Sett standardiser til 0 og se «komponenter for minst 90 %» falle til 1, og hvilken feature som tar over i «|ladninger| på PC1».
t-SNE på tre syntetiske grupper
import numpy as npimport matplotlib.pyplot as pltfrom sklearn.manifold import TSNE rng = np.random.default_rng(4172)sentra = np.array([[-2, -2, 0, 0, 1, 1], [2, 0, -2, 1, 0, 1], [0, 2, 2, -1, 1, 0]])X = np.vstack([rng.normal(senter, 0.45, size=(30, 6)) for senter in sentra])gruppe = np.repeat([0, 1, 2], 30)perplexity = 20 # @param 2..40seed = 0 # @param 0..20 modell = TSNE(n_components=2, perplexity=perplexity, init="random", method="exact", random_state=seed)Z = modell.fit_transform(X) # bare fit_transform: t-SNE har ingen transformprint(f"perplexity {perplexity}, seed {seed}: KL-divergens {modell.kl_divergence_:.3f}") plt.figure()for g in range(3): plt.scatter(Z[gruppe == g, 0], Z[gruppe == g, 1], s=14, label=f"gruppe {g + 1}")plt.title("t-SNE av 6D-data")plt.legend()plt.tight_layout()plt.show()Prøv: Dra perplexity og seed og se hva som står seg (tre grupper) og hva som endrer seg (plassering, retning og «KL-divergens»).
DBSCAN og Isolation Forest på samme syntetiske data
import numpy as npfrom sklearn.cluster import DBSCANfrom sklearn.ensemble import IsolationForestfrom sklearn.preprocessing import StandardScaler rng = np.random.default_rng(4172)normal = rng.normal(loc=(0, 0), scale=(1.0, 0.35), size=(90, 2))uvanlig = np.array([[4.2, 3.5], [-4.0, 3.2], [0.2, -3.8]]) # indeks 90, 91, 92Z = StandardScaler().fit_transform(np.vstack([normal, uvanlig]))eps = 0.45 # @param 0.1..1 0.05contamination = 0.03 # @param 0.01..0.2 0.01 stoy = np.flatnonzero(DBSCAN(eps=eps, min_samples=5).fit_predict(Z) == -1)skog = IsolationForest(contamination=contamination, random_state=4172).fit(Z)flagget = np.flatnonzero(skog.predict(Z) == -1)print(f"DBSCAN-støy: {stoy.tolist()} ({np.sum(stoy < 90)} normale punkter)")print(f"Isolation Forest flagger: {flagget.tolist()} ({np.sum(flagget < 90)} normale punkter)")# -score_samples gir scoren s fra formelen: høy verdi betyr avvikprint(f"s for de tre uvanlige: {np.round(-skog.score_samples(Z[90:]), 2)}")Prøv: Dra contamination opp og se «Isolation Forest flagger» flere normale punkter; dra eps og se hvor mange normale «DBSCAN-støy» får.
Læringsmål
Hva du skal kunne etter å ha lest kapittelet.
- 01Forklar hvorfor avstander mister kontrast og data blir glisne når antall dimensjoner øker
- 02Regn ut hovedkomponenter og forklart variansandel fra en liten kovariansmatrise
- 03Forklar hvorfor data sentreres og noen ganger standardiseres før PCA, og hvorfor hovedkomponentene er ukorrelerte
- 04Velg antall komponenter fra et scree-plott eller en kumulativ terskel
- 05Tolk et t-SNE-kart og forklar hvorfor t-SNE ikke kan transformere nye punkter
- 06Regn ut Isolation Forest-scoren og tolk falske positive når en terskel gjør scoren om til flagg