İçeriğe geç
academia.sh

Ders 15 / 15

Yeniden Üretilebilirlik

Aynı sayının ikinci kez üretilmesi için sabitlenmesi gereken kalemin sayılması ve sabitlenmemiş tek kalemin ne kadar oynattığı: değerlendirmenin kendi 9 kaleminin 6'sı tek başına sınama sayısını oynatıyor, en büyük oynama 0,0370 ile 7 abone; aynı kalemlerin 8'i alt grup açıklığını oynatıyor ve en büyük oynama 0,0989 ile bütünde okunanın 2,7 katı. Alt grup en az boyu serbest bırakıldığında iki başlık sayısı da hiç değişmiyor ama ölçülen alt grup 12'den 11'e iniyor. M26/K03'ün 39, M26/K04'ün 9, M26/K06'nın 11, M27/K02'nin 4 ve M27/K05'in 8 kaleminin üstüne değerlendirmenin 9 kalemi eklenir ve M27'nin tam listesi 80 olur. Kurs kapanışı on beş dersi bütünde ve en kötü alt grupta, müfredat kapanışı M27'nin sekiz kursunu ve 121 dersini tek tabloda toplar.

İçindekiler

Önceki ders bir beyanın yirmi iki sorudan on sekizini kapattığını saydı. Beyanın taşıdığı sayı tek bir koşumdan geldi: bir tohum, bir bölme, bir derinlik, bir eşik. O koşum ikinci kez yapıldığında aynı sayının çıkacağı hiçbir yerde gösterilmedi.

Bu ders iki sayı basar. Birincisi toplam kalem sayısıdır: aynı sınama sayısının yeniden üretilmesi için kaç karar yazılı olmalı. İkincisi sabitlenmemiş tek kalemin oynattığı sayıdır. Kalem sayısı M26/K03, M26/K04, M26/K06, M27/K02 ve M27/K05’ten devralınır; bu ders yalnız değerlendirmenin kendi kalemlerini ekler ve toplamı verir.

  • ME38. Küme, etiket ve model M27/K01–K07’den devralınır ve kurgudur; hazırlama kalemleri M26/K03’te sabitlendi ve bu derste sabit kalır.
  • ME39. Bir kalemi serbest bırakmak onu silmek değil, eşit ölçüde savunulabilir başka bir değere geçirmektir. Alternatifler kurgudur ve hiçbiri yanlış değildir.
  • ME40. Her koşumda iki sayı okunur: sınama kümesinde bütünde ölçülen doğruluk ve önceki dersin dört ekseninde ölçülen alt grup açıklığı.
  • ME41. Kalemler tek tek serbest bırakılır; biri serbestken öbür sekizi sabit kalır.
  • ME42. Oynama abone sayısına çevrilirken o koşumun kendi sınama kümesi boyu kullanılır, çünkü bölme kalemi serbest kaldığında küme boyu da değişir.
  • ME43. Kayan noktalı karşılaştırma 1e-9 eşiğiyle yapılır; bu eşik dört basamağa yuvarlanmış bir doğruluk farkının çok altındadır.

Değerlendirmenin Kendi Kalemleri

# uretilebilirlik.py — MODELDIR. Kurgu abone tablosu ayni tohumla (20260218)
# uretilir; hazirlama kalemleri M26/K03'te sabitlenmisti ve burada sabit kalir.
# Degerlendirmenin kendi kalemleri tek bir sozlukte toplanir, kosum onu okur.
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)]
ALAN = ["ort_tuketim", "oynaklik", "hane", "memnuniyet", "donem", "sifir_okuma",
        "b_kuzey", "b_guney", "b_dogu", "b_bati", "b_merkez"]
VARSAYILAN = {"bolme_tohum": 90000, "egitim_payi": 0.60, "derinlik": 6,
              "yaprak_enaz": 2, "yaprak_esigi": 0.5, "aday_esik": 10,
              "altgrup_enaz": 20, "basamak": (10, 25, 40), "alan_sirasi": "dogal"}


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


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:
        continue
    no = 10001 + i
    r, v = uretec(TOHUM + 7000 + 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(
            b[2] * math.exp((r() + r() + r() - 1.5) * 0.62)
            * (1 - d * 0.05) * 100 + 0.5) / 100)
        r()
    if not v:
        continue
    ort, oyn, r = sum(v) / len(v), max(v) - min(v), uretec(TOHUM + 51000 + no)
    z = (0.052 * (ort - 20) + 0.85 * (min(v) == 0.0) + 0.026 * oyn
         + 0.24 * (hane >= 5) - 0.20 * (memnun >= 4) + b[3]
         + 0.9 * (no - 10001) / 1399 + (r() + r() + r() - 1.5) * 1.30)
    x = {"hane": hane, "memnuniyet": memnun, "donem": len(v), "bolge": b[0],
         "ort_tuketim": round(ort, 2), "oynaklik": round(oyn, 2),
         "sifir_okuma": int(min(v) == 0.0), "supheli": int(z > 1.35)}
    for q in BOLGE:
        x["b_" + q[0]] = int(b[0] == q[0])
    VERI.append(x)


def kos(**serbest):
    """Kalem sozlugunu okuyup sinama dogrulugunu ve alt grup acikligini verir."""
    a = dict(VARSAYILAN, **serbest)
    r, s = uretec(TOHUM + a["bolme_tohum"]), list(VERI)
    for i in range(len(s) - 1, 0, -1):
        j = int(r() * (i + 1))
        s[i], s[j] = s[j], s[i]
    n = int(len(s) * a["egitim_payi"])
    egt, sin = s[:n], s[n + (len(s) - n) // 2:]
    alanlar = ALAN if a["alan_sirasi"] == "dogal" else ALAN[::-1]

    def agac(u, derinlik):
        p, en = sum(x["supheli"] for x in u) / len(u), None
        if derinlik and len(u) >= 2 * a["yaprak_enaz"] and 0.0 < p < 1.0:
            g = 2 * p * (1 - p)
            for alan in alanlar:
                d = sorted({x[alan] for x in u})
                for v in (d[1:] if len(d) < a["aday_esik"] else
                          [d[int(i * len(d) / a["aday_esik"])]
                           for i in range(1, a["aday_esik"])]):
                    sol = [x for x in u if x[alan] < v]
                    sag = [x for x in u if x[alan] >= v]
                    if min(len(sol), len(sag)) < a["yaprak_enaz"]:
                        continue
                    q = 0.0
                    for y in (sol, sag):
                        w = sum(x["supheli"] for x in y) / len(y)
                        q += len(y) * 2 * w * (1 - w) / len(u)
                    if en is None or g - q > en[0]:
                        en = (g - q, alan, v, sol, sag)
        if en is None or en[0] <= 1e-9:
            return {"tahmin": int(p > a["yaprak_esigi"])}
        return {"alan": en[1], "esik": en[2], "sol": agac(en[3], derinlik - 1),
                "sag": agac(en[4], derinlik - 1)}

    M = agac(egt, a["derinlik"])

    def dogruluk(u):
        d = 0
        for x in u:
            k = M
            while "tahmin" not in k:
                k = k["sol"] if x[k["alan"]] < k["esik"] else k["sag"]
            d += k["tahmin"] == x["supheli"]
        return d / len(u)

    b1, b2, b3 = a["basamak"]
    eksen = [lambda x: x["bolge"],
             lambda x: "basamak %d" % (1 + (x["ort_tuketim"] >= b1)
                                       + (x["ort_tuketim"] >= b2)
                                       + (x["ort_tuketim"] >= b3)),
             lambda x: "1-2" if x["hane"] <= 2 else
             ("3-4" if x["hane"] <= 4 else "5+"),
             lambda x: "az" if x["donem"] <= 1 else "tam"]
    olculen = []
    for f in eksen:
        for g in sorted({f(x) for x in sin}):
            alt = [x for x in sin if f(x) == g]
            if len(alt) >= a["altgrup_enaz"]:
                olculen.append(dogruluk(alt))
    return (dogruluk(sin), max(olculen) - min(olculen), len(olculen),
            len(sin))


TEMEL, ACIK, SAYI, N = kos()
print(f"butun kalemler sabitken sinama {TEMEL:.4f}, alt grup acikligi {ACIK:.4f}; "
      f"{N} abonelik sinama kumesinde olculen alt grup {SAYI}")
butun kalemler sabitken sinama 0.7778, alt grup acikligi 0.3576; 252 abonelik sinama kumesinde olculen alt grup 12

Dokuz kalemin hiçbiri kod satırının içinde gizli değil; hepsi koşum işlevinin okuduğu tek bir sözlükte duruyor. Sabitlemenin ilk koşulu budur: koda gömülü bir kalemin sabit mi serbest mi olduğu sorulamaz.

Sabitlenmemiş Tek Kalem

# supurme.py — her kalem TEK BASINA serbest birakilir: esit olcude savunulabilir
# baska bir degere gecirilir, oburleri sabit kalir. Iki sayi birden okunur:
# butunde olculen sinama dogrulugu ve alt grup acikligi.
SERBEST = [("bolme tohumu", "bolme_tohum", 90001),
           ("egitim payi", "egitim_payi", 0.70),
           ("agac derinligi", "derinlik", 5),
           ("yaprakta en az abone", "yaprak_enaz", 5),
           ("yaprak esigi", "yaprak_esigi", 0.45),
           ("aday esik sayisi", "aday_esik", 8),
           ("alt grup en az boyu", "altgrup_enaz", 30),
           ("tarife basamagi siniri", "basamak", (12, 28, 45)),
           ("oznitelik listesi sirasi", "alan_sirasi", "ters")]

print(f"{'serbest birakilan kalem':<26}{'yeni deger':<14}{'sinama':>8}"
      f"{'abone':>7}{'aciklik':>9}{'oynama':>9}{'alt grup':>10}")
OYNAMA = []
for ad, anahtar, deger in SERBEST:
    s, c, k, n = kos(**{anahtar: deger})
    OYNAMA.append((ad, abs(s - TEMEL), abs(c - ACIK), n))
    print(f"{ad:<26}{str(deger):<14}{s:>8.4f}{round(abs(s - TEMEL) * n):>7}"
          f"{c:>9.4f}{c - ACIK:>+9.4f}{k:>10}")
oyn = sum(1 for _, u, _, _ in OYNAMA if u > 1e-9)
en_s = max(OYNAMA, key=lambda t: t[1])
en_c = max(OYNAMA, key=lambda t: t[2])
print(f"\n{len(SERBEST)} kalemin {oyn} tanesi tek basina sinama sayisini oynatiyor; "
      f"en buyuk oynama {en_s[1]:.4f} ({en_s[0]}), {round(en_s[1] * en_s[3])} abone")
print(f"ayni kalemlerin {sum(1 for _, _, u, _ in OYNAMA if u > 1e-9)} tanesi alt grup "
      f"acikligini oynatiyor; en buyuk oynama {en_c[2]:.4f} ({en_c[0]}), "
      f"butunde okunan en buyuk oynamanin {en_c[2] / en_s[1]:.1f} kati")
serbest birakilan kalem   yeni deger      sinama  abone  aciklik   oynama  alt grup
bolme tohumu              90001           0.8056      7   0.3373  -0.0204        12
egitim payi               0.7             0.8148      7   0.4286  +0.0709        11
agac derinligi            5               0.7897      3   0.4565  +0.0989        12
yaprakta en az abone      5               0.7778      0   0.3601  +0.0024        12
yaprak esigi              0.45            0.7817      1   0.3723  +0.0146        12
aday esik sayisi          8               0.7579      5   0.4470  +0.0894        12
alt grup en az boyu       30              0.7778      0   0.3576  +0.0000        11
tarife basamagi siniri    (12, 28, 45)    0.7778      0   0.3854  +0.0278        13
oznitelik listesi sirasi  ters            0.7817      1   0.3601  +0.0024        12

9 kalemin 6 tanesi tek basina sinama sayisini oynatiyor; en buyuk oynama 0.0370 (egitim payi), 7 abone
ayni kalemlerin 8 tanesi alt grup acikligini oynatiyor; en buyuk oynama 0.0989 (agac derinligi), butunde okunan en buyuk oynamanin 2.7 kati

Dokuz kalemin altısı tek başına sınama sayısını oynatıyor ve en büyük oynama yedi abone ediyor. Yedi abone az görünür; oysa modelin taban çizgisi üstündeki bütün farkı beş abonedir. Altıncı satır bunu en sert biçimde yazıyor: aday eşik sayısı 10 yerine 8 olduğunda sınama doğruluğu 0,7579, yani taban çizgisinin tam kendisi çıkıyor. Tek bir gerekçesiz kalem, tabanı geçen bir modeli geçmeyen bir modele çeviriyor.

Sağdaki iki sütun kursun kendi ölçüsüdür ve daha sert. Açıklıktaki en büyük oynama 0,0989, bütünde okunanın 2,7 katı. Alt grup açıklığı daha kırılgandır, çünkü küçük kümelerde ölçülür ve uçlardan okunur.

Son sütun sabitlemenin görünmeyen yüzüdür. “Alt grup en az boyu” satırında iki başlık sayısı da hiç oynamıyor, ama ölçülen alt grup 12’den 11’e iniyor; tarife basamağı sınırı serbest kaldığında 13’e çıkıyor. Bir kalem, rapor edilen sayıyı değiştirmeden neyin ölçüldüğünü değiştirebiliyor ve önceki ders bunun kararı nasıl bozduğunu saymıştı.

M27’nin Tam Kalem Listesi

# toplam.py — M27'nin tam kalem listesi. Ilk bes kaynak ONCEKI KURSLARDA sayildi
# ve burada yeniden hesaplanmaz; bu ders yalniz degerlendirmenin kalemlerini
# ekler ve toplami verir.
KAYNAK = [("hazirlama defteri (M26/K03)", 39),
          ("calisma ortami (M26/K04)", 9),
          ("raporun kendisi (M26/K06)", 11),
          ("hazirlama zinciri (M27/K02)", 4),
          ("egitimin kendisi (M27/K05)", 8),
          ("degerlendirmenin kendisi (bu ders)", len(SERBEST))]
for ad, n in KAYNAK:
    print(f"  {ad:<36}{n:>3} kalem")
print(f"  {'toplam':<36}{sum(n for _, n in KAYNAK):>3} kalem")
print(f"seksen kalemin biri sabitlenmedigi anda butunde okunan sayi "
      f"{round(en_s[1] * en_s[3])} abone, alt grup acikligi {en_c[2]:.4f} kayabiliyor")
  hazirlama defteri (M26/K03)          39 kalem
  calisma ortami (M26/K04)              9 kalem
  raporun kendisi (M26/K06)            11 kalem
  hazirlama zinciri (M27/K02)           4 kalem
  egitimin kendisi (M27/K05)            8 kalem
  degerlendirmenin kendisi (bu ders)    9 kalem
  toplam                               80 kalem
seksen kalemin biri sabitlenmedigi anda butunde okunan sayi 7 abone, alt grup acikligi 0.0989 kayabiliyor

Seksen kalem tek bir listedir ve altı ayrı kursta parça parça sayılmıştır. Uzunluğu bir kusur değil bir ölçüdür ve bu kararların hiçbiri kendiliğinden yazılmaz.

Özet

  • Değerlendirmenin kendi kalemleri dokuzdur ve hepsi tek bir sözlükte durur; koda gömülü bir kalemin sabit mi serbest mi olduğu sorulamaz.
  • Dokuz kalemin altısı tek başına sınama sayısını oynatıyor; en büyük oynama 0,0370 ile yedi abone ve bu, modelin taban çizgisi üstündeki beş abonelik farkından büyük. Aday eşik sayısı 8 olduğunda sınama doğruluğu taban çizgisinin tam kendisine, 0,7579’a iniyor.
  • Aynı kalemlerin sekizi alt grup açıklığını oynatıyor; en büyük oynama 0,0989 ile bütünde okunanın 2,7 katı, çünkü açıklık küçük kümelerde ve uçlardan okunur.
  • Alt grup en az boyu serbest bırakıldığında iki başlık sayısı da oynamıyor ama ölçülen alt grup 12’den 11’e iniyor: bir kalem, rapor edilen sayıyı değiştirmeden neyin ölçüldüğünü değiştirebiliyor.
  • M26/K03’ün 39, M26/K04’ün 9, M26/K06’nın 11, M27/K02’nin 4 ve M27/K05’in 8 kaleminin üstüne değerlendirmenin 9 kalemi eklenir ve M27’nin tam listesi 80 olur.

Kurs Kapanışı

On beş dersin her birinde aynı sayı iki kez okundu: bir kez bütünde, bir kez alt gruplarda. Satırlar ortak birim taşımadığı için hücrelerde hangi ölçütle okunduğu yazılıdır ve her sayı kendi dersinden alınmıştır.

Ders Bütünde En kötü alt grupta Açıklık
Değerlendirme 01 doğrulama stratejileri doğruluk 0,7778, taban +0,0198 0,6111 0,3576
Değerlendirme 02 ölçüt seçimi bedel kazancı +0,0198 ya da +0,1984 −0,4468 0,8606
Değerlendirme 03 temel model sekiz tabana göre −0,0119 … +0,5357 doğuda −0,0833 seçimin oynattığı 0,5476
Değerlendirme 04 istatistiksel anlamlılık fark +0,0198, payı sıfırı içeriyor az okumada −0,0471 13 farkın 4’ü sıfırı dışarıda
Değerlendirme 05 dağılım kayması taban üstü fark 0,0198 → 0,0066 hiçbiri taban altında değil 0,3576 → 0,2573
Yorum 01 yorumlanabilirlik ihtiyacı kapanan soru 8,58/12 7,25 soru 1,64 soru
Yorum 02 öznitelik önemi 12 sütunun 10’unda sıra ayrışıyor en önemli sütunda 0,0162 0,1720
Yorum 03 yerel açıklama yöntemleri sadakat 0,9417 0,9027 0,0637
Yorum 04 kısmi bağımlılık ve etkileşim hane eğimi −0,0069 (düz) doğuda −0,1891 0,3192
Yorum 05 doğası gereği yorumlanabilir modeller kural listesi 0,7897, aileye 0,0159 merkezde 0,0862 uzak 6 alt grup 0,02 içine giremiyor
Etik 01 yanlılık kaynakları doğruluk 0,8194, duyarlılık 0,3704 doğuda 0,7108 0,2733
Etik 02 adalet ölçütleri en iyi deneme 0,2727 açıklık bırakıyor doğuda taban oran 0,4578 yakalama 0,4842, isabette 0,7038
Etik 03 mahremiyet koruyan öğrenme tek kaydın izi 0,0313 / 0,7778 altıncı alanla tek kalan kayıt 0,9857 gürültünün bedeli 0,0022’ye karşı 0,1669
Etik 04 model belgeleme doğruluk 0,7778; beyan 18/22 soru kapatıyor 0,6111 (doğu) 0,3576
Etik 05 yeniden üretilebilirlik 0,7778; tek kalem 7 abone oynatıyor aday eşik 8’de 0,7579 0,3576; tek kalem 0,0989 oynatıyor

Üçüncü sütun kursun kuralıdır: bir sayı, kimin için ölçüldüğü yazılmadan okunamaz; alt grubu yazılmayan başarım ölçülmemiş sayılır. Hiçbir satırda açıklık sıfır çıkmadı.

M27’nin sekiz kursu aynı ekseni sekiz ayrı yerde okudu.

Kurs Ders Ölçü ekseni Birim
K01 Makine Öğrenmesine Giriş 11 ayrım eğitimde ve ayrılmış kümede
K02 Veri Hazırlama ve Öznitelik Mühendisliği 12 özniteliğin kattığı fark katkı
K03 Denetimli Öğrenme 20 ailenin kattığı ve bütçenin şişirdiği denenen aday
K04 Denetimsiz Öğrenme 11 etiket yokken taban ne kurulan taban
K05 Derin Öğrenme 24 kapasitenin kattığı ve eğitimin payı ikinci koşum
K06 Doğal Dil İşleme ve Bilgisayarla Görme 14 alana özgü taban alanın tabanı
K07 Pekiştirmeli Öğrenme ve Öneri Sistemleri 14 kararın kendi verisini değiştirmesi toplanan veri
K08 Model Değerlendirme, Yorumlanabilirlik ve Etik 15 taban kim için alt grup açıklığı
Toplam 121

Yüz yirmi bir ders tek bir kuralı sekiz kez kurdu: bir model, kendisinden daha aptal bir yordamı ne kadar geçtiği kadar iyidir; taban çizgisi yazılmayan başarım ölçülmemiş sayılır. Kural her kursta aynı biçimde ödendi: modelin sayısının yanına daha aptal bir yordamın sayısı kondu ve farkın nereden geldiği sorgulandı.

İkinci iddia da her kursta ödendi: fark her zaman öğrenmeden gelmez. Sızıntı, seçim payı, ayar bütçesi, dengesiz sınıf ve son kursta alt grup tanımının kendisi de fark üretti.

Yüz yirmi bir derste bir model kuruldu, ölçüldü, açıklandı ve kime ne yaptığı sayıldı. Ama hepsi tek bir koşumda, tek bir makinede, bir defterin içinde oldu. Modelin bir sisteme dönüşmesi — sürüm alması, başkalarının çağırdığı bir yüz kazanması, bozulduğunda geri alınması ve maliyetinin sayılması — hiç ele alınmadı. Sonraki müfredat, Yapay Zekâ Mühendisliği, bu soruyla açılır.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat