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

10.3-dars: Matritsalar

10-QISM — CHIZIQLI ALGEBRA · 3-dars


1. Kirish va motivatsiya

Matritsa — sonlarning to'rtburchak jadvali: m qator × n ustun. Data Science'da siz matritsa bilan birinchi kundan ishlayapsiz: har bir DataFrame — matritsa (qatorlar — kuzatuvlar, ustunlar — belgilar), har bir oq-qora rasm — piksellar matritsasi, foydalanuvchi × mahsulot baholari — matritsa, korrelyatsiya jadvali 4.9-bob — matritsa. Bu darsda matritsani "shunchaki jadval" dan matematik obyekt darajasiga ko'taramiz.

Matritsani ikki xil o'qish mumkin: (1) qatorlar to'plami — har qator bir kuzatuv vektori 10.1-bob; (2) ustunlar to'plami — har ustun bir belgi vektori. Qaysi o'qishni tanlash — qanday savol berayotganingizga bog'liq: "qaysi mijozlar o'xshash?" — qatorlar; "qaysi belgilar bog'liq?" — ustunlar. Maxsus matritsalar (birlik, diagonal, simmetrik) va kovariatsiya matritsasi — keyingi darslarning (PCA, regressiya) asosiy qurilish bloklari.

Real vaziyat. ML muhandisi 50 000 mijoz × 200 belgili ma'lumotni pandas'da siklda qayta ishlaydi — har mijoz uchun for bilan hisob: 40 daqiqa. Kollegasi butun amalni matritsa ko'rinishida yozadi: standartlashtirish — broadcasting, o'xshashlik — bitta matritsa ko'paytmasi, kovariatsiya — Xc.T @ Xc / (n - 1) (Xc — markazlashtirilgan X). Natija: 2 soniya. Matritsa tilida fikrlash — nafaqat to'g'ri, balki tez kod (2.12 — vektorlashtirish).

Bu darsda matritsalarni o'rganamiz.

Bu darsda:

  • Matritsa: shakl, qatorlar va ustunlar
  • Ma'lumot matritsasi X (n × p)
  • Transponirlash
  • Maxsus matritsalar: birlik, diagonal, simmetrik, nol
  • Kovariatsiya matritsasi
  • Matritsa sifatida ma'lumot turlari (rasm, baholar)
  • Matritsa tuzoqlari
  • Amaliy: kovariatsiyani qo'lda hisoblash

ℹ Misollar real numpy/pandas bilan (Python 3.14).


2. Nazariya — chuqur tushuntirish

2.1. Matritsa: shakl, qatorlar va ustunlar

text
A — 2 × 3 matritsa (2 qator, 3 ustun):

      [ 1  2  3 ]      A[0, :] = [1, 2, 3]   — 0-qator (vektor)
  A = [ 4  5  6 ]      A[:, 1] = [2, 5]      — 1-ustun (vektor)
                       A[1, 2] = 6           — element (qator 1, ustun 2)
  A.shape = (2, 3)

Vektor — maxsus matritsa: qator vektor (1 × n), ustun vektor (n × 1)
NumPy: (n,) — 1D massiv (na qator, na ustun!)

Matritsa — m × n sonlar jadvali; shape = (m, n) — birinchisi qatorlar, ikkinchisi ustunlar (pandas va numpy'da bir xil). Element A[i, j] — i-qator, j-ustun. Qator va ustun — vektorlar. NumPy'da 1 o'lchamli massiv (n,) — qator ham, ustun ham emas; kerak bo'lsa reshape(-1, 1) (ustun) yoki reshape(1, -1) (qator) — sklearn ko'pincha 2D talab qiladi 2.7-bob.

2.2. Ma'lumot matritsasi X (n × p)

text
            belgi 1   belgi 2   ...   belgi p
kuzatuv 1  [  x11       x12     ...    x1p  ]
kuzatuv 2  [  x21       x22     ...    x2p  ]      X — n × p
   ...
kuzatuv n  [  xn1       xn2     ...    xnp  ]

y — n uzunlikdagi nishon vektori
ML konventsiyasi: X — katta harf (matritsa), y — kichik (vektor)
sklearn: model.fit(X, y)  →  X.shape = (n_samples, n_features)

Ma'lumot matritsasi X — ML'ning standart kirishi: qatorlar = kuzatuvlar (n), ustunlar = belgilar (p). df.to_numpy() yoki df.values — DataFrame'dan X. Ikki o'qish: qator X[i] — i-kuzatuv vektori (masofa, o'xshashlik — 10.1-10.2); ustun X[:, j] — j-belgi vektori (korrelyatsiya, kovariatsiya). Muhim nisbat: n > p (kuzatuvlar belgilardan ko'p) — klassik statistika holati; p > n (genetika, matn — belgilar ko'p) — maxsus usullar kerak (regularizatsiya).

2.3. Transponirlash

text
       [ 1  2  3 ]            [ 1  4 ]
  A =  [ 4  5  6 ]     A.T =  [ 2  5 ]      (A.T)[i, j] = A[j, i]
                              [ 3  6 ]
  (2 × 3)                     (3 × 2)

(A.T).T = A,     (A + B).T = A.T + B.T,     (A @ B).T = B.T @ A.T   ← tartib almashadi!

Transponirlash — qatorlar va ustunlarni almashtirish: A.T. Ma'nosi Data Science'da: X — "kuzatuvlar qatorlarda", X.T — "belgilar qatorlarda". X.T @ X (p × p) — belgilar orasidagi skalyar ko'paytmalar (kovariatsiya asosi); X @ X.T (n × n) — kuzatuvlar orasidagi skalyar ko'paytmalar (o'xshashlik matritsasi). Ko'paytmaning transponirlanishida tartib almashadi — ko'p isbot va formulalarda uchraydi. pandas: df.T.

2.4. Maxsus matritsalar

text
NOL:          barcha elementlar 0                   np.zeros((m, n))
BIRLIK I:     diagonalda 1, qolgani 0 (kvadrat)     np.eye(n)       A @ I = A
DIAGONAL D:   faqat diagonalda qiymatlar            np.diag([2, 5, 1])
              D @ x — har koordinatani o'z soniga ko'paytiradi (masshtablash!)
SIMMETRIK:    A = A.T                                kovariatsiya, korrelyatsiya, masofa
KVADRAT:      m = n

Birlik matritsa I — "1 soni" ning matritsa ko'rinishi: A @ I = I @ A = A. Diagonal matritsa — har o'qni alohida cho'zadi/qisqartiradi: standartlashtirish (har ustunni o'z SD siga bo'lish) — diagonal matritsaga ko'paytirish. Simmetrik matritsa — A = A.T: kovariatsiya, korrelyatsiya, masofa matritsalari doim simmetrik; ularning xossalari ayniqsa yaxshi (xos qiymatlari haqiqiy, xos vektorlari ortogonal — 10.7). Siyrak (sparse) — ko'p elementi 0: matn, baholar — scipy.sparse bilan saqlanadi.

2.5. Kovariatsiya matritsasi

text
Xc = X - X.mean(axis=0)            ← har ustunni markazlashtirish
C  = Xc.T @ Xc / (n - 1)           ← p × p, simmetrik

C[j, j] — j-belgi dispersiyasi (diagonal)
C[j, k] — j va k belgilar kovariatsiyasi (10.2: markazlashtirilgan skalyar ko'paytma)

Standartlashtirilgan X uchun: C = korrelyatsiya matritsasi
np.cov(X, rowvar=False)   ← ustunlar — o'zgaruvchilar!

Kovariatsiya matritsasi — barcha belgi juftliklari kovariatsiyalari bitta matritsada: diagonal — dispersiyalar, diagonaldan tashqari — kovariatsiyalar. Hisoblash — bitta matritsa ko'paytmasi: Xc.T @ Xc / (n - 1). Bu PCA ning 10.9-bob kirishi: uning xos vektorlari — ma'lumotning asosiy yo'nalishlari. Diqqat: np.cov standart holatda qatorlarni o'zgaruvchi deb oladi — ma'lumot matritsasi uchun rowvar=False kerak (yoki pd.DataFrame.cov()).

2.6. Matritsa sifatida ma'lumot turlari

Ko'p ma'lumot turi tabiiy ravishda matritsa: oq-qora rasm — balandlik × kenglik piksel yorqinligi (0-255); rangli — 3 ta matritsa (R, G, B); baholar — foydalanuvchi × mahsulot (ko'pi bo'sh — siyrak; tavsiya tizimlari, 10.10); matn — hujjat × so'z (TF-IDF, 10.2); grafik (tarmoq) — qo'shnilik matritsasi (kim kim bilan bog'langan); vaqt qatorlari — vaqt × ko'rsatkich. Matritsa ko'rinishi bu turlarga bir xil usullarni (SVD, PCA, o'xshashlik) qo'llash imkonini beradi.

2.7. Matritsa tuzoqlari

Asosiy tuzoqlar: qator/ustun adashtirish (np.cov(X) — qatorlarni o'zgaruvchi deb, n × n matritsa! rowvar=False kerak); (n,) va (n, 1) (sklearn 2D talab qiladi; broadcasting kutilmagan (n, n) natija beradi — a.reshape(-1, 1) - b → n × n matritsa); axis ni adashtirish (X.mean(axis=0) — ustunlar o'rtachasi, axis=1 — qatorlar); markazlashtirmasdan kovariatsiya (Xc emas, X bilan — noto'g'ri); katta siyrak matritsani zich qilish (xotira); pandas indeks bilan matritsa amallari (to_numpy() qilib, tartib va ustunlarni tekshiring); transponirlashda ko'paytma tartibi.

2.8. Matritsalar — ma'lumot jadvalining matematikasi

Matritsa: m × n jadval (shape — qatorlar, ustunlar); ma'lumot matritsasi X (n kuzatuv × p belgi) — ML standarti (fit(X, y)); qator — kuzatuv vektori, ustun — belgi vektori; transponirlash (X.T; X.T @ X — belgilar, X @ X.T — kuzatuvlar; (AB).T = B.T A.T); maxsus — birlik, diagonal (masshtablash), simmetrik (kovariatsiya), siyrak; kovariatsiya matritsasi Xc.T @ Xc / (n - 1) — PCA kirishi (rowvar=False!). Rasm, baholar, matn, tarmoq — hammasi matritsa. Keyingi dars — matritsa ko'paytmasi va matritsa chiziqli o'zgartirish sifatida.


3. Tez ma'lumotnoma

python
import numpy as np
import pandas as pd

X = df.to_numpy()                   # n × p ma'lumot matritsasi
X.shape                             # (n, p)
X[i], X[:, j]                       # i-kuzatuv, j-belgi
X.T                                 # transponirlash

np.eye(3)                           # birlik
np.diag([2, 5, 1])                  # diagonal
np.allclose(C, C.T)                 # simmetrikmi?

# KOVARIATSIYA
Xc = X - X.mean(axis=0)
C = Xc.T @ Xc / (len(X) - 1)        # p × p
np.cov(X, rowvar=False)             # bir xil (rowvar=False!)
df.cov(); df.corr()

# SHAKL
v.reshape(-1, 1)                    # (n,) → (n, 1)
QOIDA: qator — kuzatuv, ustun — belgi · axis=0 — ustunlar · np.cov(rowvar=False)

Matritsalar xulosasi

Matritsa — m × n; shape = (qatorlar, ustunlar)
X — n kuzatuv × p belgi (sklearn standarti)
X.T @ X — belgilar orasidagi, X @ X.T — kuzatuvlar orasidagi ko'paytmalar
Birlik (I), diagonal (masshtab), simmetrik (A = A.T), siyrak
Kovariatsiya — Xc.T @ Xc / (n-1); diagonal — dispersiyalar

4. Batafsil misollar

Misollar real numpy/pandas bilan (Python 3.14).

Misol 1 — Matritsa: shakl, qatorlar, ustunlar

python
"""DataFrame → ma'lumot matritsasi: qatorlar va ustunlar (real numpy/pandas)."""

import numpy as np
import pandas as pd


def main() -> None:
    df = pd.DataFrame({
        "maydon": [65, 80, 45, 120],
        "xona": [2, 3, 1, 4],
        "yosh": [10, 3, 25, 1],
    }, index=["uy1", "uy2", "uy3", "uy4"])
    X = df.to_numpy(dtype=float)

    print("=== 1. Shakl ===")
    print(f"  X.shape = {X.shape}  (4 kuzatuv × 3 belgi)")

    print("\n=== 2. Qator — kuzatuv, ustun — belgi ===")
    print(f"  X[1]    = {X[1]}  (uy2)")
    print(f"  X[:, 0] = {X[:, 0]}  (maydon)")

    print("\n=== 3. axis ===")
    print(f"  ustunlar o'rtachasi (axis=0): {X.mean(axis=0)}")
    print(f"  qatorlar o'rtachasi (axis=1): {np.round(X.mean(axis=1), 2)}")

    print("\n=== 4. Transponirlash ===")
    print(f"  X.T.shape = {X.T.shape}")
    print(f"  (X.T)[0] = {X.T[0]}  (maydon — endi qator)")
    print("  ⭐ Qator — kuzatuv, ustun — belgi")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Shakl ===
  X.shape = (4, 3)  (4 kuzatuv × 3 belgi)

=== 2. Qator — kuzatuv, ustun — belgi ===
  X[1]    = [80.  3.  3.]  (uy2)
  X[:, 0] = [ 65.  80.  45. 120.]  (maydon)

=== 3. axis ===
  ustunlar o'rtachasi (axis=0): [77.5   2.5   9.75]
  qatorlar o'rtachasi (axis=1): [25.67 28.67 23.67 41.67]

=== 4. Transponirlash ===
  X.T.shape = (3, 4)
  (X.T)[0] = [ 65.  80.  45. 120.]  (maydon — endi qator)
  ⭐ Qator — kuzatuv, ustun — belgi

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

Misol 2 — Maxsus matritsalar

python
"""Birlik, diagonal (masshtablash), simmetrik matritsalar (real numpy)."""

import numpy as np


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

    print("=== 1. Birlik matritsa ===")
    I = np.eye(2)
    print(f"  A @ I == A: {np.array_equal(A @ I, A)}")

    print("\n=== 2. Diagonal — har o'qni masshtablash ===")
    D = np.diag([2.0, 0.5])
    x = np.array([3.0, 4.0])
    print(f"  D @ x = {D @ x}  (x ni 2 ga, y ni 0.5 ga)")

    print("\n=== 3. Standartlashtirish — diagonal matritsa ===")
    X = np.array([[10.0, 200.0], [20.0, 400.0], [30.0, 900.0]])
    Xc = X - X.mean(axis=0)
    S_inv = np.diag(1 / X.std(axis=0))
    print(f"  Xc @ S_inv:\n{np.round(Xc @ S_inv, 3)}")
    print(f"  (X - mean) / std bilan bir xil: {np.allclose(Xc @ S_inv, Xc / X.std(axis=0))}")

    print("\n=== 4. Simmetrik: A.T @ A ===")
    B = A.T @ A
    print(f"  A.T @ A = {B.tolist()}, simmetrik: {np.allclose(B, B.T)}")
    print("  ⭐ Diagonal — masshtab; A.T @ A — doim simmetrik")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Birlik matritsa ===
  A @ I == A: True

=== 2. Diagonal — har o'qni masshtablash ===
  D @ x = [6. 2.]  (x ni 2 ga, y ni 0.5 ga)

=== 3. Standartlashtirish — diagonal matritsa ===
  Xc @ S_inv:
[[-1.225 -1.019]
 [ 0.    -0.34 ]
 [ 1.225  1.359]]
  (X - mean) / std bilan bir xil: True

=== 4. Simmetrik: A.T @ A ===
  A.T @ A = [[10.0, 14.0], [14.0, 20.0]], simmetrik: True
  ⭐ Diagonal — masshtab; A.T @ A — doim simmetrik

Nima ko'rsatdi: 2.4-bo'lim.

Misol 3 — Kovariatsiya matritsasi qo'lda

python
"""Kovariatsiya va korrelyatsiya matritsasi: Xc.T @ Xc / (n-1) (real numpy/pandas)."""

import numpy as np
import pandas as pd


def main() -> None:
    rng = np.random.default_rng(0)
    n = 500
    maydon = rng.normal(70, 20, n)
    narx = 1.5 * maydon + rng.normal(0, 15, n)
    yosh = rng.normal(15, 8, n)
    X = np.column_stack([maydon, narx, yosh])

    print("=== 1. Qo'lda ===")
    Xc = X - X.mean(axis=0)
    C = Xc.T @ Xc / (n - 1)
    print(np.round(C, 1))

    print("\n=== 2. np.cov: rowvar ===")
    print(f"  np.cov(X).shape = {np.cov(X).shape}  ← xato (qatorlar o'zgaruvchi)")
    print(f"  np.cov(X, rowvar=False) bilan teng: {np.allclose(C, np.cov(X, rowvar=False))}")

    print("\n=== 3. Diagonal — dispersiyalar ===")
    print(f"  diag(C) = {np.round(np.diag(C), 1)}")
    print(f"  X.var(ddof=1) = {np.round(X.var(axis=0, ddof=1), 1)}")

    print("\n=== 4. Standartlashtirilgan → korrelyatsiya ===")
    Z = Xc / X.std(axis=0, ddof=1)
    R = Z.T @ Z / (n - 1)
    print(np.round(R, 3))
    print(f"  pandas corr bilan teng: {np.allclose(R, pd.DataFrame(X).corr().to_numpy())}")
    print("  ⭐ Kovariatsiya — bitta matritsa ko'paytmasi")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Qo'lda ===
[[ 411.8  619.2    4.2]
 [ 619.2 1129.4    3.4]
 [   4.2    3.4   65.4]]

=== 2. np.cov: rowvar ===
  np.cov(X).shape = (500, 500)  ← xato (qatorlar o'zgaruvchi)
  np.cov(X, rowvar=False) bilan teng: True

=== 3. Diagonal — dispersiyalar ===
  diag(C) = [ 411.8 1129.4   65.4]
  X.var(ddof=1) = [ 411.8 1129.4   65.4]

=== 4. Standartlashtirilgan → korrelyatsiya ===
[[1.    0.908 0.025]
 [0.908 1.    0.013]
 [0.025 0.013 1.   ]]
  pandas corr bilan teng: True
  ⭐ Kovariatsiya — bitta matritsa ko'paytmasi

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

Misol 4 — Rasm va baholar matritsa sifatida

python
"""Rasm va baholar — matritsa; X @ X.T o'xshashlik matritsasi (real numpy)."""

import numpy as np


def main() -> None:
    print("=== 1. 'Rasm' — 8×8 piksel matritsasi ===")
    rasm = np.zeros((8, 8), dtype=int)
    rasm[2:6, 2:6] = 255                      # oq kvadrat
    for qator in rasm[1:7]:
        print("  " + "".join("#" if p > 0 else "." for p in qator))
    print(f"  shakl {rasm.shape}, o'rtacha yorqinlik {rasm.mean():.1f}")

    print("\n=== 2. Baholar: foydalanuvchi × film (0 = baholanmagan) ===")
    R = np.array([
        [5, 4, 0, 1],
        [4, 5, 1, 0],
        [0, 1, 5, 4],
        [1, 0, 4, 5],
    ], dtype=float)
    print(f"  siyraklik: {(R == 0).mean():.0%} bo'sh")

    print("\n=== 3. X @ X.T — foydalanuvchilar o'xshashligi ===")
    Rn = R / np.linalg.norm(R, axis=1, keepdims=True)
    S = Rn @ Rn.T
    print(np.round(S, 2))
    print("  ⭐ 0-1 va 2-3 foydalanuvchilar — o'xshash guruhlar")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. 'Rasm' — 8×8 piksel matritsasi ===
  ........
  ..####..
  ..####..
  ..####..
  ..####..
  ........
  shakl (8, 8), o'rtacha yorqinlik 63.8

=== 2. Baholar: foydalanuvchi × film (0 = baholanmagan) ===
  siyraklik: 25% bo'sh

=== 3. X @ X.T — foydalanuvchilar o'xshashligi ===
[[1.   0.95 0.19 0.24]
 [0.95 1.   0.24 0.19]
 [0.19 0.24 1.   0.95]
 [0.24 0.19 0.95 1.  ]]
  ⭐ 0-1 va 2-3 foydalanuvchilar — o'xshash guruhlar

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


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

Noto'g'ri fikr To'g'risi
"shape = (ustun, qator)" (qator, ustun)
"np.cov(X) — belgilar kovariatsiyasi" rowvar=False kerak
"axis=0 — qatorlar bo'yicha natija" axis=0 — ustunlar natijasi
"(n,) — ustun vektor" 1D; na qator, na ustun
"(AB).T = A.T B.T" B.T A.T
"Matritsa — faqat jadval" Rasm, baholar, tarmoq ham
"Kovariatsiya — X.T @ X" Markazlashtirilgan Xc bilan
"Siyrak matritsani zich saqlash mayli" Xotira tugaydi

6. Keng tarqalgan xatolar va yechimlari

1. np.cov yo'nalishi

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

2. Markazlashtirmasdan

python
C = X.T @ X / (n - 1)                                              # ⚠️
Xc = X - X.mean(axis=0); C = Xc.T @ Xc / (n - 1)                   # ✅

3. 1D massivni sklearn'ga

python
model.fit(maydon, y)                    # (n,) — xato               # ⚠️
model.fit(maydon.reshape(-1, 1), y)                                # ✅

4. Kutilmagan broadcasting

python
farq = a.reshape(-1, 1) - b             # (n, n) matritsa           # ⚠️
farq = a - b                            # (n,)                      # ✅

5. axis xatosi

python
Xc = X - X.mean(axis=1)                 # qatorlar o'rtachasi       # ⚠️
Xc = X - X.mean(axis=0)                                            # ✅

6. Transponirlash tartibi

python
(A @ B).T == A.T @ B.T                  # noto'g'ri                 # ⚠️
(A @ B).T == B.T @ A.T                                             # ✅

7. Siyrak matritsa

python
R = baholar.toarray()                   # 1 mln × 100k              # ⚠️
# scipy.sparse formatida qoldiring                                 # ✅

7. Integratsiya — bu bilim qayerda kerak bo'ladi

  • 2.3, 2.7-darslar (o'tilgan): shape, reshape
  • 4.9-dars (o'tilgan): Kovariatsiya, korrelyatsiya
  • 10.2-dars (o'tilgan): Skalyar ko'paytma
  • 10.4-dars: Matritsa ko'paytmasi
  • 10.9-dars: PCA (kovariatsiya matritsasining xos vektorlari)

8. Eng yaxshi amaliyotlar

  1. X — n × p: qator kuzatuv, ustun belgi.

  2. shape ni har qadamda tekshiring.

  3. axis=0 — ustunlar statistikasi.

  4. np.cov(..., rowvar=False) yoki df.cov().

  5. Kovariatsiyadan oldin markazlashtiring.

  6. Simmetriklikni np.allclose bilan tekshiring.

  7. Siyrak ma'lumot — scipy.sparse.

  8. sklearn uchun 2D (reshape(-1, 1)).


9. Amaliy topshiriq

Vazifa 1: Bashorat qiling

python
1.  # 3 × 5 matritsa nechta qator?
2.  # A.T shakli (A: 3 × 5)?
3.  # X.T @ X shakli (X: 100 × 4)?
4.  # X @ X.T shakli?
5.  # np.eye(3) @ A?
6.  # np.diag([2, 3]) @ [1, 1]?
7.  # kovariatsiya matritsasi diagonali?
8.  # np.cov(X) (X: 100 × 4) shakli?
9.  # X.mean(axis=0) shakli?
10. # A = A.T nima deyiladi?
11. # (AB).T = ?
12. # 80×80 oq-qora rasm — nechta son?
Javoblar
  1. 3
  2. 5 × 3
  3. 4 × 4
  4. 100 × 100
  5. A
  6. [2, 3]
  7. Dispersiyalar
  8. 100 × 100
  9. (4,)
  10. Simmetrik
  11. B.T @ A.T
  12. 6400

Vazifa 2: Xatolarni tuzating

python
1.  C = np.cov(X)   # X: 1000 × 5, belgilar kovariatsiyasi

2.  C = X.T @ X / (len(X) - 1)

3.  model.fit(df["maydon"].to_numpy(), y)

4.  Xc = X - X.mean(axis=1)

5.  Z = (X - X.mean()) / X.std()   # har ustun alohida
Javoblar
python
1.  C = np.cov(X, rowvar=False)

2.  Xc = X - X.mean(axis=0); C = Xc.T @ Xc / (len(X) - 1)

3.  model.fit(df[["maydon"]].to_numpy(), y)

4.  Xc = X - X.mean(axis=0)

5.  Z = (X - X.mean(axis=0)) / X.std(axis=0)

Vazifa 3: Kovariatsiya

Modellang:

  1. 4 belgili ma'lumot
  2. Qo'lda kovariatsiya
  3. np.cov va df.cov bilan solishtirish
  4. Korrelyatsiya matritsasiga o'tish

Vazifa 4: O'xshashlik matritsasi

Modellang:

  1. 6 mijoz × 4 belgi
  2. Standartlashtirish
  3. X @ X.T (normallashtirilgan)
  4. Eng o'xshash juftlik

Vazifa 5: Rasm

Modellang:

  1. 20 × 20 rasm (shakl chizish)
  2. Transponirlash (aks)
  3. Diagonal/teskari tartib (burish)
  4. O'rtacha yorqinlik

Vazifa 6: Integratsiya

Modellang:

  1. reshape (2.7)
  2. Korrelyatsiya (4.9)
  3. Kosinus (10.2)
  4. Standartlashtirish (6.6)

Vazifa 7: O'ylash

Bir xil ma'lumotni matritsa sifatida ikki xil o'qish mumkin: qatorlar (kuzatuvlar) va ustunlar (belgilar). Nima uchun X.T @ X (p × p) va X @ X.T (n × n) matritsalari bir xil ma'lumotdan turli savollarga javob beradi? Katta ma'lumotda (n = 10 million, p = 100) qaysi birini hisoblash mumkin, qaysi biri imkonsiz — va bu algoritm tanlashga qanday ta'sir qiladi?

Javob

Qisqa javob: X.T @ X — belgilar orasidagi munosabatlar (kovariatsiya — "qaysi belgilar birga o'zgaradi?"); X @ X.T — kuzatuvlar orasidagi munosabatlar (o'xshashlik — "qaysi mijozlar o'xshash?"). n = 10 mln, p = 100 da X.T @ X — 100 × 100 (10 ming son, oson); X @ X.T — 10 mln × 10 mln (100 trillion son — imkonsiz).

1. Ikki matritsa

X.T @ X X @ X.T
Shakl p × p n × n
Savol Belgilar bog'liqligi Kuzatuvlar o'xshashligi
Qo'llanish PCA, regressiya Klasterlash, kernel usullar
n = 10 mln, p = 100 10 ming element 10^14 element

2. Algoritm tanloviga ta'siri

  • Regressiya, PCA — p × p bilan ishlaydi: katta n ga yaxshi masshtablanadi
  • Kernel SVM, to'liq masofa matritsasi — n × n: katta n da imkonsiz
  • Shuning uchun katta ma'lumotda: chiziqli modellar, mini-batch, taxminiy eng yaqin qo'shnilar

3. Qiziq bog'liqlik

  • Ikkala matritsaning nol bo'lmagan xos qiymatlari bir xil (SVD, 10.8)
  • p > n bo'lganda (genetika) aksincha — n × n kichikroq, uni ishlatish qulay

4. Data Scientist qanday

  1. Algoritm tanlashdan oldin qaysi matritsa kerakligini tushunadi
  2. Xotira bahosini hisoblaydi (elementlar soni × 8 bayt)
  3. Katta n da juftlik matritsalaridan qochadi
  4. Kichik o'lchamni tanlaydi (p × p yoki n × n)

5. Xulosa

  1. Bir ma'lumot — ikki nuqtai nazar (belgilar va kuzatuvlar)
  2. X.T @ X — belgilar, X @ X.T — kuzatuvlar
  3. Matritsa o'lchami algoritm masshtablanishini belgilaydi
  4. Kichik tomondagi matritsa bilan ishlash — amaliy qoida

Nimani mustahkamlaydi: 2.2, 2.3-bo'limlar.


Xulosa

Bu darsda matritsalarni o'rgandik.

Eng muhim uch fikr:

  1. Ma'lumot matritsasi. Matritsa — m × n jadval (shape — qatorlar, ustunlar). X — n kuzatuv × p belgi (sklearn standarti): qator — kuzatuv vektori, ustun — belgi vektori; axis=0 — ustunlar statistikasi. 1D massiv (n,) ≠ ustun (n, 1).

  2. Transponirlash va maxsus matritsalar. X.T — qator/ustun almashadi; X.T @ X — belgilar orasidagi, X @ X.T — kuzatuvlar orasidagi ko'paytmalar; (AB).T = B.T A.T. Birlik (A @ I = A), diagonal (har o'qni masshtablash — standartlashtirish), simmetrik (A = A.T — kovariatsiya, korrelyatsiya), siyrak (matn, baholar).

  3. Kovariatsiya matritsasi. C = Xc.T @ Xc / (n - 1): diagonal — dispersiyalar, qolgani — kovariatsiyalar; standartlashtirilgan X da — korrelyatsiya. np.cov(X, rowvar=False)! Bu PCA ning kirishi 10.9-bob.

Keyingi darsda matritsa ko'paytmasini o'rganamiz: qoidasi va shakl sharti, matritsa — chiziqli o'zgartirish (aylantirish, cho'zish, proyeksiya), ko'paytmalar zanjiri va neyron tarmoq qatlami.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
10.3-dars: Matritsalar — IlmHamroh