---
title: 'Düzenlileştirme Cezaları'
source: 'https://academia.sh/tr/kurslar/denetimli-ogrenme/duzenlilestirme-cezalari'
course: 'Denetimli Öğrenme'
language: tr
updated: '2026-08-17T18:10:21+00:00'
license: 'CC BY-SA 4.0'
---

# Düzenlileştirme Cezaları

Karesel, mutlak ve karma cezanın aynı 87 sütuna uygulanıp seyreklikle ölçülmesi: karesel ceza altı ayarın hiçbirinde tek bir katsayıyı bile tam sıfırlamaz, mutlak ceza 42'den 84'e kadar sıfırlar, karma ceza 24 ile 83 arasında kalır. Mutlak ceza 10'da 87 katsayının 65'i tam sıfırdır ve kalan 22 sütun sınamada 5,2909 m³ verir; karesel ceza aynı sayıya 87 sütunun hepsini tutarak 5,2954 ile ulaşır. Doğrulamadan okunan seçim karesel ceza 3'tür ve sınamada 5,2954 verir, sınamadan okunsaydı mutlak ceza 10 seçilirdi ve fark 0,0046 m³ olurdu. Mutlak ceza 3000'de 87 katsayının hepsi sıfırlanır ve model tam olarak taban çizgisine, 6,5324'e döner; karesel ceza 100000'de bile 6,5086'da kalır.

Önceki ders bir düğmeyi tam sayı adımlarla çevirdi. Derece 4 ile 5 arasında ara durak yoktu ve
derece 5'e geçmek yirmi bir sütunu birden ekledi. Sütun eklemek ya da silmek dışında üçüncü bir
yol var: sütunları bırakıp **katsayılarını cezalandırmak**. M27/K01'in Genelleme konusu bu sezgiyi
tek bir ceza türüyle kurmuş, ceza katsayısı büyüdükçe eğitim sayısının kesintisiz kötüleştiğini,
ayrılmış küme sayısının önce iyileşip sonra kötüleştiğini ölçmüş ve en iyi noktanın doğrulama
kümesinden okunduğunu göstermişti. O süpürme burada tekrarlanmaz.

Bu dersin sorusu cezanın **büyüklüğü** değil **biçimidir**. Katsayıların kare toplamını cezalandırmak
ile mutlak değer toplamını cezalandırmak iki farklı yordam üretir ve fark hatada değil, **kaç
katsayının tam olarak sıfır olduğunda** görünür. Ölçü budur: **seyreklik**. Hangi ceza kaç sütunu
modelden atıyor, hangisi hepsini küçültüp bırakıyor, ve atılan sütunların ayrılmış kümedeki
karşılığı ne.

- **DM18.** Küme, bölme, hedef ve taban çizgisi önceki iki dersteki gibidir: kurgu abone tablosu,
  tohum 20260218, 756/252/252, sınama kümesinde 6,5324 m³ kök hata.
- **DM19.** Sütun kümesi **derece 6 polinomudur**: dört bölge göstergesi ve üç sayısal sütunun
  toplam derecesi altıyı geçmeyen bütün tek terimlileri, toplam 87 sütun. Derece bu derste
  değişmez; değişen tek şey cezadır.
- **DM20.** Sütunlar eğitim kümesinden öğrenilen ortalama ve değişkenlikle ölçeklenir. Ceza
  ölçeğe duyarlıdır: ölçeklenmemiş sütunlarda aynı ceza katsayısı farklı sütunlara farklı
  şiddette uygulanır.
- **DM21.** Sabit terim cezalanmaz. Cezalansaydı bütün katsayılar sıfırlandığında model sıfır
  söylerdi; cezalanmadığında taban çizgisine, yani eğitim ortalamasına döner.
- **DM22.** Üç ceza biçimi: **karesel ceza** katsayıların kare toplamını, **mutlak ceza** mutlak
  değer toplamını, **karma ceza** ikisinin yarı yarıya karışımını cezalandırır. Ürün ya da mecaz
  ad kullanılmaz; ceza biçimiyle anılır.
- **DM23.** Çözüm **eş güdümlü iniştir**: her katsayı sırayla, ötekiler sabit tutularak
  güncellenir. Mutlak cezanın türevi sıfırda tanımsız olduğu için kapalı çözüm yoktur; iniş,
  eşik altında kalan katsayıyı **tam sıfıra** oturtur.
- **DM24.** Tur sayısı 120'dir ve bütün ayarlarda sabittir. Tur sayısı bir ayar değişkeni olarak
  süpürülmez; süpürülseydi aday sayısı üçe katlanırdı.
- **DM25.** "Tam sıfır" karşılaştırması `==` ile yapılmaz; eşik $10^{-9}$'dur ve iniş yordamının
  sıfırladığı katsayı tam olarak `0.0` atandığı için bu eşik yalnız bir güvencedir.
- **DM26.** Denenen aday sayısı **18**'dir: üç ceza biçimi, altı ceza katsayısı.

## Üç Ceza Biçimi

Kurulum önceki iki dersin kurulumudur.

```python
# ceza.py — MODELDIR. Ayni KURGU abone tablosu, ayni tohum ve ayni bolme.
import math

TOHUM, HAM, M32 = 20260218, 1400, 0xFFFFFFFF
BOLGE = [("kuzey", 0.28, 21, 0.00), ("guney", 0.22, 17, -0.10),
         ("dogu", 0.18, 26, 0.30), ("bati", 0.14, 14, -0.05),
         ("merkez", 0.18, 23, 0.05)]


def uretec(t):
    x = ((t ^ (t >> 16)) * 2246822507) & M32
    x = ((x ^ (x >> 13)) * 3266489909) & M32
    s = [(x ^ (x >> 16)) & M32]

    def sonraki():
        s[0] = (s[0] * 1664525 + 1013904223) & M32
        return s[0] / 4294967296
    return sonraki


def ayrik(u, w):
    t = 0.0
    for i, x in enumerate(w):
        t += x
        if u < t:
            return i
    return len(w) - 1


ABONE, VERI = [], []
for i in range(HAM):
    r = uretec(TOHUM + i)
    b = BOLGE[ayrik(r(), [x[1] for x in BOLGE])]
    hane = 1 + ayrik(r(), [0.06, 0.24, 0.30, 0.24, 0.11, 0.05])
    memnun = 1 + ayrik(r(), [0.08, 0.14, 0.27, 0.34, 0.17])
    if r() >= 0.046:
        ABONE.append({"no": 10001 + i, "bolge": b, "hane": hane, "memnuniyet": memnun})
for k in ABONE:
    r, v = uretec(TOHUM + 7000 + k["no"]), []
    for d in range(ayrik(r(), [0.05, 0.12, 0.21, 0.62])):
        v.append(0.0 if r() < 0.038 else math.floor(
            k["bolge"][2] * math.exp((r() + r() + r() - 1.5) * 0.62)
            * (1 - d * 0.05) * 100 + 0.5) / 100)
        r()
    if not v:
        continue
    x = {"bolge_ad": k["bolge"][0], "hane": k["hane"], "memnuniyet": k["memnuniyet"],
         "donem": len(v), "hedef": round(sum(v) / len(v), 2)}
    for b in BOLGE:
        x["b_" + b[0]] = int(k["bolge"][0] == b[0])
    VERI.append(x)


def karistir(veri, tohum):
    r, s = uretec(tohum), list(range(len(veri)))
    for i in range(len(s) - 1, 0, -1):
        j = int(r() * (i + 1))
        s[i], s[j] = s[j], s[i]
    return [veri[i] for i in s]


K = karistir(VERI, TOHUM + 90000)
EGT, DOG, SIN = K[:756], K[756:1008], K[1008:]
ORT = sum(x["hedef"] for x in EGT) / len(EGT)


def kok(kestirim, s):
    return math.sqrt(sum((kestirim(x) - x["hedef"]) ** 2 for x in s) / len(s))


print(f"egitim {len(EGT)}, dogrulama {len(DOG)}, sinama {len(SIN)}, "
      f"taban cizgisi sinamada {kok(lambda x: ORT, SIN):.4f} m3")
```

```
egitim 756, dogrulama 252, sinama 252, taban cizgisi sinamada 6.5324 m3
```

Eş güdümlü iniş, üç ceza biçimini tek bir yordamda toplar. Her katsayı için ötekiler sabit
tutulup en iyi değer hesaplanır; mutlak cezanın payı bu değeri sıfıra doğru **iter** ve eşiği
aşamayan katsayı tam sıfıra oturur.

```python
import itertools

SAYISAL = ["hane", "memnuniyet", "donem"]
GOSTERGE = ["b_guney", "b_dogu", "b_bati", "b_merkez"]
DERECE = 6
US = [u for u in itertools.product(range(DERECE + 1), repeat=3) if 1 <= sum(u) <= DERECE]
# h hane, m memnuniyet, d donem; h^2m^1 = hane karesi carpi memnuniyet
AD = GOSTERGE + ["".join(f"{a}^{k}" for a, k in zip("hmd", u) if k) for u in US]


def ham(x):
    return ([float(x[a]) for a in GOSTERGE]
            + [math.prod(x[a] ** k for a, k in zip(SAYISAL, u)) for u in US])


H = [ham(x) for x in EGT]
P = len(AD)
O = [sum(r[j] for r in H) / len(H) for j in range(P)]
S = [max(1e-9, math.sqrt(sum((r[j] - O[j]) ** 2 for r in H) / len(H))) for j in range(P)]


def uygula(x):
    h = ham(x)
    return [(h[j] - O[j]) / S[j] for j in range(P)]


KOL = [[(H[i][j] - O[j]) / S[j] for i in range(len(H))] for j in range(P)]
KK = [sum(v * v for v in KOL[j]) for j in range(P)]
Y = [x["hedef"] for x in EGT]


def inis(ceza, mutlak_pay, tur=120):        # MODELDIR: cezali dogrusal baglanim
    w, sabit = [0.0] * P, sum(Y) / len(Y)
    art = [y - sabit for y in Y]
    for _ in range(tur):
        for j in range(P):
            if KK[j] < 1e-12:
                continue
            r = sum(KOL[j][i] * art[i] for i in range(len(art))) + KK[j] * w[j]
            c1, c2 = ceza * mutlak_pay, ceza * (1 - mutlak_pay)
            if r > c1:
                yeni = (r - c1) / (KK[j] + c2)
            elif r < -c1:
                yeni = (r + c1) / (KK[j] + c2)
            else:
                yeni = 0.0
            fark = yeni - w[j]
            if fark:
                for i in range(len(art)):
                    art[i] -= KOL[j][i] * fark
                w[j] = yeni
        d = sum(art) / len(art)
        sabit += d
        for i in range(len(art)):
            art[i] -= d
    return sabit, w


def kestirici(m):
    return lambda x: m[0] + sum(a * b for a, b in zip(m[1], uygula(x)))


CEZA = (3, 10, 30, 100, 300, 1000)
BICIM = (("karesel", 0.0), ("mutlak", 1.0), ("karma", 0.5))
SONUC = []
print(f"sutun {P}, taban cizgisi sinamada {kok(lambda x: ORT, SIN):.4f} m3")
print(f"\n{'ceza bicimi':<12} {'katsayi':>8} {'tam sifir':>10} {'egitimde':>9} "
      f"{'dogrulama':>10} {'sinama':>8}")
for ad, pay in BICIM:
    for c in CEZA:
        m = inis(c, pay)
        g = kestirici(m)
        sifir = sum(1 for v in m[1] if abs(v) < 1e-9)
        SONUC.append((ad, c, sifir, kok(g, DOG), kok(g, SIN)))
        print(f"{ad:<12} {c:>8} {sifir:>10} {kok(g, EGT):>9.4f} "
              f"{kok(g, DOG):>10.4f} {kok(g, SIN):>8.4f}")
print(f"\ndenenen aday sayisi {len(SONUC)}")
```

```
sutun 87, taban cizgisi sinamada 6.5324 m3

ceza bicimi   katsayi  tam sifir  egitimde  dogrulama   sinama
karesel             3          0    5.0348     5.2982   5.2954
karesel            10          0    5.0367     5.3009   5.2968
karesel            30          0    5.0408     5.3088   5.3053
karesel           100          0    5.0581     5.3313   5.3342
karesel           300          0    5.1289     5.4180   5.4387
karesel          1000          0    5.3907     5.6894   5.7325
mutlak              3         42    5.0371     5.3028   5.2933
mutlak             10         65    5.0429     5.3092   5.2909
mutlak             30         74    5.0515     5.3179   5.3077
mutlak            100         79    5.0810     5.3486   5.3443
mutlak            300         83    5.1447     5.4056   5.4420
mutlak           1000         84    5.6036     5.8955   5.9568
karma               3         24    5.0360     5.3015   5.2947
karma              10         47    5.0405     5.3058   5.2941
karma              30         68    5.0477     5.3158   5.3022
karma             100         72    5.0722     5.3458   5.3483
karma             300         75    5.1431     5.4192   5.4509
karma            1000         83    5.4757     5.7450   5.8260

denenen aday sayisi 18
```

Üçüncü sütun dersin yanıtıdır ve üç blok arasındaki fark tartışmasız. Karesel cezanın satırlarında
o sütun **altı ayarın altısında da sıfırdır**: ceza bin katına çıkarıldığında bile 87 katsayının
tek biri tam sıfır olmuyor. Mutlak ceza aynı aralıkta 42'den 84'e çıkıyor. Karma ceza tam
ortada duruyor: 24'ten 83'e.

Ayrım katsayının sıfıra yaklaşırken hissettiği kuvvetten geliyor. Karesel cezanın türevi
katsayıyla orantılıdır; katsayı küçüldükçe onu daha da küçültmeye çalışan kuvvet de küçülür ve
sıfıra hiçbir zaman ulaşmaz. Mutlak cezanın türevi ise büyüklükten bağımsızdır — katsayı ne kadar
küçük olursa olsun aynı sabit kuvvetle itilir — ve o kuvvet katsayının hata düşürme katkısını
aştığı anda katsayı sıfırda kalır.

Son iki sütun aynı tabloyu hata tarafından okuyor ve orada fark küçüktür. Üç biçimin en iyi
doğrulama sayıları 5,2982, 5,3028 ve 5,3015; aralarındaki mesafe 0,005 m³'ün altında. Ceza
biçimi seçimi **hata sayısında görünmüyor**; sütun sayısında görünüyor.

## Seyrekliğin Karşılığı

On sekiz aday arasından bir tanesini seçmek gerekiyor ve seyrekliğin bedeli tam burada okunur.

```python
en_dogrulama = min(SONUC, key=lambda t: t[3])
en_sinama = min(SONUC, key=lambda t: t[4])
print(f"dogrulamadan okunan {en_dogrulama[0]} ceza {en_dogrulama[1]}: "
      f"{en_dogrulama[2]} tam sifir, sinama {en_dogrulama[4]:.4f}")
print(f"sinamadan okunsaydi {en_sinama[0]} ceza {en_sinama[1]}: "
      f"{en_sinama[2]} tam sifir, sinama {en_sinama[4]:.4f}")
print(f"iki secim arasindaki fark {en_dogrulama[4] - en_sinama[4]:.4f} m3\n")
k, m = inis(3, 0.0), inis(10, 1.0)
print(f"{'esik':>8} {'karesel ceza 3':>16} {'mutlak ceza 10':>16}  (mutlak degeri altinda kalan katsayi)")
for e in (1e-9, 0.001, 0.01, 0.1):
    print(f"{e:>8} {sum(1 for v in k[1] if abs(v) < e):>16} "
          f"{sum(1 for v in m[1] if abs(v) < e):>16}")
kalan = [AD[j] for j in range(P) if abs(m[1][j]) > 1e-9]
print(f"\nmutlak ceza 10'un birakigi {len(kalan)} sutun: {', '.join(kalan[:9])} ...")
for c in (3000, 100000):
    for ad, pay in (("mutlak", 1.0), ("karesel", 0.0)):
        mm = inis(c, pay)
        print(f"{ad} ceza {c}: tam sifir {sum(1 for v in mm[1] if abs(v) < 1e-9)}/{P}, "
              f"sabit terim {mm[0]:.4f}, sinama {kok(kestirici(mm), SIN):.4f}")
print(f"egitim ortalamasi {ORT:.4f}, taban cizgisi sinamada {kok(lambda x: ORT, SIN):.4f}")
```

```
dogrulamadan okunan karesel ceza 3: 0 tam sifir, sinama 5.2954
sinamadan okunsaydi mutlak ceza 10: 65 tam sifir, sinama 5.2909
iki secim arasindaki fark 0.0046 m3

    esik   karesel ceza 3   mutlak ceza 10  (mutlak degeri altinda kalan katsayi)
   1e-09                0               65
   0.001                0               65
    0.01                5               66
     0.1               29               71

mutlak ceza 10'un birakigi 22 sutun: b_guney, b_dogu, b_bati, b_merkez, d^1, m^1d^4, m^1d^5, m^3d^1, h^1 ...
mutlak ceza 3000: tam sifir 87/87, sabit terim 19.7665, sinama 6.5324
karesel ceza 3000: tam sifir 0/87, sabit terim 19.7665, sinama 6.0935
mutlak ceza 100000: tam sifir 87/87, sabit terim 19.7665, sinama 6.5324
karesel ceza 100000: tam sifir 0/87, sabit terim 19.7665, sinama 6.5086
egitim ortalamasi 19.7665, taban cizgisi sinamada 6.5324
```

Doğrulama kümesi karesel cezayı seçiyor ve o seçim 87 katsayının hepsini tutuyor. Sınamadan
seçilseydi mutlak ceza 10 gelirdi: 65 katsayı tam sıfır, kalan 22 sütun ve 5,2909. İki seçim
arasındaki fark 0,0046 m³'tür ve bu, 252 satırlık bir küme üzerinde on sekiz kez en küçüğü
aramanın bedelidir.

Ama tablonun asıl söylediği fark bu değil. **Aynı hata düzeyine iki ayrı sütun sayısıyla
varılıyor**: karesel ceza 87 sütunla 5,2954, mutlak ceza 22 sütunla 5,2909. Seyrekliğin ayrılmış
kümedeki karşılığı bu kümede **sıfırdır** — 65 sütun modelden çıkıyor ve hata sayısı
kötüleşmiyor. Seyreklik bir başarım kazancı değil, bir **maliyet kazancıdır**: kestirim için
hesaplanacak, saklanacak ve açıklanacak sütun sayısı dörtte bire iniyor.

Eşik tablosu iki cezanın farkını daha keskin veriyor. Karesel cezanın 87 katsayısından hiçbiri
$10^{-9}$'un altında değil, ama 29'u 0,1'in altında. Yani karesel ceza da sütunları
işlevsizleştiriyor — yalnız onları **modelde tutuyor**. Mutlak ceza ise 65'ini gerçekten atıyor
ve 0,1 eşiğinde ancak 71'e çıkıyor; attıklarının dışında kalanları küçültmüyor.

Son dört satır iki biçimin sınırını gösteriyor. Mutlak ceza 3000'de 87 katsayının hepsi
sıfırlanıyor, sabit terim eğitim ortalamasında kalıyor ve model sınamada **tam olarak 6,5324**,
yani taban çizgisinin kendisini veriyor. Karesel ceza aynı ayarda 6,0935'te, yüz bin katsayıda
ise 6,5086'da. Karesel ceza taban çizgisine yaklaşır ama sonlu bir ayarda ona **ulaşmaz**; mutlak
ceza ulaşır. İki biçim arasındaki fark, hata eğrisinin herhangi bir yerinde değil, uçlarında
görünür.

## Özet

- Cezanın biçimi hata sayısında değil sütun sayısında görünür: üç biçimin en iyi doğrulama
  sayıları 5,2982, 5,3028 ve 5,3015 ile birbirinin 0,005 m³ içindedir.
- Karesel ceza altı ayarın hiçbirinde tek bir katsayıyı bile tam sıfırlamaz; mutlak ceza 42'den
  84'e, karma ceza 24'ten 83'e çıkar. Sebep türevin biçimidir: karesel cezanın kuvveti katsayı
  küçüldükçe küçülür, mutlak cezanınki sabit kalır.
- Aynı hata düzeyine iki ayrı sütun sayısıyla varılıyor: karesel ceza 87 sütunla 5,2954, mutlak
  ceza 22 sütunla 5,2909. Seyrekliğin bu kümedeki karşılığı başarım değil maliyettir.
- Karesel ceza sütunları işlevsizleştirir ama atmaz: 87 katsayısından 29'u 0,1'in altındadır ve
  hiçbiri tam sıfır değildir.
- Mutlak ceza 3000'de bütün katsayılar sıfırlanır ve model tam olarak taban çizgisine, 6,5324'e
  döner; karesel ceza yüz bin katsayıda bile 6,5086'da kalır ve sonlu bir ayarda tabana ulaşmaz.
- Doğrulamadan okunan seçim karesel ceza 3'tür (sınamada 5,2954); sınamadan okunsaydı mutlak ceza
  10 seçilirdi (5,2909) ve on sekiz adaylık bütçenin bedeli 0,0046 m³ olurdu.

## Sonraki Adım

Üç derste hedef sürekli bir sayıydı ve model o sayıyı doğrudan söyledi. Kursun asıl through-line
problemi ise bir sınıflandırmadır: bir abonenin kaçak ya da arıza şüphesi taşıyıp taşımadığı, ve
oradaki taban çizgisi 0,7579. Aynı doğrusal model bu problemde doğrudan kullanılamaz, çünkü
düzlemin çıktısı eksi sonsuzdan artı sonsuza uzanır ve etiket yalnız sıfır ile birdir. Aradaki
köprü çıktının bir olasılığa sıkıştırılmasıdır. Sonraki ders bu sıkıştırmayı yazar ve ölçüsü
şudur: aynı model 0,5 eşiğiyle bir sayı, başka eşiklerle başka sayılar verir; eşiği seçmek ayrı
bir iştir ve `model-degerlendirme` konusuna bırakılır. Burada gösterilecek olan, çıktının **eşikten
önce** sürekli olduğu ve bu sürekliliğin tek bir sınıf etiketinden fazlasını taşıdığıdır.
