Mundarija (22)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. Ko'paytirish qoidasi
- 2.2. O'rin almashtirish (n!)
- 2.3. Joylashtirish (tartib muhim)
- 2.4. Kombinatsiya (tartib muhim emas)
- 2.5. Qaytarib va qaytarmasdan tanlash
- 2.6. itertools va math
- 2.7. Kombinatorik portlash va tuzoqlar
- 2.8. Kombinatorika — sanash san'ati
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — To'rt asosiy formula
- Misol 2 — Karta ehtimollari (klassik)
- Misol 3 — Qaytarib va qaytarmasdan (sifat nazorati)
- Misol 4 — Kombinatorik portlash
- 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
9.2-dars: Kombinatorika
9-QISM — EHTIMOLLIK · 2-dars
1. Kirish va motivatsiya
Klassik ehtimollik 9.1-bob — "qulay natijalar / jami natijalar". Zarda natijalar 6 ta — sanash oson. Lekin "52 kartadan 5 tasini olganda flesh chiqish ehtimoli", "8 belgili parolni topish ehtimoli" yoki "100 ta mahsulotdan 10 tasini tekshirganda kamida bitta nuqsonli topish" — natijalarni qo'lda sanab bo'lmaydi. Kombinatorika — sanash san'ati: ko'paytirish qoidasi, o'rin almashtirish, joylashtirish va kombinatsiya.
Data Science'da kombinatorika hamma joyda: parol va xavfsizlik (kombinatsiyalar soni), feature selection (20 belgidan 5 tasini tanlash — 15 504 variant, hammasini sinab bo'lmaydi), hyperparameter grid (5 × 4 × 3 = 60 kombinatsiya), A/B test (variantlar juftliklari), gipergeometrik taqsimot (sifat nazorati — qaytarmasdan tanlash). Kombinatorik portlash — nega "hammasini sinab ko'rish" ko'pincha imkonsiz ekanini tushuntiradi.
Real vaziyat. ML muhandisi 25 ta belgidan eng yaxshi 8 tasini tanlamoqchi: "Hamma kombinatsiyani sinab, eng yaxshisini olaman". Hisob: C(25, 8) = 1 081 575 kombinatsiya; har biri 2 soniyada o'qitilsa — 25 kun. Muhandis kombinatorikani bilgani uchun darhol boshqa yo'l tanlaydi (ketma-ket tanlash, Feature engineering qismi). Kombinatorika — vaqtni tejaydi.
Bu darsda kombinatorikani o'rganamiz.
Bu darsda:
- Ko'paytirish qoidasi
- O'rin almashtirish (n!)
- Joylashtirish (tartib muhim)
- Kombinatsiya (tartib muhim emas)
- Qaytarib va qaytarmasdan tanlash
- itertools va math
- Kombinatorik portlash
- Amaliy: kombinatorik ehtimollar
ℹ Misollar real Python (math, itertools) va numpy bilan (Python 3.14).
2. Nazariya — chuqur tushuntirish
2.1. Ko'paytirish qoidasi
Agar 1-qadamda a ta, 2-qadamda b ta, 3-qadamda c ta tanlov bo'lsa:
jami = a × b × c
Misol: kiyim — 3 ko'ylak × 4 shim × 2 poyabzal = 24 xil
PIN kod — 10 × 10 × 10 × 10 = 10^4 = 10 000
grid search — 5 (lr) × 4 (depth) × 3 (n) = 60 model Ko'paytirish qoidasi — kombinatorikaning asosi: ketma-ket mustaqil tanlovlar sonini ko'paytirish. Hamma boshqa formulalar shundan kelib chiqadi. Python'da — itertools.product barcha kombinatsiyalarni yaratadi, math.prod sonini hisoblaydi. Grid search (Model baholash qismi) — aynan shu: parametrlar qiymatlari soni ko'paytiriladi.
2.2. O'rin almashtirish (n!)
O'rin almashtirish — n ta turli narsani qatorga tizish usullari: n × (n - 1) × ... × 1 = n! (faktorial). Birinchi o'ringa n ta tanlov, ikkinchisiga n - 1 ta (bittasi band), va hokazo. 3! = 6, 5! = 120, 10! = 3 628 800, 20! ≈ 2.4 × 10^18. Faktorial juda tez o'sadi — 10 ta shahar bo'ylab eng qisqa marshrutni "hammasini sinab" topish uchun 3.6 million marshrut (sayohatchi masalasi). Python: math.factorial(n), itertools.permutations.
2.3. Joylashtirish (tartib muhim)
Joylashtirish — n tadan k tasini tartib bilan tanlash: P(n, k) = n! / (n - k)! = n × (n - 1) × ... × (n - k + 1). Misol: 10 nomzoddan 1-, 2-, 3-o'rinni taqsimlash — 10 × 9 × 8 = 720. Tartib muhim: (Ali, Vali, Soli) va (Vali, Ali, Soli) — turli natija. Python: math.perm(n, k).
2.4. Kombinatsiya (tartib muhim emas)
C(n, k) = n! / (k! × (n - k)!) — "n dan k"
Joylashtirish P(n, k) ni k! ga bo'lamiz:
har bir k talik guruh P da k! marta (turli tartibda) sanalgan
10 nomzoddan 3 kishilik jamoa: C(10, 3) = 720 / 6 = 120
52 kartadan 5 ta: C(52, 5) = 2 598 960 Kombinatsiya — n tadan k tasini tartibsiz tanlash: jamoa, belgilar to'plami, lotereya raqamlari. Formula: joylashtirishni k! ga bo'lish (har guruh k! xil tartibda sanalgan edi). Xossalari: C(n, k) = C(n, n - k) (k tasini tanlash = n - k tasini tashlab ketish); C(n, 0) = C(n, n) = 1. Python: math.comb(n, k), itertools.combinations. Asosiy savol: "tartib muhimmi?" — ha → joylashtirish, yo'q → kombinatsiya.
2.5. Qaytarib va qaytarmasdan tanlash
Ikki tanlash turi: qaytarib (tanlangan qaytariladi — takrorlanishi mumkin: parol belgilari, zar tashlash; n^k variant; itertools.product(..., repeat=k)) va qaytarmasdan (bir narsa bir marta: karta, jamoa, sifat nazorati; joylashtirish/kombinatsiya). Ehtimollik farqi: 100 ta mahsulotdan (5 tasi nuqsonli) 10 tasini tekshirish — qaytarmasdan (real holat) — gipergeometrik; qaytarib — binomial 9.7-bob. Katta to'plamda farq kichik, kichikda — sezilarli. NumPy: rng.choice(..., replace=False).
2.6. itertools va math
Python vositalari: sanash (math.factorial, math.perm, math.comb — aniq butun son, katta sonlarda ham), yaratish (itertools.permutations, combinations, product, combinations_with_replacement — generator, xotirani tejaydi). Qoida: avval sanang (math.comb), keyin — agar son kichik bo'lsa — yarating (itertools). Million kombinatsiyani ro'yxatga aylantirish (list(...)) — xotira muammosi.
2.7. Kombinatorik portlash va tuzoqlar
Kombinatorik portlash — n oshganda variantlar soni juda tez o'sadi: 2^n (belgilar to'plamlari — 30 belgi → 1 mlrd), n! (tartiblar), C(n, k). Oqibati: "hammasini sinab ko'rish" (brute force) ko'pincha imkonsiz → evristika, tasodifiy qidiruv (random search, Model baholash qismi), ketma-ket tanlash. Tuzoqlar: tartibni noto'g'ri aniqlash (jamoa uchun joylashtirish — k! marta ko'p sanash); qaytarish turini adashtirish (parol — qaytarib, karta — qaytarmasdan); float faktorial (math.factorial — aniq; float formula — katta sonlarda yaxlitlash); list(itertools...) katta n da (xotira to'lib qoladi); ikki marta sanash (simmetrik holatlar).
2.8. Kombinatorika — sanash san'ati
Kombinatorika: ko'paytirish qoidasi (a × b × c — asos, grid search), o'rin almashtirish (n! — hammasini tizish), joylashtirish (P(n, k) — tartib muhim), kombinatsiya (C(n, k) — tartib muhim emas; P / k!), qaytarib (n^k) va qaytarmasdan tanlash; Python — math.comb/perm/factorial (sanash), itertools (yaratish). Klassik ehtimol = C(qulay) / C(jami). Kombinatorik portlash — nega brute force imkonsiz. Keyingi darslar: shartli ehtimollik 9.3-bob, binomial va gipergeometrik taqsimot (9.7 — C(n, k) formulada).
3. Tez ma'lumotnoma
import math
import itertools
math.prod([3, 4, 2]) # ko'paytirish qoidasi: 24
math.factorial(5) # o'rin almashtirish: 120
math.perm(10, 3) # joylashtirish (tartib muhim): 720
math.comb(10, 3) # kombinatsiya (tartib muhim emas): 120
10 ** 4 # qaytarib tanlash (PIN): 10 000
# YARATISH (generator)
itertools.permutations("ABC", 2) # AB, AC, BA, BC, CA, CB
itertools.combinations("ABC", 2) # AB, AC, BC
itertools.product("01", repeat=3) # 000 ... 111
itertools.combinations_with_replacement("AB", 2) # AA, AB, BB
# KLASSIK EHTIMOL
math.comb(4, 2) * math.comb(48, 3) / math.comb(52, 5) # 5 kartada 2 ta tuz
QOIDA: tartib muhimmi? · qaytariladimi? · avval sana, keyin yaratKombinatorika xulosasi
Ko'paytirish — a × b × c (grid search)
O'rin almashtirish — n! (math.factorial)
Joylashtirish — P(n, k), tartib muhim (math.perm)
Kombinatsiya — C(n, k) = P(n, k) / k!, tartib muhim emas (math.comb)
Qaytarib — n^k; qaytarmasdan — perm/comb
Portlash — 2^n, n! — brute force imkonsiz4. Batafsil misollar
Misollar real Python (math, itertools) va numpy bilan (Python 3.14).
Misol 1 — To'rt asosiy formula
"""Ko'paytirish, n!, joylashtirish, kombinatsiya (real math/itertools)."""
import itertools
import math
def main() -> None:
print("=== 1. Ko'paytirish qoidasi (grid search) ===")
grid = {"lr": [0.001, 0.01, 0.1, 0.3, 1.0], "depth": [3, 5, 7, 9], "n": [100, 200, 500]}
soni = math.prod(len(v) for v in grid.values())
print(f" {' × '.join(str(len(v)) for v in grid.values())} = {soni} model")
print(f" itertools.product bilan: {len(list(itertools.product(*grid.values())))}")
print("\n=== 2. O'rin almashtirish ===")
for n in [3, 5, 10, 20]:
print(f" {n}! = {math.factorial(n):,}")
print("\n=== 3. Joylashtirish va kombinatsiya (10 dan 3) ===")
print(f" tartib muhim (1-2-3 o'rin): {math.perm(10, 3)}")
print(f" tartib muhim emas (jamoa): {math.comb(10, 3)}")
print(f" nisbat = 3! = {math.perm(10, 3) // math.comb(10, 3)}")
print("\n=== 4. Kichik misolda ko'rish (ABC dan 2) ===")
print(f" permutations: {[''.join(p) for p in itertools.permutations('ABC', 2)]}")
print(f" combinations: {[''.join(c) for c in itertools.combinations('ABC', 2)]}")
print(" ⭐ Tartib muhimmi? → perm yoki comb")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Ko'paytirish qoidasi (grid search) ===
5 × 4 × 3 = 60 model
itertools.product bilan: 60
=== 2. O'rin almashtirish ===
3! = 6
5! = 120
10! = 3,628,800
20! = 2,432,902,008,176,640,000
=== 3. Joylashtirish va kombinatsiya (10 dan 3) ===
tartib muhim (1-2-3 o'rin): 720
tartib muhim emas (jamoa): 120
nisbat = 3! = 6
=== 4. Kichik misolda ko'rish (ABC dan 2) ===
permutations: ['AB', 'AC', 'BA', 'BC', 'CA', 'CB']
combinations: ['AB', 'AC', 'BC']
⭐ Tartib muhimmi? → perm yoki combNima ko'rsatdi: 2.1-2.4-bo'limlar.
Misol 2 — Karta ehtimollari (klassik)
"""Klassik ehtimol kombinatsiya orqali + simulyatsiya (real math/numpy)."""
import math
import numpy as np
def main() -> None:
jami = math.comb(52, 5)
print("=== 1. Jami qo'llar ===")
print(f" C(52, 5) = {jami:,}")
print("\n=== 2. Aynan 2 ta tuz ===")
qulay = math.comb(4, 2) * math.comb(48, 3)
print(f" C(4,2) × C(48,3) = {math.comb(4, 2)} × {math.comb(48, 3)} = {qulay:,}")
print(f" P = {qulay / jami:.4f}")
print("\n=== 3. Kamida bitta tuz (to'ldiruvchi) ===")
p_hech = math.comb(48, 5) / jami
print(f" P = 1 - C(48,5)/C(52,5) = {1 - p_hech:.4f}")
print("\n=== 4. Simulyatsiya bilan tekshiruv ===")
rng = np.random.default_rng(0)
toza = np.array([rng.permutation(52)[:5] for _ in range(50_000)])
tuzlar = (toza < 4).sum(axis=1) # 0-3 raqamli kartalar — tuz
print(f" aynan 2 tuz: {(tuzlar == 2).mean():.4f}")
print(f" kamida 1 tuz: {(tuzlar >= 1).mean():.4f}")
print(" ⭐ Klassik ehtimol = C(qulay) / C(jami)")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Jami qo'llar ===
C(52, 5) = 2,598,960
=== 2. Aynan 2 ta tuz ===
C(4,2) × C(48,3) = 6 × 17296 = 103,776
P = 0.0399
=== 3. Kamida bitta tuz (to'ldiruvchi) ===
P = 1 - C(48,5)/C(52,5) = 0.3412
=== 4. Simulyatsiya bilan tekshiruv ===
aynan 2 tuz: 0.0400
kamida 1 tuz: 0.3416
⭐ Klassik ehtimol = C(qulay) / C(jami)Nima ko'rsatdi: 2.4, 2.5-bo'limlar.
Misol 3 — Qaytarib va qaytarmasdan (sifat nazorati)
"""Qaytarib vs qaytarmasdan tanlash: sifat nazorati (real math/numpy)."""
import math
import numpy as np
def main() -> None:
N, nuqson, n = 100, 5, 10
print("=== 1. Qaytarmasdan (real holat) ===")
p_hech = math.comb(N - nuqson, n) / math.comb(N, n)
print(f" P(hech nuqson topilmaydi) = C(95,10)/C(100,10) = {p_hech:.4f}")
print(f" P(kamida bitta) = {1 - p_hech:.4f}")
print("\n=== 2. Qaytarib (taxmin) ===")
p_hech_q = (1 - nuqson / N) ** n
print(f" P(hech) = 0.95^10 = {p_hech_q:.4f}, kamida bitta = {1 - p_hech_q:.4f}")
print("\n=== 3. Simulyatsiya (qaytarmasdan) ===")
rng = np.random.default_rng(0)
partiya = np.array([1] * nuqson + [0] * (N - nuqson))
topildi = [rng.choice(partiya, n, replace=False).any() for _ in range(20_000)]
print(f" kamida bitta: {np.mean(topildi):.4f}")
print("\n=== 4. Katta partiyada farq kichrayadi ===")
for N2 in [100, 1_000, 100_000]:
d = N2 // 20
a = 1 - math.comb(N2 - d, n) / math.comb(N2, n)
print(f" N={N2:>6}: qaytarmasdan {a:.4f}, qaytarib {1 - 0.95 ** n:.4f}")
print(" ⭐ Kichik to'plamda qaytarish turi muhim")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Qaytarmasdan (real holat) ===
P(hech nuqson topilmaydi) = C(95,10)/C(100,10) = 0.5838
P(kamida bitta) = 0.4162
=== 2. Qaytarib (taxmin) ===
P(hech) = 0.95^10 = 0.5987, kamida bitta = 0.4013
=== 3. Simulyatsiya (qaytarmasdan) ===
kamida bitta: 0.4197
=== 4. Katta partiyada farq kichrayadi ===
N= 100: qaytarmasdan 0.4162, qaytarib 0.4013
N= 1000: qaytarmasdan 0.4027, qaytarib 0.4013
N=100000: qaytarmasdan 0.4013, qaytarib 0.4013
⭐ Kichik to'plamda qaytarish turi muhimNima ko'rsatdi: 2.5-bo'lim.
Misol 4 — Kombinatorik portlash
"""Kombinatorik portlash: feature selection va parol (real math)."""
import math
def main() -> None:
print("=== 1. Feature selection: 25 belgidan k ta ===")
for k in [3, 5, 8, 12]:
c = math.comb(25, k)
kun = c * 2 / 86_400 # har model 2 soniya
print(f" C(25, {k:>2}) = {c:>9,} → {kun:8.1f} kun")
print("\n=== 2. Barcha to'plamlar: 2^n ===")
for n in [10, 20, 30, 40]:
print(f" n={n}: {2 ** n:,}")
print("\n=== 3. Parol kuchi (qaytarib) ===")
for belgilar, nom in [(10, "faqat raqam"), (26, "kichik harf"), (62, "harf+raqam")]:
for uzunlik in [6, 10]:
v = belgilar ** uzunlik
yil = v / 1e9 / 86_400 / 365 # soniyasiga 1 mlrd urinish
print(f" {nom:>11}, {uzunlik:>2} belgi: {v:.1e} variant, {yil:.1e} yil")
print("\n ⭐ Brute force tez imkonsiz bo'ladi")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Feature selection: 25 belgidan k ta ===
C(25, 3) = 2,300 → 0.1 kun
C(25, 5) = 53,130 → 1.2 kun
C(25, 8) = 1,081,575 → 25.0 kun
C(25, 12) = 5,200,300 → 120.4 kun
=== 2. Barcha to'plamlar: 2^n ===
n=10: 1,024
n=20: 1,048,576
n=30: 1,073,741,824
n=40: 1,099,511,627,776
=== 3. Parol kuchi (qaytarib) ===
faqat raqam, 6 belgi: 1.0e+06 variant, 3.2e-11 yil
faqat raqam, 10 belgi: 1.0e+10 variant, 3.2e-07 yil
kichik harf, 6 belgi: 3.1e+08 variant, 9.8e-09 yil
kichik harf, 10 belgi: 1.4e+14 variant, 4.5e-03 yil
harf+raqam, 6 belgi: 5.7e+10 variant, 1.8e-06 yil
harf+raqam, 10 belgi: 8.4e+17 variant, 2.7e+01 yil
⭐ Brute force tez imkonsiz bo'ladiNima ko'rsatdi: 2.6, 2.7-bo'limlar.
5. To'g'ri va noto'g'ri tushunishlar
| Noto'g'ri fikr | To'g'risi |
|---|---|
| "Jamoa tanlash — perm" | comb (tartib muhim emas) |
| "Reyting — comb" | perm (tartib muhim) |
| "Parol — comb" | Qaytarib: n^k |
| "Karta — qaytarib" | Qaytarmasdan |
| "Hamma variantni sinayman" | Avval sanang — portlash |
| "list(combinations(...)) doim OK" | Katta n da xotira tugaydi |
| "Qaytarish turi farqsiz" | Kichik to'plamda farq katta |
| "C(n, k) ≠ C(n, n-k)" | Teng |
6. Keng tarqalgan xatolar va yechimlari
1. Tartibni noto'g'ri aniqlash
jamoa = math.perm(10, 3) # 720 — har jamoa 6 marta # ⚠️
jamoa = math.comb(10, 3) # 120 # ✅2. Parolni kombinatsiya deb sanash
variant = math.comb(26, 8) # ⚠️
variant = 26 ** 8 # qaytarib, tartib muhim # ✅3. Katta ro'yxat yaratish
barcha = list(itertools.combinations(range(40), 10)) # 847 mln # ⚠️
soni = math.comb(40, 10) # avval sanang # ✅4. Float faktorial
c = math.gamma(101) / (math.gamma(51) * math.gamma(51)) # ⚠️
c = math.comb(100, 50) # aniq butun son # ✅5. Qaytarib tanlash (karta)
qol = rng.choice(52, 5) # ⚠️
qol = rng.choice(52, 5, replace=False) # ✅6. Brute force grid
# 10 parametr × 10 qiymat = 10^10 model # ⚠️
# random search yoki bosqichma-bosqich qidiruv (Model baholash qismi) # ✅7. Ikki marta sanash
juftlar = n * (n - 1) # (A,B) va (B,A) — ikki marta # ⚠️
juftlar = math.comb(n, 2) # ✅7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 9.1-dars (o'tilgan): Klassik ehtimol (qulay / jami)
- 9.7-dars: Binomial va gipergeometrik taqsimot (C(n, k))
- 8.8-dars (o'tilgan): Ko'p taqqoslash (juftliklar soni)
- Feature engineering qismi (reja): Feature selection
- Model baholash qismi (reja): Grid va random search
8. Eng yaxshi amaliyotlar
Avval so'rang: tartib muhimmi?
Keyin: qaytariladimi?
math.comb/perm — aniq sanash.
Avval sanang, keyin yarating.
itertools — generator sifatida ishlating.
Katta sonda brute force o'rniga tasodifiy qidiruv.
Kombinatorik javobni simulyatsiya bilan tekshiring.
Kichik misolda (ABC) formulani tekshiring.
9. Amaliy topshiriq
Vazifa 1: Bashorat qiling
1. # 4 ko'ylak × 3 shim?
2. # 4!?
3. # math.perm(5, 2)?
4. # math.comb(5, 2)?
5. # C(n, 0)?
6. # C(10, 7) = C(10, ?)
7. # 4 xonali PIN?
8. # jamoa — perm yoki comb?
9. # 1-2-3 o'rin — perm yoki comb?
10. # karta — qaytarib?
11. # 2^30 taxminan?
12. # 20 kishida juftliklar?Javoblar
- 12
- 24
- 20
- 10
- 1
- 3
- 10 000
- comb
- perm
- Yo'q, qaytarmasdan
- ~1 mlrd
- C(20, 2) = 190
Vazifa 2: Xatolarni tuzating
1. jamoa = math.perm(12, 4)
2. parol = math.comb(62, 10)
3. barcha = list(itertools.combinations(range(50), 12))
4. qol = rng.choice(52, 5)
5. juftlar = n * (n - 1)Javoblar
1. jamoa = math.comb(12, 4)
2. parol = 62 ** 10
3. soni = math.comb(50, 12)
4. qol = rng.choice(52, 5, replace=False)
5. juftlar = math.comb(n, 2)Vazifa 3: Lotereya
Modellang:
- 49 dan 6 raqam — jami variant
- Yutish ehtimoli
- Aynan 3 ta mos kelishi
- Simulyatsiya bilan tekshirish
Vazifa 4: Grid search
Modellang:
- 4 parametr, har birida 5 qiymat
- Jami model soni
- Har model 30 soniya — umumiy vaqt
- Random search bilan 50 model — nechta foizini ko'radi
Vazifa 5: Sifat nazorati
Modellang:
- 200 mahsulot, 8 nuqsonli
- 15 tasi tekshiriladi (qaytarmasdan)
- Kamida bitta nuqson topish ehtimoli
- 95% ishonch uchun nechta tekshirish kerak
Vazifa 6: Integratsiya
Modellang:
- Klassik ehtimol (9.1)
- Ko'p taqqoslash juftliklari (8.8)
- rng.choice replace=False (2.10)
- itertools generator
Vazifa 7: O'ylash
Feature selection'da 30 ta belgidan eng yaxshi to'plamni topish uchun 2^30 ≈ 1 mlrd to'plamni sinash kerak. Amalda ML muhandislari buni hech qachon qilmaydi. Kombinatorik portlash ML'da qanday muammolarni keltirib chiqaradi va uni qanday yengib o'tishadi? Nima uchun "eng yaxshi" o'rniga "yetarlicha yaxshi" yechim qabul qilinadi?
Javob
Qisqa javob: kombinatorik portlash to'liq qidiruvni imkonsiz qiladi, shuning uchun ML evristik va tasodifiy usullarga tayanadi. Bundan tashqari, "eng yaxshi" to'plam aslida validatsiya ma'lumotiga haddan tashqari moslashgan bo'lishi mumkin — ko'p variantdan tanlash o'zi overfitting manbai.
1. Portlash qayerda
- Feature selection: 2^n to'plam
- Hyperparameter: ko'paytirish qoidasi (10 parametr × 10 qiymat = 10^10)
- Qaror daraxti: bo'linishlar tartibi
- Neyron tarmoq arxitekturasi: qatlamlar × o'lchamlar × aktivatsiyalar
2. Qanday yengiladi
| Usul | G'oya |
|---|---|
| Ketma-ket tanlash | Har qadamda bitta belgi qo'shish (n^2 atrofida) |
| Random search | Tasodifiy 50-100 variant — ko'pincha yetarli |
| Regularizatsiya (Lasso) | Model o'zi keraksiz belgini 0 ga tushiradi |
| Evristika/ochko'z | Mahalliy eng yaxshi qadam |
3. Nega "yetarlicha yaxshi"
- Ko'p variant sinash = ko'p taqqoslash 8.8-bob: eng yaxshisi tasodifan yaxshi ko'rinishi mumkin
- Validatsiyada "eng yaxshi" — yangi ma'lumotda ko'pincha o'rtacha
- Vaqt va hisoblash narxi — qiymatdan oshib ketadi
4. Data Scientist qanday
- Avval variantlar sonini sanaydi (math.comb, ko'paytirish)
- Qidiruv byudjetini belgilaydi (vaqt, model soni)
- Random search yoki ketma-ket usul tanlaydi
- Yakuniy natijani alohida test to'plamida tekshiradi
5. Xulosa
- Kombinatorik portlash — to'liq qidiruvni imkonsiz qiladi
- Evristika, tasodifiy qidiruv, regularizatsiya — amaliy yechim
- Ko'p variantdan tanlash — o'zi overfitting xavfi
- "Yetarlicha yaxshi" + mustaqil test — halol yondashuv
Nimani mustahkamlaydi: 2.4, 2.7-bo'limlar.
Xulosa
Bu darsda kombinatorikani o'rgandik.
Eng muhim uch fikr:
To'rt formula. Ko'paytirish qoidasi (a × b × c — grid search), o'rin almashtirish (n!), joylashtirish (P(n, k) — tartib muhim,
math.perm), kombinatsiya (C(n, k) = P(n, k) / k! — tartib muhim emas,math.comb). Ikki savol: tartib muhimmi? qaytariladimi (n^k)?Klassik ehtimol. P = C(qulay) / C(jami): kartalar, lotereya, sifat nazorati (qaytarmasdan — kichik to'plamda qaytarish turi muhim). Javobni har doim simulyatsiya bilan tekshirish mumkin.
Kombinatorik portlash. 2^n, n!, C(n, k) juda tez o'sadi — feature selection va grid search'da to'liq qidiruv imkonsiz; avval sanang (
math.comb), keyin kerak bo'lsa yarating (itertools— generator). Yechim — random search, ketma-ket tanlash, regularizatsiya.
Keyingi darsda shartli ehtimollikni o'rganamiz: P(A | B) — "B ma'lum bo'lsa A ehtimoli", ko'paytirish qoidasi, mustaqillik tekshiruvi va to'liq ehtimollik formulasi — Bayes teoremasining poydevori.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!