IlmHamroh
Data Science va sun'iy intellekt/Chiziqli algebra7/10-dars19 daqiqa
Mundarija (22)

10.7-dars: Xos qiymatlar va xos vektorlar

10-QISM — CHIZIQLI ALGEBRA · 7-dars


1. Kirish va motivatsiya

10.4-darsda matritsa vektorni o'zgartirishini ko'rdik: burish, cho'zish, qiyshaytirish. Ko'p vektorlar o'zgartirishdan keyin yo'nalishini o'zgartiradi. Lekin ba'zi maxsus yo'nalishlar bor: matritsa ularni faqat cho'zadi yoki qisqartiradi, burmaydi. Bu yo'nalishlar — xos vektorlar (eigenvectors), cho'zish koeffitsiyenti — xos qiymat (eigenvalue): A @ v = lambda × v. Ular matritsaning "DNK" si — o'zgartirishning mohiyatini ochib beradi.

Data Science'da xos qiymatlar ko'plab muhim usullarning markazida: PCA 10.9-bob — kovariatsiya matritsasining xos vektorlari = ma'lumot eng ko'p tarqalgan yo'nalishlar; Google PageRank — havolalar matritsasining xos vektori = sahifalar muhimligi; Markov zanjiri barqaror holati 10.4-bob — xos qiymati 1 bo'lgan xos vektor; spektral klasterlash; multikollinearlik diagnostikasi (kichik xos qiymat — deyarli bog'liq belgilar); tarmoqlar tahlili (eng ta'sirli foydalanuvchi).

Real vaziyat. Mahalliy qidiruv tizimi 5 ta sayt orasidagi havolalar asosida saytlarni tartiblamoqchi. Oddiy yondashuv — kiruvchi havolalar soni: lekin u havola kimdan kelganini hisobga olmaydi. PageRank g'oyasi: muhim sayt — muhim saytlar havola bergan sayt. Bu ta'rif "o'z-o'ziga tayanadi" — va aynan xos vektor tenglamasi: r = M @ r. Havolalar matritsasining xos qiymati 1 ga mos xos vektori — saytlar reytingi. Natijada A va B saytlarga bittadan havola bor, lekin A ning havolasi eng muhim C saytdan — shuning uchun A ning reytingi B nikidan deyarli ikki baravar yuqori. Bir-biriga havola beruvchi yopiq juftlik (D-E) esa o'z ulushini saqlab qoladi — PageRank spamga to'liq chidamli emas (Vazifa 7).

Bu darsda xos qiymatlar va xos vektorlarni o'rganamiz.

Bu darsda:

  • Xos vektor: A @ v = lambda × v
  • Geometrik ma'no: burilmaydigan yo'nalishlar
  • np.linalg.eig va eigh
  • Simmetrik matritsalar (ortogonal xos vektorlar)
  • Kovariatsiya matritsasining xos vektorlari
  • Xos qiymatlar va matritsa xossalari (det, iz, shart soni)
  • Daraja usuli va PageRank
  • Amaliy: Markov barqaror holati

ℹ Misollar real numpy bilan (Python 3.14).


2. Nazariya — chuqur tushuntirish

2.1. Xos vektor: A @ v = lambda × v

text
A @ v = lambda × v       v ≠ 0 — xos vektor, lambda — xos qiymat

A = [[3, 1],
     [0, 2]]

  v1 = [1, 0]:   A @ v1 = [3, 0] = 3 × v1     → lambda1 = 3
  v2 = [1, -1]:  A @ v2 = [2, -2] = 2 × v2    → lambda2 = 2
  u  = [1, 1]:   A @ u  = [4, 2]  — u ga parallel EMAS (yo'nalish o'zgardi)

Xos vektor uzunligi ixtiyoriy (2 × v ham xos vektor) → odatda birlik uzunlik

Xos vektor — matritsa ta'sirida faqat masshtablanadigan (yo'nalishi saqlanadigan yoki teskarisiga aylanadigan) nolmas vektor; xos qiymat — masshtab koeffitsiyenti: lambda > 1 — cho'zish, 0 < lambda < 1 — qisqarish, lambda < 0 — teskari yo'nalish, lambda = 0 — "yo'q qilish" (proyeksiya yo'qotgan yo'nalish, det = 0, 10.5). n × n matritsa — n tagacha xos qiymat. Xos vektor faqat yo'nalish bo'yicha aniqlanadi — NumPy birlik uzunlikda qaytaradi (ishorasi ixtiyoriy!).

2.2. Geometrik ma'no

Matritsani o'zgartirish sifatida ko'rsak 10.4-bob, xos vektorlar — uning "o'qlari": agar koordinatalar tizimini xos vektorlar bo'yicha tanlasak, murakkab o'zgartirish oddiy diagonal cho'zishga aylanadi (har o'q o'z xos qiymatiga cho'ziladi). Bu — diagonallashtirish: A = V @ diag(lambda) @ V^(-1). Amaliy ma'nosi: murakkab o'zaro bog'liqlik (kovariatsiya, o'tish ehtimollari) — bir-biridan mustaqil "rejimlar"ga ajraladi. Burish matritsasining (2D, 0° va 180° dan boshqa) haqiqiy xos vektori yo'q — har yo'nalish buriladi (xos qiymatlar kompleks).

2.3. np.linalg.eig va eigh

text
vals, vecs = np.linalg.eig(A)      # umumiy kvadrat matritsa
  vals — xos qiymatlar (tartibsiz! kompleks bo'lishi mumkin)
  vecs[:, i] — i-xos vektor (USTUN!), birlik uzunlik

vals, vecs = np.linalg.eigh(S)     # SIMMETRIK matritsa uchun
  — haqiqiy qiymatlar, O'SISH tartibida, ortogonal vektorlar, tezroq va barqarorroq

Tekshiruv: np.allclose(A @ vecs[:, i], vals[i] * vecs[:, i])

eig — umumiy holat: qiymatlar tartiblanmagan, kompleks bo'lishi mumkin (.real ehtiyotkorlik bilan). eigh — simmetrik (kovariatsiya, korrelyatsiya) matritsalar uchun: haqiqiy qiymatlar, o'sish tartibida (PCA uchun teskari tartiblash kerak — eng kattasi oxirida!), ortogonal vektorlar. Eng keng tarqalgan xato: xos vektorni qator deb olish — vecs[i] emas, vecs[:, i].

2.4. Simmetrik matritsalar

Spektral teorema: simmetrik matritsa (A = A.T) uchun: (1) barcha xos qiymatlar haqiqiy; (2) xos vektorlar o'zaro ortogonal 10.2-bob — ular yangi, burilgan koordinatalar tizimini hosil qiladi; (3) A = Q @ diag(lambda) @ Q.T (Q — ortogonal, Q^(-1) = Q.T). Data Science'dagi deyarli barcha "xos" masalalar simmetrik: kovariatsiya, korrelyatsiya, X.T X, masofa/o'xshashlik (kernel) matritsalari. Musbat yarim aniqlangan (PSD): barcha xos qiymatlar ≥ 0 — kovariatsiya matritsasi doim shunday (dispersiya manfiy bo'lmaydi).

2.5. Kovariatsiya matritsasining xos vektorlari

text
C = kovariatsiya matritsasi (p × p, simmetrik, PSD)

Eng katta xos qiymatga mos xos vektor v1 — ma'lumot ENG KO'P tarqalgan yo'nalish
  lambda1 = shu yo'nalishdagi DISPERSIYA
Keyingi v2 — v1 ga ortogonal, qolgan dispersiyaning eng ko'p yo'nalishi
...
sum(lambda) = sum(dispersiyalar) = iz(C)    — umumiy dispersiya saqlanadi
lambda_i / sum(lambda) — i-yo'nalish "tushuntirgan" dispersiya ulushi   → PCA (10.9)

Bu — PCA ning yuragi: kovariatsiya matritsasining xos vektorlari — ma'lumot bulutining asosiy o'qlari (ellipsning o'qlari), xos qiymatlar — shu o'qlar bo'ylab dispersiya. Katta xos qiymatlar — asosiy tuzilma; kichiklari — shovqin yoki ortiqchalik. Juda kichik (≈ 0) xos qiymat — deyarli bog'liq belgilar (multikollinearlik, 10.5): shu yo'nalishda ma'lumot deyarli tarqalmagan.

2.6. Xos qiymatlar va matritsa xossalari

text
det(A)   = lambda1 × lambda2 × ... × lambdan     (biri 0 → singulyar)
iz(A)    = A[0,0] + ... + A[n-1,n-1] = lambda1 + ... + lambdan
cond(S)  = |lambda_max| / |lambda_min|            (simmetrik matritsa uchun)
A^k      = V @ diag(lambda^k) @ V^(-1)            (daraja — xos qiymatlar darajasi)
A^(-1)   xos qiymatlari = 1 / lambda

Xos qiymatlar matritsaning ko'p xossasini "tushuntiradi": determinant — ko'paytma (hajm o'zgarishi, 10.5; bitta nol → singulyar); iz — yig'indi (kovariatsiyada — umumiy dispersiya); shart soni — eng katta / eng kichik (kichik xos qiymat — beqarorlik, 10.5; Ridge har bir xos qiymatga alpha qo'shadi: lambda + alpha — shuning uchun barqarorlashtiradi!); daraja — A^k da xos qiymatlar k-darajaga ko'tariladi: |lambda| < 1 lar so'nadi, eng katta hukmron bo'lib qoladi.

2.7. Daraja usuli va PageRank

Daraja usuli (power iteration): tasodifiy v dan boshlab, qayta-qayta v = A @ v / ||A @ v|| — v eng katta xos qiymatga mos xos vektorga yaqinlashadi (2.6: A^k da eng katta lambda hukmron). Sodda, katta siyrak matritsalarga ham qo'llanadi. PageRank: havolalar ehtimol matritsasi M (har sahifadan chiquvchi havolalar ehtimolga bo'lingan) + "tasodifiy sakrash" (damping 0.85) → r = M @ r; xos qiymat 1 ga mos xos vektor = barqaror "tasodifiy sayyoh" taqsimoti = reyting. Markov barqaror holati 10.4-bob — xuddi shu: pi @ P = pi (qator vektor, P.T ning xos vektori).

2.8. Xos qiymatlar — matritsaning DNK si

Xos vektor — A faqat cho'zadigan yo'nalish (A v = lambda v); xos qiymat — cho'zish koeffitsiyenti; diagonallashtirish — xos vektorlar bazasida o'zgartirish oddiy cho'zish; eig (umumiy) va eigh (simmetrik — haqiqiy, o'sish tartibi, ortogonal; xos vektorlar — ustunlar); simmetrik — spektral teorema, PSD; kovariatsiya — xos vektorlar asosiy o'qlar, xos qiymatlar dispersiyalar (PCA); det = ko'paytma, iz = yig'indi, cond = max/min, Ridge — lambda + alpha; daraja usuli, PageRank, Markov barqaror holati. Keyingi dars — SVD: har qanday (to'rtburchak) matritsa uchun "xos" yoyilma.


3. Tez ma'lumotnoma

python
import numpy as np

vals, vecs = np.linalg.eig(A)          # umumiy; tartibsiz, kompleks bo'lishi mumkin
vals, vecs = np.linalg.eigh(S)         # simmetrik; o'sish tartibida, ortogonal
v1 = vecs[:, -1]                       # eng katta (eigh) — USTUN!

np.allclose(A @ vecs[:, 0], vals[0] * vecs[:, 0])   # tekshiruv

# tartiblash (kamayish)
idx = np.argsort(vals)[::-1]; vals, vecs = vals[idx], vecs[:, idx]

# xossalar
np.prod(vals) ≈ np.linalg.det(A);  vals.sum() ≈ np.trace(A)

# daraja usuli
v = np.ones(n) / np.sqrt(n)
for _ in range(100):
    v = A @ v; v /= np.linalg.norm(v)
QOIDA: simmetrik — eigh · vektor — ustun · eigh o'sish tartibida · ishora ixtiyoriy

Xos qiymatlar xulosasi

A v = lambda v — v yo'nalishi saqlanadi, lambda marta cho'ziladi
eig — umumiy; eigh — simmetrik (haqiqiy, ortogonal, o'sish tartibi)
Kovariatsiya: xos vektorlar — asosiy o'qlar, xos qiymatlar — dispersiyalar
det = ko'paytma, iz = yig'indi, cond = max/min
Daraja usuli — eng katta xos vektor (PageRank, Markov)

4. Batafsil misollar

Misollar real numpy bilan (Python 3.14).

Misol 1 — Xos vektorlarni topish va tekshirish

python
"""A v = lambda v: eig, tekshiruv, xos va oddiy vektor farqi (real numpy)."""

import numpy as np


def main() -> None:
    A = np.array([[3.0, 1.0], [0.0, 2.0]])

    print("=== 1. np.linalg.eig ===")
    vals, vecs = np.linalg.eig(A)
    print(f"  xos qiymatlar: {vals}")
    for i in range(2):
        v = vecs[:, i]
        print(f"  v{i + 1} = {np.round(v, 4)}, A @ v = {np.round(A @ v, 4)}, "
              f"lambda × v = {np.round(vals[i] * v, 4)}")

    print("\n=== 2. Oddiy vektor burildi ===")
    u = np.array([1.0, 1.0])
    Au = A @ u
    cos = u @ Au / (np.linalg.norm(u) * np.linalg.norm(Au))
    print(f"  A @ [1, 1] = {Au}, burchak {np.degrees(np.arccos(cos)):.1f}°")

    print("\n=== 3. Xossalar ===")
    print(f"  det = {np.linalg.det(A):.1f}, ko'paytma = {np.prod(vals):.1f}")
    print(f"  iz = {np.trace(A):.1f}, yig'indi = {vals.sum():.1f}")

    print("\n=== 4. Diagonallashtirish A = V diag V^-1 ===")
    V = vecs
    print(f"  tiklandi: {np.allclose(V @ np.diag(vals) @ np.linalg.inv(V), A)}")
    print("  ⭐ Xos vektor — burilmaydigan yo'nalish")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. np.linalg.eig ===
  xos qiymatlar: [3.+0.j 2.+0.j]
  v1 = [1.+0.j 0.+0.j], A @ v = [3.+0.j 0.+0.j], lambda × v = [3.+0.j 0.+0.j]
  v2 = [-0.7071+0.j  0.7071+0.j], A @ v = [-1.4142+0.j  1.4142+0.j], lambda × v = [-1.4142+0.j  1.4142+0.j]

=== 2. Oddiy vektor burildi ===
  A @ [1, 1] = [4. 2.], burchak 18.4°

=== 3. Xossalar ===
  det = 6.0, ko'paytma = 6.0+0.0j
  iz = 5.0, yig'indi = 5.0+0.0j

=== 4. Diagonallashtirish A = V diag V^-1 ===
  tiklandi: True
  ⭐ Xos vektor — burilmaydigan yo'nalish

Nima ko'rsatdi: 2.1, 2.2, 2.6-bo'limlar.

Misol 2 — Simmetrik matritsa: eigh va ortogonallik

python
"""eigh: simmetrik matritsa, haqiqiy qiymatlar, ortogonal vektorlar (real numpy)."""

import numpy as np


def main() -> None:
    S = np.array([[4.0, 2.0, 0.5],
                  [2.0, 3.0, 0.2],
                  [0.5, 0.2, 1.0]])

    print("=== 1. eigh natijasi (o'sish tartibi) ===")
    vals, Q = np.linalg.eigh(S)
    print(f"  xos qiymatlar: {np.round(vals, 4)}")

    print("\n=== 2. Xos vektorlar ortogonal: Q.T @ Q = I ===")
    print(np.round(Q.T @ Q, 10))

    print("\n=== 3. Spektral yoyilma: S = Q diag Q.T ===")
    print(f"  tiklandi: {np.allclose(Q @ np.diag(vals) @ Q.T, S)}")

    print("\n=== 4. Kamayish tartibiga o'tkazish ===")
    idx = np.argsort(vals)[::-1]
    print(f"  tartiblangan: {np.round(vals[idx], 4)}")
    print(f"  eng katta xos vektor (ustun): {np.round(Q[:, idx[0]], 4)}")

    print("\n=== 5. Ishora ixtiyoriy ===")
    v = Q[:, idx[0]]
    print(f"  S @ (-v) = lambda × (-v): {np.allclose(S @ -v, vals[idx[0]] * -v)}")
    print("  ⭐ Simmetrik — eigh: haqiqiy, ortogonal, o'sish tartibida")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. eigh natijasi (o'sish tartibi) ===
  xos qiymatlar: [0.9007 1.4797 5.6195]

=== 2. Xos vektorlar ortogonal: Q.T @ Q = I ===
[[ 1.  0.  0.]
 [ 0.  1. -0.]
 [ 0. -0.  1.]]

=== 3. Spektral yoyilma: S = Q diag Q.T ===
  tiklandi: True

=== 4. Kamayish tartibiga o'tkazish ===
  tartiblangan: [5.6195 1.4797 0.9007]
  eng katta xos vektor (ustun): [-0.7858 -0.6084 -0.1114]

=== 5. Ishora ixtiyoriy ===
  S @ (-v) = lambda × (-v): True
  ⭐ Simmetrik — eigh: haqiqiy, ortogonal, o'sish tartibida

Nima ko'rsatdi: 2.3, 2.4-bo'limlar.

Misol 3 — Kovariatsiya: asosiy o'qlar

python
"""Kovariatsiya matritsasi xos vektorlari — ma'lumot bulutining o'qlari (real numpy)."""

import numpy as np


def main() -> None:
    rng = np.random.default_rng(0)
    n = 2000
    # 30° burilgan ellips: bir yo'nalishda keng (SD 3), boshqasida tor (SD 0.5)
    t = np.radians(30)
    R = np.array([[np.cos(t), -np.sin(t)], [np.sin(t), np.cos(t)]])
    X = rng.normal(size=(n, 2)) * [3.0, 0.5] @ R.T

    C = np.cov(X, rowvar=False)
    vals, vecs = np.linalg.eigh(C)
    idx = np.argsort(vals)[::-1]
    vals, vecs = vals[idx], vecs[:, idx]

    print("=== 1. Xos qiymatlar — o'qlar bo'ylab dispersiya ===")
    print(f"  {np.round(vals, 3)}  (kutilgan: 9 va 0.25)")

    print("\n=== 2. Birinchi xos vektor yo'nalishi ===")
    v1 = vecs[:, 0] * np.sign(vecs[0, 0])
    print(f"  v1 = {np.round(v1, 3)}, burchak {np.degrees(np.arctan2(v1[1], v1[0])):.1f}°  (kutilgan 30°)")

    print("\n=== 3. Umumiy dispersiya saqlanadi ===")
    print(f"  iz(C) = {np.trace(C):.3f}, sum(lambda) = {vals.sum():.3f}")
    print(f"  1-o'q ulushi: {vals[0] / vals.sum():.1%}")

    print("\n=== 4. Bog'liq belgi — kichik xos qiymat ===")
    x = rng.normal(size=n)
    B = np.column_stack([x, 2 * x + rng.normal(0, 0.01, n), rng.normal(size=n)])
    print(f"  xos qiymatlar: {np.round(np.sort(np.linalg.eigvalsh(np.cov(B, rowvar=False)))[::-1], 5)}")
    print("  ⭐ Katta lambda — tuzilma; ≈0 — ortiqcha yo'nalish")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Xos qiymatlar — o'qlar bo'ylab dispersiya ===
  [9.043 0.247]  (kutilgan: 9 va 0.25)

=== 2. Birinchi xos vektor yo'nalishi ===
  v1 = [0.869 0.495], burchak 29.7°  (kutilgan 30°)

=== 3. Umumiy dispersiya saqlanadi ===
  iz(C) = 9.290, sum(lambda) = 9.290
  1-o'q ulushi: 97.3%

=== 4. Bog'liq belgi — kichik xos qiymat ===
  xos qiymatlar: [4.90044e+00 9.58270e-01 2.00000e-05]
  ⭐ Katta lambda — tuzilma; ≈0 — ortiqcha yo'nalish

Nima ko'rsatdi: 2.5, 2.6-bo'limlar.

Misol 4 — Daraja usuli: PageRank va Markov barqaror holati

python
"""Daraja usuli: PageRank va Markov barqaror holati (real numpy)."""

import numpy as np


def main() -> None:
    print("=== 1. PageRank: 5 sayt ===")
    # havolalar[i, j] = 1 — i sayt j saytga havola beradi
    havolalar = np.array([
        [0, 1, 1, 0, 0],   # A → B, C
        [0, 0, 1, 0, 0],   # B → C
        [1, 0, 0, 0, 0],   # C → A
        [0, 0, 0, 0, 1],   # D → E  (spam juftlik)
        [0, 0, 0, 1, 0],   # E → D
    ], dtype=float)
    n = len(havolalar)
    M = (havolalar / havolalar.sum(axis=1, keepdims=True)).T    # ustun — chiquvchi ehtimol
    d = 0.85
    G = d * M + (1 - d) / n

    r = np.ones(n) / n
    for _ in range(100):
        r = G @ r
        r /= r.sum()
    kiruvchi = havolalar.sum(axis=0)
    for nom, k, s in zip("ABCDE", kiruvchi, r):
        print(f"  {nom}: kiruvchi {int(k)}, PageRank {s:.3f}")

    print("\n=== 2. eig bilan tekshiruv (lambda = 1) ===")
    vals, vecs = np.linalg.eig(G)
    i = np.argmin(np.abs(vals - 1))
    v = np.real(vecs[:, i]); v /= v.sum()
    print(f"  lambda = {np.real(vals[i]):.4f}, bir xil: {np.allclose(v, r, atol=1e-6)}")

    print("\n=== 3. Markov barqaror holati 10.4-bob ===")
    P = np.array([[0.80, 0.15, 0.05], [0.30, 0.60, 0.10], [0.10, 0.10, 0.80]])
    vals, vecs = np.linalg.eig(P.T)
    pi = np.real(vecs[:, np.argmin(np.abs(vals - 1))]); pi /= pi.sum()
    print(f"  pi = {np.round(pi, 4)}, pi @ P = {np.round(pi @ P, 4)}")
    print("  ⭐ Xos qiymati 1 — barqaror holat")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. PageRank: 5 sayt ===
  A: kiruvchi 1, PageRank 0.233
  B: kiruvchi 1, PageRank 0.129
  C: kiruvchi 2, PageRank 0.238
  D: kiruvchi 1, PageRank 0.200
  E: kiruvchi 1, PageRank 0.200

=== 2. eig bilan tekshiruv (lambda = 1) ===
  lambda = 1.0000, bir xil: True

=== 3. Markov barqaror holati 10.4-bob ===
  pi = [0.5  0.25 0.25], pi @ P = [0.5  0.25 0.25]
  ⭐ Xos qiymati 1 — barqaror holat

Nima ko'rsatdi: 2.7-bo'lim.


5. To'g'ri va noto'g'ri tushunishlar

Noto'g'ri fikr To'g'risi
"vecs[i] — i-xos vektor" vecs[:, i] (ustun)
"eigh kamayish tartibida" O'sish tartibida
"Xos vektor ishorasi muhim" Ixtiyoriy (-v ham)
"Har matritsaning haqiqiy xos vektori bor" Burishda yo'q (kompleks)
"Kovariatsiya uchun eig" eigh (simmetrik)
"Xos qiymat — abstrakt tushuncha" Dispersiya, reyting, barqarorlik
"Kichik xos qiymat — muhim emas" Multikollinearlik belgisi
"PageRank — havolalar soni" Muhim saytlardan havola

6. Keng tarqalgan xatolar va yechimlari

1. Qator deb olish

python
v1 = vecs[0]                                                      # ⚠️
v1 = vecs[:, 0]                                                   # ✅

2. eigh tartibi

python
eng_katta = vecs[:, 0]            # eigh — eng KICHIK               # ⚠️
eng_katta = vecs[:, -1]           # yoki argsort[::-1]              # ✅

3. Simmetrikka eig

python
vals, vecs = np.linalg.eig(C)     # kompleks shovqin, tartibsiz     # ⚠️
vals, vecs = np.linalg.eigh(C)                                    # ✅

4. Kompleks qismini e'tiborsiz

python
v = vecs[:, i]                    # complex128                      # ⚠️
v = np.real(vecs[:, i])           # agar imag ≈ 0 ekanini tekshirgan bo'lsangiz  # ✅

5. Ishora bo'yicha talqin

python
if v1[0] < 0: print("teskari bog'liqlik")   # ishora ixtiyoriy     # ⚠️
v1 = v1 * np.sign(v1[np.argmax(np.abs(v1))])  # ishorani qotiring  # ✅

6. Kovariatsiya yo'nalishi

python
np.linalg.eigh(np.cov(X))         # n × n                           # ⚠️
np.linalg.eigh(np.cov(X, rowvar=False))                           # ✅

7. Normallashtirilmagan xos vektor

python
pi = np.real(vecs[:, i])          # ehtimol emas (yig'indi ≠ 1)     # ⚠️
pi = pi / pi.sum()                                                # ✅

7. Integratsiya — bu bilim qayerda kerak bo'ladi

  • 10.3-dars (o'tilgan): Kovariatsiya matritsasi, simmetrik matritsa
  • 10.4-dars (o'tilgan): O'zgartirish, Markov zanjiri
  • 10.5-dars (o'tilgan): Determinant, shart soni
  • 10.8-10.9-darslar: SVD, PCA
  • ML qismlari: Spektral klasterlash, grafik tahlili

8. Eng yaxshi amaliyotlar

  1. Simmetrik matritsa — eigh.

  2. Xos vektor — ustun (vecs[:, i]).

  3. Tartibni aniq belgilang (argsort).

  4. A v = lambda v bilan tekshiring.

  5. Ishorani talqindan oldin qotiring.

  6. Kichik xos qiymatlarga e'tibor bering (bog'liqlik).

  7. Katta siyrak matritsa — daraja usuli.

  8. Ehtimol vektorini normallashtiring.


9. Amaliy topshiriq

Vazifa 1: Bashorat qiling

python
1.  # diag([5, 2]) xos qiymatlari?
2.  # diag([5, 2]) xos vektorlari?
3.  # 2 × v xos vektormi?
4.  # lambda = 0 nimani bildiradi?
5.  # simmetrik matritsa xos qiymatlari?
6.  # simmetrik xos vektorlari?
7.  # eigh qaytarish tartibi?
8.  # det = ?
9.  # iz = ?
10. # kovariatsiya xos qiymati nima?
11. # 90° burish haqiqiy xos vektori?
12. # PageRank qaysi xos qiymatga mos?
Javoblar
  1. 5 va 2
  2. [1, 0] va [0, 1]
  3. Ha
  4. Singulyar (yo'nalish yo'qoladi)
  5. Haqiqiy
  6. Ortogonal
  7. O'sish
  8. Xos qiymatlar ko'paytmasi
  9. Xos qiymatlar yig'indisi
  10. Shu o'q bo'ylab dispersiya
  11. Yo'q
  12. 1

Vazifa 2: Xatolarni tuzating

python
1.  v1 = np.linalg.eigh(C)[1][0]   # eng katta xos vektor

2.  vals, vecs = np.linalg.eig(np.cov(X))

3.  pi = np.linalg.eig(P.T)[1][:, 0]   # barqaror taqsimot

4.  if pca_v1[2] < 0: print("3-belgi manfiy ta'sir")

5.  vals = np.linalg.eigh(C)[0]; print("eng katta:", vals[0])
Javoblar
python
1.  v1 = np.linalg.eigh(C)[1][:, -1]

2.  vals, vecs = np.linalg.eigh(np.cov(X, rowvar=False))

3.  vals, vecs = np.linalg.eig(P.T); pi = np.real(vecs[:, np.argmin(np.abs(vals - 1))]); pi /= pi.sum()

4.  # avval ishorani qotiring; komponenta ishorasi ixtiyoriy

5.  vals = np.linalg.eigh(C)[0]; print("eng katta:", vals[-1])

Vazifa 3: 2D o'zgartirishlar

Modellang:

  1. Cho'zish, qiyshaytirish, aks, burish
  2. Har birining xos qiymat/vektorlari
  3. Qaysi birida haqiqiy xos vektor yo'q
  4. Grafikda xos yo'nalishlar

Vazifa 4: Kovariatsiya

Modellang:

  1. 3 belgili korrelyatsiyali ma'lumot
  2. Kovariatsiya xos qiymatlari
  3. Dispersiya ulushlari
  4. Bitta belgini boshqasining nusxasiga almashtirish

Vazifa 5: PageRank

Modellang:

  1. 8 sayt havolalar grafi
  2. Daraja usuli
  3. Damping 0.5, 0.85, 0.99
  4. Spam klaster ta'siri

Vazifa 6: Integratsiya

Modellang:

  1. Markov (10.4)
  2. Kovariatsiya (10.3)
  3. Shart soni (10.5)
  4. Ridge 10.6-bob — lambda + alpha

Vazifa 7: O'ylash

Google'ning dastlabki muvaffaqiyati PageRank algoritmiga bog'liq — u aslida ulkan matritsaning xos vektori. Nima uchun "havolalar soni" o'rniga "muhim saytlardan kelgan havolalar" (rekursiv ta'rif) yaxshiroq ishlaydi? Bu g'oya (tarmoqdagi markaziylik) boshqa sohalarda — ijtimoiy tarmoqlar, moliya, ilmiy maqolalar — qanday qo'llanishi mumkin, va uning zaif tomonlari nimada?

Javob

Qisqa javob: havolalar sonini soxtalashtirish oson (ko'p sayt yaratib, bir-biriga havola berish). Rekursiv ta'rif esa havola beruvchining o'z obro'sini hisobga oladi: obro'siz saytlar bir-biriga qancha havola bermasin, tashqi muhim saytlardan havola bo'lmasa, o'z ulushidan yuqoriga ko'tarila olmaydi. Matematik jihatdan bu — o'zaro tayanuvchi tenglamalar sistemasi, yechimi — xos qiymati 1 ga mos xos vektor.

1. Nega rekursiv ta'rif yaxshi

Havolalar soni PageRank
Har havola bir xil vazn Havola beruvchining obro'si hisobga olinadi
Spam tarmoq oson ko'tariladi Spam tarmoq o'z ulushidan oshmaydi
Mahalliy ko'rsatkich Global tuzilma (butun tarmoq)

2. Boshqa sohalarda

  • Ijtimoiy tarmoq: ta'sirli foydalanuvchilar (ta'sirlilar kuzatadigan odam)
  • Ilmiy maqolalar: muhim maqolalar iqtibos keltirgan maqola
  • Moliya: tizimli xavf — ko'p muhim bank bog'liq bo'lgan bank
  • Biologiya: oqsillar tarmog'idagi markaziy genlar
  • Tavsiya: foydalanuvchi-mahsulot grafida mashhurlik

3. Zaif tomonlar

  • Havola ≠ sifat (tanqidiy havola ham "ovoz")
  • Boy yanada boyiydi (mashhurlik o'z-o'zini kuchaytiradi)
  • Manipulyatsiya baribir mumkin (havola sotib olish, link farm'lar)
  • Faqat tuzilma — mazmunni ko'rmaydi (zamonaviy qidiruv yuzlab belgidan foydalanadi)

4. Data Scientist qanday

  1. Grafni to'g'ri qurish (yo'nalish, vazn)
  2. Damping va osilib qolgan tugunlarni (chiquvchi havolasiz) hisobga olish
  3. Natijani boshqa ko'rsatkichlar bilan solishtirish
  4. Manipulyatsiya va tarafkashlikni monitoring qilish

5. Xulosa

  1. Rekursiv markaziylik — xos vektor masalasi
  2. Obro' tarmoq bo'ylab tarqaladi — spamga chidamliroq
  3. Ijtimoiy, ilmiy, moliyaviy tarmoqlarda keng qo'llanadi
  4. Zaif tomon: tuzilma ≠ sifat, mashhurlik effekti

Nimani mustahkamlaydi: 2.7-bo'lim.


Xulosa

Bu darsda xos qiymatlar va xos vektorlarni o'rgandik.

Eng muhim uch fikr:

  1. A v = lambda v. Xos vektor — matritsa faqat cho'zadigan (burmaydigan) yo'nalish; xos qiymat — cho'zish koeffitsiyenti (0 — yo'nalish yo'qoladi, singulyar). Xos vektorlar bazasida o'zgartirish — oddiy diagonal cho'zish (diagonallashtirish). NumPy: eig (umumiy), eigh (simmetrik); xos vektor — ustun, ishorasi ixtiyoriy; eigh — o'sish tartibi.

  2. Simmetrik va kovariatsiya. Simmetrik matritsa — haqiqiy xos qiymatlar, ortogonal xos vektorlar (S = Q diag Q.T). Kovariatsiya xos vektorlari — ma'lumot bulutining asosiy o'qlari, xos qiymatlar — shu o'qlardagi dispersiya (yig'indisi = umumiy dispersiya) → PCA; ≈ 0 xos qiymat — multikollinearlik.

  3. Xossalar va daraja usuli. det = ko'paytma, iz = yig'indi, cond = max/min, Ridge — lambda + alpha. Daraja usuli (A^k da eng katta lambda hukmron) — PageRank (xos qiymat 1, "muhim saytlardan havola") va Markov barqaror holati.

Keyingi darsda SVD (singulyar yoyilma)ni o'rganamiz: har qanday to'rtburchak matritsani burish × cho'zish × burish ga ajratish, past rankli yaqinlashtirish, rasm siqish va lstsq ning ichki mexanizmi.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!