IlmHamroh
Data Science va sun'iy intellekt/Ehtimollik2/10-dars16 daqiqa
Mundarija (22)

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

text
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)

text
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

python
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 yarat

Kombinatorika 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 imkonsiz

4. Batafsil misollar

Misollar real Python (math, itertools) va numpy bilan (Python 3.14).

Misol 1 — To'rt asosiy formula

python
"""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:

text
=== 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 comb

Nima ko'rsatdi: 2.1-2.4-bo'limlar.

Misol 2 — Karta ehtimollari (klassik)

python
"""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:

text
=== 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)

python
"""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:

text
=== 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 muhim

Nima ko'rsatdi: 2.5-bo'lim.

Misol 4 — Kombinatorik portlash

python
"""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:

text
=== 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'ladi

Nima 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

python
jamoa = math.perm(10, 3)       # 720 — har jamoa 6 marta         # ⚠️
jamoa = math.comb(10, 3)       # 120                              # ✅

2. Parolni kombinatsiya deb sanash

python
variant = math.comb(26, 8)                                        # ⚠️
variant = 26 ** 8              # qaytarib, tartib muhim           # ✅

3. Katta ro'yxat yaratish

python
barcha = list(itertools.combinations(range(40), 10))  # 847 mln  # ⚠️
soni = math.comb(40, 10)       # avval sanang                     # ✅

4. Float faktorial

python
c = math.gamma(101) / (math.gamma(51) * math.gamma(51))           # ⚠️
c = math.comb(100, 50)         # aniq butun son                   # ✅

5. Qaytarib tanlash (karta)

python
qol = rng.choice(52, 5)                                           # ⚠️
qol = rng.choice(52, 5, replace=False)                            # ✅

6. Brute force grid

python
# 10 parametr × 10 qiymat = 10^10 model                           # ⚠️
# random search yoki bosqichma-bosqich qidiruv (Model baholash qismi)          # ✅

7. Ikki marta sanash

python
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

  1. Avval so'rang: tartib muhimmi?

  2. Keyin: qaytariladimi?

  3. math.comb/perm — aniq sanash.

  4. Avval sanang, keyin yarating.

  5. itertools — generator sifatida ishlating.

  6. Katta sonda brute force o'rniga tasodifiy qidiruv.

  7. Kombinatorik javobni simulyatsiya bilan tekshiring.

  8. Kichik misolda (ABC) formulani tekshiring.


9. Amaliy topshiriq

Vazifa 1: Bashorat qiling

python
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
  1. 12
  2. 24
  3. 20
  4. 10
  5. 1
  6. 3
  7. 10 000
  8. comb
  9. perm
  10. Yo'q, qaytarmasdan
  11. ~1 mlrd
  12. C(20, 2) = 190

Vazifa 2: Xatolarni tuzating

python
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
python
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:

  1. 49 dan 6 raqam — jami variant
  2. Yutish ehtimoli
  3. Aynan 3 ta mos kelishi
  4. Simulyatsiya bilan tekshirish

Vazifa 4: Grid search

Modellang:

  1. 4 parametr, har birida 5 qiymat
  2. Jami model soni
  3. Har model 30 soniya — umumiy vaqt
  4. Random search bilan 50 model — nechta foizini ko'radi

Vazifa 5: Sifat nazorati

Modellang:

  1. 200 mahsulot, 8 nuqsonli
  2. 15 tasi tekshiriladi (qaytarmasdan)
  3. Kamida bitta nuqson topish ehtimoli
  4. 95% ishonch uchun nechta tekshirish kerak

Vazifa 6: Integratsiya

Modellang:

  1. Klassik ehtimol (9.1)
  2. Ko'p taqqoslash juftliklari (8.8)
  3. rng.choice replace=False (2.10)
  4. 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

  1. Avval variantlar sonini sanaydi (math.comb, ko'paytirish)
  2. Qidiruv byudjetini belgilaydi (vaqt, model soni)
  3. Random search yoki ketma-ket usul tanlaydi
  4. Yakuniy natijani alohida test to'plamida tekshiradi

5. Xulosa

  1. Kombinatorik portlash — to'liq qidiruvni imkonsiz qiladi
  2. Evristika, tasodifiy qidiruv, regularizatsiya — amaliy yechim
  3. Ko'p variantdan tanlash — o'zi overfitting xavfi
  4. "Yetarlicha yaxshi" + mustaqil test — halol yondashuv

Nimani mustahkamlaydi: 2.4, 2.7-bo'limlar.


Xulosa

Bu darsda kombinatorikani o'rgandik.

Eng muhim uch fikr:

  1. 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)?

  2. 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.

  3. 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.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

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