Begreper & referanser
Alle nøkkelbegrepene, formlene og referansene fra Ubalanserte datasett, samlet på én side. Bruk denne som oppslag når du leser, øver flashcards eller tar quiz.
Begreper
Sentrale begreper fra kapittelet med korte definisjoner.
En klassefordeling der én eller flere klasser har langt færre observasjoner enn de andre.
Å endre hvilke treningsobservasjoner som brukes eller hvor ofte de brukes for å påvirke klassefordelingen.
Å øke representasjonen til en klasse ved å trekke eksisterende eller syntetiske observasjoner flere ganger.
Å redusere antall treningsobservasjoner fra en overrepresentert klasse.
En faktor som lar feil på enkelte klasser bidra mer til tapsfunksjonen.
Å velge beslutningsterskel etter ønsket forhold mellom feiltyper, uten å trene modellen på nytt.
Trening eller beslutning som tar hensyn til at ulike feil kan ha ulik praktisk kostnad.
Formler
Hver formel: hva den heter, hvordan den ser ut, og hva symbolene betyr.
Vektet binary cross-entropy
Klassevektene og lar ulike feiltyper påvirke treningen forskjellig.
Balansert klassevekt
En vanlig balansering gir større vekt til klasser med færre av de observasjonene.
Positiv klasseandel
Klasseandelen beskriver hvor sjelden den positive klassen er før modellen vurderes.
Kostnadsbasert Bayes-terskel
Når sannsynlighetene er kalibrerte, flytter relative feilutgifter den optimale terskelen.
Kodesnutter
Kodesnutter fra kapittelet, vist literal.
Metrikker ved flere terskler
import numpy as np rng = np.random.default_rng(4172)y = np.r_[np.zeros(950, dtype=int), np.ones(50, dtype=int)]score = np.clip(0.12 + 0.50 * y + rng.normal(0, 0.20, y.size), 0, 1) for terskel in (0.30, 0.50, 0.70): pred = (score >= terskel).astype(int) tp = np.sum((pred == 1) & (y == 1)) fp = np.sum((pred == 1) & (y == 0)) fn = np.sum((pred == 0) & (y == 1)) precision = tp / (tp + fp) if tp + fp else 0.0 recall = tp / (tp + fn) if tp + fn else 0.0 print(f"tau={terskel:.2f} precision={precision:.3f} recall={recall:.3f}")Syntetiske sannsynlighetsscorer gjør terskeleffekten synlig uten å endre modellen. Den faste seed-en gir samme tall ved hver kjøring.
Vektet binary cross-entropy fra bunnen
import numpy as np rng = np.random.default_rng(4172)y = np.array([0, 0, 0, 0, 0, 1, 1])p = np.clip(rng.uniform(0.10, 0.90, size=y.size), 1e-12, 1 - 1e-12)vekt = np.where(y == 1, 4.0, 1.0) tap = -(y * np.log(p) + (1 - y) * np.log(1 - p))vektet_tap = np.mean(vekt * tap) print("labels: ", y)print("sannsynlighet:", np.round(p, 3))print("vektet bidrag:", np.round(vekt * tap, 3))print(f"vektet BCE = {vektet_tap:.4f}")Eksemplet viser at klassevekt skalerer tapsbidraget fra positive observasjoner. Det lager ikke nye data og garanterer ikke bedre kalibrering.
Læringsmål
Hva du skal kunne etter å ha lest kapittelet.
- 01Forklare hvorfor accuracy kan være misvisende ved sterk klasseubalanse
- 02Sammenligne oversampling, undersampling, klassevekt og terskeljustering uten datalekkasje
- 03Beregne og tolke vektet tap, balanserte klassevekter og en kostnadsbasert terskel
- 04Velge metrikk og valideringsopplegg ut fra feilkonsekvens og realistisk klassefordeling