Bu modul machine learning’ning matematik tili — matritsalar, vektorlar va ular yordamida linear regression’ni bir nechta xususiyatga kengaytirish.
Matritsa va vektor
Matritsa — sonlarning to’rtburchak jadvali; o’lchami qatorlar × ustunlar deb o’qiladi. Vektor — bitta ustunli matritsa (n × 1). ML’da butun dataset odatda bitta X matritsaga yig’iladi: har qator — bitta misol, har ustun — bitta xususiyat.
A = | 1 2 | v = | 5 |
| 3 4 | | 6 |
| 5 6 |
A: 3×2 matritsa v: 2×1 vektor
Bir o’lchamdagi matritsalar element bo’yicha qo’shiladi; skalyarga ko’paytirish har elementga ta’sir qiladi — bu amallar o’lchamni o’zgartirmaydi:
import numpy as np
A = np.array([[1, 2], [3, 4], [5, 6]])
print(A + A) # har element ikkilanadi
print(3 * A) # har element 3 ga ko'payadi
print(A.T) # transpozitsiya: 2x3 — qator va ustunlar almashadi
Matritsalarni ko’paytirish
Asosiy qoida: (m × n) · (n × p) = (m × p) — birinchisining ustunlar soni ikkinchisining qatorlar soniga teng bo’lishi shart, natija chetki o’lchamlardan tuziladi. Natijaning (i, j) elementi — birinchining i-qatori bilan ikkinchining j-ustunining juft-juft ko’paytmalari yig’indisi:
A = np.array([[1, 2],
[3, 4],
[5, 6]]) # 3x2
v = np.array([[5],
[6]]) # 2x1
print(A @ v)
Natija:
[[17]
[39]
[61]]
(1·5 + 2·6 = 17 va hokazo.) Ikki ogohlantirish: NumPy’da * element bo’yicha ko’paytirish, matritsa ko’paytmasi esa @ (yoki np.dot); va ko’paytirish kommutativ emas — A @ B ≠ B @ A (ko’pincha ikkinchisi o’lcham jihatdan umuman mumkin ham emas). Foydali maxsus holat — birlik matritsa I: I @ A = A @ I = A.
| Amal | Shart | Natija o’lchami |
|---|---|---|
A + B |
o’lchamlar teng | o’sha o’lcham |
3 * A |
— | o’sha o’lcham |
A @ B |
A ustunlari = B qatorlari | (A qatorlari) × (B ustunlari) |
A.T |
— | o’lchamlar almashadi |
Ko’p xususiyatli linear regression
Uy narxi faqat maydonga emas — xonalar soni, qavat, yoshiga ham bog’liq. Model n ta xususiyatga kengayadi:
h(x) = w₁x₁ + w₂x₂ + ... + wₙxₙ + b
Matritsa tili bu yig’indini bitta amalga aylantiradi. X — (m × n) dataset, w — (n × 1) og’irliklar vektori:
X = np.array([[65, 2], # maydon, xonalar
[80, 3],
[120, 4]]) # 3 misol, 2 xususiyat
w = np.array([[1.2],
[15.0]])
b = 40.0
print(X @ w + b) # UCHALA misol bashorati bitta amalda
Natija:
[[148.]
[181.]
[244.]]
Sikl yo’q — shu vektorlashuv deyiladi. Gradient ham xuddi shunday ixchamlashadi: dw = X.T @ (h − y) / m. Oldingi modulda yozgan kodingiz bir necha belgigina o’zgarib, istalgan miqdordagi xususiyat bilan ishlay boshlaydi — chiziqli algebraning ML’dagi kuchi ana shunda.
Amaliyot
- (2×3) va (3×2) matritsalar yozib,
A @ BvaB @ Ani hisoblang — o’lchamlari va qiymatlari farqiga e’tibor bering. - Qaysilarini ko’paytirish mumkin: (4×2)·(2×5)? (3×3)·(4×3)? (1×5)·(5×1)? Mumkinlarining natija o’lchamini yozing.
- Yuqoridagi X, w, b misolini kodda terib, natijani qo’lda hisoblab tekshiring.
- Uch xususiyatli o’zingizning mini-datasetingizni yasang (5 misol) va tasodifiy w bilan
X @ w + bbashoratini hisoblang. X.T @ Xning o’lchami nima bo’lishini oldindan aytib, keyin kodda tekshiring.
Kursni yopadigan test keyingi darsda — barcha modullar bo’yicha asosiy tushunchalarni qamrab oladi.