Ders 03 / 15
Temel Model
Taban çizgisinin bir araç değil bir tasarım nesnesi olduğunun ölçülmesi: aynı derinlik 6 karar ağacı sekiz ayrı taban adayına karşı -0,0119 ile +0,5357 arasında okunuyor ve seçim tek başına 0,5476 oynatıyor. Arama tablosu tabanı kendi kapasitesine sahiptir — beş hücrede 0,7579, on beş hücrede 0,7897 ile modeli geçiyor, otuz dokuz hücrede 0,7500'e düşüyor. Taban seçimi alt gruplarda da yön değiştiriyor: en sık sınıfa göre on iki alt grubun dördünde tabanın altında kalan model, bölge ve basamak arama tablosuna göre sekizinde altında kalıyor ve fark açıklığı 0,2173'ten 0,1351'e iniyor. M27'nin yedi kursunda seçilmiş taban çizgileri tek tabloda toplanıyor.
İçindekiler
Önceki ders taban çizgisini ikinci kez kendi başına bir soruya dönüştürdü. Bedel yapısı değişince taban da değişti: bir yapıda hiç kimseyi işaretlememek, öbüründe herkesi işaretlemek. Alt gruplarda ise her grubun kendi tabanı çıktı ve bir grupta 0,0000, başkasında 0,7882 oldu. Yedi kurs boyunca taban çizgisi bir araçtı — modelin sayısını okunur kılan, seçildikten sonra bir daha tartışılmayan sabit bir işaret.
Bu ders onun sabit olmadığını ölçer. Bir problemde kaç taban vardır, aralarında nasıl seçim yapılır, seçim aynı modeli hangi iki ayrı biçimde okutur. Taban çizgisi burada bir araç değil bir tasarım nesnesidir: kendi kapasitesi, kendi aşırı uyumu ve kendi alt grup davranışı olan bir yordamdır. Dersin sonunda M27’nin yedi kursunda fiilen seçilmiş tabanlar tek bir tabloda toplanır.
- DT16. Kurgu, bölme (756/252/252), tohum, ölçüt (doğruluk) ve alt grup tanımları önceki iki dersten aynen sürer: dört eksen, 13 alt grup, n < 25 olan grup açıklığa girmez.
- DT17. Karşılaştırılan model derinlik 6 karar ağacıdır ve sınama kümesinde 0,7778 verir. Bu sayı ders boyunca hiç değişmez; değişen tek şey karşısına konan tabandır.
- DT18. Taban adayı, eğitim kümesinden öğrenilmiş olsa bile modelin kullandığı özniteliklerin tamamına bakmayan ve kendisi bir ayar araması yapmayan yordamdır. Sınır bir karardır.
- DT19. Sekiz aday sınanır: hepsini şüpheli saymak, sınıf oranına göre rastgele atamak, en sık sınıfı söylemek, tek bölmeli bir kural, ve dört arama tablosu — bölge; bölge ve basamak; bunlara hane; dört eksenin tamamı. Arama tablosu bir hücredeki eğitim çoğunluğunu söyler, görülmemiş hücrede en sık sınıfı; hücre sayısı yazılır, çünkü ölçülen şey odur.
- DT20. Rastgele atama yirmi koşumun ortalamasıdır; tek koşum basılsaydı sayı koşumdan koşuma oynardı.
- DT21. Adaylar arasında seçim bu derste yapılmaz. Ölçülen şey seçimin sonucu değil, seçimin aynı modeli ne kadar oynatabildiğidir.
- DT22. Son bölümdeki kurs tablosunun her sayısı kaynak dersten okunmuştur; birimler kurslar arasında ortak değildir ve satırlar birbiriyle toplanmaz.
Bir Problemde Kaç Taban Var
İlk blok kurguyu kurar, modeli eğitir ve sekiz taban adayını aynı sınama kümesinde ölçer.
# MODELDIR. M26'nin KURGU olcum agi ayni tohumla uretilir, okumalar abone duzeyinde # ozetlenir ve uzerine KURGU bir kacak/ariza suphesi etiketi eklenir. 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, OKUMA, 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 = uretec(TOHUM + 7000 + k["no"]) for d in range(ayrik(r(), [0.05, 0.12, 0.21, 0.62])): OKUMA.setdefault(k["no"], []).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() v = OKUMA.get(k["no"]) if v is None: continue ort, oyn, r = sum(v) / len(v), max(v) - min(v), uretec(TOHUM + 51000 + k["no"]) z = (0.052 * (ort - 20) + 0.85 * (min(v) == 0.0) + 0.026 * oyn + 0.24 * (k["hane"] >= 5) - 0.20 * (k["memnuniyet"] >= 4) + k["bolge"][3] + 0.9 * (k["no"] - 10001) / 1399 + (r() + r() + r() - 1.5) * 1.30) x = {"no": k["no"], "hane": k["hane"], "memnuniyet": k["memnuniyet"], "donem": len(v), "ort_tuketim": round(ort, 2), "oynaklik": round(oyn, 2), "sifir_okuma": int(min(v) == 0.0), "supheli": int(z > 1.35), "bolge": k["bolge"][0]} for b in BOLGE: x["b_" + b[0]] = int(k["bolge"][0] == b[0]) VERI.append(x) ALAN = ["ort_tuketim", "oynaklik", "hane", "memnuniyet", "donem", "sifir_okuma", "b_kuzey", "b_guney", "b_dogu", "b_bati", "b_merkez"] 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] def uce_bol(K): a, b = int(len(K) * 0.6), int(len(K) * 0.8) return K[:a], K[a:b], K[b:] def safsizlik(s): p = sum(x["supheli"] for x in s) / len(s) if s else 0.0 return 2 * p * (1 - p) def agac(s, derinlik, alanlar, enaz=2): p, en = sum(x["supheli"] for x in s) / len(s), None if derinlik and len(s) >= 2 * enaz and 0.0 < p < 1.0: for a in alanlar: d = sorted({x[a] for x in s}) for v in (d[1:] if len(d) < 10 else [d[int(i * len(d) / 10)] for i in range(1, 10)]): sol = [x for x in s if x[a] < v] sag = [x for x in s if x[a] >= v] if min(len(sol), len(sag)) < enaz: continue k = safsizlik(s) - (len(sol) * safsizlik(sol) + len(sag) * safsizlik(sag)) / len(s) if en is None or k > en[0]: en = (k, a, v, sol, sag) if en is None or en[0] <= 1e-9: return {"tahmin": int(p > 0.5)} return {"alan": en[1], "esik": en[2], "sol": agac(en[3], derinlik - 1, alanlar), "sag": agac(en[4], derinlik - 1, alanlar)} def tahmin(d, x): while "tahmin" not in d: d = d["sol"] if x[d["alan"]] < d["esik"] else d["sag"] return d["tahmin"] def dogruluk(d, s): return sum(tahmin(d, x) == x["supheli"] for x in s) / len(s) def gruplar(x): # dort eksen, on uc alt grup; 01'den aynen surer return [("bolge", x["bolge"]), ("tarife", "10" if x["ort_tuketim"] <= 10 else ("25" if x["ort_tuketim"] <= 25 else "40")), ("hane", "1-2" if x["hane"] <= 2 else ("3-4" if x["hane"] <= 4 else "5+")), ("okuma", "az" if x["donem"] <= 2 else "tam")] ADLAR = sorted({g for x in VERI for g in gruplar(x)}) EGT, DOG, SIN = uce_bol(karistir(VERI, TOHUM + 90000)) M, TEK = agac(EGT, 6, ALAN), agac(EGT, 1, ALAN) ORAN = sum(x["supheli"] for x in EGT) / len(EGT) CS = int(ORAN > 0.5) def gr(x): return dict(gruplar(x)) def arama(anahtar): # arama tablosu tabani: hucrede egitim cogunlugu c = {} for x in EGT: c.setdefault(anahtar(x), [0, 0])[x["supheli"]] += 1 c = {k: int(v[1] > v[0]) for k, v in c.items()} return lambda x: c.get(anahtar(x), CS) def rast(s, n=20): # sinif oranina gore atama, yirmi kosumun ortalamasi t = 0.0 for j in range(n): r = uretec(TOHUM + 61000 + j) t += sum((1 if r() < ORAN else 0) == x["supheli"] for x in s) / len(s) return t / n def oran(f, s): return sum(f(x) == x["supheli"] for x in s) / len(s) ANAHTAR = (("bolge", lambda x: x["bolge"]), ("bolge+basamak", lambda x: (x["bolge"], gr(x)["tarife"])), ("+hane", lambda x: (x["bolge"], gr(x)["tarife"], gr(x)["hane"])), ("dort eksen", lambda x: (x["bolge"], gr(x)["tarife"], gr(x)["hane"], gr(x)["okuma"]))) ADAY = [("hepsi supheli", 1, lambda x: 1), ("en sik sinif", 1, lambda x: CS), ("tek kural", 2, lambda x: tahmin(TEK, x))] ADAY += [(ad, len({k(x) for x in EGT}), arama(k)) for ad, k in ANAHTAR] mm = dogruluk(M, SIN) print(f"model, derinlik 6 karar agaci: egitim {dogruluk(M, EGT):.4f} sinama {mm:.4f}\n\n" f"{'taban adayi':<16} {'hucre':>5} {'egitim':>7} {'sinama':>7} {'model farki':>12}") print(f"{'rastgele atama':<16} {'--':>5} {rast(EGT):>7.4f} {rast(SIN):>7.4f} " f"{mm - rast(SIN):>+12.4f}") fk = [mm - rast(SIN)] for ad, n, f in ADAY: fk.append(mm - oran(f, SIN)) print(f"{ad:<16} {n:>5} {oran(f, EGT):>7.4f} {oran(f, SIN):>7.4f} {fk[-1]:>+12.4f}") print(f"\ntaban secimi ayni modeli {min(fk):+.4f} ile {max(fk):+.4f} arasinda okutuyor:" f" aralik {max(fk) - min(fk):.4f}")
model, derinlik 6 karar agaci: egitim 0.8466 sinama 0.7778 taban adayi hucre egitim sinama model farki rastgele atama -- 0.6522 0.6450 +0.1327 hepsi supheli 1 0.2222 0.2421 +0.5357 en sik sinif 1 0.7778 0.7579 +0.0198 tek kural 2 0.7778 0.7579 +0.0198 bolge 5 0.7778 0.7579 +0.0198 bolge+basamak 15 0.7897 0.7897 -0.0119 +hane 39 0.7976 0.7500 +0.0278 dort eksen 66 0.8095 0.7738 +0.0040 taban secimi ayni modeli -0.0119 ile +0.5357 arasinda okutuyor: aralik 0.5476
Son sütun tek bir modelin sekiz ayrı okunuşudur. Model hiç değişmedi: sınama kümesinde 0,7778. Ama “hepsini şüpheli say” tabanına göre modelin katkısı +0,5357, “bölge ve basamak arama tablosu” tabanına göre −0,0119. Aradaki 0,5476, verinin ya da modelin değil yalnızca taban seçiminin ürettiği bir sayıdır. Aynı çalışma iki ayrı raporla anlatılabilir ve ikisi de doğru hesaplanmıştır.
Ortadaki üç satır ikinci sonucu veriyor. En sık sınıf, tek bölmeli bir kural ve bölgeye bakan bir arama tablosu aynı sayıyı üretiyor: 0,7579. Şüphelilik oranı hiçbir bölgede yarıyı geçmediği için bölge tablosunun beş hücresi de aynı yanıtı söylüyor. Bir tabanı karmaşıklaştırmak onu güçlendirmez; ancak hücrelerde çoğunluk değişirse güçlenir.
Asıl bulgu iki satır aşağıdadır. Bölge ile tarife basamağı birlikte alındığında on beş hücreden bazılarında çoğunluk dönüyor ve tablo 0,7897 okuyor — derinlik 6 karar ağacının üstünde. On bir öznitelikle eğitilmiş, yüzlerce bölme adayı denemiş bir ağaç, iki sütunlu bir arama tablosuna kaybediyor. Hane eklendiğinde hücre sayısı 39’a çıkıyor: eğitim sayısı 0,7976’ya yükselirken sınama sayısı 0,7500’e düşüyor. Dört eksenin tamamında 66 hücre, eğitim 0,8095, sınama 0,7738. Taban çizgisinin de bir kapasitesi vardır ve o kapasite aşıldığında taban da aşırı uyum gösterir. Bu, tabanı bir araçtan çıkarıp bir tasarım nesnesine çeviren şeydir: seçilirken model seçerken sorulan sorular sorulur.
Taban Seçimi Alt Gruplarda Yön Değiştiriyor
İki tabanın bütündeki farkı yalnız 0,0318’dir. Alt gruplara inildiğinde ikisi aynı şeyi söylemiyor.
AB = arama(lambda x: (x["bolge"], gr(x)["tarife"])) print(f"{'alt grup':<14} {'n':>4} {'model':>7} {'A taban':>8} {'A fark':>8} " f"{'B taban':>8} {'B fark':>8}") fa, fb = [], [] for g in ADLAR: s = [x for x in SIN if g in gruplar(x)] a, b, d = oran(lambda x: CS, s), oran(AB, s), dogruluk(M, s) if len(s) >= 25: fa.append(d - a) fb.append(d - b) print(f"{' '.join(g):<14} {len(s):>4} {d:>7.4f} {a:>8.4f} {d - a:>+8.4f} " f"{b:>8.4f} {d - b:>+8.4f}{' n<25' if len(s) < 25 else ''}") print(f"\nA en sik sinif : fark {min(fa):+.4f} .. {max(fa):+.4f}, aciklik " f"{max(fa) - min(fa):.4f}, tabanin altinda {sum(1 for v in fa if v < 0)}/{len(fa)}") print(f"B bolge+basamak : fark {min(fb):+.4f} .. {max(fb):+.4f}, aciklik " f"{max(fb) - min(fb):.4f}, tabanin altinda {sum(1 for v in fb if v < 0)}/{len(fb)}")
alt grup n model A taban A fark B taban B fark bolge bati 32 0.9688 1.0000 -0.0312 1.0000 -0.0312 bolge dogu 36 0.6111 0.4722 +0.1389 0.6944 -0.0833 bolge guney 58 0.8793 0.8276 +0.0517 0.8276 +0.0517 bolge kuzey 68 0.7794 0.8235 -0.0441 0.8235 -0.0441 bolge merkez 58 0.6724 0.6552 +0.0172 0.6552 +0.0172 hane 1-2 73 0.7945 0.7534 +0.0411 0.8219 -0.0274 hane 3-4 143 0.7762 0.7692 +0.0070 0.7832 -0.0070 hane 5+ 36 0.7500 0.7222 +0.0278 0.7500 +0.0000 okuma az 85 0.7412 0.7882 -0.0471 0.7647 -0.0235 okuma tam 167 0.7964 0.7425 +0.0539 0.8024 -0.0060 tarife 10 12 0.5833 0.6667 -0.0833 0.6667 -0.0833 n<25 tarife 25 193 0.8290 0.8394 -0.0104 0.8394 -0.0104 tarife 40 47 0.6170 0.4468 +0.1702 0.6170 +0.0000 A en sik sinif : fark -0.0471 .. +0.1702, aciklik 0.2173, tabanin altinda 4/12 B bolge+basamak : fark -0.0833 .. +0.0517, aciklik 0.1351, tabanin altinda 8/12
Doğu bölgesi iki tabanın ayrıldığı yerdir. En sık sınıfa göre model orada tabanı 0,1389 geçiyor ve kursun en iyi katkılarından birini veriyor; bölge ve basamak tablosuna göre tabanın 0,0833 altında kalıyor. Tarife 40 basamağında da aynı şey oluyor: +0,1702 yerine 0,0000. İki sayı da doğru. Fark, birinci tabanın doğu bölgesinin yüksek şüphe oranından habersiz olması, ikincisinin ise o oranı zaten biliyor olmasıdır. Model bir alt grupta ne kattığını, ancak o alt grubu zaten bilen bir tabanla karşılaştırıldığında söyler.
İki özet satırı sonucu veriyor. En sık sınıf tabanına göre model on iki alt grubun dördünde tabanın altında; arama tablosu tabanına göre sekizinde. Fark açıklığı da 0,2173’ten 0,1351’e iniyor. Güçlü taban modelin katkısını hem küçültüyor hem de alt gruplar arasında düzleştiriyor; bu bir kusur değil, tabanın alt grubu zaten hesaba katmasının sonucudur. Hangi tabanın raporlanacağı bu yüzden çalışmanın ne iddia ettiğini belirleyen karardır.
M27’nin Yedi Kursunda Seçilmiş Tabanlar
Yedi kurs boyunca her ders bir taban seçti ve gerekçesini yazdı. Aşağıdaki tablo o seçimleri kaynak derslerden toplar. Birimler ortak değildir ve satırlar birbiriyle toplanmaz.
| Kurs | Seçilen öğrenmeyen yordam | Birim | Örnek sayı |
|---|---|---|---|
| K01 Makine Öğrenmesine Giriş | eğitim kümesinin en sık sınıfı | doğruluk | sınamada 0,7579 |
| K02 Veri Hazırlama ve Öznitelik Mühendisliği | hazırlık kararı uygulanmamış aynı kurulum | doğruluk | 0,7302 ile 0,8294 arası |
| K03 Denetimli Öğrenme | en sık sınıf; bağlanımda ortalamayı söylemek | doğruluk, m³ hata | karşılaştırma çizgileri 0,7857 ve 0,8016 |
| K04 Denetimsiz Öğrenme | rastgele atama, sütun ortalaması, tek küme | küme içi uzaklık, geri kurma hatası | rastgele atama 5,9790 |
| K05 Derin Öğrenme | her veri kümesi için ayrı en sık sınıf | doğruluk | abone 0,7579; ızgara 0,5850; dizi 0,7100 |
| K06 Doğal Dil İşleme ve Bilgisayarla Görme | alana özgü taban | doğruluk, örtüşme, sözlük boyu | oran birimli on iki taban 0,0400 ile 0,8731 arası |
| K07 Pekiştirmeli Öğrenme ve Öneri Sistemleri | rastgele eylem; en çok seçilen kalem | getiri; ilk beş isabeti | 10,432 ve 0,6527 |
Tablodan iki şey okunur. Birincisi, taban çizgisi kurstan kursa tür değiştiriyor: bir sınıfı söylemek, bir ortalamayı söylemek, rastgele davranmak, en çok seçileni önermek, ya da bir kararın uygulanmadığı hâli koymak. İkincisi, K05 ve K06 satırları aynı kurs içinde bile tek bir taban olmadığını gösteriyor: dört ayrı veri kümesi dört ayrı taban. “Taban çizgisini geçti” cümlesi yazıldığında geçilen şey her seferinde başka bir yordamdı, ve bu dersin tablosu o farkın büyüklüğünü veriyor.
Özet
- Taban çizgisi bir araç değil bir tasarım nesnesidir. Aynı derinlik 6 karar ağacı, sekiz taban adayına karşı −0,0119 ile +0,5357 arasında okunuyor; seçimin tek başına oynattığı 0,5476.
- Bir tabanı karmaşıklaştırmak onu güçlendirmez: en sık sınıf, tek bölmeli kural ve bölge arama tablosu aynı 0,7579’u veriyor, çünkü hiçbir bölgede çoğunluk dönmüyor.
- Taban çizgisinin de kapasitesi vardır. Arama tablosu 15 hücrede 0,7897 ile modeli geçiyor, 39 hücrede eğitimde 0,7976’ya çıkarken sınamada 0,7500’e düşüyor: taban da aşırı uyum gösterir.
- Alt gruplarda taban seçimi yön değiştiriyor. Doğu bölgesinde model bir tabana göre +0,1389, öbürüne göre −0,0833. En sık sınıfa göre 12 alt grubun 4’ünde tabanın altında olan model, arama tablosuna göre 8’inde altında; fark açıklığı 0,2173’ten 0,1351’e iniyor.
- M27’nin yedi kursunda taban çizgisi tür değiştirdi ve tek bir kursta bile birden çok taban kullanıldı; “tabanı geçti” cümlesinde geçilen şey her seferinde başka bir yordamdır.
Sonraki Adım
Üç derste on dört ayrı sayı çifti karşılaştırıldı ve hepsinde fark doğrudan okundu: 0,0198, −0,0119, +0,1702. Hiçbirinde sorulmayan şey, bu farkların 252 abonelik bir kümenin gürültüsünden ayırt edilip edilemeyeceğidir. Bir alt grupta 36 aboneden okunan 0,1389’luk bir katkı, birkaç abonenin sınıfı ters dönseydi kaybolabilir. Hipotez sınaması, yeniden karıştırma ve geri koyarak örnekleme M26/K05’te ölçüldü ve tekrarlanmayacak. Sonraki ders yalnız şunu ölçer: iki modelin farkının payı ne kadardır, aynı örneklerde ölçülen eşleştirilmiş karşılaştırma bağımsız karşılaştırmadan ne kadar dar bir pay verir, ve ayrılmış kümenin büyüklüğü o payı nasıl belirler.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.