3.4 Sajátérték, SVD és spektrális határ

3.4.1 Cél, előismeret és induló kérdés

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 A∈ℝm×nA\in\mathbb R^{m\times n} 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 ∥Ax∥2\|Ax\|_2 értékre.

Induló becslésként használjuk az oszlopnormákat. Ha AA oszlopai legfeljebb 11 hosszúak, akkor a háromszög-egyenlőtlenséggel ∥Ax∥2≤∑j|xj|∥aj∥2≤∑j|xj|≤n∥x∥2,\|Ax\|_2\le \sum_j |x_j|\,\|a_j\|_2\le \sum_j |x_j|\le \sqrt n\,\|x\|_2, tehát valamilyen n\sqrt n-es korlát mindig van. Ez azonban általában nem éles: ortogonális oszlopú mátrixra a maximális nyújtás 11, nem n\sqrt n. 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.

3.4.2 Sajátérték és amiért nem elég

Definíció. Legyen A∈ℝn×nA\in\mathbb R^{n\times n} négyzetes mátrix. A λ∈ℂ\lambda\in\mathbb C szám sajátértéke AA-nak, ha létezik v≠0v\neq 0, v∈ℂnv\in\mathbb C^n, amelyre Av=λv.Av=\lambda v .

A vv vektor a λ\lambda-hoz tartozó sajátvektor. A definíció csak négyzetes mátrixra van értelmezve, mert AvAv és λv\lambda v alakjának meg kell egyeznie. Az x↦Axx\mapsto Ax 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 J=(0100)J=\begin{pmatrix}0&1\\0&0\end{pmatrix} mátrixot. Karakterisztikus polinomja λ2\lambda^2, tehát egyetlen sajátértéke λ=0\lambda=0, algebrai multiplicitással 22. A leképezés mégsem nulla: Je2=e1Je_2=e_1, így a e2e_2 egységvektor képe 11 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 |λ||\lambda|-ból. Erre való a szinguláris érték.

3.4.3 A teljes SVD-tétel és a szinguláris értékek

Tétel (teljes SVD, felhasznált állítás). Minden A∈ℝm×nA\in\mathbb R^{m\times n} mátrix előáll A=UΣV⊤,A=U\Sigma V^{\top}, alakban, ahol U∈ℝm×mU\in\mathbb R^{m\times m} és V∈ℝn×nV\in\mathbb R^{n\times n} ortogonális mátrixok, Σ∈ℝm×n\Sigma\in\mathbb R^{m\times n} olyan mátrix, amelynek csak a Σii,i=1,…,min(m,n)\Sigma_{ii},\ i=1,\dots,\min(m,n) elemei lehetnek nullától különbözők, és ezek σ1≥σ2≥…≥σr>0,σr+1=…=σmin(m,n)=0\sigma_1\ge \sigma_2\ge\dots\ge\sigma_r>0,\qquad \sigma_{r+1}=\dots=\sigma_{\min(m,n)}=0 szerint rendezettek. Az rr a mátrix rangja, a σi\sigma_i számok a szinguláris értékek. Ebből következnek a kapcsolatok Avi=σiui,A⊤ui=σivi(i=1,…,r).Av_i=\sigma_i u_i,\qquad A^{\top}u_i=\sigma_i v_i\qquad(i=1,\dots,r).

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: U,VU,V ortogonális, Σ\Sigma diagonális szerkezetű, és a nemnulla σi\sigma_i-k száma rr.

A redukált SVD elhagyja a nulla szinguláris értékekhez tartozó oszlopokat: A=UrΣrVr⊤,A=U_r\Sigma_r V_r^{\top}, ahol Ur∈ℝm×rU_r\in\mathbb R^{m\times r}, Σr∈ℝr×r\Sigma_r\in\mathbb R^{r\times r} pozitív diagonális, Vr∈ℝn×rV_r\in\mathbb R^{n\times r}. Mivel AA képtere legfeljebb rr-dimenziós, a redukált alak is egzakt egyenlőség.

Rang. Az AA 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 AA magtere a nulla szinguláris értékhez tartozó jobb oldali szinguláris vektorok terének feszítője, képtérét pedig az u1,…,uru_1,\dots,u_r vektorok feszítik. A gyakorlatban a rangot gyakran numerikus küszöbbel becsüljük: a nagyon kicsi σi\sigma_i-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=(3040).A=\begin{pmatrix}3&0\\4&0\end{pmatrix}. A mátrix második oszlopa nulla, ezért a képtér az (34)\binom{3}{4} által feszített egyenes, tehát rank(A)=1\operatorname{rank}(A)=1. Az SVD: U=(3/5−4/54/53/5),Σ=(5000),V=(1001).U=\begin{pmatrix}3/5&-4/5\\4/5&3/5\end{pmatrix},\quad \Sigma=\begin{pmatrix}5&0\\0&0\end{pmatrix},\quad V=\begin{pmatrix}1&0\\0&1\end{pmatrix}. Ellenőrzésül: UΣV⊤=(3/54/5)5(10)=(3040)=A.U\Sigma V^{\top}= \begin{pmatrix}3/5\\4/5\end{pmatrix}5\begin{pmatrix}1&0\end{pmatrix} =\begin{pmatrix}3&0\\4&0\end{pmatrix}=A. Tehát σ1=5\sigma_1=5, σ2=0\sigma_2=0. Az Ae1=(34)Ae_1=\binom{3}{4} vektor hossza 55, az Ae2=0Ae_2=0; a maximális nyújtás sejthetően 55. 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: 1

Az A⊤AA^{\top}A mátrix (25000)\binom{25\ 0}{0\ 0}, sajátértékei 2525 és 00; a pozitív sajátérték négyzetgyöke éppen σ1=5\sigma_1=5. Általában A⊤A=VΣ⊤ΣV⊤A^{\top}A=V\Sigma^{\top}\Sigma V^{\top}, tehát A⊤AA^{\top}A sajátértékei a σi2\sigma_i^2 értékek. Numerikusan mégsem az A⊤AA^{\top}A 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 AA-n dolgozik.

3.4.4 Spektrális norma és a normakorlát levezetése

Definíció. Az A∈ℝm×nA\in\mathbb R^{m\times n} mátrix spektrális normája ∥A∥2=max∥x∥2=1∥Ax∥2.\|A\|_2=\max_{\|x\|_2=1}\|Ax\|_2. 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 x↦∥Ax∥2x\mapsto \|Ax\|_2 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 D∈ℝm×nD\in\mathbb R^{m\times n} olyan mátrix, amelynek csak a Dii=diD_{ii}=d_i, i=1,…,q=min(m,n)i=1,\dots,q=\min(m,n) elemei lehetnek nullától különbözők. Ekkor ∥D∥2=max1≤i≤q|di|.\|D\|_2=\max_{1\le i\le q}|d_i|.

Bizonyítás. Legyen d*=maxi|di|d_*=\max_i |d_i|, és legyen jj olyan index, amelyre |dj|=d*|d_j|=d_*. Az ej∈ℝne_j\in\mathbb R^n standard egységvektorra Dej=djejDe_j=d_j e_j teljesül, tehát ∥Dej∥2=|dj|=d*,\|De_j\|_2=|d_j|=d_*, így ∥D∥2≥d*\|D\|_2\ge d_*.

A felső korláthoz legyen x∈ℝnx\in\mathbb R^n, ∥x∥2=1\|x\|_2=1. A diagonális szerkezetből (Dx)i=dixi(Dx)_i=d_i x_i az i≤qi\le q koordinátákra, és nulla a többi helyen. Ezért ∥Dx∥22=∑i=1qdi2xi2≤d*2∑i=1qxi2≤d*2∑i=1nxi2=d*2∥x∥22=d*2.\|Dx\|_2^2=\sum_{i=1}^{q}d_i^2 x_i^2 \le d_*^2\sum_{i=1}^{q}x_i^2 \le d_*^2\sum_{i=1}^{n}x_i^2 =d_*^2\|x\|_2^2 =d_*^2. Négyzetgyököt vonva ∥Dx∥2≤d*\|Dx\|_2\le d_*, és mivel ez minden egységvektorra igaz, ∥D∥2≤d*\|D\|_2\le d_*. A két egyenlőtlenségből az állítás. ▫\square

A tetszőleges AA 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 A=UΣV⊤A=U\Sigma V^{\top} teljes SVD. Egy tetszőleges egységvektorra legyen y=V⊤xy=V^{\top}x. Mivel VV ortogonális, ∥y∥22=y⊤y=x⊤VV⊤x=x⊤x=∥x∥22,\|y\|_2^2=y^{\top}y=x^{\top}VV^{\top}x=x^{\top}x=\|x\|_2^2, tehát yy is egységvektor. Hasonlóan UU ortogonalitása miatt ∥Uz∥2=∥z∥2\|Uz\|_2=\|z\|_2. Így ∥Ax∥2=∥UΣV⊤x∥2=∥Σ(V⊤x)∥2=∥Σy∥2.\|Ax\|_2=\|U\Sigma V^{\top}x\|_2=\|\Sigma(V^{\top}x)\|_2=\|\Sigma y\|_2. A lemma szerint ∥Σy∥2≤σ1∥y∥2=σ1∥x∥2\|\Sigma y\|_2\le \sigma_1\|y\|_2=\sigma_1\|x\|_2, mert a Σ\Sigma diagonális elemei nemnegatívak, csökkenően rendezettek, és a legnagyobb σ1\sigma_1. Ezért ∥Ax∥2≤σ1∥x∥2minden x∈ℝn esetén.\|Ax\|_2\le \sigma_1\|x\|_2\qquad\text{minden }x\in\mathbb R^n\text{ esetén}. Az x=v1x=v_1 választással y=e1y=e_1, így Av1=σ1u1Av_1=\sigma_1 u_1, és ∥Av1∥2=σ1∥u1∥2=σ1\|Av_1\|_2=\sigma_1\|u_1\|_2=\sigma_1. Tehát az egyenlőség felvétetik, és ∥A∥2=σ1=σmax(A).\|A\|_2=\sigma_1=\sigma_{\max}(A).

Ez a hasznos normakorlát tehát: ∥Ax∥2≤∥A∥2∥x∥2.\|Ax\|_2\le \|A\|_2\|x\|_2. A legélesebb, mert a jobb oldali szinguláris vektorok mentén egyenlőség áll fenn.

3.4.5 Kapcsolat a kondíciószámmal és az alacsony rangú közelítéssel

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 A∈ℝm×nA\in\mathbb R^{m\times n} teljes oszloprangú (σn>0\sigma_n>0), akkor κ2(A)=σ1σn=∥A∥2σmin(A).\kappa_2(A)=\frac{\sigma_1}{\sigma_n}=\frac{\|A\|_2}{\sigma_{\min}(A)}. Ranghiányos esetben σmin=0\sigma_{\min}=0, ezért a kondíciószámot +∞+\infty 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: A⊤AA^{\top}A sajátértékei σi2\sigma_i^2, tehát κ2(A⊤A)=σ12σn2=κ2(A)2.\kappa_2(A^{\top}A)=\frac{\sigma_1^2}{\sigma_n^2}=\kappa_2(A)^2. 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 1≤k≤r1\le k\le r-t, és legyen Ak=∑i=1kσiuivi⊤.A_k=\sum_{i=1}^{k}\sigma_i u_i v_i^{\top}. Jelölje AkA_k az AA alacsony rangú közelítését. A rank(Ak)=k\operatorname{rank}(A_k)=k, mert a kk 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 B∈ℝm×nB\in\mathbb R^{m\times n}, rank(B)≤k\operatorname{rank}(B)\le k mátrixra ∥A−B∥2≥σk+1,\|A-B\|_2\ge \sigma_{k+1}, és a fenti AkA_k választással egyenlőség teljesül. A k=rk=r esetben σr+1=0\sigma_{r+1}=0 konvencióval Ar=AA_r=A.

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 σi\sigma_i-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 Xc∈ℝN×dX_c\in\mathbb R^{N\times d} egy soronként centrált adatmátrix, azaz minden megfigyelés egy sor. A X̃c⊤X̃c\tilde X_c^{\top}\tilde X_c szimmetrikus mátrix sajátfelbontásának főtengelyeit a jobb oldali szinguláris vektorok adják, mert Xc=UΣV⊤X_c=U\Sigma V^{\top}. Az első főtengely v1v_1, azaz a legnagyobb szinguláris értékhez tartozó irány a dd-dimenziós bemeneti térben. Egy centrált xx-sor kódját z=Vk⊤x⊤∈ℝkz=V_k^{\top}x^{\top}\in\mathbb R^k adja, és ennek az ortogonális vetítés szerinti lineáris előkép/rekonstrukciója: x̂⊤=Vkz=VkVk⊤x⊤.\hat x^{\top}=V_k z=V_kV_k^{\top}x^{\top}. A kk kódkoordinátából tehát az adatpontnak csak a VkV_k á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.

3.4.6 Labor: négyzet és kör két lineáris transzformáció alatt

A labor két fix 2×22\times 2-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: A1=diag(2,0.5)A_1=\operatorname{diag}(2,0.5), A2=(1.50.50.51.0)A_2=\binom{1.5\ 0.5}{0.5\ 1.0}. Az alakzatok a 22D-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.

3.4.7 Gyakori tévedés ellenpéldával

A nagy varianciájú irány nem szükségképpen a predikció szempontjából legjobb irány. A PCA az XX mátrix szóródását magyarázza, nem azt, hogy egy irány mennyire hasznos egy külső yy cél előrejelzésére.

Ellenpélda futtatás nélkül is látható. Legyen a megfigyelések első koordinátája xi1=10uix_{i1}=10u_i, a második xi2=3tix_{i2}=3t_i, ahol uiu_i a predikciótól független erős háttérjel. A cél legyen yi=xi2y_i=x_{i2}. A centrált XX szóródási mátrixát az első koordináta dominálja, mert a faktora 1010 a 33-mal szemben, tehát az első főtengely lényegében e1e_1. Az yy-t azonban csak e2e_2 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ó.

3.4.8 Önellenőrzés

  1. Miért nem értelmezünk sajátértéket 3×23\times2-es mátrixra, szinguláris értéket viszont igen?
  2. Ha A⊤AA^{\top}A legkisebb sajátértéke nulla, mit mondhatunk σmin\sigma_{\min}-ről és a legkisebb négyzetes megoldás egyértelműségéről?

Az elsőnél az Av=λvAv=\lambda v alak-egyezése dönt: Av∈ℝ3Av\in\mathbb R^3, λv∈ℝ2\lambda v\in\mathbb R^2, ez csak m=nm=n esetben lehet általánosan értelmes. A másodiknál σmin=0\sigma_{\min}=0, 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.

3.4.9 Feladatok

3.4.9.1 F1 fogalmi — sajátérték és szinguláris érték viszonya

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 A∈ℝm×nA\in\mathbb R^{m\times n} mátrix szinguláris értékei hogyan viszonyulnak az A⊤AA^{\top}A és az AA⊤AA^{\top} mátrixok sajátértékeihez. Válaszát egy 2×22\times2-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.

3.4.9.2 F2 levezetési — szubmultiplikativitás és ortogonális invariancia

Nehézség: 2. Előfeltétel: a spektrális norma definíciója. Legyen A∈ℝm×nA\in\mathbb R^{m\times n}, B∈ℝn×pB\in\mathbb R^{n\times p}. Igazolja, hogy ∥AB∥2≤∥A∥2∥B∥2.\|AB\|_2\le\|A\|_2\|B\|_2. Ezután mutassa meg, hogy bármely kompatibilis méretű ortogonális QQ mátrixra ∥QA∥2=∥A∥2=∥AQ∥2.\|QA\|_2=\|A\|_2=\|AQ\|_2. Átadandó: teljes, indokolt levezetés, az egyenlőség vagy az éles korlát kérdésének jelzése.

3.4.9.3 F3 implementációs — nyújtási arány ellenőrző függvény

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 ∥Ax∥2/∥x∥2\|Ax\|_2/\|x\|_2 arányt, ellenőrzi, hogy az nem haladja meg a ∥A∥2(1+τrel)+τabs\|A\|_2(1+\tau_{\mathrm{rel}})+\tau_{\mathrm{abs}} korlátot, és visszaadja a maximális arányt. Tesztelje a jelen egység A=(3040)A=\binom{3\ 0}{4\ 0} példáján az e1e_1, e2e_2 és (e1+e2)/2(e_1+e_2)/\sqrt2 vektorokra, a megadott toleranciákkal. Átadandó: teljes kód, a három arány és az ellenőrzés kimenete.

3.4.9.4 F4 hibakeresési — miért rossz a sajátérték-alapú korlát?

Nehézség: 2. Előfeltétel: a JJ 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.

3.4.9.5 F5 kísérlettervezési/transzfer — varianciairány kontra prediktív irány

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 yy 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.

3.4.10 Megoldások és indoklás

3.4.10.1 F1 megoldása

Az SVD-alakból A⊤A=VΣ⊤ΣV⊤,AA⊤=UΣΣ⊤U⊤.A^{\top}A=V\Sigma^{\top}\Sigma V^{\top},\qquad AA^{\top}=U\Sigma\Sigma^{\top}U^{\top}. A VV és UU ortogonalitása miatt ezek valódi sajátfelbontások. Ezért A⊤AA^{\top}A pozitív szemidefinit, sajátértékei σi2\sigma_i^2, AA⊤AA^{\top} sajátértékei σi2\sigma_i^2; a két mátrix nemnulla sajátértékeinek halmaza megegyezik, a nulla sajátértékek multiplicitása az m,nm,n méretkülönbség szerint változhat.

Példa: A=(3040)A=\binom{3\ 0}{4\ 0}. Ekkor A⊤A=(25000)A^{\top}A=\binom{25\ 0}{0\ 0}, sajátértékei 25,025,0, tehát a szinguláris értékek 5,05,0. Az AA⊤=(9121216)AA^{\top}=\binom{9\ 12}{12\ 16}, karakterisztikus polinomja λ2−25λ\lambda^2-25\lambda, sajátértékei szintén 25,025,0.

3.4.10.2 F2 megoldása

Legyen xx egységvektor. A normakorlátot kétszer alkalmazzuk: ∥(AB)x∥2=∥A(Bx)∥2≤∥A∥2∥Bx∥2≤∥A∥2∥B∥2∥x∥2=∥A∥2∥B∥2.\|(AB)x\|_2=\|A(Bx)\|_2 \le \|A\|_2\|Bx\|_2 \le \|A\|_2\|B\|_2\|x\|_2 =\|A\|_2\|B\|_2. Mivel ez minden egység xx-re fennáll, a bal oldali maximumra is igaz: ∥AB∥2≤∥A∥2∥B∥2.\|AB\|_2\le\|A\|_2\|B\|_2.

Ortogonális QQ-ra ∥Qz∥2=∥z∥2\|Qz\|_2=\|z\|_2 minden zz-re, ezért ∥QA∥2=max∥x∥=1∥QAx∥2=max∥x∥=1∥Ax∥2=∥A∥2.\|QA\|_2=\max_{\|x\|=1}\|QAx\|_2 =\max_{\|x\|=1}\|Ax\|_2=\|A\|_2. Az AQAQ esetben z=Qxz=Qx az egységgömböt önmagára képezi, ezért az {AQx:∥x∥=1}\{AQx:\|x\|=1\} halmaz azonos az {Az:∥z∥=1}\{Az:\|z\|=1\} halmazzal, tehát a két maximum egyenlő. Az állítás kompatibilis méretekre érvényes: QAQA esetén Q∈ℝm′×mQ\in\mathbb R^{m'\times m} ortogonális, AQAQ esetén Q∈ℝn×nQ\in\mathbb R^{n\times n} ortogonális.

3.4.10.3 F3 megoldása

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 (34)\binom{3}{4} képet adó e1e_1 irányban éri el a 55-ös felső korlátot; az e2e_2 a magtérbe esik, aránya 00; a diagonális irány aránya 5/25/\sqrt2. A toleranciák a lebegőpontos kerekítést fedik le, nem lazítják a matematikai korlátot.

3.4.10.4 F4 megoldása

A hibás függvény a nem szimmetrikus J=(0100)J=\binom{0\ 1}{0\ 0} mátrixra a sajátértékeket vizsgálja. A két sajátérték 00, így wrong_max_stretch(J) a 0.00.0 értéket adná. A valódi spektrális norma σ1=1\sigma_1=1, mert Je2=e1Je_2=e_1 egységvektor. A hiba oka: a maximális nyújtás általában a |λmax||\lambda_{\max}|-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 1.01.0, a np.linalg.svd(J, compute_uv=False) várt szinguláris értékei [1,0][1,0].

3.4.10.5 F5 megoldásminta

Egy lehetséges protokoll:

3.4.11 Rövid összefoglaló

A szinguláris érték felbontás minden valós téglalapmátrixra ortonormált U,VU,V mátrixokkal adja az A=UΣV⊤A=U\Sigma V^{\top} alakot. A pozitív σi\sigma_i értékek száma a rang, a legnagyobb σ1\sigma_1 a spektrális norma. A diagonális operátorra közvetlenül beláttuk, hogy maximális nyújtása a legnagyobb |di||d_i|, majd a teljes SVD-tétel megnevezett létezési és ortonormáltsági állításából levezettük, hogy tetszőleges AA-ra ∥A∥2=σmax\|A\|_2=\sigma_{\max}. Ebből következik a ∥Ax∥2≤σ1∥x∥2\|Ax\|_2\le\sigma_1\|x\|_2 normakorlát és a 3.3. Vetítés, legkisebb négyzetek és kondicionáltság alfejezetben megelőlegezett κ2(A)=σ1/σmin\kappa_2(A)=\sigma_1/\sigma_{\min} definíció. Az alacsony rangú AkA_k közelítés a legnagyobb szinguláris irányokat tartja meg, ez a PCA-előkép lineáris rekonstrukciójának alapja.

3.4.12 Következő alkalmazás

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.

3.4.13 Források