Ders 17 / 20
Bağlanım Ölçütleri
Hedef bir sayı olduğunda ölçütün sayımdan uzaklığa geçmesi ve aynı ailenin iki üyesinin üç ölçütte yer değiştirmesi: kare hataya uydurulmuş doğrusal model ortalama kare hatada 22,3164 ile önde, mutlak hataya uydurulmuş olan ortalama mutlak hatada 3,6178 ile önde. Taban çizgisi eğitim ortalamasıdır (19,7665 m³) ve açıklanan değişim oranı tam olarak bu tabana göre tanımlıdır. Sınama kümesinin 13 satırı kare hatanın yüzde 37,59'unu, mutlak hatanın yüzde 17,71'ini taşır; o 13 satır kırpıldığında sıralama iki ölçütte de tersine döner. Denenen aday sayısı üçtür ve hiçbir ayar değişkeni süpürülmemiştir.
İçindekiler
Önceki dört ders ölçütü sınıflandırma için kurdu. Karışıklık matrisi, kesinlik, duyarlılık, eşik ve kalibrasyon — hepsi tek bir işlemden çıktı: saymak. Kaç örnek doğru sınıfa düştü, kaç örnek yanlış olumluya gitti, bir olasılık aralığında kaç örnek gerçekleşti. Sayılabilir bir şey vardı, çünkü tahmin ile gerçek ya çakışıyordu ya çakışmıyordu.
Hedef bir sayı olduğunda çakışma diye bir şey yoktur. 24,80 m³ tüketen bir abone için 24,79 denmesi ile 11,20 denmesi arasındaki fark bir sayım farkı değil bir uzaklık farkıdır ve bu uzaklığın nasıl toplanacağı bir karardır. Bu ders o kararı ölçer: aynı ailenin iki üyesi, aynı ayrılmış kümede, iki ölçütte yer değiştirir.
- MD36. Hedef, abonenin üç döneme yayılan okumalarından hesaplanan ortalama tüketimidir (m³). Küme M27/K01’in kurgu abone tablosudur, tohum 20260218, bölme 756/252/252.
- MD37. Taban çizgisi eğitim kümesinin ortalamasıdır: her satır için aynı sayı söylenir. Sınıflandırmadaki “en sık sınıfı söyle” tabanının bağlanımdaki karşılığı budur ve öğrenmez.
- MD38. Öznitelikler kurs boyunca sabittir: beş bölge göstergesi, hane büyüklüğü, memnuniyet, okuma sayısı ve sıfır okuma göstergesi. Değişen tek şey modeldir.
- MD39. Ortalama mutlak hata (OMH) hataların mutlak değerlerinin ortalaması, ortalama kare hata (OKH) karelerinin ortalamasıdır. OKH hedefin biriminin karesindedir; karekökü alındığında birime döner.
- MD40. Açıklanan değişim oranı (ADO) olarak hesaplanır ve payda MD37’nin tabanıdır. Taban değişirse ADO değişir.
- MD41. İki doğrusal model de aynı öznitelikleri ve aynı biçimi kullanır; ayrıldıkları tek yer eğitim sırasında hangi hatayı küçülttükleridir. İkisi de modeldir.
- MD42. Bu derste denenen aday sayısı üçtür ve hiçbir ayar değişkeni süpürülmemiştir;
ayar bütçesinin şişirdiği fark
07’de ölçülür.
Üç Ölçüt ve Öğrenmeyen Taban
# ORTAK — MODELDIR. M27/K01'in KURGU abone tablosu ayni tohumla yeniden uretilir; # bu derste hedef sinif degil sayidir: ort_tuketim (m3). 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 ort, oyn = sum(v) / len(v), max(v) - min(v) 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), "bolge_ad": k["bolge"][0]} 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:] ALAN = ["b_kuzey", "b_guney", "b_dogu", "b_bati", "b_merkez", "hane", "memnuniyet", "donem", "sifir_okuma"] def omh(t, s): return sum(abs(t[i] - x["ort_tuketim"]) for i, x in enumerate(s)) / len(s) def okh(t, s): return sum((t[i] - x["ort_tuketim"]) ** 2 for i, x in enumerate(s)) / len(s) TABAN = sum(x["ort_tuketim"] for x in EGT) / len(EGT) TABAN_OKH = okh([TABAN] * len(SIN), SIN) def ado(t, s): return 1 - okh(t, s) / TABAN_OKH print(f"egitim {len(EGT)}, dogrulama {len(DOG)}, sinama {len(SIN)}") print(f"egitim ortalamasi {TABAN:.4f} m3, sinama ortalamasi " f"{sum(x['ort_tuketim'] for x in SIN) / len(SIN):.4f} m3") print(f"taban cizgisi: OMH {omh([TABAN] * len(SIN), SIN):.4f} " f"OKH {TABAN_OKH:.4f} ADO {ado([TABAN] * len(SIN), SIN):.4f}")
egitim 756, dogrulama 252, sinama 252 egitim ortalamasi 19.7665 m3, sinama ortalamasi 19.9234 m3 taban cizgisi: OMH 5.0806 OKH 42.6718 ADO 0.0000
Taban çizgisi 19,7665 m³ söylüyor ve ortalama 5,0806 m³ şaşıyor. Aynı hatanın kare olarak toplanmışı 42,6718’dir; karekökü 6,53 m³. İki sayı arasındaki bu boşluk ölçütün kendisinden gelir: kare toplamı, büyük hataları küçük hatalardan daha ağır sayar, bu yüzden hata dağılımı çarpıkken kareli ölçüt mutlak ölçütten büyük bir sayı verir. Tabanın ADO değeri tanım gereği tam sıfırdır — taban, kendisine göre hiçbir değişim açıklamaz.
Tabanın eğitim ortalaması olması bir ayrıntı değil bir zorunluluktur. Sınama kümesinin kendi ortalaması bir tahmin değil, ölçülecek satırlardan okunmuş bir sayıdır; onu taban yapmak sınama kümesine bakmış bir yordamı taban saymak olur. Öğrenmeyen bir yordamın da yalnız eğitim kümesini görmesi gerekir.
Aynı Ailenin İki Üyesi
Model bir doğrusal modeldir: her öznitelik bir katsayıyla çarpılır, toplanır. İki üye arasındaki tek fark eğitim sırasında hangi hatayı küçülttükleridir. Birincisi kare hatayı küçültür ve katsayıları en küçük karelerle çözer. İkincisi mutlak hatayı küçültür; bunu, her turda hatası büyük satırların ağırlığını düşürerek ve aynı çözümü yeniden kurarak yapar.
def coz(A, b): n = len(A) M = [list(A[i]) + [b[i]] for i in range(n)] for i in range(n): p = max(range(i, n), key=lambda r: abs(M[r][i])) M[i], M[p] = M[p], M[i] for r in range(n): if r != i: f = M[r][i] / M[i][i] for c in range(i, n + 1): M[r][c] -= f * M[i][c] return [M[i][n] / M[i][i] for i in range(n)] def agirlikli_ekk(s, agirlik, ceza=1e-6): d = len(ALAN) + 1 A = [[0.0] * d for _ in range(d)] b = [0.0] * d for x, g in zip(s, agirlik): v = [1.0] + [float(x[a]) for a in ALAN] for i in range(d): b[i] += g * v[i] * x["ort_tuketim"] for j in range(d): A[i][j] += g * v[i] * v[j] for i in range(1, d): A[i][i] += ceza return coz(A, b) def kestir(w, x): return w[0] + sum(w[i + 1] * x[a] for i, a in enumerate(ALAN)) def mutlak_uydur(s, tur=40, taban_agirlik=0.05): w = agirlikli_ekk(s, [1.0] * len(s)) for _ in range(tur): g = [1.0 / max(abs(kestir(w, x) - x["ort_tuketim"]), taban_agirlik) for x in s] w = agirlikli_ekk(s, g) return w ORT = {} for x in EGT: ORT.setdefault(x["bolge_ad"], []).append(x["ort_tuketim"]) ORT = {k: sum(v) / len(v) for k, v in ORT.items()} W_KARE, W_MUTLAK = agirlikli_ekk(EGT, [1.0] * len(EGT)), mutlak_uydur(EGT) ADAY = [("taban cizgisi", [TABAN] * len(SIN)), ("bolge ortalamasi", [ORT[x["bolge_ad"]] for x in SIN]), ("kare hataya uydurulmus", [kestir(W_KARE, x) for x in SIN]), ("mutlak hataya uydurulmus", [kestir(W_MUTLAK, x) for x in SIN])] print(f"{'model':<26} {'OMH':>8} {'OKH':>9} {'ADO':>8}") for ad, t in ADAY: print(f"{ad:<26} {omh(t, SIN):>8.4f} {okh(t, SIN):>9.4f} {ado(t, SIN):>8.4f}") for olcut, fn, yon in (("OMH", omh, 1), ("OKH", okh, 1), ("ADO", ado, -1)): s = sorted(ADAY[1:], key=lambda p: yon * fn(p[1], SIN)) print(f"{olcut} siralamasi: " + ", ".join(f"{i + 1}) {a}" for i, (a, _) in enumerate(s)))
model OMH OKH ADO taban cizgisi 5.0806 42.6718 0.0000 bolge ortalamasi 4.0374 28.7760 0.3256 kare hataya uydurulmus 3.6504 22.3164 0.4770 mutlak hataya uydurulmus 3.6178 22.3987 0.4751 OMH siralamasi: 1) mutlak hataya uydurulmus, 2) kare hataya uydurulmus, 3) bolge ortalamasi OKH siralamasi: 1) kare hataya uydurulmus, 2) mutlak hataya uydurulmus, 3) bolge ortalamasi ADO siralamasi: 1) kare hataya uydurulmus, 2) mutlak hataya uydurulmus, 3) bolge ortalamasi
Son üç satır dersin yanıtıdır. Ortalama mutlak hata mutlak hataya uydurulmuş modeli birinci sırada okuyor: 3,6178’e karşı 3,6504, arada 0,0326 m³. Ortalama kare hata başka bir modeli birinci sırada okuyor: 22,3164’e karşı 22,3987, arada 0,0823. Üç aday, iki ölçüt, iki ayrı birinci. Hiçbir hesap yanlış değildir; iki ölçüt aynı hata listesini iki ayrı biçimde topluyor ve iki ayrı sıralama üretiyor.
Bölge ortalaması her iki ölçütte de üçüncüdür ve tabanı ikisinde de açık farkla geçiyor. Ailenin kattığı farkın büyük bölümü orada: taban 42,6718’den bölge ortalaması 28,7760’a düşüyor, doğrusal model 22,3164’e indiriyor. Bölge tek başına açıklanan değişimin 0,3256’sını, kalan sekiz öznitelik 0,1514’ünü veriyor.
İki doğrusal modelin OKH farkı 0,0823’tür. Karekökleri alındığında bu 4,7240 m³ ile 4,7327 m³ demektir; iki modelin tipik şaşması 0,0087 m³ ayrılıyor. Ölçütün ham değeri hedefin biriminin karesinde olduğu için 0,0823 gözle büyük görünür, oysa birime döndürüldüğünde ortalama mutlak hatadaki 0,0326’lık farkla aynı büyüklük sınıfındadır. Kareli bir ölçütü yorumlamadan önce karekökünü almak, farkın gerçek ölçeğini görmenin en ucuz yoludur.
Hangi Ölçüt Hangi Hatayı Ağırlıklandırıyor
Yer değiştirmenin kaynağı, iki ölçütün büyük hatalara verdiği ağırlıktır. Bunu ölçmenin yolu, hataları büyükten küçüğe sıralayıp toplamın hangi payının hangi satırlardan geldiğini saymaktır.
HATA = {ad: sorted((abs(t[i] - x["ort_tuketim"]) for i, x in enumerate(SIN)), reverse=True) for ad, t in ADAY[2:]} print(f"{'model':<26} {'top13 OMH':>10} {'top13 OKH':>10} " f"{'yari OMH':>9} {'yari OKH':>9}") for ad, h in HATA.items(): def yarisi(fn): toplam, birikim, sayac = sum(fn(q) for q in h), 0.0, 0 for q in h: birikim, sayac = birikim + fn(q), sayac + 1 if 2 * birikim >= toplam: return sayac print(f"{ad:<26} {sum(h[:13]) / sum(h):>10.4f} " f"{sum(q * q for q in h[:13]) / sum(q * q for q in h):>10.4f} " f"{yarisi(lambda q: q):>9} {yarisi(lambda q: q * q):>9}") buyuk = sorted(range(len(SIN)), key=lambda i: -abs(ADAY[2][1][i] - SIN[i]["ort_tuketim"]))[:13] kalan = [i for i in range(len(SIN)) if i not in set(buyuk)] alt = [SIN[i] for i in kalan] print(f"\n13 satir kirpildiktan sonra ({len(alt)} satir)") for ad, t in ADAY[2:]: kt = [t[i] for i in kalan] print(f"{ad:<26} OMH {omh(kt, alt):.4f} OKH {okh(kt, alt):.4f}") print(f"kirpilan 13 satirin gercek degerleri: " f"{[SIN[i]['ort_tuketim'] for i in buyuk[:4]]}")
model top13 OMH top13 OKH yari OMH yari OKH kare hataya uydurulmus 0.1771 0.3759 58 22 mutlak hataya uydurulmus 0.1838 0.3962 57 21 13 satir kirpildiktan sonra (239 satir) kare hataya uydurulmus OMH 3.1674 OKH 14.6846 mutlak hataya uydurulmus OMH 3.1186 OKH 14.3617 kirpilan 13 satirin gercek degerleri: [43.48, 39.49, 36.53, 32.18]
Sınama kümesinin 252 satırından 13’ü, yani yüzde beşi, kare hatanın yüzde 37,59’unu taşıyor; aynı 13 satır mutlak hatanın yalnız yüzde 17,71’ini taşıyor. Aynı ayrım toplamın yarısında da görünür: mutlak hatanın yarısı 58 satıra dağılmışken kare hatanın yarısı 22 satırda toplanıyor. Kare ölçütü 252 satırlık bir kümede etkin olarak yirmi küsur satırdan okunur.
Bu 13 satır kırpıldığında sıralama iki ölçütte de tersine döner: mutlak hataya uydurulmuş model hem OMH’de (3,1186’ya karşı 3,1674) hem OKH’de (14,3617’ye karşı 14,6846) öne geçiyor. Kare hataya uydurulmuş modelin bütün OKH üstünlüğü, kırpılan o 13 satırdadır. Kırpılan satırların gerçek değerleri 43,48, 39,49, 36,53, 32,18 m³ — kümenin en yüksek tüketimleri. Kare hatayı küçülten model bu uçları kovalamak için kalan 239 satırda biraz daha çok şaşmayı göze alıyor; mutlak hatayı küçülten model tersini yapıyor.
Buradan çıkan karar ölçüt seçiminin bir bedel kararı olduğudur. Bir kaçak şüphesi kümesinde tek bir abonenin 18 m³ şaşması ile on abonenin 1,8 m³ şaşması aynı saha maliyetini üretmiyorsa, iki durumu aynı sayıya toplayan bir ölçüt yanlış modeli seçtirir.
Açıklanan Değişim Oranı Üçüncü Bir Sıralama Vermez
ADO sütunu OKH sütunuyla birebir aynı sıralamayı veriyor ve bu bir rastlantı değildir. Tanım ; payda bütün modeller için aynı sabittir (42,6718). Sabit bir sayıya bölmek sıralamayı değiştiremez. ADO üçüncü bir ölçüt değil, kare hatanın tabana göre okunmuş biçimidir: 1 − 22,3164 / 42,6718 = 0,4770.
Kattığı şey sıralama değil, birim. OKH 22,3164 tek başına büyük mü küçük mü söylemez; ADO 0,4770 aynı sayıyı “tabanın hatasının yarısına yakınını sildi” diye okur. Bu yüzden ADO yazılırken hangi tabana göre hesaplandığı da yazılmalıdır. Burada taban eğitim kümesinin ortalamasıdır. Payda sınama kümesinin kendi ortalamasından hesaplansaydı 42,6471 olurdu ve ADO 0,4770 yerine 0,4767 çıkardı; fark küçüktür, çünkü iki ortalama birbirine yakındır (19,7665’e karşı 19,9234). Eğitim ve sınama ortalamaları uzak düştüğünde bu fark küçük kalmaz ve iki ADO değeri karşılaştırılamaz hale gelir.
Denenen aday sayısı bu derste üçtür: bölge ortalaması, kare hataya uydurulmuş doğrusal model,
mutlak hataya uydurulmuş doğrusal model. Hiçbirinde bir ayar değişkeni süpürülmedi, dolayısıyla
tablodaki hiçbir sayıda arama şişmesi yoktur. Aynı tablonun bütçe altında nasıl değiştiği 07’nin
konusudur.
Özet
- Hedef bir sayı olduğunda ölçüt sayımdan uzaklığa geçer ve uzaklığın nasıl toplanacağı bir karardır; taban çizgisi eğitim ortalamasıdır (19,7665 m³; OMH 5,0806, OKH 42,6718).
- Aynı ailenin iki üyesi iki ölçütte yer değiştirir: mutlak hataya uydurulmuş model OMH’de 3,6178 ile, kare hataya uydurulmuş model OKH’de 22,3164 ile birincidir.
- Sınama kümesinin 13 satırı kare hatanın yüzde 37,59’unu, mutlak hatanın yüzde 17,71’ini taşır; kare hatanın yarısı 22, mutlak hatanın yarısı 58 satırdan gelir.
- O 13 satır kırpıldığında sıralama iki ölçütte de tersine döner (3,1186’ya karşı 3,1674 ve 14,3617’ye karşı 14,6846); kare ölçütünün üstünlüğünün tamamı o satırlardadır.
- Açıklanan değişim oranı üçüncü bir sıralama üretmez; paydası bütün modeller için sabit olduğundan ortalama kare hatanın tabana göre okunmuş biçimidir ve tabansız yazılamaz.
Sonraki Adım
Bu dersin bütün sayıları tek bir bölmeden okundu: 756 satır eğitim, 252 satır sınama. İki doğrusal model arasındaki fark OMH’de 0,0326, OKH’de 0,0823 çıktı. Bunlar küçük sayılardır ve şu ana kadar yanlarında hiçbir dalgalanma ölçüsü yok — başka bir bölme aynı sıralamayı verir miydi, bilinmiyor. Sonraki ders bölmenin kendisini bir ayar olarak ele alır: elde kalan veri kaç kata bölünürse kestirim ne kadar oynar, kat sayısı büyüdükçe kaç eğitim yapılır ve her katta tek satır bırakan uçtaki seçim niçin her zaman daha iyi değildir.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.