A 3.3. Vetítés, legkisebb négyzetek és kondicionáltság a legkisebb négyzetes feladatot vetítésként és normálegyenletként vizsgálta. Ott a kondíciószámot már megelőlegeztük, mélyebb definíció nélkül. Most az a kérdés, hogy egy lineáris leképezés mely irányban nyújtja a legerősebben az egységvektorokat, és ez a maximális nyújtás hogyan ad felső korlátot minden értékre.
Induló becslésként használjuk az oszlopnormákat. Ha oszlopai legfeljebb hosszúak, akkor a háromszög-egyenlőtlenséggel tehát valamilyen -es korlát mindig van. Ez azonban általában nem éles: ortogonális oszlopú mátrixra a maximális nyújtás , nem . A fejezet célja az éles állandó, a spektrális norma bevezetése.
A 3.3. Vetítés, legkisebb négyzetek és kondicionáltság alfejezetből ismert az ortogonális mátrix fogalma, a vetítés és a ranghiány alapgondolata. A 2.4. Kis tudományos szoftverprojekt alfejezetből a kódprojekt-fegyelem: explicit input, reprodukálható ellenőrzés, futási jegyzék. Az itteni labor ugyanezt a formát követi.
Definíció. Legyen négyzetes mátrix. A szám sajátértéke -nak, ha létezik , , amelyre
A vektor a -hoz tartozó sajátvektor. A definíció csak négyzetes mátrixra van értelmezve, mert és alakjának meg kell egyeznie. Az leképezés tehát egy sajátirányban csak skáláz: a kép párhuzamos az inputtal.
A sajátérték nem mindig jellemzi a torzítást. Tekintsük a mátrixot. Karakterisztikus polinomja , tehát egyetlen sajátértéke , algebrai multiplicitással . A leképezés mégsem nulla: , így a egységvektor képe hosszú. Általában egy nem szimmetrikus mátrix sajátvektorai nem alkotnak ortonormált bázist, ezért a maximális nyújtást nem olvashatjuk le pusztán a legnagyobb -ból. Erre való a szinguláris érték.
Tétel (teljes SVD, felhasznált állítás). Minden mátrix előáll alakban, ahol és ortogonális mátrixok, olyan mátrix, amelynek csak a elemei lehetnek nullától különbözők, és ezek szerint rendezettek. Az a mátrix rangja, a számok a szinguláris értékek. Ebből következnek a kapcsolatok
Ezt a létezési és ortonormáltsági állítást a [B01] tárgyalja; a teljes bizonyítást itt tudatosan nem másoljuk, a kézirat csak az itt megnevezett állításait használja. A felhasznált rész tehát: ortogonális, diagonális szerkezetű, és a nemnulla -k száma .
A redukált SVD elhagyja a nulla szinguláris értékekhez tartozó oszlopokat: ahol , pozitív diagonális, . Mivel képtere legfeljebb -dimenziós, a redukált alak is egzakt egyenlőség.
Rang. Az rangja a képtér dimenziója, azaz a lineárisan független oszlopok száma. A fenti tételben éppen a pozitív szinguláris értékek száma. Az magtere a nulla szinguláris értékhez tartozó jobb oldali szinguláris vektorok terének feszítője, képtérét pedig az vektorok feszítik. A gyakorlatban a rangot gyakran numerikus küszöbbel becsüljük: a nagyon kicsi -t nulla rangnak tekintjük, de ez a skálafüggő küszöb heurisztika, nem a matematikai rang definíciója.
Kézi példa. A mátrix második oszlopa nulla, ezért a képtér az által feszített egyenes, tehát . Az SVD: Ellenőrzésül: Tehát , . Az vektor hossza , az ; a maximális nyújtás sejthetően . A könyvtári ellenőrző munkamenet, jelölt várt kimenettel (a kód e kézirat írásakor nem futtatott mérés):
import numpy as np
A = np.array([[3.0, 0.0],
[4.0, 0.0]], dtype=np.float64)
print(np.linalg.svd(A, compute_uv=False))
# Várt: [5. 0.]
print(np.linalg.matrix_rank(A))
# Várt: 1Az
mátrix
,
sajátértékei
és
;
a pozitív sajátérték négyzetgyöke éppen
.
Általában
,
tehát
sajátértékei a
értékek. Numerikusan mégsem az
sajátfelbontásából számolunk szinguláris értékeket, mert a kondíciószám
négyzetre emelkedik; az np.linalg.svd közvetlenül az
-n
dolgozik.
Definíció. Az mátrix spektrális normája Ez a leképezés maximális nyújtási aránya. A maximum létezik, mert véges dimenzióban az egységgömb kompakt, és az függvény folytonos.
Először a kötelező levezetést diagonális operátorra végezzük el.
Lemma (diagonális operátor normakorlátja). Legyen olyan mátrix, amelynek csak a , elemei lehetnek nullától különbözők. Ekkor
Bizonyítás. Legyen , és legyen olyan index, amelyre . Az standard egységvektorra teljesül, tehát így .
A felső korláthoz legyen , . A diagonális szerkezetből az koordinátákra, és nulla a többi helyen. Ezért Négyzetgyököt vonva , és mivel ez minden egységvektorra igaz, . A két egyenlőtlenségből az állítás.
A tetszőleges esetét erre vezetjük vissza a megnevezett SVD-állítás segítségével.
Levezetés: a spektrális norma SVD-ből. Legyen teljes SVD. Egy tetszőleges egységvektorra legyen . Mivel ortogonális, tehát is egységvektor. Hasonlóan ortogonalitása miatt . Így A lemma szerint , mert a diagonális elemei nemnegatívak, csökkenően rendezettek, és a legnagyobb . Ezért Az választással , így , és . Tehát az egyenlőség felvétetik, és
Ez a hasznos normakorlát tehát: A legélesebb, mert a jobb oldali szinguláris vektorok mentén egyenlőség áll fenn.
A 3.3. Vetítés, legkisebb négyzetek és kondicionáltság alfejezetben igértük meg a kondíciószám pontos definícióját. Ha teljes oszloprangú (), akkor Ranghiányos esetben , ezért a kondíciószámot szimbólummal jelöljük. Ebből azonnal látszik a 3.3. Vetítés, legkisebb négyzetek és kondicionáltság alfejezetbeli figyelmeztetés indoka is: sajátértékei , tehát A normálegyenlet mátrixa tehát pontosan a négyzetére növelt érzékenységet örökli.
A szinguláris értékek csökkenő sorrendje természetes tömörítést is ad. Rögzítsünk -t, és legyen Jelölje az alacsony rangú közelítését. A , mert a darab diád lineárisan független képtér-irányt feszít.
Tétel (Eckart–Young–Mirsky, megnevezett eredmény, itt nem bizonyított). Tetszőleges , mátrixra és a fenti választással egyenlőség teljesül. A esetben konvencióval .
A tétel pontos feltételeihez és bizonyításához a [B01] vonatkozó szingulárisérték-felbontás szakaszát kell használni; ez az egység csak a spektrális norma alakú állítását nevezi meg. A kép- és mátrixtömörítésben ugyanez a konstrukció a kiindulópont: a legnagyobb -khez tartozó tagok hordozzák a legerősebb lineáris struktúrát.
A PCA-előkép szempontjából ez a következőt jelenti. Legyen egy soronként centrált adatmátrix, azaz minden megfigyelés egy sor. A szimmetrikus mátrix sajátfelbontásának főtengelyeit a jobb oldali szinguláris vektorok adják, mert . Az első főtengely , azaz a legnagyobb szinguláris értékhez tartozó irány a -dimenziós bemeneti térben. Egy centrált -sor kódját adja, és ennek az ortogonális vetítés szerinti lineáris előkép/rekonstrukciója: A kódkoordinátából tehát az adatpontnak csak a által feszített altérbe eső részét kapjuk vissza; a komplementer rész az eldobott szinguláris irányokban maradt hiba. A formális variancia- és valószínűségértelmezés az 5.1.–5.2. feladata; itt a „szóródási irány” csak a centrált négyzetes eltérések lineáris algebrai jellemzését jelenti.
A labor két fix
-es
mátrixszal transzformál egy egységnégyzetet és egy egységkörvonalat,
majd a véges pontmintán mért maximális nyújtást a szinguláris értékkel
hasonlítja össze. Az inputok:
,
.
Az alakzatok a
D-sík
pontjai; a kód float64-ben, CPU-n dolgozik. A példa determinisztikus,
ezért seedre nincs szükség; ha a hallgató később zajt ad a
ponthalmazhoz, akkor np.random.default_rng(20261020)
használandó.
"""n012_shape_stretch.py
A négyzet és kör maximális véges-mintás nyújtása két lineáris
transzformáció alatt, összevetve a spektrális normával.
Munkakönyvtár: lab/n012
Futtatás: python n012_shape_stretch.py
A kimeneti 'shape_under_transforms.png' a torzított alakzatokat menti.
Az itt közölt konzolszöveg jelölt számított várt kimenet, nem futtatási jegyzőkönyv.
"""
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
WORK = Path("lab/n012")
WORK.mkdir(parents=True, exist_ok=True)
DTYPE = np.float64
# Két vizsgált lineáris transzformáció.
A1 = np.array([[2.0, 0.0],
[0.0, 0.5]], dtype=DTYPE)
A2 = np.array([[1.5, 0.5],
[0.5, 1.0]], dtype=DTYPE)
def unit_circle(n: int = 512) -> np.ndarray:
"""Az egységkörvonal n darab pontja, shape (n, 2)."""
theta = np.linspace(0.0, 2.0 * np.pi, n, endpoint=False, dtype=DTYPE)
return np.column_stack((np.cos(theta), np.sin(theta)))
def unit_square() -> np.ndarray:
"""A zárt egységnégyzet csúcsai; a zárt alakzathoz az első pont ismétlődik."""
return np.array([[-1.0, -1.0],
[ 1.0, -1.0],
[ 1.0, 1.0],
[-1.0, 1.0],
[-1.0, -1.0]], dtype=DTYPE)
def max_finite_stretch(A: np.ndarray, X: np.ndarray) -> float:
"""A véges ponthalmaz pontjaiban mért maximális ||Ax||/||x|| arány."""
AX = X @ A.T
return float(np.max(np.linalg.norm(AX, axis=1)
/ np.linalg.norm(X, axis=1)))
def spectral_norm(A: np.ndarray) -> float:
"""A spektrális norma, azaz a legnagyobb szinguláris érték."""
return float(np.linalg.svd(A, compute_uv=False)[0])
def main() -> None:
square = unit_square()
circle = unit_circle()
results = []
for name, A in [("A1", A1), ("A2", A2)]:
sigma = spectral_norm(A)
square_stretch = max_finite_stretch(A, square)
circle_stretch = max_finite_stretch(A, circle)
print(f"{name}: sigma={sigma:.16f}, "
f"square_max={square_stretch:.16f}, "
f"circle_max={circle_stretch:.16f}")
results.append((A, sigma, square_stretch, circle_stretch))
# A1: mindkét szinguláris irány szerepel a négyzet csúcsaiban is,
# ezért a négyzetminta is pontosan eléri a spektrális normát.
(_, sigma1, square1, circle1) = results[0]
np.testing.assert_allclose(square1, sigma1, rtol=0.0, atol=1e-12)
np.testing.assert_allclose(circle1, sigma1, rtol=0.0, atol=1e-12)
# A2: a négyzetminta általában nem tartalmazza a legnagyobb nyújtás
# irányát, tehát csak alsó becslés; a sűrű körvonal az irányt közelíti.
(_, sigma2, square2, circle2) = results[1]
assert square2 <= sigma2 * (1.0 + 1e-12) + 1e-15
np.testing.assert_allclose(circle2, sigma2, rtol=5e-4, atol=5e-4)
fig, axes = plt.subplots(1, 2, figsize=(10, 5))
for ax, (A, _, _, _) in zip(axes, results):
ax.plot(square[:, 0], square[:, 1], "--", label="eredeti négyzet")
ax.plot((square @ A.T)[:, 0], (square @ A.T)[:, 1],
label="transzformált négyzet")
ax.plot(circle[:, 0], circle[:, 1], ":", label="eredeti kör")
ax.plot((circle @ A.T)[:, 0], (circle @ A.T)[:, 1],
label="transzformált kör", linewidth=2.0)
ax.set_aspect("equal")
ax.set_title(f"A = {A.tolist()}")
ax.legend(loc="upper left")
ax.grid(True, alpha=0.3)
fig.tight_layout()
fig.savefig(WORK / "shape_under_transforms.png", dpi=150)
print(f"Ábra: {WORK / 'shape_under_transforms.png'}")
if __name__ == "__main__":
main()Várt, számított értelmezés a kód determinisztikus előírásából:
A labor legfontosabb tanulsága: a véges alakzatpontokból mért maximum alsó becslés a spektrális normára. A spektrális norma minden irány felett veszi a szuprémumot; a szögben folytonos kör már jól közelíti ezt, a négyzet viszont nem feltétlenül.
A nagy varianciájú irány nem szükségképpen a predikció szempontjából legjobb irány. A PCA az mátrix szóródását magyarázza, nem azt, hogy egy irány mennyire hasznos egy külső cél előrejelzésére.
Ellenpélda futtatás nélkül is látható. Legyen a megfigyelések első koordinátája , a második , ahol a predikciótól független erős háttérjel. A cél legyen . A centrált szóródási mátrixát az első koordináta dominálja, mert a faktora a -mal szemben, tehát az első főtengely lényegében . Az -t azonban csak irány mentén tudjuk jól lineárisan magyarázni. A legnagyobb variancia iránya tehát a lehető legrosszabb prediktor, a címke szempontjából hasznos irány pedig kisebb teljes varianciájú. Ez a heurisztika irányválogatásnál fontos: a PCA célfüggetlen dimenziócsökkentés, nem címkeoptimalizáló transzformáció.
Az elsőnél az alak-egyezése dönt: , , ez csak esetben lehet általánosan értelmes. A másodiknál , a mátrix ranghiányos, így az együttható nem egyértelmű; a predikció ettől még lehet egyértelmű, ahogy 3.3. Vetítés, legkisebb négyzetek és kondicionáltság tárgyalta.
Nehézség: 1. Előfeltétel: 3.3. Vetítés, legkisebb négyzetek és kondicionáltság ortogonális mátrix, jelen egység SVD-definíciója. Adja meg, hogy egy mátrix szinguláris értékei hogyan viszonyulnak az és az mátrixok sajátértékeihez. Válaszát egy -es, nem szimmetrikus példán ellenőrizze. Átadandó: a két sajátérték-kapcsolat pontos megfogalmazása, alakokkal, és a példa kiszámolt értékei.
Nehézség: 2. Előfeltétel: a spektrális norma definíciója. Legyen , . Igazolja, hogy Ezután mutassa meg, hogy bármely kompatibilis méretű ortogonális mátrixra Átadandó: teljes, indokolt levezetés, az egyenlőség vagy az éles korlát kérdésének jelzése.
Nehézség: 2. Előfeltétel: jelen egység laborja, 2.4. Kis tudományos szoftverprojekt tesztfegyelem.
Írjon olyan ratio_and_check(A, X) függvényt, amely minden
X sorra kiszámítja a
arányt, ellenőrzi, hogy az nem haladja meg a
korlátot, és visszaadja a maximális arányt. Tesztelje a jelen egység
példáján az
,
és
vektorokra, a megadott toleranciákkal. Átadandó: teljes kód, a három
arány és az ellenőrzés kimenete.
Nehézség: 2. Előfeltétel: a ellenpélda ebből az egységből. Az alábbi függvény állítólag a maximális nyújtást adja meg:
def wrong_max_stretch(A):
import numpy as np
return float(np.max(np.abs(np.linalg.eigvals(A))))Adjon konkrét mátrixot, amelyre ez hibás eredményt ad. Lokalizálja a hiba okát, mondja meg a következményt, javítsa a függvényt, és ellenőrizze a javítást a konkrét példán. Átadandó: hibás és helyes kimenet, a hiba magyarázata, javított kód és visszaellenőrzés.
Nehézség: 3. Előfeltétel: 3.3. Vetítés, legkisebb négyzetek és kondicionáltság legkisebb négyzetek, 1.3. Adatfelosztás és a megfigyelési egység adatfelosztás, jelen egység PCA-előképe. Tervezzen olyan kis szimulációs protokollt, amely azt vizsgálja, hogy az első főkomponensre vetített egyetlen prediktor jobb-e, mint egy kézzel kiválasztott, kisebb varianciájú jelirány. Használjon folytonos célváltozót. Rögzítse a megfigyelési egységet, a generáló sémát, a seedet, a felosztást, a baseline-t, a metrikát és a következtetési korlátot. Átadandó: egy megvalósítható protokoll leírása, amelyen a két prediktor összehasonlítható anélkül, hogy a kimenetét előre „előírnánk”. Előre garantált győztes nem szükséges.
Az SVD-alakból A és ortogonalitása miatt ezek valódi sajátfelbontások. Ezért pozitív szemidefinit, sajátértékei , sajátértékei ; a két mátrix nemnulla sajátértékeinek halmaza megegyezik, a nulla sajátértékek multiplicitása az méretkülönbség szerint változhat.
Példa: . Ekkor , sajátértékei , tehát a szinguláris értékek . Az , karakterisztikus polinomja , sajátértékei szintén .
Legyen egységvektor. A normakorlátot kétszer alkalmazzuk: Mivel ez minden egység -re fennáll, a bal oldali maximumra is igaz:
Ortogonális -ra minden -re, ezért Az esetben az egységgömböt önmagára képezi, ezért az halmaz azonos az halmazzal, tehát a két maximum egyenlő. Az állítás kompatibilis méretekre érvényes: esetén ortogonális, esetén ortogonális.
import numpy as np
def ratio_and_check(A, X, rtol=1e-12, atol=1e-15):
A = np.asarray(A, dtype=np.float64)
X = np.asarray(X, dtype=np.float64)
if X.ndim != 2:
raise ValueError("X legyen (n, d) alakú.")
denom = np.linalg.norm(X, axis=1)
if np.any(denom == 0.0):
raise ValueError("A nullvektorhoz nincs nyújtási arány.")
ratios = np.linalg.norm(X @ A.T, axis=1) / denom
bound = np.linalg.norm(A, 2) * (1.0 + rtol) + atol
if np.any(ratios > bound):
raise AssertionError(
f"Spektrálisnorma-sértés: max={ratios.max():.16f}, bound={bound:.16f}"
)
return float(np.max(ratios))
A = np.array([[3.0, 0.0],
[4.0, 0.0]], dtype=np.float64)
X = np.array([[1.0, 0.0],
[0.0, 1.0],
[1.0, 1.0]]) / np.sqrt(2.0) * np.sqrt(2.0)
X = np.array([[1.0, 0.0],
[0.0, 1.0],
[1.0/np.sqrt(2.0), 1.0/np.sqrt(2.0)]], dtype=np.float64)
print(ratio_and_check(A, X))
# A három arány: 5.0, 0.0, 5/sqrt(2) ~= 3.5355339059327378;
# a függvény ezek maximumát, 5.0-t adja vissza, ami pontosan sigma_1.A függvény a képet adó irányban éri el a -ös felső korlátot; az a magtérbe esik, aránya ; a diagonális irány aránya . A toleranciák a lebegőpontos kerekítést fedik le, nem lazítják a matematikai korlátot.
A hibás függvény a nem szimmetrikus
mátrixra a sajátértékeket vizsgálja. A két sajátérték
,
így wrong_max_stretch(J) a
értéket adná. A valódi spektrális norma
,
mert
egységvektor. A hiba oka: a maximális nyújtás általában a
-nál
nagyobb lehet, mert a sajátvektorok nem feltétlenül fedik a teljes teret
ortonormáltan. Következmény: a modell érzékenységi korlátját
alulbecsülhetjük, ami például gradienselemzésben hibás normalizálást
ad.
Javítás:
def correct_max_stretch(A):
import numpy as np
return float(np.linalg.svd(A, compute_uv=False)[0])Visszaellenőrzés: correct_max_stretch(J) eredménye
,
a np.linalg.svd(J, compute_uv=False) várt szinguláris
értékei
.
Egy lehetséges protokoll:
20261020;
;
,
független,
;
,
,
.A szinguláris érték felbontás minden valós téglalapmátrixra ortonormált mátrixokkal adja az alakot. A pozitív értékek száma a rang, a legnagyobb a spektrális norma. A diagonális operátorra közvetlenül beláttuk, hogy maximális nyújtása a legnagyobb , majd a teljes SVD-tétel megnevezett létezési és ortonormáltsági állításából levezettük, hogy tetszőleges -ra . Ebből következik a normakorlát és a 3.3. Vetítés, legkisebb négyzetek és kondicionáltság alfejezetben megelőlegezett definíció. Az alacsony rangú közelítés a legnagyobb szinguláris irányokat tartja meg, ez a PCA-előkép lineáris rekonstrukciójának alapja.
A 4.1. Függvény, határérték és derivált a függvény-határértéket és a deriváltat vezeti be; ott a lineáris közelítés érzékenységét, majd a 4.2.–4.3. a gradienst és a vektor–Jacobi-szorzatot tárgyalja.