Ders 05 / 11
Olasılıksal Kümeleme
Bir noktanın her kümeye bir sorumluluk payıyla bağlandığı karışım modelinin ölçülmesi: rastgele atama tabanının uyum puanı -4,2424, yinelemeli kestirimin bulduğu modelinki -3,7755, fark +0,4669. Aynı fark sütun içi karıştırılmış kümede +0,3358 çıkıyor, yani farkın yalnız +0,1311'i veriden geliyor. 756 noktanın 74'ünde en büyük pay 0,60'ın altında ve bu noktalarda ortalama en büyük pay 0,5418. Sert atamaya geçildiğinde ortalama belirsizlik 0,3797'den sıfıra düşüyor ve küme büyüklükleri yumuşak kütleden 28,8 noktaya kadar sapıyor. İkinci bir başlangıçta kararsız noktaların yüzde 43,24'ü, kesin noktaların yüzde 7,20'si küme değiştiriyor.
İçindekiler
Önceki dersin yordamı bir noktayı ya bir kümeye yazıyor, ya sınıra koyuyor, ya da dışarıda bırakıyordu. Üç durum da kesindi ve karar defterinde yalnız sonuç duruyordu. İki yoğun bölgenin tam ortasına düşen bir abone ile bir kümenin göbeğinde duran abone aynı biçimde kaydediliyor, kararın ne kadar zor verildiği hiçbir yere yazılmıyordu. Aynı şey merkez temelli ve hiyerarşik bölmeleme için de geçerliydi: çıktı bir küme numarasıydı, bir güven derecesi değil.
Bu ders atamayı bir sayıya çevirir. Her nokta her kümeye bir sorumluluk payıyla bağlanır, bir noktanın payları toplamı bire eşittir ve payların birbirine yakın olması o noktanın kararsızlığını doğrudan ölçer. Bunun için kümeler artık merkez listeleri değil, kendi merkezi ve kendi değişkenliği olan bileşenler olarak yazılır; kümenin tamamı bu bileşenlerin bir karışım modelidir. Ölçülecek iki şey vardır: model rastgele bir atamayı ne kadar geçiyor, ve yumuşak atamanın taşıdığı bilgi sert atamaya inilince ne kadar kayboluyor.
- KU37. Küme M27/K01–K03’ten gelen kurgu abone tablosunun 756 satırlık eğitim payıdır, tohum 20260218. Etiket sütunu bu derste de bir kenarda durur.
- KU38. Üç sürekli sütun kullanılır: ortalama tüketim, oynaklık ve kişi başına tüketim. Tamsayı değerli sütunlar dışarıda bırakılır, çünkü bir bileşen tek bir tamsayı değerine çökebilir ve o sütundaki değişkenliği sıfıra indirebilir.
- KU39. Her bileşen bir ağırlık, sütun başına bir merkez ve sütun başına bir değişkenlikle tanımlanır. Sütunlar arası bağımlılık modellenmez; bu bir model kararıdır ve bileşenlerin eksen hizalı olmasını gerektirir.
- KU40. Değişkenliğe 0,02 alt sınırı konur. Alt sınır olmadan bir bileşen tek bir noktaya çökebilir, o noktadaki yoğunluk sınırsız büyür ve uyum puanı anlamını yitirir. Sınır ölçekli sütunlarda birim değişkenliğin ellide biridir.
- KU41. Uyum puanı, modelin bir noktaya verdiği yoğunluğun doğal logaritmasının nokta başına ortalamasıdır. Yüksek olan daha iyidir ve puan yalnız aynı sütun kümesi üzerinde karşılaştırılabilir.
- KU42. Taban çizgisi rastgele atamadır: noktalar üç gruba rastgele dağıtılır ve parametreler o dağıtımdan hesaplanır. Bu taban seçilir, çünkü aynı model biçimini ve aynı parametre sayısını kullanır; aradaki fark yalnız atamadan gelir, model ailesinden değil.
- KU43. Küme sayısı üçtür ve bir ayar değişkenidir; seçiminin gerekçesi ve seçimin ne kadar keyfi olduğu konunun kapanış dersinde ölçülür.
- KU44. Yapısız başvuru önceki dersteki gibi sütun içi yeniden karıştırmayla kurulur; M26/K05’in aracıdır ve sınama kuramı tekrarlanmaz.
Bileşenlerin Karışımı
Model şudur: kümedeki her nokta, üç bileşenden birinden gelmiş sayılır ama hangisinden geldiği kaydedilmemiştir. Her bileşen bir ağırlık taşır (o bileşenden gelen noktaların payı) ve her sütun için bir merkez ile bir değişkenlik tutar. Bileşenin bir noktaya verdiği yoğunluk merkezden uzaklaştıkça hızla söner:
Bir noktanın bir bileşene bağlanma payı, o bileşenin katkısının toplam katkıya oranıdır:
Parametreler bilinmediği için paylar hesaplanamaz, paylar bilinmediği için parametreler hesaplanamaz. Yinelemeli kestirim bu döngüyü kırar: bir tarafı geçici olarak sabitler, öbürünü hesaplar, sonra yer değiştirir. Her tur uyum puanını artırır ya da yerinde bırakır; ulaştığı yer başlangıca bağlıdır.
# karisim.py — MODELDIR. M27/K01–K03'un KURGU abone tablosu ayni tohumla uretilir; # etiket sutunu bu kursta da bir kenarda durur. import math import statistics TOHUM, HAM, M32 = 20260218, 1400, 0xFFFFFFFF BOLGE = [(0.28, 21), (0.22, 17), (0.18, 26), (0.14, 14), (0.18, 23)] 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[0] 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((10001 + i, b[1], hane, memnun)) for no, taban, hane, memnun in ABONE: 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( taban * math.exp((r() + r() + r() - 1.5) * 0.62) * (1 - d * 0.05) * 100 + 0.5) / 100) r() if v: ort = round(sum(v) / len(v), 2) VERI.append({"ort_tuketim": ort, "oynaklik": round(max(v) - min(v), 2), "kisi_basi": round(ort / hane, 3)}) SEC = ["ort_tuketim", "oynaklik", "kisi_basi"] 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] EGT = karistir(VERI, TOHUM + 90000)[:756] OLCEK = {a: (statistics.fmean(x[a] for x in EGT), statistics.pstdev([x[a] for x in EGT])) for a in SEC} P = [[(x[a] - OLCEK[a][0]) / OLCEK[a][1] for a in SEC] for x in EGT] K, ALT = 3, 0.02 # kume sayisi ve degiskenlik alt siniri def parametre(P, uye, k): # MODELDIR: agirlik, merkez, degiskenlik A, M, V = [], [], [] for c in range(k): w = [u[c] for u in uye] t = sum(w) + 1e-9 m = [sum(w[i] * P[i][d] for i in range(len(P))) / t for d in range(len(P[0]))] V.append([max(sum(w[i] * (P[i][d] - m[d]) ** 2 for i in range(len(P))) / t, ALT) for d in range(len(P[0]))]) A.append(t / len(P)) M.append(m) return A, M, V def sorumluluk(P, A, M, V): # yumusak atama ve uyum puani R, top = [], 0.0 for x in P: g = [math.log(A[c]) + sum(-0.5 * (math.log(2 * math.pi * V[c][d]) + (x[d] - M[c][d]) ** 2 / V[c][d]) for d in range(len(x))) for c in range(len(A))] b = max(g) s = sum(math.exp(u - b) for u in g) top += b + math.log(s) R.append([math.exp(u - b) / s for u in g]) return R, top / len(P) def rastgele_uyelik(n, k, tohum): # TABAN CIZGISI: rastgele atama r, U = uretec(tohum), [] for _ in range(n): c = int(r() * k) U.append([1.0 if j == c else 0.0 for j in range(k)]) return U def kestir(P, k, tohum, tur=80): # MODELDIR: yinelemeli kestirim U = rastgele_uyelik(len(P), k, tohum) for _ in range(tur): U, puan = sorumluluk(P, *parametre(P, U, k)) return U, puan def sutun_karistir(P, tohum): Y = [list(x) for x in P] for s in range(len(P[0])): for i, j in enumerate(karistir(list(range(len(P))), tohum + s * 17)): Y[i][s] = P[j][s] return Y def taban_puani(P, k, tohum): return sorumluluk(P, *parametre(P, rastgele_uyelik(len(P), k, tohum), k))[1] U, PUAN = kestir(P, K, TOHUM + 120000) TABAN = taban_puani(P, K, TOHUM + 120000) YAP = sutun_karistir(P, TOHUM + 610000) # KURGU: sutun ici yeniden karistirma _, YPUAN = kestir(YAP, K, TOHUM + 120000) YTABAN = taban_puani(YAP, K, TOHUM + 120000) print(f"nokta {len(P)}, sutun {len(SEC)}, bilesen {K}") print(f"{'kume':<16}{'taban cizgisi':>15}{'karisim modeli':>16}{'fark':>10}") print(f"{'veri':<16}{TABAN:>15.4f}{PUAN:>16.4f}{PUAN - TABAN:>+10.4f}") print(f"{'karistirilmis':<16}{YTABAN:>15.4f}{YPUAN:>16.4f}{YPUAN - YTABAN:>+10.4f}") print(f"veriden gelen pay {(PUAN - TABAN) - (YPUAN - YTABAN):+.4f}")
nokta 756, sutun 3, bilesen 3 kume taban cizgisi karisim modeli fark veri -4.2424 -3.7755 +0.4669 karistirilmis -4.2443 -3.9085 +0.3358 veriden gelen pay +0.1311
Rastgele atama tabanı -4,2424, karışım modeli -3,7755, fark +0,4669. Taban çizgisi burada bilinçli olarak zor seçilmiştir: rastgele atama da üç bileşen kurar, aynı sayıda parametre hesaplar ve aynı yoğunluk biçimini kullanır. Tek eksiği, hangi noktanın hangi bileşene ait olduğunu öğrenmemesidir. Böylece fark model ailesinden değil, yalnız atamadan gelir.
İkinci satır bu farkın ne kadarının veriden geldiğini söyler. Sütunları kendi içinde karıştırılan kümede aynı yordam +0,3358 kazanıyor. Yani kazancın yaklaşık dörtte üçü, sütunlar arasında hiçbir ilişki kalmadığında bile duruyor. Sebep açıktır: üç bileşen, tek bir bileşenin yakalayamayacağı çarpık ve uzun kuyruklu bir dağılımı eksen eksen daha iyi sarar; bu, verideki küme yapısı hakkında hiçbir şey söylemez, modelin esnekliği hakkında bir şey söyler. Sütunlar arası yapıya düşen pay +0,1311, yani toplam farkın yaklaşık yüzde yirmi sekizi. Kursun sorusu tam burada karşılığını buluyor: fark ölçütten mi veriden mi geliyor sorusunun yanıtı çoğu zaman “ikisinden de” olur ve payları ayırmadan sayı okunamaz.
Yumuşak Atamanın Taşıdığı Belirsizlik
Sorumluluk payı, sert atamanın atmak zorunda olduğu bilgiyi tutar. Bir noktanın payları ise atama kesindir; ise atama bir seçimdir ve seçimin ne kadar ince olduğu paylarda yazılıdır. Belirsizliği tek sayıya indirmek için payların doğal logaritmayla ağırlıklı toplamı kullanılır; bu sayı tek bir paya bütün ağırlık verildiğinde sıfır, paylar eşit dağıldığında en büyük değerine ulaşır.
def belirsizlik(r): return -sum(p * math.log(p) for p in r if p > 1e-12) SERT = [max(range(K), key=lambda c: r[c]) for r in U] kars = [i for i, r in enumerate(U) if max(r) < 0.60] A, _, _ = parametre(P, U, K) print(f"en buyuk sorumluluk payi 0.60'in altinda olan nokta {len(kars)}; " f"bu noktalarda ortalama en buyuk pay {sum(max(U[i]) for i in kars) / len(kars):.4f}") print(f"ilk iki payi 0.10'dan yakin {sum(1 for r in U if sorted(r)[-1] - sorted(r)[-2] < 0.10)}" f"; en buyuk payi 0.99 ve ustu {sum(1 for r in U if max(r) >= 0.99)}") print(f"ortalama belirsizlik: yumusak atamada " f"{sum(belirsizlik(r) for r in U) / len(U):.4f}, sert atamada 0.0000, " f"ust sinir {math.log(K):.4f}") print(f"{'kume':<8}{'yumusak kutle':>15}{'sert sayim':>12}{'fark':>8}") for c in range(K): print(f"{c:<8}{A[c] * len(P):>15.1f}{SERT.count(c):>12}" f"{SERT.count(c) - A[c] * len(P):>+8.1f}")
en buyuk sorumluluk payi 0.60'in altinda olan nokta 74; bu noktalarda ortalama en buyuk pay 0.5418 ilk iki payi 0.10'dan yakin 28; en buyuk payi 0.99 ve ustu 94 ortalama belirsizlik: yumusak atamada 0.3797, sert atamada 0.0000, ust sinir 1.0986 kume yumusak kutle sert sayim fark 0 217.8 189 -28.8 1 200.3 213 +12.7 2 337.9 354 +16.1
Eşik 0,60 seçilmiştir, çünkü üç bileşende eşit dağılım 0,3333 eder ve 0,60’ın altındaki bir en büyük pay, o noktanın ağırlığının çoğunluğunun tek bir kümede toplanmadığı anlamına gelir. 756 noktanın 74’ü bu durumdadır ve bu noktalarda en büyük pay ortalama 0,5418. Yirmi sekiz noktada ilk iki pay birbirinden 0,10’dan az farklıdır — bu noktalarda sert atamanın seçtiği küme ile ikinci sıradaki küme neredeyse eşit haklıdır. Öbür uçta 94 nokta 0,99 ve üstü bir payla tek bir kümeye bağlıdır.
Ortalama belirsizlik yumuşak atamada 0,3797, üst sınırı 1,0986. Sert atamaya geçildiğinde bu sayı tanım gereği sıfıra düşer: her nokta tek bir kümeye tam ağırlıkla yazılır ve 74 noktanın kararsız olduğu bilgisi tabloda kalmaz. Kaybın somut karşılığı küme büyüklüklerindedir. Yumuşak atamada birinci kümenin kütlesi 217,8 nokta ederken sert atama o kümeye 189 nokta yazar; aradaki 28,8 noktalık sapma, sınırdaki noktaların tamamının bir tarafa yuvarlanmasından gelir. Kümelerin göreli büyüklüğüne dayanan her karar bu yuvarlamayı devralır.
Payların Sınanması
Buraya kadar sorumluluk payının anlamlı olduğu varsayıldı. Bu sınanabilir bir iddiadır: pay gerçekten kararın zorluğunu ölçüyorsa, kararsız noktalar koşullar biraz değiştiğinde küme değiştirmeli, kesin noktalar değiştirmemelidir. Değiştirilecek koşul hazırdır — yinelemeli kestirim başlangıca duyarlıdır ve konunun ikinci dersi bunu merkez temelli bölmelemede ölçmüştü. İkinci bir başlangıçla koşulan model, kümeler merkezleri üzerinden eşleştirildikten sonra birinciyle karşılaştırılır.
U2, PUAN2 = kestir(P, K, TOHUM + 555000) _, M, _ = parametre(P, U, K) _, M2, _ = parametre(P, U2, K) ESLE = [min(range(K), key=lambda c: math.dist(M2[j], M[c])) for j in range(K)] SERT2 = [ESLE[max(range(K), key=lambda c: r[c])] for r in U2] degisen = [i for i in range(len(P)) if SERT[i] != SERT2[i]] kesin = [i for i, r in enumerate(U) if max(r) >= 0.90] dk = sum(1 for i in degisen if max(U[i]) < 0.60) de = sum(1 for i in degisen if max(U[i]) >= 0.90) print(f"ikinci baslangicin uyum puani {PUAN2:.4f} (birincisi {PUAN:.4f}); " f"kume eslestirmesi {ESLE}") print(f"kume degistiren nokta {len(degisen)} / {len(P)}") print(f"kararsiz noktalarda degisim {dk}/{len(kars)} = {dk / len(kars):.4f}") print(f"kesin noktalarda (pay >= 0.90) degisim {de}/{len(kesin)} = {de / len(kesin):.4f}")
ikinci baslangicin uyum puani -3.7827 (birincisi -3.7755); kume eslestirmesi [1, 0, 2] kume degistiren nokta 125 / 756 kararsiz noktalarda degisim 32/74 = 0.4324 kesin noktalarda (pay >= 0.90) degisim 29/403 = 0.0720
İki koşum farklı yerlerde duruyor: uyum puanları -3,7755 ve -3,7827. Aradaki fark küçüktür ama bölmeleme farkı küçük değildir — 756 noktanın 125’i küme değiştiriyor. Bu, yalnız uyum puanına bakarak “model yakınsadı” demenin yeterli olmadığını gösterir.
Asıl sayı ayrışmadadır. Kararsız 74 noktanın 32’si, yani yüzde 43,24‘ü küme değiştiriyor. Payı 0,90 ve üstü olan 403 noktanın ise yalnız **29’u**, yüzde 7,20’si. Oran altı katın üzerinde. Sorumluluk payı, hesaplandığı modelin dışında bir şeyi doğru kestiriyor: bir noktanın atamasının ne kadar kırılgan olduğunu. Sert atama bu bilgiyi taşımaz — bir küme numarası, yüzde 43 ihtimalle değişecek bir numara ile yüzde 7 ihtimalle değişecek bir numarayı aynı biçimde gösterir.
Özet
- Karışım modeli kümeleri merkez ve değişkenlikle tanımlanan bileşenler olarak yazar; her nokta her bileşene bir sorumluluk payıyla bağlanır ve paylar toplamı birdir.
- Rastgele atama tabanı -4,2424, modelin uyum puanı -3,7755, fark +0,4669; taban aynı model biçimini ve aynı parametre sayısını kullandığı için fark yalnız atamadan gelir.
- Aynı fark sütun içi karıştırılmış kümede +0,3358 çıkıyor; sütunlar arası yapıya düşen pay +0,1311, yani toplam farkın yaklaşık yüzde yirmi sekizi. Geri kalanı modelin esnekliğidir.
- 756 noktanın 74’ünde en büyük pay 0,60’ın altında (ortalama 0,5418) ve 28 noktada ilk iki pay 0,10’dan yakın. Sert atamaya geçince ortalama belirsizlik 0,3797’den sıfıra düşer ve bir kümenin sayımı yumuşak kütlesinden 28,8 nokta sapar.
- Sorumluluk payı modelin dışında da bir şey ölçüyor: ikinci bir başlangıçta kararsız noktaların yüzde 43,24’ü, kesin noktaların yüzde 7,20’si küme değiştiriyor.
Sonraki Adım
Bu derste küme sayısı üç alındı ve bu seçim gerekçelendirilmedi. Önceki üç derste de benzer seçimler yapıldı: kaç küme, hangi kesme yüksekliği, hangi komşuluk yarıçapı. Her seferinde seçimin sonucu oynattığı gösterildi ama seçimin kendisinin nasıl yapılacağı ertelendi. Konunun kapanış dersi bu soruyu alır ve yanıtın olmadığını sayıyla gösterir: aynı veri üzerinde üç ayrı iç geçerlilik ölçütü üç ayrı küme sayısı seçer, hiçbiri diğerinden daha doğru değildir, ve tümüyle rastgele üretilmiş yapısız bir kümede aynı üç ölçüt yine bir küme sayısı seçer. Ardından etiket, bu kursta ilk ve tek kez, dış geçerlilik için açılır ve etiketin işaret ettiği küme sayısıyla iç ölçütlerin seçtiklerinin uyuşmadığı sayılır.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.