10.4 Sajátérték, SVD és dimenziócsökkentés előképe

10.4.1 Cél és konkrét helyzet

A Vetítés és legkisebb négyzetek alfejezetben a legkisebb négyzetes illesztést úgy értelmeztük, mint merőleges vetítést az oszloptérre. Most a kérdés a következő: ha az adatpontok egy felhőt alkotnak valamilyen térben, mely irányok mentén terülnek el a legjobban? Ez azért fontos, mert a későbbi dimenziócsökkentés, illetve a főkomponens-elemzés előképét adja: egy sokdimenziós táblában gyakran néhány irány hordozza az eltérések nagy részét, a többi pedig szinte zaj.

A tanulási ellenőrzéshez nem a teljes Northstar rendeléseit, hanem egy ismert szerkezetű, mesterséges pontfelhőt használunk. Így a számított főirányt a generálásból ismert irányhoz tudjuk hasonlítani. A bemenet egy n×pn \times p numerikus mátrix, 𝐗\mathbf X; a megfigyelési egység egy szimulált rendelés. A generálás:

Előzetes becslés: mivel z1z_1 szórása sokkal nagyobb, a főiránynak az elforgatás után a 35∘35^{\circ}-os irányban kell állnia, a második irány pedig arra merőleges. A szinguláris értékek négyzeteinek és a mintaszámnak az aránya közelítőleg a két generáló varianciát adja. A fejezet végére teljes NumPy-kóddal ellenőrizzük ezt.

10.4.2 Centrált mátrix és a kovarianciamátrix előképe

Legyen 𝐗\mathbf X n×pn \times p méretű: sorai megfigyelések, oszlopai numerikus jellemzők. A főirányoknak azt az irányt keressük, amely mentén a megfigyelések szóródnak, nem feltétlenül azt, amely mentén az értékek nagyok. Ezért először oszloponként kivonjuk az átlagot:

𝐗̃=𝐗−𝟏𝐱‾T. \tilde{\mathbf X} = \mathbf X - \mathbf{1}\bar{\mathbf x}^T.

Itt 𝟏\mathbf{1} az n×1n \times 1 csupa egy vektor, 𝐱‾\bar{\mathbf x} pedig a p×1p \times 1 oszlopátlag-vektor. A centrálás után minden oszlop átlaga nulla. A minta-kovarianciamátrix becslése:

𝐂=1n−1𝐗̃T𝐗̃, \mathbf C = \frac{1}{n-1}\tilde{\mathbf X}^T\tilde{\mathbf X},

aminek mérete p×pp \times p. A főátlóban az egyes oszlopok szórásnégyzeteinek becslése, az átlón kívül kovarianciák állnak. A mértékegység vegyes lehet: ha az első oszlop kilométer, a második euró, akkor 𝐂\mathbf C elemei km2\text{km}^2, km⋅EUR\text{km}\cdot\text{EUR} és EUR2\text{EUR}^2 egységekben vannak; ez már jelzi, hogy a nyers kovarianciamátrix irányai nem mértékegység-függetlenek.

Adott 𝐮\mathbf u egységvektorra, azaz ∥𝐮∥=1\lVert \mathbf u \rVert=1, a pontok vetülete 𝐗̃𝐮\tilde{\mathbf X}\mathbf u, alakja n×1n \times 1. Ennek varianciája:

Var(𝐗̃𝐮)=1n−1(𝐗̃𝐮)T(𝐗̃𝐮)=𝐮T𝐂𝐮. \operatorname{Var}(\tilde{\mathbf X}\mathbf u) = \frac{1}{n-1}(\tilde{\mathbf X}\mathbf u)^T(\tilde{\mathbf X}\mathbf u) = \mathbf u^T\mathbf C\mathbf u.

A cél tehát: találni olyan 𝐮\mathbf u egységvektort, amelyre a 𝐮T𝐂𝐮\mathbf u^T\mathbf C\mathbf u másodfokú kifejezés a lehető legnagyobb. Ez vezet a sajátvektorokhoz.

10.4.3 Sajátvektor és sajátérték

Egy négyzetes, p×pp \times p méretű 𝐀\mathbf A mátrixra a 𝐯≠𝟎\mathbf v \ne \mathbf 0 vektor sajátvektor (eigenvector), ha a mátrixszorzás csak a hosszát skálázza:

𝐀𝐯=λ𝐯. \mathbf A\mathbf v = \lambda \mathbf v.

A λ\lambda skalár a sajátérték (eigenvalue). A sajátvektor tehát olyan irány, amelyen a lineáris transzformáció nem forgat, csak nyújt vagy zsugorít. Például

𝐀=(2000.5),𝐯1=(10),𝐯2=(01). \mathbf A = \begin{pmatrix} 2 & 0 \\ 0 & 0.5 \end{pmatrix},\qquad \mathbf v_1 = \begin{pmatrix}1\\0\end{pmatrix},\qquad \mathbf v_2 = \begin{pmatrix}0\\1\end{pmatrix}.

Ekkor 𝐀𝐯1=2𝐯1\mathbf A\mathbf v_1 = 2\mathbf v_1 és 𝐀𝐯2=0.5𝐯2\mathbf A\mathbf v_2 = 0.5\mathbf v_2; a sajátértékek 22 és 0.50.5, a sajátvektorok a koordinátatengelyek.

A 𝐂\mathbf C minta-kovarianciamátrix szimmetrikus és pozitív szemidefinit. Itt a spektráltételt bizonyítás nélkül használjuk: egy szimmetrikus mátrix felbontható ortonormált sajátvektorokkal:

𝐂=𝐕𝚲𝐕T, \mathbf C = \mathbf V \boldsymbol\Lambda \mathbf V^T,

ahol 𝐕\mathbf V oszlopai a sajátvektorok, 𝚲\boldsymbol\Lambda pedig a sajátértékekből álló átlós mátrix. A legnagyobb sajátértékhez tartozó sajátvektor a 𝐮T𝐂𝐮\mathbf u^T\mathbf C\mathbf u kifejezés maximumát adja az egységgömbön; ez a legnagyobb varianciájú irány. A második legnagyobb sajátértékhez tartozó, az elsőre merőleges vektor adja az erre merőleges fő szóródási irányt.

A korábbi Vetítés és legkisebb négyzetek alfejezetből már ismerjük az 𝐗T𝐗\mathbf X^T\mathbf X mátrixot: ott a normálegyenletben jelent meg. A ranghiányos esetben a pszeudoinverz adott egyértelmű megoldást. Most ugyanannak a mátrixnak a főirányait, nem egy konkrét egyenlet megoldását keressük.

10.4.4 SVD és szinguláris értékek

Bármely m×nm \times n valós 𝐌\mathbf M mátrix felbontható szinguláris értékek szerint (singular value decomposition, SVD):

𝐌=𝐔𝚺𝐕T. \mathbf M = \mathbf U \boldsymbol\Sigma \mathbf V^T.

A redukált felbontásban, ha r=min(m,n)r = \min(m,n):

Ha 𝐌\mathbf M a centrált 𝐗̃\tilde{\mathbf X} mátrix, akkor m=nmintam=n_{\text{minta}}, n=pn=p. Mivel nminta>pn_{\text{minta}} > p a példánkban, 𝐔\mathbf U mérete n×pn \times p, 𝚺\boldsymbol\Sigma mérete p×pp \times p, 𝐕\mathbf V mérete p×pp \times p. A 𝐔\mathbf U és 𝐕\mathbf V ortogonalitása miatt 𝐔T𝐔=𝐈p\mathbf U^T\mathbf U = \mathbf I_p és 𝐕T𝐕=𝐈p\mathbf V^T\mathbf V = \mathbf I_p. Ebből:

𝐗̃T𝐗̃=𝐕𝚺2𝐕T. \tilde{\mathbf X}^T\tilde{\mathbf X} = \mathbf V \boldsymbol\Sigma^2 \mathbf V^T.

Összevetve a 𝐂\mathbf C-re adott sajátfelbontással: a jobb szingulárvektorok megegyeznek a kovarianciamátrix sajátvektoraival, és a jj-edik főirányon a variancia

λj=σj2n−1. \lambda_j = \frac{\sigma_j^2}{n-1}.

A szinguláris érték tehát nem szórás: a hossza úgy skálázódik, mint a centrált adat euklideszi normája. Ezt a mintapéldában ellenőrizzük.

Kézi kis kontroll: ha

𝐌=(3002), \mathbf M = \begin{pmatrix} 3 & 0 \\ 0 & 2 \end{pmatrix},

akkor 𝐌=𝐈diag(3,2)𝐈\mathbf M = \mathbf I \operatorname{diag}(3,2)\mathbf I, tehát a szinguláris értékek 33 és 22, a jobb szingulárvektorok a koordinátatengelyek, a rang 22.

10.4.5 Rank és numerikus küszöb

A rang (rank) a lineárisan független oszlopok maximális száma. Az SVD-ben a rang a pozitív szinguláris értékek száma. Pontos lineáris függésnél a legkisebb szinguláris érték nulla:

𝐗3=(x1x2−1.5x1+0.5x2), \mathbf X_3 = \begin{pmatrix} x_1 & x_2 & -1.5x_1 + 0.5x_2 \end{pmatrix},

ahol a harmadik oszlop az első kettő lineáris kombinációja, így a rang legfeljebb 22. A gyakorlatban mérési zaj vagy lebegőpontos kerekítés miatt a nulla helyett nagyon kicsi σ\sigma jelenik meg. A np.linalg.matrix_rank ezért egy relatív tűréssel dönt; a pontos mátrixnál a kis szinguláris érték a tűrés alatt marad, a zajosnál viszont lehet, hogy a tűrés fölé kerül. A rang tehát numerikus döntés is, nem csak algebrai fogalom. A Stabil numerika és érzékenység üzenete itt visszatér: a mátrix skálázása megváltoztathatja, hogy ugyanaz a fizikai eltérés mekkora szinguláris értékként jelenik meg.

10.4.6 Dimenziócsökkentés előképe

A legnagyobb k<pk < p szinguláris érték megtartásával készíthető közelítés:

𝐗̃k=∑j=1kσj𝐮j𝐯jT=𝐔k𝚺k𝐕kT. \tilde{\mathbf X}_k = \sum_{j=1}^{k}\sigma_j\mathbf u_j\mathbf v_j^T = \mathbf U_k\boldsymbol\Sigma_k\mathbf V_k^T.

Az új koordináták, a főirányokra vetített értékek:

𝐙k=𝐗̃𝐕k,shape: n×k. \mathbf Z_k = \tilde{\mathbf X}\mathbf V_k, \qquad \text{shape: } n \times k.

A rekonstrukció 𝐙k𝐕kT\mathbf Z_k\mathbf V_k^T, és az elhagyott irányok hibáját a σk+12+⋯+σp2\sigma_{k+1}^2 + \cdots + \sigma_p^2 összeg méri. Ha a kis szinguláris értékek elhanyagolhatók, akkor a pp dimenziós pontfelhő jó közelítéssel kk dimenzióban ábrázolható. A formális PCA-modellhez ez a kép, de a skálázási és értelmezési döntéseket a PCA: skála, vetítés és megőrzött variancia fejezetre hagyjuk.

10.4.7 Teljes minimális munkapélda

Az alábbi kód előállítja a forgatott felhőt, centrál, SVD-t számol, és ábrázolja a főirányokat. A futást helyben kell elvégezni; az itt mutatott értékek elméletileg várt, szemléltető értékek, nem előre rögzített mérési jegyzőkönyv.

import numpy as np
import matplotlib.pyplot as plt

rng = np.random.default_rng(20261020)
n = 240

# Látens jellemzők: egy nagy és egy kis szórású irány
z1 = rng.normal(loc=0.0, scale=2.0, size=n)
z2 = rng.normal(loc=0.0, scale=0.3, size=n)

# 35 fokos forgatás az (x1, x2) síkban
t_deg = 35.0
t = np.deg2rad(t_deg)
R = np.array([[np.cos(t), -np.sin(t)],
              [np.sin(t),  np.cos(t)]])

# Minden sor egy megfigyelés: shape (n, 2)
X = (R @ np.vstack([z1, z2])).T

# Centrálás, majd redukált SVD
Xc = X - X.mean(axis=0)
U, s, Vt = np.linalg.svd(Xc, full_matrices=False)

print("s === ", s)
print("Vt sorai:", Vt[0], Vt[1])

# Rekonstrukció: U * s oszloponként skáláz, majd Vt-vel szoroz
Xr = (U * s) @ Vt
print("max rekonstrukciós hiba:", np.max(np.abs(Xc - Xr)))

# Variancia a főirányokon
vars_axes = (s ** 2) / (n - 1)
print("varianciák a főirányokon:", vars_axes)
print("teljes variancia:", vars_axes.sum(),
      Xc.var(axis=0, ddof=1).sum())

# Az első főirány szöge, előjeltől eltekintve
angle = np.rad2deg(np.arctan2(Vt[0, 1], Vt[0, 0])) % 180
print("első főirány szöge:", angle)

# Ábra
fig, ax = plt.subplots(figsize=(6.4, 6.4))
ax.scatter(Xc[:, 0], Xc[:, 1], s=18, alpha=0.5,
           label="centrált megfigyelés")
for j, color in zip([0, 1], ["tab:red", "tab:blue"]):
    sd = s[j] / np.sqrt(n - 1)
    v = Vt[j] * 2.0 * sd
    ax.arrow(0, 0, v[0], v[1], width=0.08, head_width=0.30,
             length_includes_head=True, color=color,
             label=f"{j + 1}. főirány, sd={sd:.3f}")
ax.axhline(0, color="gray", linewidth=0.8)
ax.axvline(0, color="gray", linewidth=0.8)
ax.set_xlabel("x1: centrált változó")
ax.set_ylabel("x2: centrált változó")
ax.set_title("SVD-főirányok a forgatott pontfelhőn")
ax.set_aspect("equal", adjustable="datalim")
ax.legend()
plt.savefig("s040_principal_directions.png", dpi=150,
            bbox_inches="tight")

A rang kérdését külön kis példán mutatjuk be. Ha a harmadik oszlop pontosan lineáris kombináció, a rang 22; ha nagyon kis zajt adunk hozzá, a numerikus rang a tűrés függvényében lehet 22 vagy 33:

x3 = -1.5 * X[:, 0] + 0.5 * X[:, 1]  # pontos lineáris függés
X3 = np.column_stack([X, x3])
print("pontos rang:", np.linalg.matrix_rank(X3))

x3n = x3 + rng.normal(scale=1e-8, size=n)
X3n = np.column_stack([X, x3n])
print("zajos alap rang:", np.linalg.matrix_rank(X3n))
print("nagy tűrés melletti rang:",
      np.linalg.matrix_rank(X3n, tol=1e-5))

10.4.8 Eredmény értelmezése

Az SVD matematikai azonossága miatt a rekonstrukciós hiba max|𝐗̃−𝐔𝚺𝐕T|\max|\tilde{\mathbf X}-\mathbf U\boldsymbol\Sigma\mathbf V^T| értékének 10−1210^{-12} alatt kell maradnia float64 esetén; ez az egyik stabil ellenőrző invariáns. A vars_axes elemek elméletileg 44-hez és 0.090.09-hez esnek közel, mert a forgatás nem változtatja meg a teljes varianciát, csak elforgatja a koordinátarendszert. Az angle várt értéke 3535 fok, mert a nagyobb szóródású z1z_1 tengelye a forgatás után ebben az irányban áll; a minta véletlenszerűsége miatt néhány tizedfok eltérés várható. A második főirány erre merőleges, tehát közelítőleg 125125 fok.

A harmadik oszlopnál a pontos lineáris kombináció esetén a legkisebb szinguláris érték gyakorlatilag nulla, és a numerikus rang 22. A 10−810^{-8} szórású zaj hatására a σ3\sigma_3 körülbelül n⋅10−8\sqrt{n}\cdot 10^{-8} nagyságrendű lesz, ami az alapértelmezett tűrés felett lehet, így a rang hivatalosan 33; nagyobb tűréssel viszont ismét 22-nek tekintjük. A döntést tehát nem érdemes automatikusan a nyers matrix_rank kimenetére bízni, hanem a szinguláris értékek nagyságrendjét kell értelmezni. Ez a későbbi PCA-nál különösen fontos.

10.4.9 Feladatok

10.4.9.1 1. feladat: értelmezés kézi mátrixon

Tekintse a következő, már centrált mátrixot:

𝐗=(2−102−2−1). \mathbf X = \begin{pmatrix} 2 & -1\\ 0 & 2\\ -2 & -1 \end{pmatrix}.

Számítsa ki kézzel 𝐗T𝐗\mathbf X^T\mathbf X értékét. Melyek a sajátértékei? Melyik a főirány? Adja meg a szinguláris értékeket is.

10.4.9.2 2. feladat: implementálás eltérő forgatással

Generáljon 150150 megfigyelést 60∘60^{\circ}-os forgatással, z1∼𝒩(0,32)z_1\sim\mathcal N(0,3^2) és z2∼𝒩(0,0.52)z_2\sim\mathcal N(0,0.5^2) összetevőkkel, np.random.default_rng(42) seeddel. Centráljon, számítson SVD-t, majd ellenőrizze három feltételt: a rekonstrukciós hiba <10−10<10^{-10}; az első főirány szöge előjeltől eltekintve 60∘60^{\circ}-hoz képest 55 fokon belül van; a σj2/(n−1)\sigma_j^2/(n-1) értékek 99-hez és 0.250.25-höz vannak közel.

10.4.9.3 3. feladat: hibadiagnózis

Egy jegyzetfüzetben a szerző így számol főirányt:

C = X.T @ X
vals, vecs = np.linalg.eigh(C)
print(vecs[:, -1])

A bemeneti 𝐗\mathbf X mátrix egyik oszlopa x1=100+𝒩(0,1)x_1 = 100 + \mathcal N(0,1), a másik x2=𝒩(0,1)x_2 = \mathcal N(0,1). Az eredmény szerint a főirány szinte pontosan az x1x_1 irány, és a legnagyobb sajátérték óriási. Mi a fogalmi hiba, és mi a helyes számítás?

10.4.9.4 4. feladat: megváltozott mértékegység

A 35 fokos alapfeladat 𝐗\mathbf X mátrixát úgy skálázzák, hogy az első oszlopot 10001000-rel szorozzák, a másodikat 0.010.01-gyel. Számítsa ki ismét az SVD-t a centrált skálázott mátrixon. Hogyan változik a főirány? Magyarázza meg, miért nem invariáns az eredmény a mértékegységre.

10.4.10 Megoldások és indoklás

10.4.10.1 1. feladat megoldása

A mátrix oszlopátlagai nullák, mert 2+0−2=02+0-2=0 és −1+2−1=0-1+2-1=0.

𝐗T𝐗=(20−2−12−1)(2−102−2−1)=(8006). \mathbf X^T\mathbf X = \begin{pmatrix} 2 & 0 & -2\\ -1 & 2 & -1 \end{pmatrix} \begin{pmatrix} 2 & -1\\ 0 & 2\\ -2 & -1 \end{pmatrix} = \begin{pmatrix} 8 & 0\\ 0 & 6 \end{pmatrix}.

A sajátértékek 88 és 66, a sajátvektorok 𝐞1\mathbf e_1 és 𝐞2\mathbf e_2. A főirány 𝐞1=(1,0)T\mathbf e_1 = (1,0)^T, mert 8>68>6. Az SVD-ből σ1=8=22≈2.828\sigma_1 = \sqrt{8} = 2\sqrt2 \approx 2.828 és σ2=6≈2.449\sigma_2 = \sqrt6 \approx 2.449, mert 𝐗T𝐗=𝐕𝚺2𝐕T\mathbf X^T\mathbf X = \mathbf V\boldsymbol\Sigma^2\mathbf V^T. A rang 22.

10.4.10.2 2. feladat megoldása

import numpy as np

rng = np.random.default_rng(42)
n = 150
z1 = rng.normal(0.0, 3.0, n)
z2 = rng.normal(0.0, 0.5, n)

t = np.deg2rad(60.0)
R = np.array([[np.cos(t), -np.sin(t)],
              [np.sin(t),  np.cos(t)]])
X = (R @ np.vstack([z1, z2])).T

Xc = X - X.mean(axis=0)
U, s, Vt = np.linalg.svd(Xc, full_matrices=False)

err = np.max(np.abs((U * s) @ Vt - Xc))
angle = np.rad2deg(np.arctan2(Vt[0, 1], Vt[0, 0])) % 180
vars_axes = s ** 2 / (n - 1)

print(err, angle, vars_axes)
# Ellenőrzés
assert err < 1e-10
assert abs(angle - 60.0) < 5.0
assert abs(vars_axes[0] - 9.0) < 1.0
assert abs(vars_axes[1] - 0.25) < 0.1

A tűrések szándékosan bőek, mert kis mintán a becsült variancia jelentősen eltérhet a generáló paramétertől. A rekonstrukciós invariáns viszont szoros, mert az SVD matematikai azonosság, nem statisztikai becslés.

10.4.10.3 3. feladat megoldása

A hiba az, hogy a kód 𝐗T𝐗\mathbf X^T\mathbf X mátrixon dolgozik a centrálás nélkül. Az x1=100+zx_1 = 100 + z oszlop átlaga 100100, ezért az 𝐗T𝐗\mathbf X^T\mathbf X mátrixban a 1002100^2 nagyságrendű elem dominál. A számított „főirány” nem a szóródás, hanem az origótól mért nagy eltolás iránya. Helyesen:

Xc = X - X.mean(axis=0)
C = Xc.T @ Xc / (len(Xc) - 1)
vals, vecs = np.linalg.eigh(C)
print(vecs[:, -1])  # a legnagyobb szórás iránya

A centrálás után az első oszlop varianciája 11-hez, a másodiké szintén 11-hez közeli, így a főirány már nem lesz triviálisan x1x_1.

10.4.10.4 4. feladat megoldása

X_scaled = X.copy()
X_scaled[:, 0] *= 1000.0
X_scaled[:, 1] *= 0.01

Xc_s = X_scaled - X_scaled.mean(axis=0)
_, s_s, Vt_s = np.linalg.svd(Xc_s, full_matrices=False)
angle_s = np.rad2deg(np.arctan2(Vt_s[0, 1], Vt_s[0, 0])) % 180
vars_s = s_s ** 2 / (len(X_scaled) - 1)

print(angle_s, vars_s)

Az első oszlop 10001000-szeresre növelése annak szórásnégyzetét 10610^6-szorosára növeli; a második oszlop 0.010.01-szeresre csökkentése a másik varianciát 10−410^{-4}-szeresére. Az új főirány ezért szinte pontosan az x1x_1 tengely, vagyis a szög 00 fokhoz közeli. A tanulság: a nyers SVD-főirány nem mértékegység-független; a PCA előtt a PCA: skála, vetítés és megőrzött variancia fejezetben a standardizálási döntést expliciten meg kell hozni.

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

A legnagyobb varianciájú irány nem szükségképpen a cél szempontjából leghasznosabb irány. Generáljunk 300300 megfigyelést így:

Az első főirány szinte kétségtelenül x1x_1 lesz, mert a varianciája 100100-szoros. Ha a feladat a yy célváltozó előrejelzése, akkor x1x_1 rossz választás, mert a generálás szerint független yy-tól. A korrelációban ezt az ellenpéldát mutatja: corr(x1,y)≈0\operatorname{corr}(x_1,y)\approx 0, míg corr(x2,y)≈0.9\operatorname{corr}(x_2,y)\approx 0.9. A főirány tehát a reprezentáció tömörségét méri, nem a célváltozóval való kapcsolatot. Ezért a dimenziócsökkentést soha nem helyettesítheti automatikusan a felügyelt feature-szelekció.

Egy másik gyakori félreértés: a σj2/(n−1)\sigma_j^2/(n-1) „megmagyarázott variancia” arányt összekeverik a modellpontossággal. Nem minden eltérés számít a döntés szempontjából; a Dátumok, időzónák és kategóriák alfejezetben látott típuscédulák példája is mutatja, hogy az adatválasztás szemantikája elsődleges.

10.4.12 Önellenőrzés

  1. Mi a kapcsolat a centrált 𝐗̃\tilde{\mathbf X} SVD-je és a minta-kovarianciamátrix sajátfelbontása között?
  2. Mit jelent, ha a legkisebb szinguláris érték nulla?
  3. Miért nem használható a főirány automatikusan célváltozóra optimalizált feature-ként?
  4. Mi történik a főiránnyal, ha az egyik oszlopot ezerszeresére skálázzuk?

A válaszok a fenti szakaszokban találhatók; ha bármelyik nem megy, a megoldásokhoz érdemes visszalapozni.

PCA előtt az adatokat általában centrálni kell, és eltérő skálák esetén indokolt lehet a standardizálás. A megőrzött varianciaarány nem azonos a prediktív információ megőrzésével, a főkomponensek pedig önmagukban nem kapnak oksági értelmezést.

10.4.13 Rövid összefoglaló

A szinguláris felbontás a centrált adatmátrixot ortogonális komponensekre bontja. A jobb szingulárvektorok a kovarianciamátrix sajátvektorai, tehát a pontfelhő főirányait adják; a σj2/(n−1)\sigma_j^2/(n-1) értékek mutatják a vetített varianciát az egyes irányokon. A rang a pozitív szinguláris értékek száma, de numerikusan tűrésfüggő döntés. A legnagyobb varianciájú irány nem feltétlenül a legjobb prediktor, ezért a dimenziócsökkentés és a felügyelt feature-szelekció külön döntés. A későbbi PCA-fejezetben ehhez a skálázás és az értelmezési szerződés csatlakozik.