Data Science · Klinik Klinische Datenanalyse & Machine Learning
Ansicht
Lerntiefe
Codeansicht
Farbschema

24 · Workflow für Prädiktionsmodelle und Data Leakage

split_validierung.svg

Abbildung · Quellcode

split_validierung

Erzeugt von split_validierung() in lib/diagrams.py, Zeile 339–377.

Python
def split_validierung() -> str:
    b = [eyebrow(40, 40, "Aufteilen · validieren · kein Leak")]
    # Split-Balken
    bx, by, bw, bh = 40, 92, 680, 46
    parts = [("Training", 0.6, T["acct"], T["acc2"]), ("Validierung", 0.2, T["okt"], T["ok"]),
             ("Test", 0.2, T["soft"], T["mut"])]
    x = bx
    for lab, frac, fill, fg in parts:
        w = bw * frac
        b.append(rect(x, by, w - 4, bh, r=8, fill=fill))
        b.append(txt(x + w / 2 - 2, by + 21, lab, size=12, fill=fg, w=600, anchor="middle"))
        b.append(txt(x + w / 2 - 2, by + 37, f"{int(frac*100)} %", size=10.5, fill=fg, anchor="middle"))
        x += w
    b.append(txt(bx, by - 12, "Ein Datensatz, drei disjunkte Teile", size=11, fill=T["mut"]))
    # k-fold-Streifen
    fy = by + bh + 44
    b.append(txt(bx, fy - 12, "5-fache Kreuzvalidierung", size=11.5, fill=T["ink"], w=600))
    folds = 5
    fw = (bw - (folds - 1) * 8) / folds
    for r in range(3):
        ry = fy + r * 24
        for k in range(folds):
            fx = bx + k * (fw + 8)
            val = k == r
            b.append(rect(fx, ry, fw, 18, r=4,
                          fill=T["acct"] if val else T["soft"]))
            if val:
                b.append(txt(fx + fw / 2, ry + 13, "Val", size=9.5, fill=T["acc2"], w=600, anchor="middle"))
    b.append(txt(bx + bw + 0, fy + 6, "", size=10))
    # Leakage-Hinweis
    ly = fy + 3 * 24 + 30
    b.append(rect(bx, ly, bw, 40, r=10, fill=T["warnt"]))
    b.append(rect(bx, ly, 3, 40, r=0, fill=T["warn"]))
    b.append(txt(bx + 18, ly + 17, "Leakage vermeiden", size=11.5, fill=T["warn"], w=700))
    b.append(txt(bx + 18, ly + 32, "Skalierung, Imputation und Selektion nur auf dem Training fitten, nie vor dem Split.",
                 size=11, fill=T["ink2"]))
    return canvas(760, ly + 60, "".join(b),
                  "Datenaufteilung in Training, Validierung und Test; 5-fache Kreuzvalidierung rotiert den "
                  "Validierungsblock; Vorverarbeitung wird nur auf dem Training gefittet, um Data Leakage zu vermeiden.")

← zurück zu Modul 24 · vollständige Datei ansehen