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

12.5-dars: Bias-variance yoyilmasi

12-QISM — MACHINE LEARNING ASOSLARI · 5-dars


1. Kirish va motivatsiya

12.4-darsda overfitting va underfittingni kuzatdik: o'quv va validatsiya ballari orasidagi tafovut. Endi shu hodisaning nazariy tushuntirishiga o'tamiz — bias-variance yoyilmasi. U bashorat xatosini uch qismga ajratadi: siljish (bias — model noto'g'ri faraz qilmoqda), dispersiya (variance — model o'quv ma'lumotiga juda sezgir) va qaytarilmas shovqin (irreducible error — hech qanday model yo'qota olmaydi).

Bu yoyilma amaliy ahamiyatga ega: u "model yomon — nima qilish kerak?" savoliga yo'nalish beradi. Siljish katta bo'lsa — murakkabroq model yoki boyroq belgilar kerak; dispersiya katta bo'lsa — regularizatsiya, ko'proq ma'lumot yoki ansambl kerak. Ikkalasi ham noldan farqli bo'lsa (deyarli har doim), muvozanat qidiriladi.

Real vaziyat. Ikki jamoa bir xil vazifani hal qiladi. Birinchisi chiziqli regressiya ishlatadi: har safar (turli o'quv namunalarida) natija deyarli bir xil, lekin xato katta — yuqori siljish, past dispersiya. Ikkinchisi cheklanmagan qaror daraxti: har namunada model butunlay boshqacha, ba'zan juda yaxshi, ba'zan juda yomon — past siljish, yuqori dispersiya. Yechim uchinchi jamoada: daraxtlar ansambli (Random Forest) — past siljishni saqlab, dispersiyani o'rtachalash orqali kamaytiradi.

Bu darsda bias-variance yoyilmasini o'rganamiz.

Bu darsda:

  • Xatoning uch qismi
  • Siljish va dispersiya: intuitiv ma'no
  • Murakkablik bilan bog'liqlik
  • Simulyatsiya bilan o'lchash
  • Dispersiyani kamaytirish usullari (ansambl, regularizatsiya)
  • Siljishni kamaytirish usullari
  • Bias-variance tuzoqlari
  • Amaliy: modelni tashxis qilish

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


2. Nazariya — chuqur tushuntirish

2.1. Xatoning uch qismi

text
Bir nuqtadagi kutilgan kvadratik xato (turli o'quv namunalari bo'yicha):

  E[(y - f_hat(x))^2] = BIAS^2 + VARIANCE + SHOVQIN

  BIAS     = E[f_hat(x)] - f(x)        — o'rtacha bashorat haqiqiydan qanchalik uzoq
  VARIANCE = E[(f_hat(x) - E[f_hat(x)])^2]  — bashoratning namunadan namunaga tebranishi
  SHOVQIN  = Var(epsilon)              — qaytarilmas (o'lchov xatosi, hisobga olinmagan omillar)

Yoyilma xatoni uch manbaga ajratadi. Siljish — modelning tizimli xatosi (noto'g'ri faraz: masalan, to'g'ri chiziq bilan egri bog'lanishni modellash). Dispersiya — o'quv namunasiga sezgirlik (boshqa namuna — boshqa model). Shovqin — ma'lumotdagi tasodifiylik: uni hech qanday model yo'qota olmaydi 9.8-bob, shuning uchun u xatoning pastki chegarasi.

2.2. Intuitiv ma'no

text
Nishon otish metaforasi:

  past bias, past variance   — o'qlar markazda va zich      (ideal)
  past bias, yuqori variance — markaz atrofida, lekin tarqoq (overfitting)
  yuqori bias, past variance — bir joyda zich, lekin chetda  (underfitting)
  yuqori bias, yuqori variance — tarqoq va chetda           (eng yomon)

Amaliy tarjima:
  yuqori bias     → model o'quv ma'lumotida ham yomon
  yuqori variance → turli namunalarda natija juda farq qiladi

Siljish — tizimli xato (model sinfi yetarli emas); dispersiya — tasodifiy xato (model shovqinga moslashadi). Dispersiyani ko'rish uchun bitta model yetarli emas: turli o'quv namunalarida bir necha model o'qitib, ularning bashoratlari tarqoqligiga qarash kerak 2.4-bob.

2.3. Murakkablik bilan bog'liqlik

text
  xato
   │ \                               /
   │  \  BIAS^2                     /  VARIANCE
   │   \                           /
   │    \___                   ___/
   │        \_____________ ___/
   │         jami xato  \_/  ← optimal murakkablik
   │  ─────────────────────── shovqin (qaytarilmas)
   └────────────────────────────────→ murakkablik

Murakkablik ↑ → bias ↓, variance ↑
Ma'lumot hajmi ↑ → variance ↓ (bias o'zgarmaydi)

Klassik muvozanat: murakkablikni oshirish siljishni kamaytiradi, lekin dispersiyani oshiradi. Optimal nuqta — ikkalasining yig'indisi minimal bo'lgan joy (12.4 dagi validatsiya minimumi). Muhim farq: ma'lumot hajmini oshirish dispersiyani kamaytiradi, lekin siljishga ta'sir qilmaydi — shuning uchun "ko'proq ma'lumot" har doim ham yordam bermaydi (12.4, learning curve).

2.4. Simulyatsiya bilan o'lchash

text
1. Haqiqiy funksiyani biling (simulyatsiyada mumkin): y = f(x) + shovqin
2. B marta: yangi o'quv namunasi yarating → model o'qiting → test nuqtalarida bashorat
3. Har test nuqtasida:
     bias^2   = (bashoratlar o'rtachasi - f(x))^2
     variance = bashoratlar dispersiyasi
4. O'rtachalang

Real ma'lumotda f(x) noma'lum — lekin dispersiyani bootstrap 11.8-bob bilan baholash mumkin

Bias va dispersiyani aniq o'lchash faqat simulyatsiyada mumkin (haqiqiy funksiya ma'lum bo'lganda). Real loyihada ularning belgilarini ko'ramiz: o'quv ballining o'zi past — yuqori siljish; CV bo'laklari orasida katta tarqoqlik yoki o'quv/validatsiya tafovuti — yuqori dispersiya. Bu — tashxis uchun yetarli.

2.5. Dispersiyani kamaytirish

text
ANSAMBL (bagging):  ko'p modelni turli namunalarda o'qitib, o'rtachalash
  Var(o'rtacha) = Var(bitta) / B   (mustaqil bo'lsa; 9.6)
  → Random Forest: chuqur daraxtlar (past bias) + o'rtachalash (past variance)

REGULARIZATSIYA:    model erkinligini cheklash (Ridge, Lasso, max_depth — 12.4)
KO'PROQ MA'LUMOT:   SE ~ 1/sqrt(n) 9.6-bob
BELGILARNI KAMAYTIRISH: kam parametr — kam tebranish
ERTA TO'XTATISH:    iterativ modellarda

Ansambl — dispersiyani kamaytirishning eng kuchli usuli: mustaqil modellarning o'rtachasi bitta modelga qaraganda ancha barqaror (9.6 dagi SE = SD/sqrt(n) g'oyasi). Random Forest aynan shu printsipga asoslangan: har daraxt chuqur (past siljish, yuqori dispersiya), lekin 100 ta daraxtning o'rtachasi — barqaror. Boosting esa aksincha — siljishni kamaytirishga qaratilgan (keyingi qismlarda).

2.6. Siljishni kamaytirish

Siljish katta bo'lsa (model o'quv ma'lumotida ham yomon): murakkabroq model (chiziqlidan daraxtga, polinom darajasi, chuqurroq tarmoq); boyroq belgilar (o'zaro ta'sirlar, nochiziqli o'zgartirishlar — log, kvadrat; domen bilimi); regularizatsiyani kamaytirish (alpha ni pasaytirish); uzoqroq o'qitish (iterativ modellarda); boosting (ketma-ket modellar oldingisining xatosini tuzatadi). Diqqat: siljishni kamaytirish odatda dispersiyani oshiradi — validatsiya bilan tekshiring.

2.7. Bias-variance tuzoqlari

Asosiy tuzoqlar: shovqinni model xatosi deb hisoblash (qaytarilmas qism — chegara); dispersiyani bitta model bilan baholash (bir necha namuna yoki CV bo'laklari kerak); "ko'proq ma'lumot hamma narsani hal qiladi" (siljishga ta'sir qilmaydi); ansamblni har doim yechim deb bilish (siljish katta bo'lsa yordam bermaydi); tashxissiz davolash (nima muammo ekanini bilmay parametr o'zgartirish); CV SD sini e'tiborsiz qoldirish (dispersiya belgisi); klassifikatsiyada yoyilmani to'g'ridan-to'g'ri qo'llash (kvadratik xato uchun aniq, 0-1 xato uchun taxminiy).

2.8. Bias-variance — xatoning tarkibi

Bashorat xatosi uch qismdan: siljish^2 (tizimli — model sinfi yetarli emas), dispersiya (o'quv namunasiga sezgirlik), qaytarilmas shovqin (chegara). Murakkablik oshgani sari siljish kamayadi, dispersiya o'sadi — optimal nuqta ikkalasining yig'indisi minimal bo'lgan joyda. Ma'lumot hajmi dispersiyani kamaytiradi, siljishni emas. Davolash: yuqori dispersiyada — ansambl, regularizatsiya, ko'proq ma'lumot; yuqori siljishda — murakkabroq model, boyroq belgilar. Keyingi dars — birinchi to'liq model: sklearn bilan amaliy ish oqimi.


3. Tez ma'lumotnoma

python
import numpy as np
from sklearn.model_selection import cross_validate

# TASHXIS (real ma'lumotda)
r = cross_validate(model, X, y, cv=5, return_train_score=True, scoring="neg_mean_squared_error")
train_mse = -r["train_score"].mean()
cv_mse = -r["test_score"].mean()
# train_mse katta          → yuqori siljish
# cv_mse >> train_mse      → yuqori dispersiya
# CV bo'laklari SD katta   → yuqori dispersiya

# SIMULYATSIYA (bias/variance ni aniq o'lchash)
bashoratlar = np.array([model.fit(*yangi_namuna()).predict(X_test) for _ in range(B)])
bias2 = ((bashoratlar.mean(axis=0) - f_haqiqiy(X_test)) ** 2).mean()
variance = bashoratlar.var(axis=0).mean()
QOIDA: avval tashxis, keyin davolash · ansambl — dispersiya · belgilar — siljish

Bias-variance xulosasi

Xato = bias^2 + variance + shovqin (qaytarilmas chegara)
Bias — tizimli xato (model yetarli emas); variance — namunaga sezgirlik
Murakkablik ↑: bias ↓, variance ↑; ma'lumot ↑: variance ↓
Yuqori variance: ansambl, regularizatsiya, ko'proq ma'lumot
Yuqori bias: murakkabroq model, boyroq belgilar, boosting

4. Batafsil misollar

Misollar real numpy/sklearn bilan (Python 3.14).

Misol 1 — Bias va dispersiyani o'lchash

python
"""Simulyatsiya: turli murakkablikda bias^2, variance va jami xato (real numpy/sklearn)."""

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures


def haqiqiy(x: np.ndarray) -> np.ndarray:
    return np.sin(1.5 * x) + 0.3 * x


def main() -> None:
    rng = np.random.default_rng(0)
    SHOVQIN_SD, n, B = 0.4, 40, 300
    x_test = np.linspace(-3, 3, 60)
    X_test = x_test.reshape(-1, 1)
    f_test = haqiqiy(x_test)

    print("=== Daraja bo'yicha yoyilma (shovqin dispersiyasi = 0.160) ===")
    print(f"  {'daraja':>7} {'bias^2':>9} {'variance':>10} {'jami':>9}")
    for d in [1, 2, 3, 5, 9, 14]:
        bashoratlar = np.empty((B, len(x_test)))
        for b in range(B):
            xb = rng.uniform(-3, 3, n)
            yb = haqiqiy(xb) + rng.normal(0, SHOVQIN_SD, n)
            model = make_pipeline(PolynomialFeatures(d), LinearRegression())
            model.fit(xb.reshape(-1, 1), yb)
            bashoratlar[b] = model.predict(X_test)
        bias2 = ((bashoratlar.mean(axis=0) - f_test) ** 2).mean()
        var = bashoratlar.var(axis=0).mean()
        print(f"  {d:>7} {bias2:>9.4f} {var:>10.4f} {bias2 + var + SHOVQIN_SD ** 2:>9.4f}")

    print("\n  daraja 1-2: bias katta (underfitting)")
    print("  daraja 9-14: variance katta (overfitting)")
    print("  ⭐ Optimal — bias^2 + variance yig'indisi minimal joyda")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== Daraja bo'yicha yoyilma (shovqin dispersiyasi = 0.160) ===
   daraja    bias^2   variance      jami
        1    0.4862     0.0370    0.6831
        2    0.4883     0.0645    0.7128
        3    0.0800     0.0397    0.2797
        5    0.0031     0.0469    0.2100
        9    0.0242     6.8686    7.0527
       14   85.0482  2257.3784 2342.5867

  daraja 1-2: bias katta (underfitting)
  daraja 9-14: variance katta (overfitting)
  ⭐ Optimal — bias^2 + variance yig'indisi minimal joyda

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

Misol 2 — Modellar: barqarorlik va aniqlik

python
"""Turli modellarning namunadan namunaga tebranishi (real numpy/sklearn)."""

import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor


def haqiqiy(X: np.ndarray) -> np.ndarray:
    return 2 * X[:, 0] + X[:, 1] ** 2 - 1.5 * X[:, 0] * X[:, 1]


def main() -> None:
    rng = np.random.default_rng(1)
    n, B = 150, 60
    X_test = rng.normal(size=(200, 2))
    f_test = haqiqiy(X_test)

    modellar = {
        "chiziqli": lambda: LinearRegression(),
        "daraxt (cheksiz)": lambda: DecisionTreeRegressor(random_state=0),
        "daraxt (chuqurlik 3)": lambda: DecisionTreeRegressor(max_depth=3, random_state=0),
        "o'rmon (100 daraxt)": lambda: RandomForestRegressor(n_estimators=100, random_state=0),
    }

    print(f"  {'model':<22} {'bias^2':>9} {'variance':>10} {'jami':>9}")
    for nom, yasa in modellar.items():
        bashoratlar = np.empty((B, len(X_test)))
        for b in range(B):
            Xb = rng.normal(size=(n, 2))
            yb = haqiqiy(Xb) + rng.normal(0, 1.0, n)
            bashoratlar[b] = yasa().fit(Xb, yb).predict(X_test)
        bias2 = ((bashoratlar.mean(axis=0) - f_test) ** 2).mean()
        var = bashoratlar.var(axis=0).mean()
        print(f"  {nom:<22} {bias2:>9.3f} {var:>10.3f} {bias2 + var:>9.3f}")

    print("\n  chiziqli: bias katta (nochiziqlilikni ushlay olmaydi), variance kichik")
    print("  cheksiz daraxt: bias kichik, variance katta")
    print("  o'rmon: bias kichik, variance ancha kichik (o'rtachalash)")
    print("  ⭐ Ansambl — dispersiyani kamaytirish vositasi")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
  model                     bias^2   variance      jami
  chiziqli                   5.609      0.210     5.819
  daraxt (cheksiz)           0.960      1.770     2.730
  daraxt (chuqurlik 3)       1.933      1.895     3.828
  o'rmon (100 daraxt)        1.495      0.494     1.989

  chiziqli: bias katta (nochiziqlilikni ushlay olmaydi), variance kichik
  cheksiz daraxt: bias kichik, variance katta
  o'rmon: bias kichik, variance ancha kichik (o'rtachalash)
  ⭐ Ansambl — dispersiyani kamaytirish vositasi

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

Misol 3 — Ma'lumot hajmi ta'siri

python
"""Ma'lumot hajmi dispersiyani kamaytiradi, siljishni emas (real numpy/sklearn)."""

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures


def haqiqiy(x: np.ndarray) -> np.ndarray:
    return np.sin(1.5 * x) + 0.3 * x


def yoyilma(daraja: int, n: int, B: int, rng) -> tuple[float, float]:
    x_test = np.linspace(-3, 3, 60)
    f_test = haqiqiy(x_test)
    bashoratlar = np.empty((B, len(x_test)))
    for b in range(B):
        xb = rng.uniform(-3, 3, n)
        yb = haqiqiy(xb) + rng.normal(0, 0.4, n)
        m = make_pipeline(PolynomialFeatures(daraja), LinearRegression())
        m.fit(xb.reshape(-1, 1), yb)
        bashoratlar[b] = m.predict(x_test.reshape(-1, 1))
    bias2 = ((bashoratlar.mean(axis=0) - f_test) ** 2).mean()
    return float(bias2), float(bashoratlar.var(axis=0).mean())

def main() -> None:
    rng = np.random.default_rng(2)

    print("=== 1. Sodda model (daraja 2) — bias hukmron ===")
    for n in [30, 100, 400, 1600]:
        b2, v = yoyilma(2, n, 150, rng)
        print(f"  n={n:>5}: bias^2 {b2:.4f}, variance {v:.4f}")

    print("\n=== 2. Murakkab model (daraja 9) — variance hukmron ===")
    for n in [30, 100, 400, 1600]:
        b2, v = yoyilma(9, n, 150, rng)
        print(f"  n={n:>5}: bias^2 {b2:.4f}, variance {v:.4f}")

    print("\n=== 3. Xulosa ===")
    print("  ma'lumot oshsa: variance kamayadi, bias deyarli o'zgarmaydi")
    print("  ⭐ Yuqori siljishda ko'proq ma'lumot yordam bermaydi")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Sodda model (daraja 2) — bias hukmron ===
  n=   30: bias^2 0.4896, variance 0.1148
  n=  100: bias^2 0.4858, variance 0.0223
  n=  400: bias^2 0.4855, variance 0.0044
  n= 1600: bias^2 0.4852, variance 0.0012

=== 2. Murakkab model (daraja 9) — variance hukmron ===
  n=   30: bias^2 0.5388, variance 57.7904
  n=  100: bias^2 0.0004, variance 0.0340
  n=  400: bias^2 0.0000, variance 0.0052
  n= 1600: bias^2 0.0000, variance 0.0011

=== 3. Xulosa ===
  ma'lumot oshsa: variance kamayadi, bias deyarli o'zgarmaydi
  ⭐ Yuqori siljishda ko'proq ma'lumot yordam bermaydi

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

Misol 4 — Real ma'lumotda tashxis

python
"""Haqiqiy funksiya noma'lum: CV bilan siljish/dispersiya belgilarini o'qish (real numpy/sklearn)."""

import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.linear_model import Ridge
from sklearn.model_selection import cross_validate
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures, StandardScaler
from sklearn.tree import DecisionTreeRegressor


def main() -> None:
    rng = np.random.default_rng(3)
    n = 600
    X = rng.normal(size=(n, 3))
    y = (2 * X[:, 0] + X[:, 1] ** 2 - 1.5 * X[:, 0] * X[:, 2] + rng.normal(0, 1.0, n))

    modellar = {
        "chiziqli": make_pipeline(StandardScaler(), Ridge(alpha=1.0)),
        "polinom-2": make_pipeline(PolynomialFeatures(2), StandardScaler(), Ridge(alpha=1.0)),
        "daraxt (cheksiz)": DecisionTreeRegressor(random_state=0),
        "o'rmon": RandomForestRegressor(n_estimators=150, random_state=0),
    }

    print(f"  {'model':<18} {"o'quv MSE":>11} {'CV MSE':>9} {'CV SD':>8}  tashxis")
    for nom, m in modellar.items():
        r = cross_validate(m, X, y, cv=5, scoring="neg_mean_squared_error",
                           return_train_score=True)
        tr = -r["train_score"].mean()
        cv = -r["test_score"].mean()
        sd = r["test_score"].std()
        if tr > 2.0:
            tashxis = "yuqori siljish"
        elif cv > 1.8 * tr:
            tashxis = "yuqori dispersiya"
        else:
            tashxis = "muvozanat"
        print(f"  {nom:<18} {tr:>11.3f} {cv:>9.3f} {sd:>8.3f}  {tashxis}")

    print("\n  shovqin dispersiyasi = 1.0 — MSE uchun pastki chegara")
    print("  ⭐ Tashxis: o'quv xatosi (siljish) va tafovut (dispersiya)")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
  model                o'quv MSE    CV MSE    CV SD  tashxis
  chiziqli                 4.853     5.004    0.983  yuqori siljish
  polinom-2                1.023     1.060    0.056  muvozanat
  daraxt (cheksiz)        -0.000     2.924    0.515  yuqori dispersiya
  o'rmon                   0.224     1.608    0.415  yuqori dispersiya

  shovqin dispersiyasi = 1.0 — MSE uchun pastki chegara
  ⭐ Tashxis: o'quv xatosi (siljish) va tafovut (dispersiya)

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


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

Noto'g'ri fikr To'g'risi
"Xatoni nolga tushirish mumkin" Shovqin — qaytarilmas
"Ko'proq ma'lumot — har doim yordam" Faqat dispersiyaga
"Ansambl — universal yechim" Siljishda yordam bermaydi
"Bias va variance — bir xil narsa" Tizimli va tasodifiy xato
"Dispersiyani bitta modeldan ko'rish mumkin" Bir necha namuna kerak
"Murakkab model — kam xato" Dispersiya o'sadi
"CV SD muhim emas" Dispersiya belgisi
"Yoyilma — faqat nazariya" Tashxis va davolash yo'nalishi

6. Keng tarqalgan xatolar va yechimlari

1. Tashxissiz davolash

python
model = RandomForestRegressor(n_estimators=500)   # "yaxshiroq bo'lsin"  # ⚠️
# avval o'quv/CV xatosini ko'ring, keyin qaror qiling                    # ✅

2. Yuqori siljishda ma'lumot yig'ish

python
# o'quv MSE katta → "ko'proq ma'lumot kerak"                       # ⚠️
# murakkabroq model yoki boyroq belgilar                           # ✅

3. CV SD ni e'tiborsiz qoldirish

python
print(-scores.mean())                                             # ⚠️
print(f"{-scores.mean():.3f} ± {scores.std():.3f}")               # ✅

4. Ansamblni hamma joyda

python
RandomForest(...)   # chiziqli bog'lanish, kam ma'lumot           # ⚠️
Ridge(...)          # sodda va barqaror                            # ✅

5. Shovqinni unutish

python
# "MSE 1.05 — model yomon" (shovqin dispersiyasi 1.0)             # ⚠️
# nazariy chegara bilan solishtiring                               # ✅

6. Bitta namunada dispersiya

python
# bitta o'qitishdan "model beqaror" xulosasi                       # ⚠️
# CV bo'laklari yoki bootstrap bilan 11.8-bob                        # ✅

7. Klassifikatsiyada aniq yoyilma

python
# 0-1 xato uchun bias^2 + variance formulasini aniq deb            # ⚠️
# taxminiy talqin; log-loss yoki Brier bilan ishlash 9.9-bob         # ✅

7. Integratsiya — bu bilim qayerda kerak bo'ladi

  • 12.4-dars (o'tilgan): Overfitting/underfitting tashxisi
  • 9.6-dars (o'tilgan): Dispersiya va o'rtachalash
  • 13-qism (keyingi): Ridge regularizatsiyasi
  • Ansambllar qismi: Bagging va boosting
  • Model baholash qismi: Giperparametr sozlash

8. Eng yaxshi amaliyotlar

  1. Avval tashxis (o'quv xatosi va tafovut).

  2. Shovqin chegarasini baholang.

  3. CV SD ni ko'ring.

  4. Yuqori dispersiyada — ansambl/regularizatsiya.

  5. Yuqori siljishda — model va belgilar.

  6. Ma'lumot yig'ishdan oldin learning curve.

  7. Oddiy modeldan boshlang.

  8. Har o'zgarishni validatsiyada tekshiring.


9. Amaliy topshiriq

Vazifa 1: Bashorat qiling

python
1.  # xatoning uch qismi?
2.  # bias nima?
3.  # variance nima?
4.  # shovqin nima?
5.  # murakkablik oshsa bias?
6.  # murakkablik oshsa variance?
7.  # ma'lumot oshsa variance?
8.  # ma'lumot oshsa bias?
9.  # ansambl nimani kamaytiradi?
10. # boosting nimani kamaytiradi?
11. # o'quv xatosi katta — tashxis?
12. # CV >> o'quv — tashxis?
Javoblar
  1. bias^2, variance, shovqin
  2. Tizimli xato (model yetarli emas)
  3. Namunaga sezgirlik
  4. Qaytarilmas tasodifiylik
  5. Kamayadi
  6. Oshadi
  7. Kamayadi
  8. O'zgarmaydi
  9. Dispersiyani
  10. Siljishni
  11. Yuqori siljish
  12. Yuqori dispersiya

Vazifa 2: Xatolarni tuzating

python
1.  # o'quv MSE katta → ko'proq ma'lumot yig'amiz

2.  print("CV MSE:", -scores.mean())

3.  RandomForestRegressor(n_estimators=1000)   # chiziqli bog'lanish, n=80

4.  # "MSE 1.02 — model yomon"   (shovqin SD = 1.0)

5.  # bitta o'qitish natijasidan "beqaror model" xulosasi
Javoblar
python
1.  # murakkabroq model yoki boyroq belgilar

2.  print(f"{-scores.mean():.3f} ± {scores.std():.3f}")

3.  Ridge(alpha=1.0)   # sodda va barqaror

4.  # shovqin chegarasi bilan solishtiring

5.  # CV bo'laklari yoki bootstrap bilan baholang

Vazifa 3: Yoyilma simulyatsiyasi

Modellang:

  1. Haqiqiy funksiya (nochiziqli)
  2. Turli murakkablik
  3. bias^2 va variance
  4. Optimal murakkablik

Vazifa 4: Modellarni solishtirish

Modellang:

  1. Chiziqli, daraxt, o'rmon
  2. Bias/variance
  3. CV natijalari
  4. Tavsiya

Vazifa 5: Ma'lumot hajmi

Modellang:

  1. n = 50..5000
  2. Sodda va murakkab model
  3. bias va variance dinamikasi
  4. "Ma'lumot kerakmi?" xulosasi

Vazifa 6: Integratsiya

Modellang:

  1. CV (12.3)
  2. Overfitting tashxisi (12.4)
  3. Ridge (13-qism)
  4. Ansambl g'oyasi

Vazifa 7: O'ylash

Bias-variance yoyilmasi 1990-yillardan beri ML darsliklarining markazida turadi, lekin zamonaviy chuqur o'rganish modellari unga "bo'ysunmaydi" (12.4 dagi double descent). Yoyilma bugun ham foydalimi? U qanday hollarda yo'l ko'rsatadi va qachon chalg'itadi?

Javob

Qisqa javob: yoyilma tushuntirish ramkasi sifatida foydali bo'lib qolmoqda — ayniqsa jadval ma'lumoti va klassik modellarda. U "muammo qayerda?" degan savolga yo'nalish beradi. Lekin uni qat'iy qonun deb olish xato: zamonaviy katta modellarda murakkablik va dispersiya munosabati boshqacha.

1. Qayerda foydali

Holat Yordam
Jadval ma'lumoti, klassik modellar To'g'ri tashxis va davolash
Kichik/o'rta n Muvozanat aniq ko'rinadi
Ansambl tanlash Dispersiya kamayishi tushunarli
Belgi muhandisligi Siljishni kamaytirish yo'li

2. Qayerda chalg'itadi

  • Parametrlar soni murakkablik o'lchovi deb olinsa
  • Juda katta modellarda (double descent)
  • Regularizatsiya turlari aralash bo'lganda
  • Klassifikatsiyada (0-1 xato uchun yoyilma aniq emas)

3. Amaliy yondashuv

  1. Tashxisni kuzatuvdan boshlang (o'quv/CV ballari, SD)
  2. Yoyilmani yo'nalish sifatida ishlating, qonun sifatida emas
  3. Har gipotezani validatsiyada sinab ko'ring
  4. Model turiga mos vositalarni tanlang

4. Data Scientist qanday

  • "Siljishmi yoki dispersiyami?" savolini beradi
  • Davolashni shu javobga qarab tanlaydi
  • Natijani o'lchaydi (taxmin bilan cheklanmaydi)

5. Xulosa

  1. Yoyilma — kuchli tushuntirish ramkasi
  2. U tashxis va davolash yo'nalishini beradi
  3. Zamonaviy katta modellarda to'liq emas
  4. Yakuniy hakam — validatsiya natijasi

Nimani mustahkamlaydi: 2.3, 2.7-bo'limlar.


Xulosa

Bu darsda bias-variance yoyilmasini o'rgandik.

Eng muhim uch fikr:

  1. Xato = bias^2 + variance + shovqin. Siljish — tizimli xato (model sinfi yetarli emas); dispersiya — o'quv namunasiga sezgirlik; shovqin — qaytarilmas chegara (hech qanday model undan pastga tusha olmaydi).

  2. Murakkablik va ma'lumot. Murakkablik oshgani sari siljish kamayadi, dispersiya o'sadi — optimal nuqta yig'indi minimalida. Ma'lumot hajmi faqat dispersiyani kamaytiradi: yuqori siljishda ko'proq ma'lumot yig'ish foyda bermaydi (12.4, learning curve).

  3. Tashxis va davolash. Real ma'lumotda belgilarni o'qiymiz: o'quv xatosining o'zi katta — siljish; CV xatosi o'quvdan ancha katta yoki CV SD katta — dispersiya. Yuqori dispersiyada: ansambl (o'rtachalash), regularizatsiya, ko'proq ma'lumot; yuqori siljishda: murakkabroq model, boyroq belgilar, boosting.

Keyingi darsda birinchi to'liq modelni quramiz: sklearn bilan uchdan-oxirigacha ish oqimi — ajratish, pipeline, o'qitish, baholash va natijani talqin qilish.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!