Mundarija (22)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. PCA g'oyasi
- 2.2. PCA qadamlari
- 2.3. Tushuntirilgan dispersiya va k ni tanlash
- 2.4. Yuklamalar (loadings) va talqin
- 2.5. Standartlashtirish: qachon va nega
- 2.6. Rekonstruksiya va siqish
- 2.7. PCA tuzoqlari
- 2.8. PCA — chiziqli algebraning yakuni
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — PCA qo'lda va sklearn
- Misol 2 — Standartlashtirish va yuklamalar
- Misol 3 — Komponentalar sonini tanlash
- Misol 4 — Rekonstruksiya, anomaliya va leakage'siz pipeline
- 5. To'g'ri va noto'g'ri tushunishlar
- 6. Keng tarqalgan xatolar va yechimlari
- 7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 8. Eng yaxshi amaliyotlar
- 9. Amaliy topshiriq
- Xulosa
10.9-dars: PCA — bosh komponentalar tahlili
10-QISM — CHIZIQLI ALGEBRA · 9-dars
1. Kirish va motivatsiya
Bu qismda yig'ilgan hamma narsa — vektorlar, proyeksiya, kovariatsiya matritsasi, xos vektorlar, SVD — bitta mashhur usulda birlashadi: PCA (Principal Component Analysis, bosh komponentalar tahlili). PCA — ko'p o'lchamli ma'lumotni kamroq o'lchamga siqish usuli, shunda iloji boricha ko'p ma'lumot (dispersiya) saqlanadi. 50 ta belgili mijoz ma'lumotini 2 o'lchamga tushirib, grafikda ko'rish; 784 pikselli raqam rasmlarini 50 komponentaga siqish; bir-biriga bog'liq 20 ta so'rovnoma savolini 3 ta "yashirin omil"ga keltirish.
PCA g'oyasi sodda: ma'lumot buluti odatda barcha yo'nalishlarda bir xil tarqalmagan — ba'zi yo'nalishlarda keng, ba'zilarida tor (10.7, ellips). Bosh komponentalar — eng keng tarqalish yo'nalishlari (kovariatsiya matritsasining xos vektorlari = markazlashtirilgan X ning o'ng singulyar vektorlari). Ma'lumotni birinchi k komponentaga proyeksiyalash 10.2-bob — eng kam ma'lumot yo'qotilgan k o'lchamli ko'rinish. Foydalanish: vizualizatsiya, siqish, shovqinni tozalash, multikollinearlikni yo'qotish (komponentalar ortogonal), tezlashtirish (ML modelga kamroq belgi), o'lchamlar la'natiga qarshi 10.1-bob.
Real vaziyat. Marketing bo'limi 1 000 mijoz haqida 5 ta ko'rsatkich yig'di (xaridlar soni, o'rtacha chek, ilova sessiyalari, chegirma va premium mahsulotlar ulushi). Jadvalga qarab hech narsa ko'rinmaydi. Data Scientist ma'lumotni standartlashtirib, PCA qiladi: birinchi ikki komponenta dispersiyaning ~94% ini tushuntiradi (Misol 2). Komponentalar yuklamalariga (loadings) qarab ma'no beradi: 1-komponenta — "umumiy faollik" (hamma xarid ko'rsatkichlari musbat vaznli), 2-komponenta — "chegirma ovchisi ↔ premium xaridor". Endi har mijozni ikki tushunarli o'qli 2D grafikda ko'rish mumkin — keyingi segmentlash va klasterlashga (ML qismi) asos.
Bu darsda PCA ni o'rganamiz.
Bu darsda:
- PCA g'oyasi: eng katta dispersiya yo'nalishlari
- PCA qadamlari: markazlashtirish → SVD → proyeksiya
- Tushuntirilgan dispersiya va komponentalar sonini tanlash
- Yuklamalar (loadings) va talqin
- Standartlashtirish: qachon va nega
- Rekonstruksiya va siqish
- PCA tuzoqlari
- Amaliy: sklearn PCA, vizualizatsiya
ℹ Misollar real numpy/sklearn bilan (Python 3.14).
2. Nazariya — chuqur tushuntirish
2.1. PCA g'oyasi
Ma'lumot buluti (2D misol): bir yo'nalishda cho'zilgan ellips
y | . . .. PC1 — eng uzun o'q (eng katta dispersiya)
| . . .:. . PC2 — PC1 ga perpendikulyar, qolgan dispersiya
| . .:..: .
|. . . 2D → 1D: har nuqtani PC1 ga proyeksiyalash
+------------- x yo'qotilgan: faqat PC2 bo'ylab (kichik) tarqalish
PC_i — kovariatsiya matritsasining i-xos vektori 10.7-bob = Vt[i] (markazlashtirilgan X ning SVD si, 10.8)
PC_i dispersiyasi = i-xos qiymat = s_i^2 / (n - 1)PCA — koordinatalar tizimini burish 10.4-bob: yangi o'qlar (bosh komponentalar) — ma'lumot eng ko'p tarqalgan yo'nalishlar, kamayish tartibida, o'zaro ortogonal. Keyin eng kam dispersiyali o'qlar tashlanadi. Nega dispersiya = ma'lumot? Tarqalmagan yo'nalish (hamma nuqta bir xil qiymat) — hech narsani ajratmaydi; keng tarqalgan — kuzatuvlar orasidagi farqlar shu yerda. Muhim: PCA — nazoratsiz (y dan foydalanmaydi) va chiziqli (faqat to'g'ri o'qlar).
2.2. PCA qadamlari
1. MARKAZLASHTIRISH: Xc = X - X.mean(axis=0) (majburiy!)
(ixtiyoriy) STANDARTLASHTIRISH: Xs = Xc / X.std(axis=0) (birliklar farq qilsa)
2. SVD: U, s, Vt = svd(Xc, full_matrices=False)
3. KOMPONENTALAR: Vt[:k] (k × p) — yo'nalishlar
4. PROYEKSIYA: Z = Xc @ Vt[:k].T (= U[:, :k] * s[:k]) (n × k) — yangi koordinatalar
5. DISPERSIYA: s^2 / (n - 1); ulush = s^2 / sum(s^2)
sklearn: PCA(n_components=k).fit_transform(X) — 1, 2, 3, 4 ni o'zi qiladi (markazlashtiradi, lekin standartlashtirmaydi!) PCA — besh qadam: markazlashtirish (aks holda 1-komponenta o'rtacha tomon yo'naladi — 10.8 tuzog'i), kerak bo'lsa standartlashtirish, SVD (kovariatsiya xos yoyilmasidan barqarorroq), komponentalar (Vt qatorlari), proyeksiya Z = Xc @ V_k (har kuzatuvning yangi koordinatalari — "PC ballari"). sklearn PCA markazlashtirishni o'zi qiladi, standartlashtirishni emas — kerak bo'lsa StandardScaler bilan pipeline.
2.3. Tushuntirilgan dispersiya va k ni tanlash
Tushuntirilgan dispersiya ulushi — lambda_i / sum(lambda) (sklearn: explained_variance_ratio_); kumulyativ — birinchi k tasi yig'indisi. k tanlash usullari: (1) chegara — kumulyativ 90% (yoki 95%) ga yetguncha (PCA(n_components=0.9)); (2) "tirsak" (scree plot) — xos qiymatlar grafigida keskin burilish nuqtasi; (3) maqsad — vizualizatsiya uchun 2-3; (4) keyingi model sifati — cross-validation (PCA pipeline ichida). Ma'lumotda past o'lchamli tuzilma bo'lsa, bir necha komponenta dispersiyaning ko'pini beradi; bo'lmasa (masalan, mustaqil belgilar) — ulushlar deyarli teng, PCA foydasiz.
2.4. Yuklamalar (loadings) va talqin
Vt[i] — i-komponentaning belgilar bo'yicha vaznlari (yuklamalar)
PC1 = 0.45 × xarid_soni + 0.42 × chek + 0.40 × ilova + ... → "umumiy faollik"
PC2 = 0.60 × chegirma - 0.55 × premium + ... → "chegirma ↔ premium"
Talqin: katta mutlaq qiymatli vaznlar; ishora — ixtiyoriy (PC va -PC bir xil)Yuklamalar — komponentani belgilarning chiziqli kombinatsiyasi 10.1-bob sifatida ko'rsatadi; eng katta mutlaq vaznli belgilarga qarab komponentaga ma'no beriladi ("umumiy o'lcham", "kontrast"). Ehtiyot: (1) ishora ixtiyoriy (talqindan oldin qotiring); (2) talqin — gipoteza, ayniqsa keyingi komponentalarda; (3) komponentalar ortogonallik sharti bilan qurilgan — haqiqiy omillar bilan to'liq mos kelmasligi mumkin; (4) standartlashtirilmagan ma'lumotda yuklamalar birliklarni aks ettiradi.
2.5. Standartlashtirish: qachon va nega
PCA dispersiyaga qaraydi — shuning uchun birliklarga sezgir: [yosh, daromad (so'm)] da daromad dispersiyasi milliardlab — 1-komponenta faqat "daromad" bo'ladi (10.1 masshtab muammosi). Qoida: belgilar turli birlikda bo'lsa — standartlashtiring (bu korrelyatsiya matritsasi PCA si); bir xil birlik va masshtab bo'lsa (piksellar, bir xil shkaladagi so'rovnoma javoblari) — faqat markazlashtirish yetarli, standartlashtirish ahamiyatsiz yo'nalishlarning shovqinini sun'iy kuchaytirishi mumkin. Outlierlar — PCA ni kuchli buradi (kvadratlar, 10.6); oldin tekshiring 8.6-bob.
2.6. Rekonstruksiya va siqish
Z = Xc @ V_k (n × k) — siqilgan ko'rinish
X_tiklangan = Z @ V_k.T + mean (n × p) — rekonstruksiya (proyeksiya asl fazoda)
xato = ||X - X_tiklangan||^2 = tashlangan komponentalar dispersiyasi yig'indisi (Eckart-Young)
sklearn: pca.inverse_transform(Z)Rekonstruksiya — siqilgan koordinatalardan asl fazoga qaytish: Z @ V_k.T + o'rtacha. Bu — k-komponentali tekislikka proyeksiya 10.2-bob: tashlangan yo'nalishlar bo'ylab ma'lumot yo'qoladi. Qo'llanilishi: siqish (k × (n + p) son saqlanadi), shovqin tozalash (kichik komponentalar ko'pincha shovqin), anomaliya aniqlash — rekonstruksiya xatosi katta kuzatuv "odatiy tuzilma"ga mos emas (8.6 ga qo'shimcha usul).
2.7. PCA tuzoqlari
Asosiy tuzoqlar: markazlashtirmaslik (qo'lda SVD da); standartlashtirmaslik (turli birliklar — bitta belgi hukmron); test ma'lumotiga alohida fit (data leakage va noto'g'ri koordinatalar — PCA faqat o'quvda fit, testda transform; pipeline); ishorani talqin qilish (ixtiyoriy); PCA natijasini "eng muhim belgilar" deb o'qish (PCA y ni ko'rmaydi — eng katta dispersiya ≠ bashorat uchun eng foydali; kichik dispersiyali yo'nalish nishonni aniqlashi mumkin); nochiziqli tuzilma (spiral, halqa — chiziqli PCA ko'rmaydi; t-SNE/UMAP, kernel PCA); kategoriyalar (one-hot ustunlarda PCA ma'nosi cheklangan); outlierlar (komponentalarni buradi); talqin qilinuvchanlikni yo'qotish (komponenta — belgilar aralashmasi, model tushuntirish qiyinlashadi).
2.8. PCA — chiziqli algebraning yakuni
PCA: markazlashtirilgan (kerak bo'lsa standartlashtirilgan) X ning SVD si → komponentalar Vt[:k] (kovariatsiya xos vektorlari, ortogonal, dispersiya kamayish tartibida) → proyeksiya Z = Xc @ V_k; tushuntirilgan dispersiya — s^2 ulushlari (k — 90% chegara, tirsak, CV); yuklamalar — belgilar vaznlari (talqin — gipoteza, ishora ixtiyoriy); rekonstruksiya — Z @ V_k.T + o'rtacha (siqish, shovqin, anomaliya); tuzoqlar — masshtab, leakage, nazoratsiz (y ni ko'rmaydi), chiziqli. Bu qism vektorlar 10.1-bob → skalyar ko'paytma va proyeksiya 10.2-bob → kovariatsiya 10.3-bob → o'zgartirish 10.4-bob → rank 10.5-bob → regressiya 10.6-bob → xos vektorlar 10.7-bob → SVD 10.8-bob → PCA ga olib keldi.
3. Tez ma'lumotnoma
import numpy as np
from sklearn.decomposition import PCA
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
# QO'LDA
Xc = X - X.mean(axis=0)
U, s, Vt = np.linalg.svd(Xc, full_matrices=False)
Z = Xc @ Vt[:k].T # PC ballari
ulush = s ** 2 / (s ** 2).sum()
# SKLEARN
pipe = make_pipeline(StandardScaler(), PCA(n_components=0.9)) # 90% dispersiya
Z = pipe.fit_transform(X_train)
Z_test = pipe.transform(X_test) # test — faqat transform!
pca = pipe[-1]
pca.explained_variance_ratio_, pca.components_ # ulushlar, yuklamalar (= Vt)
X_tik = pipe.inverse_transform(Z) # rekonstruksiya
QOIDA: markazlashtir · turli birlik → standartlashtir · fit faqat o'quvda · ishora ixtiyoriyPCA xulosasi
PCA — dispersiya eng katta ortogonal yo'nalishlarga proyeksiya
Qadamlar: markazlashtirish → (standartlashtirish) → SVD → Z = Xc @ V_k
Ulush — s^2 / sum(s^2); k — 90%, tirsak, CV
Yuklamalar — components_ (Vt); talqin — gipoteza
Rekonstruksiya — Z V_k.T + mean; siqish, shovqin, anomaliya
Nazoratsiz, chiziqli, masshtabga sezgir; fit faqat o'quvda4. Batafsil misollar
Misollar real numpy/sklearn bilan (Python 3.14).
Misol 1 — PCA qo'lda va sklearn
"""PCA: markazlashtirish → SVD → proyeksiya; sklearn bilan solishtirish (real numpy/sklearn)."""
import numpy as np
from sklearn.decomposition import PCA
def main() -> None:
rng = np.random.default_rng(0)
n = 500
z = rng.normal(size=(n, 2)) # 2 ta yashirin omil
W = np.array([[2.0, 1.0, 0.5, 1.5], [0.3, -1.0, 2.0, 0.0]])
X = z @ W + rng.normal(0, 0.3, (n, 4)) + [10, 5, -3, 7]
print("=== 1. Qo'lda ===")
Xc = X - X.mean(axis=0)
U, s, Vt = np.linalg.svd(Xc, full_matrices=False)
ulush = s ** 2 / (s ** 2).sum()
print(f" dispersiya ulushlari: {np.round(ulush, 4)}")
Z = Xc @ Vt[:2].T
print(f" Z shakli: {Z.shape}")
print("\n=== 2. sklearn ===")
pca = PCA(n_components=2).fit(X)
print(f" explained_variance_ratio_: {np.round(pca.explained_variance_ratio_, 4)}")
Zs = pca.transform(X)
bir_xil = np.allclose(np.abs(Z), np.abs(Zs))
print(f" koordinatalar (ishoragacha) bir xil: {bir_xil}")
print("\n=== 3. Komponentalar ortogonal, ballar korrelyatsiyasiz ===")
print(f" PC1 · PC2 = {Vt[0] @ Vt[1]:.2e}")
print(f" corr(Z1, Z2) = {np.corrcoef(Z[:, 0], Z[:, 1])[0, 1]:.2e}")
print("\n=== 4. Markazlashtirmasdan (xato) ===")
_, s0, Vt0 = np.linalg.svd(X, full_matrices=False)
print(f" 1-'komponenta' ≈ o'rtacha yo'nalishi: {np.round(Vt0[0] * np.sign(Vt0[0, 0]), 3)}")
print(f" o'rtacha / ||o'rtacha||: {np.round(X.mean(0) / np.linalg.norm(X.mean(0)), 3)}")
print(" ⭐ 4 belgi, 2 omil → 2 komponenta ~99%")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Qo'lda ===
dispersiya ulushlari: [0.6042 0.3812 0.0073 0.0072]
Z shakli: (500, 2)
=== 2. sklearn ===
explained_variance_ratio_: [0.6042 0.3812]
koordinatalar (ishoragacha) bir xil: True
=== 3. Komponentalar ortogonal, ballar korrelyatsiyasiz ===
PC1 · PC2 = 1.53e-16
corr(Z1, Z2) = 1.91e-16
=== 4. Markazlashtirmasdan (xato) ===
1-'komponenta' ≈ o'rtacha yo'nalishi: [ 0.738 0.371 -0.222 0.518]
o'rtacha / ||o'rtacha||: [ 0.738 0.368 -0.231 0.516]
⭐ 4 belgi, 2 omil → 2 komponenta ~99%Nima ko'rsatdi: 2.1, 2.2, 2.7-bo'limlar.
Misol 2 — Standartlashtirish va yuklamalar
"""Turli birliklar: standartlashtirishsiz PCA bitta belgiga 'yopishadi'; yuklamalar (real numpy/sklearn)."""
import numpy as np
from sklearn.decomposition import PCA
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
def main() -> None:
rng = np.random.default_rng(1)
n = 1000
faollik = rng.normal(size=n)
chegirma = rng.normal(size=n)
X = np.column_stack([
5 + 2 * faollik + rng.normal(0, 0.5, n), # xaridlar soni (oyiga)
300_000 + 80_000 * faollik + rng.normal(0, 30_000, n), # o'rtacha chek (so'm)
20 + 8 * faollik + rng.normal(0, 3, n), # ilova sessiyalari
0.3 + 0.1 * chegirma + rng.normal(0, 0.03, n), # chegirma ulushi
0.2 - 0.08 * chegirma + rng.normal(0, 0.03, n), # premium ulushi
])
nom = ["xaridlar", "chek", "sessiya", "chegirma", "premium"]
print("=== 1. Standartlashtirishsiz ===")
p1 = PCA(2).fit(X)
print(f" ulushlar: {np.round(p1.explained_variance_ratio_, 4)}")
print(f" PC1 yuklamalari: {dict((k, round(float(v), 3)) for k, v in zip(nom, p1.components_[0]))}")
print("\n=== 2. Standartlashtirilgan ===")
pipe = make_pipeline(StandardScaler(), PCA(2)).fit(X)
p2 = pipe[-1]
print(f" ulushlar: {np.round(p2.explained_variance_ratio_, 3)}, jami {p2.explained_variance_ratio_.sum():.1%}")
for i in range(2):
v = p2.components_[i] * np.sign(p2.components_[i][np.argmax(np.abs(p2.components_[i]))])
print(f" PC{i + 1}: {dict((k, round(float(x), 2)) for k, x in zip(nom, v))}")
print(" ⭐ PC1 — umumiy faollik; PC2 — chegirma ↔ premium")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Standartlashtirishsiz ===
ulushlar: [1. 0.]
PC1 yuklamalari: {'xaridlar': 0.0, 'chek': 1.0, 'sessiya': 0.0, 'chegirma': 0.0, 'premium': -0.0}
=== 2. Standartlashtirilgan ===
ulushlar: [0.558 0.381], jami 93.9%
PC1: {'xaridlar': 0.58, 'chek': 0.57, 'sessiya': 0.58, 'chegirma': 0.02, 'premium': -0.02}
PC2: {'xaridlar': -0.01, 'chek': -0.02, 'sessiya': -0.02, 'chegirma': 0.71, 'premium': -0.71}
⭐ PC1 — umumiy faollik; PC2 — chegirma ↔ premiumNima ko'rsatdi: 2.4, 2.5-bo'limlar.
Misol 3 — Komponentalar sonini tanlash
"""k tanlash: kumulyativ dispersiya, 90% chegara, tuzilmasiz ma'lumot (real numpy/sklearn)."""
import numpy as np
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
def main() -> None:
X = load_digits().data # 1797 × 64 (8×8 raqam rasmlari)
print("=== 1. Raqam rasmlari: kumulyativ dispersiya ===")
pca = PCA().fit(X)
kum = np.cumsum(pca.explained_variance_ratio_)
for k in [2, 5, 10, 20, 30, 40]:
print(f" k={k:>2}: {kum[k - 1]:.1%}")
print("\n=== 2. n_components=0.9 ===")
p90 = PCA(n_components=0.9).fit(X)
print(f" 90% uchun kerak: {p90.n_components_} komponenta (64 dan)")
print("\n=== 3. Tuzilmasiz ma'lumot (mustaqil belgilar) ===")
R = np.random.default_rng(2).normal(size=(1797, 64))
kum_r = np.cumsum(PCA().fit(R).explained_variance_ratio_)
print(f" k=10: {kum_r[9]:.1%}, 90% uchun: {np.searchsorted(kum_r, 0.9) + 1} komponenta")
print(" ⭐ Tuzilma bor — kam komponenta; yo'q — PCA foydasiz")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Raqam rasmlari: kumulyativ dispersiya ===
k= 2: 28.5%
k= 5: 54.5%
k=10: 73.8%
k=20: 89.4%
k=30: 95.9%
k=40: 98.8%
=== 2. n_components=0.9 ===
90% uchun kerak: 21 komponenta (64 dan)
=== 3. Tuzilmasiz ma'lumot (mustaqil belgilar) ===
k=10: 20.3%, 90% uchun: 56 komponenta
⭐ Tuzilma bor — kam komponenta; yo'q — PCA foydasizNima ko'rsatdi: 2.3-bo'lim.
Misol 4 — Rekonstruksiya, anomaliya va leakage'siz pipeline
"""Rekonstruksiya xatosi bilan anomaliya; PCA pipeline ichida (real numpy/sklearn)."""
import numpy as np
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
def main() -> None:
X, y = load_digits(return_X_y=True)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, random_state=0, stratify=y)
print("=== 1. Rekonstruksiya xatosi ===")
pca = PCA(n_components=20).fit(X_tr)
tik = pca.inverse_transform(pca.transform(X_te))
xato = ((X_te - tik) ** 2).mean(axis=1)
print(f" oddiy raqamlar: median xato {np.median(xato):.2f}")
rng = np.random.default_rng(3)
shovqin = rng.uniform(0, 16, (20, 64)) # "raqam emas" rasmlar
x_sh = ((shovqin - pca.inverse_transform(pca.transform(shovqin))) ** 2).mean(axis=1)
chegara = np.quantile(xato, 0.99)
print(f" shovqin rasmlar: median xato {np.median(x_sh):.2f}")
print(f" 99% chegaradan oshgan: {(x_sh > chegara).mean():.0%} shovqin, {(xato > chegara).mean():.0%} oddiy")
print("\n=== 2. Klassifikatsiya: PCA pipeline ichida ===")
for k in [5, 10, 20, 40]:
pipe = make_pipeline(StandardScaler(), PCA(n_components=k), LogisticRegression(max_iter=2000))
pipe.fit(X_tr, y_tr)
print(f" k={k:>2}: test aniqlik {pipe.score(X_te, y_te):.3f}")
print(" ⭐ PCA faqat o'quvda fit — pipeline leakage'dan saqlaydi")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Rekonstruksiya xatosi ===
oddiy raqamlar: median xato 1.94
shovqin rasmlar: median xato 35.53
99% chegaradan oshgan: 100% shovqin, 1% oddiy
=== 2. Klassifikatsiya: PCA pipeline ichida ===
k= 5: test aniqlik 0.815
k=10: test aniqlik 0.876
k=20: test aniqlik 0.952
k=40: test aniqlik 0.969
⭐ PCA faqat o'quvda fit — pipeline leakage'dan saqlaydiNima ko'rsatdi: 2.6, 2.7-bo'limlar.
5. To'g'ri va noto'g'ri tushunishlar
| Noto'g'ri fikr | To'g'risi |
|---|---|
| "PCA eng muhim belgilarni tanlaydi" | Yangi belgilar (kombinatsiya) yaratadi |
| "Katta dispersiya — bashorat uchun muhim" | PCA y ni ko'rmaydi |
| "sklearn PCA standartlashtiradi" | Faqat markazlashtiradi |
| "PCA testga ham alohida fit" | Faqat transform (leakage) |
| "PC1 ishorasi ma'noli" | Ixtiyoriy |
| "PCA har doim foydali" | Tuzilma bo'lmasa — yo'q |
| "PCA nochiziqli tuzilmani ko'radi" | Faqat chiziqli |
| "Komponentalar o'zaro bog'liq" | Ortogonal, ballar korrelyatsiyasiz |
6. Keng tarqalgan xatolar va yechimlari
1. Markazlashtirmasdan
U, s, Vt = np.linalg.svd(X, full_matrices=False) # ⚠️
U, s, Vt = np.linalg.svd(X - X.mean(0), full_matrices=False) # ✅2. Standartlashtirmasdan (turli birliklar)
PCA(2).fit_transform(df[["yosh", "daromad_som"]]) # ⚠️
make_pipeline(StandardScaler(), PCA(2)).fit_transform(...) # ✅3. Test ma'lumotiga fit
Z_test = PCA(10).fit_transform(X_test) # ⚠️
Z_test = pca.transform(X_test) # o'quvda fit qilingan # ✅4. Pipeline'dan tashqarida CV
Z = PCA(10).fit_transform(X); cross_val_score(model, Z, y) # ⚠️
cross_val_score(make_pipeline(StandardScaler(), PCA(10), model), X, y) # ✅5. components_ ni ustun deb
pc1 = pca.components_[:, 0] # ⚠️
pc1 = pca.components_[0] # qator = komponenta # ✅6. Ishorani talqin qilish
if pca.components_[0][2] < 0: print("teskari ta'sir") # ⚠️
# ishorani qotirib, katta mutlaq vaznlarga qarang # ✅7. k ni bir martada
PCA(n_components=2) # "har doim 2" # ⚠️
PCA(n_components=0.9) # yoki tirsak / CV bilan tanlang # ✅7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 10.1-10.8-darslar (o'tilgan): Vektorlar, proyeksiya, kovariatsiya, xos vektorlar, SVD
- 6.6-dars (o'tilgan): Standartlashtirish
- 8.6-dars (o'tilgan): Anomaliyalar
- Nazoratsiz o'rganish qismi: Klasterlash, t-SNE/UMAP
- Feature engineering qismi: O'lchamni kamaytirish, pipeline
8. Eng yaxshi amaliyotlar
Har doim markazlashtiring (sklearn o'zi qiladi).
Turli birliklar — StandardScaler.
PCA ni pipeline ichida ishlating.
k — kumulyativ dispersiya va CV bilan.
Yuklamalarni talqin qiling, ishorani qotiring.
Outlierlarni oldin tekshiring.
Vizualizatsiya uchun 2-3 komponenta.
PCA y ni ko'rmasligini unutmang.
9. Amaliy topshiriq
Vazifa 1: Bashorat qiling
1. # PCA nazoratli yoki nazoratsiz?
2. # PC1 qanday yo'nalish?
3. # PC1 va PC2 burchagi?
4. # PCA'dan oldin majburiy qadam?
5. # sklearn PCA standartlashtiradimi?
6. # PC_i dispersiyasi = ?
7. # n_components=0.95 nima?
8. # components_ shakli (k=3, p=10)?
9. # Z shakli (n=500, k=3)?
10. # rekonstruksiya formulasi?
11. # test uchun fit yoki transform?
12. # mustaqil belgilarda PCA foydalimi?Javoblar
- Nazoratsiz
- Eng katta dispersiya yo'nalishi
- 90°
- Markazlashtirish
- Yo'q
- i-xos qiymat (s_i^2 / (n-1))
- 95% dispersiyaga yetadigan k
- (3, 10)
- (500, 3)
- Z @ V_k.T + o'rtacha
- transform
- Yo'q
Vazifa 2: Xatolarni tuzating
1. Z = PCA(2).fit_transform(df[["yosh", "daromad", "ball"]]) # turli birlik
2. pca_test = PCA(5).fit(X_test)
3. U, s, Vt = np.linalg.svd(X); Z = X @ Vt[:2].T
4. pc2 = pca.components_[:, 1]
5. Z = PCA(10).fit_transform(X); cross_val_score(LogisticRegression(), Z, y)Javoblar
1. Z = make_pipeline(StandardScaler(), PCA(2)).fit_transform(df[["yosh", "daromad", "ball"]])
2. Z_test = pca.transform(X_test) # o'quvda fit qilingan pca
3. Xc = X - X.mean(0); U, s, Vt = np.linalg.svd(Xc, full_matrices=False); Z = Xc @ Vt[:2].T
4. pc2 = pca.components_[1]
5. cross_val_score(make_pipeline(StandardScaler(), PCA(10), LogisticRegression()), X, y)Vazifa 3: Mijozlar
Modellang:
- 8 belgili mijoz ma'lumoti (2 yashirin omil)
- Standartlashtirish + PCA
- Yuklamalar talqini
- 2D scatter (matplotlib)
Vazifa 4: k tanlash
Modellang:
- load_digits
- Scree plot va kumulyativ grafik
- 80%, 90%, 95% uchun k
- Pipeline aniqligi bilan solishtirish
Vazifa 5: Anomaliya
Modellang:
- Oddiy ma'lumot + 2% anomal nuqta
- PCA rekonstruksiya xatosi
- Chegara (99% kvantil)
- Precision/recall
Vazifa 6: Integratsiya
Modellang:
- Kovariatsiya xos vektorlari (10.7)
- SVD (10.8)
- Standartlashtirish (6.6)
- Anomaliya (8.6)
Vazifa 7: O'ylash
PCA eng katta dispersiya yo'nalishlarini saqlaydi va kichiklarini tashlaydi. Tasavvur qiling: kasallikni aniqlashda eng muhim signal — kichik dispersiyali bitta biomarker, qolgan 50 ta belgi esa katta, lekin ahamiyatsiz tebranishlarga ega. PCA bu holatda nima qiladi? Nima uchun "ko'p dispersiya = ko'p ma'lumot" farazi har doim ham to'g'ri emas, va qanday alternativalar bor?
Javob
Qisqa javob: PCA nazoratsiz — nishonni (kasallik) ko'rmaydi. Kichik dispersiyali biomarker oxirgi komponentalarga tushadi va k kichik tanlansa — tashlanadi. Model aynan eng muhim signalni yo'qotadi. "Dispersiya = ma'lumot" — faqat tuzilma haqida, bashorat foydaliligi haqida emas.
1. PCA nima qiladi
- 50 ta shovqinli belgi — birinchi komponentalarni egallaydi
- Biomarker — kichik dispersiya, oxirgi komponentalarda
- PCA(n_components=0.9) → biomarker yo'qoladi → model sifati tushadi
2. Nega farazi buziladi
| Faraz | Haqiqat |
|---|---|
| Katta dispersiya — muhim | Katta shovqin ham katta dispersiya |
| Kichik dispersiya — shovqin | Aniq o'lchangan kichik signal bo'lishi mumkin |
| Birliklar ta'sir qilmaydi | Masshtab dispersiyani belgilaydi |
3. Alternativalar
- Nazoratli o'lcham kamaytirish: PLS (y bilan kovariatsiyani maksimallashtiradi), LDA (sinflarni ajratish)
- Belgi tanlash: Lasso, daraxt modellari muhimligi, mutual information
- PCA'ni CV bilan tekshirish: k ni model sifati bo'yicha tanlash
- PCA'siz model: Ridge/daraxtlar ko'p belgi bilan yaxshi ishlaydi
4. Data Scientist qanday
- PCA'ni maqsadga qarab ishlatadi (vizualizatsiya — ha; bashorat — tekshirib)
- k ni pipeline + cross-validation bilan tanlaydi
- Muhim belgilarning komponentalardagi yuklamasini tekshiradi
- Nazoratli alternativalar bilan solishtiradi
5. Xulosa
- PCA — y ni ko'rmaydi
- Dispersiya ≠ bashorat foydaliligi
- Kichik, lekin muhim signal yo'qolishi mumkin
- Nazoratli usullar va CV — himoya
Nimani mustahkamlaydi: 2.1, 2.7-bo'limlar.
Xulosa
Bu darsda PCA ni o'rgandik.
Eng muhim uch fikr:
PCA — burish va proyeksiya. Bosh komponentalar — markazlashtirilgan ma'lumotning eng katta dispersiya yo'nalishlari (kovariatsiya xos vektorlari = SVD Vt qatorlari), ortogonal, kamayish tartibida. Qadamlar: markazlashtirish → (turli birliklarda standartlashtirish) → SVD → Z = Xc @ V_k.
Dispersiya, k va talqin. Tushuntirilgan dispersiya ulushi — s^2 / sum(s^2); k — 90% chegara, tirsak yoki CV. Yuklamalar (
components_) — komponentaning belgilar vaznlari; talqin — gipoteza, ishora ixtiyoriy. Tuzilma bo'lmasa (mustaqil belgilar) — PCA foydasiz.Amaliyot va tuzoqlar. Rekonstruksiya (Z V_k.T + o'rtacha) — siqish, shovqin tozalash, anomaliya (katta xato). PCA faqat o'quvda fit — pipeline (leakage). PCA nazoratsiz va chiziqli: katta dispersiya ≠ bashorat uchun muhim; masshtab va outlierlarga sezgir.
Keyingi darsda Chiziqli algebra amaliy loyihasini qilamiz: tavsiya va o'xshashlik tizimi — vektorlar va kosinus, SVD bilan yashirin omillar, PCA vizualizatsiya, regressiya — 10-qismning barcha bilimlari bitta loyihada.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!