Supervised learning: model family, interface, framework
Explanation
Magyarázat
Hajdu Csaba, 2026
Supervised learning: model family, interface, framework
Regressziós és osztályozó eljárások képlettel és mért összevetéssel, a scikit-learn felülete és a csővezeték mint szivárgásvédelem, végül a PyTorch — annak mérésével, hogy a keretrendszer nem más matematika, csak automatikus deriválás.
Hajdu Csaba, 2026
The semester
Nincs legjobb algoritmus — csak az a kérdés, milyen alakot engedünk meg
Ez a lecke eszköztár, nem hét — ugyanúgy, mint a statisztikai eszköztár. Arról szól, ami a négy hétben és mindhárom projektmodulban közös: hogyan lesz adatból modell. Az első blokk a regresszió. A tétel, amiből indulunk, kellemetlen: nincs legjobb algoritmus. Ami van, az a döntés arról, milyen alakú összefüggést engedünk meg — és ez a döntés a mi felelősségünk, nem a könyvtáré.
Párokból függvényt, amely az ÚJ adaton is működik. A „jó” meghatározása a mi dolgunk, nem az adaté.
A feladat rövid: adott bemenet-kimenet párokból keresünk egy függvényt, amelyik az ÚJ bemenetre is jó kimenetet ad. Két szó a fontos. Az egyik az új: a tanítóadaton mért hiba senkit nem érdekel, mert azt a modell meg tudja tanulni kívülről. A másik a jó: ehhez meg kell mondani, mit jelent a hiba — és ez a veszteségfüggvény, amit mi választunk, nem az adat.
Az oldalsó rajz az `ml-regresszio` demóé. Az első oszlop az alapvonal: mindig az átlagot mondani. Amelyik modell ezt nem veri meg, az nem modell, hanem díszítés — és ez a mérés az első, amit el kell végezni, mielőtt bármelyik eljárásról beszélnénk.
Amit minimalizálunk, az a MINTÁN mért hiba. Amit szeretnénk, az a valódi eloszláson mért hiba. A kettő közti rés a teljes téma.
Az ℱ halmaz a modellcsalád: a lineáris regressziónál az egyenesek, a fánál a tengelypárhuzamos dobozok, a kNN-nél a lokális átlagok. A választásunk tehát nem „melyik algoritmus jobb”, hanem „melyik HALMAZBAN keressük a függvényt”.
A képlet zárójele is döntés: ha ℱ túl szűk, a legjobb elem sem elég jó — ez az alulillesztés. Ha túl tág, a minimum a minta zajára áll rá — ez a túlillesztés. A 8. hét torzítás-szórás blokkja pontosan ezt a két tagot méri szét.
Regresszióaz a felügyelt tanulási feladat, amelyben a címke FOLYTONOS szám, és a modell ennek a feltételes várható értékét — vagy egy másik feltételes jellemzőjét, például a mediánját — becsüli a jellemzők függvényében.
az egyedi eltérést a maradék hordozza
A meghatározás a dián áll, és egy szó benne a lényeges: folytonos. A regresszió kimenete szám, nem kategória — hozam tonnában, nedvesség százalékban, ár forintban. És még egy dolgot érdemes észben tartani: amit a regresszió becsül, az a FELTÉTELES várható érték. Nem azt mondja meg, mennyi lesz a hozam, hanem azt, hogy ilyen körülmények mellett átlagosan mennyi szokott lenni. A kettő különbsége az, ami a bizonytalansági sávban megjelenik.
A veszteségfüggvény és a becsült mennyiség összetartozik, és ezt a legtöbb bevezető elhallgatja. Aki négyzetes hibára illeszt, az az átlagot becsüli, tehát a kiugró értékek elhúzzák; aki abszolút hibára, az a mediánt, tehát nem. Ez ugyanaz a különbség, amit a statisztikai eszköztár az átlag és a medián robusztusságánál mért.
A ridge zsugorít, a lasso VÁLOGAT. A különbség nem az erősségben van, hanem abban, hogy melyik visz együtthatót pontosan nullára.
A zárt alak ortonormált tervmátrixra igaz; általános X-nél iterációval oldjuk meg. A gondolat viszont ugyanaz marad, és a két képlet alakja pontosan megmutatja a különbséget: az osztás sosem ad nullát, a levágás igen.
A büntetés csak akkor jelent ugyanannyit minden együtthatóra, ha a jellemzők azonos skálán vannak — különben a kilogrammban mért jellemző együtthatóját másképp bünteti, mint a tonnában mértét. Ezért kell a regularizált illesztés ELŐTT skálázni, és ezért csak csővezetékben szabad, ahogy a lecke harmadik blokkja megmutatja.
A ridge sosem ad nullát: osztás. A lasso ad: kivonás, nullára vágva.
b=2 / (1 + 0)=2együttható
Húzd a csúszkát, és nézd, mi mozdul.
Két csúszka. Az első a büntetés nélküli együttható, a második a büntetés erőssége. A képlet a ridge zsugorítása. Told a lambdát nulláról egyre: az együttható a felére esik. Told tízre: a tizenegyedére. Sosem lesz belőle nulla — akármeddig tolod. Most gondolj a lasso képletére az előző diáról: ott a lambda LEVONÓDIK, tehát amint eléri az együttható nagyságát, a jellemző kiesik a modellből. Ez a különbség adja a lasso jellemzőválogató tulajdonságát, és ez az, amiért húszezer markeres adaton lassót szokás használni, nem ridge-et.
A λ nem az adatból jön, hanem keresztvalidációból: azt az értéket választjuk, amelyik a KIHAGYOTT részen a legkisebb hibát adja. A `l00_b` intervallumos blokkja ugyanezt a gondolatot használja: ami az illesztésben szerepelt, azon mérni önmagunk becsapása.
A k a torzítás-szórás átváltás csúszkája: nagyobb k kisebb szórás és nagyobb torzítás.
A „legközelebbi” távolságot jelent, a távolság pedig skálafüggő. Skálázatlan jellemzőkön az a jellemző uralja a távolságot, amelyiknek a legnagyobb a számértéke — akkor is, ha semmi köze a kimenethez. A kNN ezért SOHA nem használható skálázás nélkül.
A `ml-regresszio` demóban a kNN a nemlineáris feladaton 0,250 MAE-t ad, a lineárison 0,989-et. Ugyanaz az eljárás, ugyanaz a k: a különbség tisztán abból jön, hogy melyik feladatnak felel meg a lokális átlagolás.
Ugyanaz a √n szabály, mint a mintaátlagnál — mert a kNN is átlag, csak lokális.
s=1 / sqrt(10)=0,32t/ha
Húzd a csúszkát, és nézd, mi mozdul.
Egy csúszka a zajra, egy a szomszédszámra. A becslés szórása a zaj osztva a k gyökével. Told a k-t egyről négyre: a szórás feleződik. Négyről tizenhatra: megint. Tizenhatról huszonötre viszont már csak húsz százalékot nyersz — ez a csökkenő hozadék, ugyanaz, mint a mintaméretnél. És közben a torzítás nő, mert egyre távolabbi pontokat is beveszel az átlagba. Ez a képlet csak az egyik oldalt mutatja; a másikat a demó méri.
A képlet azt tételezi fel, hogy a k szomszéd címkéjének ugyanaz a várható értéke. Ez pontosan addig igaz, ameddig a szomszédság elég szűk; ahogy a k nő, a feltevés romlik, és a torzítás ezen a romláson keresztül jelenik meg. A két hatás ellentétes irányú, ezért van optimum.
A fa tengelypárhuzamos dobozokra vág, és dobozonként egy átlagot mond. Mohón vág: mindig a pillanatnyilag legjobb vágást választja.
A mohóság nem optimalitás: a globálisan legjobb fa megtalálása NP-nehéz, ezért minden gyakorlati megvalósítás lépésenként dönt. Ebből következik, hogy két majdnem egyforma adathalmaz két egészen különböző fát adhat — és pontosan ez a fa instabilitása, amit az erdő átlagolással orvosol.
A `max_depth` a legfontosabb korlátja: a korlátlan fa minden tanítópontot külön levélbe tud tenni, és akkor a tanítóhiba nulla, a tesztiba pedig a lehető legrosszabb. Az `ml-regresszio` demó mélysége 4, és ez szándékos: ennyi még olvasható, és még nem tanulja meg a zajt.
Egy fa instabil. Két módon lehet ebből erőset csinálni, és a kettő ellentétes logikájú. A zsákolás — angolul bagging — sok fát épít EGYMÁSTÓL FÜGGETLENÜL, mindegyiket egy véletlen bootstrap-mintán és véletlen jellemzőrészhalmazon, aztán átlagol. Ez a szórást csökkenti. A fokozás — boosting — SOROSAN épít: minden új fa az előzők maradékára illeszkedik, kis lépésekben. Ez a torzítást csökkenti. A zsákolás párhuzamosítható és nehéz elrontani; a fokozás pontosabb, de hangolni kell, és túl is tudja illeszteni magát.
Az `ml-regresszio` demóban ez a különbség számszerűen is látszik: a nemlineáris feladaton a gradiens erősítés 0,229 MAE-t ad, a véletlen erdő 0,265-öt. A lineáris feladaton viszont mindkettő alulmarad a négyparaméteres lineáris modellhez képest — 2558 illesztett számmal.
Négyzetes veszteségnél a pszeudomaradék éppen a maradék. Más veszteségnél nem — de az eljárás ugyanaz.
Ebből látszik, miért cserélhető a veszteségfüggvény a fokozásban: csak a második sor deriváltját kell kicserélni, az eljárás többi része változatlan. Abszolút veszteségnél a pszeudomaradék az előjel, Huber-veszteségnél a levágott maradék — és ettől lesz az illesztés robusztus a kiugró értékekre.
A ν és a fák száma együtt hat: feleakkora ν nagyjából kétszer annyi fát kíván ugyanahhoz az eredményhez. Ezért nem lehet a kettőt külön hangolni, és ezért van az, hogy a gyakorlatban a ν-t kicsire állítjuk, a faszámot pedig korai megállítással határozzuk meg.
Az ábra betöltése…
Itt a mérés. Ugyanaz a hét eljárás, ugyanaz a nyolcszáztíz mintavételi pont, ugyanaz a blokkos szétvágás — három tábla teljes egészében kimarad. Csak az igazság alakja más. Balra lineáris az összefüggés: ott a lineáris modell nyer nulla egész kilencszázkilenc MAE-vel, és a gradiens erősítés tizenkét százalékkal rosszabb — kétezer-ötszázötvennyolc illesztett számmal a nyertes NÉGY helyett. Jobbra telítődő, nemlineáris az összefüggés: ott megfordul a sorrend. A gradiens erősítés nulla egész kétszázhuszonkilenc, a lineáris modell hatvankilenc százalékkal rosszabb. Ez a két panel a blokk teljes mondanivalója.
A demó szándékosan kihagyja a koordinátákat a jellemzők közül. Ha bevennénk, a fák a térbeli közelséget tanulnák meg, nem az összefüggést, és a mérés a szivárgásról szólna, nem a modellcsaládról — az a `w08-leakage` demó tárgya. A szétvágás azért blokkos, mert egy tábla minden pontja egy oldalra kerül; véletlen szétvágáson mind a hét eljárás jobbnak látszana a valóságosnál.
Az ábra betöltése…
És itt látszik, miért fordul meg a rangsor. Minden panel UGYANAZT az adatot mutatja, a csapadék mentén, a többi jellemzőt az átlagán tartva. Az első három — a lineáris, a ridge és a lasso — egyenest húz, és ezen semmi nem segít: a modellcsalád nem engedi meg a görbülést. A kNN és a fák telítődnek, mert lokálisan átlagolnak. Nézd meg a fa lépcsőit: a mélység négy, tehát legfeljebb tizenhat doboz — a lépcsők száma nem véletlen, hanem a hiperparaméter következménye. A közös függőleges tengely szándékos: külön skálán minden panel egyformán meredeknek látszana.
Ez a rajz az a fajta, amit a modell elfogadása előtt mindig érdemes megnézni: egy jellemző mentén, a többit rögzítve. Nem a modell teljes viselkedése — de pontosan az a tulajdonsága, ami a választást eldönti. Sok csomagban „részleges függés” (partial dependence) néven szerepel.
| eljárás | mikor jó | mi az ára, és mikor rossz |
|---|---|---|
| lineáris / ridge / lasso | kevés adat, közel lineáris hatás, magyarázható együtthatók kellenek | görbülő vagy telítődő összefüggésre rendszeres hibát ad; skálázás kell a büntetéshez |
| kNN | lokális szerkezet, sima felület, kevés jellemző | sok jellemzőnél a távolság elveszti értelmét; skálázás KÖTELEZŐ; a jóslás lassú |
| döntési fa | magyarázat kell, vegyes típusú jellemzők, nemlineáris határ | instabil: kis adatváltozás más fát ad; mélység nélkül azonnal túlillik |
| véletlen erdő | alapértelmezett első próbálkozás táblázatos adaton | nem extrapolál a tanítótartományon túl; nagy memória; egyedi fa nem olvasható |
| gradiens erősítés | ha a pontosság a fő szempont és van idő hangolni | hangolás nélkül túlillik; sorosan épül, nehezebben párhuzamosítható |
| neuronháló | sok adat, strukturált bemenet — kép, szöveg, jel | táblázatos adaton ritkán veri a fokozást; sok adatot és sok hangolást kíván |
Táblázat, hogy ne kelljen fejben tartani. A jobb oldali oszlop a fontos: minden eljárásnak van olyan helyzete, ahol rossz választás. És figyeld meg a középső oszlopot: a skálázás nem stílus kérdése. A lineáris modellnél és a fáknál mindegy, a kNN-nél és az SVM-nél kötelező — mert azok távolságot számolnak.
A „neuronháló” sor mérése a `nn-tabular` demóban van: táblázatos adaton a háló csak nagy mintaméretnél éri utol a gradiens erősítést. Ez nem a háló ellen szól, hanem a feladat mellett: a háló előnye a strukturált bemeneten van, ahol a szomszédság jelent valamit.
Az R² nevezőjében az alapvonal áll. Ha a modell rosszabb az átlagnál, az R² NEGATÍV — és ez helyes viselkedés.
RMSE ≥ MAE mindig, és a kettő hányadosa a hibaeloszlás alakjáról árulkodik: ha közel egyenlők, a hibák egyenletesek; ha az RMSE sokkal nagyobb, akkor néhány nagy tévedés viszi a mérleget — és akkor azokat érdemes megnézni, nem a modellt hangolni.
Az `ml-regresszio` demó MAE-t közöl, mert a hozam t/ha egységében ez értelmezhető szám: „átlagosan ennyi tonnát tévedünk hektáronként”. Az R² azért nem szerepel a fő számok között, mert a kihagyott táblák szórása táblánként más, és így a hányados nem vethető össze.
R² = 0 azt jelenti: pont annyit tudsz, mint az átlag. Negatív R² azt: kevesebbet.
r=1 - (0,9 / 1,5) ^ 2=0,64R²
Húzd a csúszkát, és nézd, mi mozdul.
Két csúszka: a modell négyzetes középhibája, és a kimenet szórása. Az R négyzet ebből a két számból jön. Told az RMSE-t a szórás értékére: az R négyzet pontosan nulla lesz — a modell éppen annyit tud, mint az átlag. Told feljebb: negatívba megy. Ez nem hiba a képletben, hanem a mérés eredménye, és a legtöbb jelentésből pont ezért hiányzik: kellemetlen. A `ml-regresszio` demó első oszlopa ugyanezt mondja ki másképp.
A képlet a teszthalmazon számolva viselkedik így. A TANÍTÓ halmazon az R² sosem negatív a legkisebb négyzetes illesztésnél, és monoton nő minden újabb jellemzővel — ezért nem szabad a tanítóadaton mért R²-t modellválasztásra használni. Ez ugyanaz a csapda, mint az illesztésen mért hiba általában.
%pip install -q unigaku-demofrom demo.lite import futtatfuttat('ml-regresszio')A Python a böngésződben indul el, telepítés nélkül. Az első indítás néhány másodperc, mert a futtatókörnyezet ekkor töltődik be. Utána átírhatod a paramétert, és újrafuttathatod.
A demó itt fut, a böngésződben — igaz, ehhez a scikit-learn a saját gépeden kell, mert a böngészős futtatókörnyezet nem tartalmazza. A csavar a `MELYSEG`: a fák mélysége. Állítsd kettőre, és nézd meg, mennyit veszít a gradiens erősítés a nemlineáris feladaton. Aztán nyolcra: javul-e, vagy már a zajt tanulja? És figyeld közben a lineáris oszlopot — az nem mozdul, mert a lineáris modellnek nincs mélysége.
A demó `extras = ('sklearn',)` jelöléssel fut: a Pyodide alapkészlete numpy és matplotlib, a scikit-learn nincs benne. A cella ezért a saját gépeden fut le; a telepítést a `l05_0` blokk telepítési diái írják le.
A határ alakja a modellcsalád következménye — és a pontosság ezt elfedi
Második blokk. A regressziónál az illesztés alakjáról volt szó; az osztályozásnál ugyanez a kérdés a DÖNTÉSI HATÁR alakjaként jelenik meg. És mellé jön egy második kérdés, amelyik agráradaton fontosabb az elsőnél: mit mérünk, ha a keresett eset ritka. A két kérdés összefügg, mert rossz mérőszámmal a rossz alakú határ is jónak látszik.
Osztályozásaz a felügyelt tanulási feladat, amelyben a címke véges sok KATEGÓRIA egyike, és a modell jellemzően nem közvetlenül címkét ad, hanem osztálytagsági pontszámot vagy valószínűséget, amelyből küszöbbel lesz döntés.
a küszöb külön döntés, és a költségekből jön, nem az adatból
A meghatározás a dián. Egy szót emelek ki: rangsorol. A legtöbb osztályozó nem címkét ad, hanem PONTSZÁMOT vagy valószínűséget, és a címke csak akkor születik meg, amikor ehhez küszöböt rendelünk. Ez azért fontos, mert a két dolgot külön kell értékelni: a rangsorolás jóságát a ROC-görbe méri, a küszöbét a költség. A 8. hét küszöbblokkja ezt a szétválasztást viszi végig.
Az oldalsó rajz az `ml-osztalyozas` demóé, és előre megmutatja, hová tartunk. A logisztikus regresszió a gyűrű alakú feladaton 0,517-es ROC-AUC-ot ér el — a vaktában rangsoroló 0,500-at. Nem rossz modell: egyszerűen olyan határt húz, amilyet tud.
A határ hipersík — a modellcsalád miatt, nem a tanítás minősége miatt.
A paramétereket nem legkisebb négyzetekkel illesztjük, hanem maximum likelihooddal: a veszteség a log-veszteség, L = −[y log p + (1−y) log(1−p)]. Ez ugyanaz az elv, amit a statisztikai eszköztár `l00_c` blokkja felír — csak most nem normális, hanem Bernoulli-eloszlásra alkalmazva.
Az együttható értelmezése szép és ritkán használják ki: β_j egységnyi növekedése az ESÉLYT e^{β_j}-szeresére változtatja. Nem a valószínűséget — az esélyt. A kettő összekeverése az orvosi és agrárszakirodalom egyik visszatérő hibája.
Az együttható az ESÉLYT szorozza, nem a valószínűséget. Ugyanaz a szorzó máshol mást ér.
p=(1 * 1) / (1 + 1 * 1)=0,5valószínűség
Húzd a csúszkát, és nézd, mi mozdul.
Két csúszka. Az első az alapeset esélye — ha az esély egy, az ötven százalékos valószínűséget jelent. A második az esélyhányados: ennyiszeresére változtatja az esélyt egy jellemző egységnyi növekedése. Állítsd az alapesélyt nulla egész egyre — ez kilenc százalék körüli valószínűség —, és a hányadost háromra: a valószínűség huszonhárom százalékra megy. HÁROMSZOROS esélyváltozásból két és félszeres valószínűségváltozás lett. Most told az alapesélyt tízre: ugyanaz a hármas hányados már csak kilencvenegyről kilencvenhét százalékra visz. Ugyanaz az együttható, más hatás — mert a szigmoid nem lineáris.
Ez a különbség a jelentésekben rendszeresen sérül: „a kezelés megháromszorozza a kockázatot” — de mit szorzott meg, az esélyt vagy a valószínűséget? Ritka eseménynél a kettő közel esik, gyakorinál nem. A `bio-diagnosis` demó ugyanennek a kérdésnek a másik felét méri: mit jelent egy pozitív teszt, ha a kórokozó ritka.
A megoldás csak skaláris szorzatokat használ. Ezért cserélhető magfüggvényre — és ezért lehet nemlineáris a határ.
A C a torzítás-szórás csúszka ezen a modellen: nagy C kevés lazítást enged, tehát a tanítóadatra feszes határt húz; kis C szélesebb sávot enged több hibával. A γ a második csúszka: nagy γ szűk, lokális befolyást ad — a határ pontok köré tekeredik.
A tartóvektor szó szerint értendő: a megoldás CSAK a sáv szélén álló pontoktól függ, a többit el lehetne dobni. Ez magyarázza, miért érzékeny az SVM a kiugró értékekre a határ közelében, és miért nem az a távoli pontokra.
Az ábra betöltése…
Itt a mérés első fele. Kilencszáz minta, két jellemző — szándékosan kettő, hogy rajzolható legyen —, és az eset akkor áll fenn, ha a nedvesség és a hőösszeg EGYÜTT átlép egy vonalat. A fehér vonal a nulla egész ötös küszöb, tehát maga a döntési határ. Nézd meg a bal felső panelt: a logisztikus regresszió egyenest húz, és ez itt pont jó — nulla egész kilencszázhatvanas ROC-AUC. A fa és az erdő dobozokból rakja össze ugyanezt a ferde vonalat, lépcsőzetesen. Ez a lépcsőzés a tengelypárhuzamos vágás ára.
A színskála a valószínűség, nem a címke: a sötét kék a biztos nem, a sötét vörös a biztos igen. A fák paneljén a foltok élesen váltanak — mert a fa dobozonként EGY számot mond, és a dobozok határán ugrik. Az SVM és a kNN panelje simán vált, mert ott a pontszám folytonosan változik.
Az ábra betöltése…
És itt a mérés másik fele, és ez a blokk legfontosabb ábrája. Az eset most a KÖZEPES tartományban áll fenn: se túl szárazon, se túl nedvesen. Nézd meg a bal felső panelt. A logisztikus regresszió most is egyenest húz — pontosan ugyanazt csinálja, mint az előző ábrán —, csak most semmit nem talál el. A ROC-AUC nulla egész ötszáztizenhét, a véletlen rangsoroló nulla egész ötszáz. A kNN, az erdő és az SVM körberajzolja a gyűrűt. Az SVM panelje a legszebb: az RBF-mag zárt görbét ad, nem dobozokat.
Ez a két ábra együtt válaszolja meg azt a kérdést, hogy „melyik a jobb osztályozó”. Nem válaszolható meg az adat ismerete nélkül. Ami válaszolható: melyik modellcsalád milyen alakú határt tud megrajzolni — és ezt előre tudni kell, nem utólag felfedezni.
A pontosság nevezőjében ott van a TN, a precizitáséban és a fedésében nincs. Ritka osztálynál ez a különbség.
Az F₁ második alakjából azonnal látszik, amit az elsőből nem: a TN egyáltalán nem szerepel benne. Ezért használható ritka osztályon, és ezért nem mond semmit arról, hogy a modell a negatívokat jól kezeli-e.
A magyar szóhasználat itt ingadozik: a „recall” magyarul fedés, érzékenység vagy visszahívás. A kurzus a fedés szót használja, de a jelentésekben mindig érdemes kiírni a képletet is, mert a szó önmagában félreérthető.
A harmonikus közép a KISEBBIK felé húz. Egy jó szám nem fedheti el a másikat.
f=2 * 0,8 * 0,8 / (0,8 + 0,8)=0,8F₁
Húzd a csúszkát, és nézd, mi mozdul.
Két csúszka: precizitás és fedés. Állítsd mindkettőt nulla egész nyolcra: az F-egy is nulla egész nyolc. Most told a precizitást egyre, a fedést pedig nulla egész kettőre. A számtani közepük nulla egész hat lenne — az F-egy nulla egész harminchárom. A harmonikus közép a kisebbik felé húz, és ez szándékos: egy olyan modell, amelyik mindent eltalál, amit riaszt, de a fertőzések nyolcvan százalékát nem veszi észre, nem jó modell. Az F-egy ezt nem engedi elfedni.
Az F₁ egyenlő súlyt ad a két hibafajtának. Ha nem egyenlők az áraik — agrárban szinte soha —, akkor az F_β használható, amelyben β a fedés súlya a precizitáshoz képest. De még ennél is őszintébb, amit a 8. hét csinál: kiszámolni a két hiba tényleges költségét, és a küszöböt abból választani.
Az ábra betöltése…
Itt a bizonyíték. A szaggatott vonalak az ALAPVONALAK, mérőszámonként külön — és ez a lényeg. A szürke szaggatott a mindig-nemet-mondó pontossága, a kék a véletlen rangsoroló nulla egész ötszáza, a vörös az esetarány. Nézd a jobb oldali panel első csoportját: a logisztikus regresszió pontossága hetvenkét egész két tized százalék — és pont ott van a szürke szaggatott vonal. Vagyis a modell PONTOSAN annyit tud, mint aki mindig nemet mond. A pontosság ezt nem mondja meg; a ROC-AUC és a PR-AUC igen.
Ez az ábra először egyetlen szaggatott vonallal készült 0,5-nél, és az hibás volt: a 72 %-os pontosság fölötte van, tehát jónak látszott. A javítás nem kozmetika — a rossz alapvonal ugyanaz a hiba, mint a nullától el nem induló tengely az 5. héten: igaz adatból hamis benyomás.
| mérőszám | mit mond | mikor vezet félre |
|---|---|---|
| pontosság | a helyes döntések aránya; alapvonala a többségi osztály aránya | ritka osztálynál: a mindig-nemet-mondó is magas értéket ér el |
| precizitás | a riasztásokból mennyi volt valódi | önmagában: egyetlen, nagyon biztos riasztás 100 %-ot ad |
| fedés (recall) | a valódi esetekből mennyit találtunk meg | önmagában: a mindig-igent-mondó 100 %-ot ad |
| F₁ | a precizitás és a fedés harmonikus közepe; a TN nem szerepel benne | ha a két hibafajta ára eltér — márpedig agrárban eltér |
| ROC-AUC | a RANGSOROLÁS jósága, küszöbtől függetlenül; alapvonala 0,500 | erősen kiegyensúlyozatlan osztálynál optimista képet fest |
| PR-AUC | ugyanez, de a ritka osztályra összpontosítva; alapvonala az esetarány | nem vethető össze két különböző esetarányú feladat között |
| költség | a döntés tényleges ára a két hibafajta árából | ha az árakat nem ismerjük — akkor viszont a küszöbről sem lehet dönteni |
Táblázat. A jobb oldali oszlopot olvasd el először: minden mérőszámnak van olyan helyzete, ahol félrevezet. És egy gyakorlati szabály, ami a jelentésekből majdnem mindig hiányzik: a mérőszám mellé oda kell írni az ALAPVONALÁT is. Pontosság mellé a többségi osztály arányát, PR-AUC mellé az esetarányt. Enélkül a szám nem értelmezhető.
A PR-AUC alapvonala azért az esetarány, mert a vaktában rangsoroló precizitása minden küszöbön az esetarány. Ebből következik, hogy két feladat PR-AUC-ja csak akkor vethető össze, ha az esetarányuk közel azonos — és ezt a jelentések szinte soha nem ellenőrzik.
A softmax a szigmoid általánosítása, a keresztentrópia a log-veszteségé. Kétosztályos esetben visszakapjuk az előzőt.
A gyakorlati megvalósítás sosem számolja ki külön az e^{z_k}-t: a legnagyobb pontszámot levonva stabilizál, mert e^{1000} túlcsordul. Ez ugyanaz a numerikus óvatosság, mint a log-likelihoodnál a szorzat helyett összeg.
A keresztentrópia második alakja magyarázza, miért nem elég a pontosság a tanításhoz: a veszteség a helyes osztály VALÓSZÍNŰSÉGÉT bünteti, nem azt, hogy eltaláltuk-e. Egy 0,51-gyel eltalált és egy 0,99-cel eltalált eset pontosságban ugyanannyi, veszteségben nem — és a gradiens ebből a különbségből él.
%pip install -q unigaku-demofrom demo.lite import futtatfuttat('ml-osztalyozas')A Python a böngésződben indul el, telepítés nélkül. Az első indítás néhány másodperc, mert a futtatókörnyezet ekkor töltődik be. Utána átírhatod a paramétert, és újrafuttathatod.
A demó cellája. A csavar az ESETARANY: állítsd nulla egész nulla ötre, tehát öt százalékra. Aztán nézd meg a három mérőszámot. A pontosság MINDENHOL kilencvenöt százalék fölé megy — minden modellnél, még ott is, ahol a rangsorolás semmit nem ér. A PR-AUC összeomlik. Ez a gyakorlat célja: megmutatni, hogy a mérőszám megválasztása nem stílus, hanem az, ami eldönti, észreveszed-e a rossz modellt.
A demó `extras = ('sklearn',)` jelöléssel fut, tehát a saját gépeden. Öt százalékos esetaránynál a tanítóhalmazban körülbelül huszonkét eset marad — ez már az a tartomány, ahol a szórás is jelentős, és érdemes a magot is átírni, hogy lásd, mennyit ingadozik.
Négy metódus, és amit a csővezeték megvéd
Harmadik blokk. Eddig arról volt szó, MIT csinálnak az eljárások. Most arról, hogyan hívjuk őket — és ez nem formaság. A scikit-learn felülete négy metódusból áll, és éppen ettől cserélhető ki bármelyik eljárás bármelyik másikra anélkül, hogy a körülötte lévő kód megváltozna. Ez ugyanaz a gondolat, amit a rendszertervezésben interfésznek hívunk.
Négy metódus, és minden objektum ugyanezt a négyet adja — a lineáris regresszió, a véletlen erdő, a skálázó, sőt maga a csővezeték is. A fit tanul és MAGÁT adja vissza; ezért lehet láncolni. A predict jósol. A transform átalakít, és ezt a lépéseknél használjuk. A score egy kényelmi szám, de a jelentésbe sosem ez megy — oda a feladathoz illő mérőszám.
Az egységes felület nem kozmetika: ettől működik a `cross_val_score`, a `GridSearchCV` és a `Pipeline` minden becslőre ugyanúgy. Aki saját eljárást ír és ezt a négy metódust megvalósítja, annak az eljárása azonnal beleillik az egész ökoszisztémába — ez a Liskov-féle helyettesítési elv a gyakorlatban.
CSAK a tanítóadaton
valószínűség, nem címke
Öt sor, és ez a teljes menet. Először szétvágás — és figyeld meg a stratify paramétert: ez tartja az osztályarányt mindkét oldalon, ami ritka osztálynál nem luxus, hanem feltétel. Aztán a modell létrehozása, aztán fit a TANÍTÓ adaton, végül jóslás a teszten. A negyedik oszlopban a valószínűség: ebből lesz a küszöbdöntés. Egy dolog hiányzik szándékosan: a skálázás. A következő dia megmutatja, miért nem lehet ide odatenni.
A `random_state` nem szertartás: enélkül a szétvágás és a modell minden futásnál más, és két eredmény különbsége nem értelmezhető. Rögzített maggal a különbség a változtatásból jön; rögzítetlenül a szerencséből. Agráradaton a `train_test_split` viszont NEM elég — ott térbeli blokkos szétvágás kell, ahogy a 8. hét első blokkja megmutatja.
Ami az adatból TANUL, az szivároghat
Ez a dia a blokk lényege. Ha az egész adaton skálázol, mielőtt szétvágnád, akkor a skálázó paraméterei — az átlag és a szórás — a TESZTADATBÓL is táplálkoznak. Kicsi szivárgás, de szivárgás: a mért hiba optimistább lesz a valóságosnál. Keresztvalidációban ugyanez hajtásonként megismétlődik, és a hatás halmozódik. A csővezeték ezt szerkezetileg zárja ki: a fit a cső MINDEN lépését csak a tanítórészen futtatja.
A hatás mérete adatfüggő, és pontosan ezért veszélyes: kis adaton nagy, nagy adaton alig észrevehető — tehát a hibát a fejlesztés közben nem vesszük észre, csak üzemben. A `w08-leakage` demó ugyanennek a hibának a durvább változatát méri térbeli adaton, ahol a hatás már nem finom.
ettől kezdve `cso.fit(X_tan, y_tan)` és a cső MAGA a becslő
Két minta. A bal oldali a legegyszerűbb cső: skálázás, majd modell — és ettől kezdve a cső ugyanúgy viselkedik, mint egy becslő, tehát keresztvalidálható és rácsban kereshető. A jobb oldali a valódi agrártábla esete: vannak számoszlopok és vannak kategóriák — talajtípus, fajta, tábla azonosítója. A ColumnTransformer oszloponként más előfeldolgozást ad, és az egészet egyetlen objektumba zárja. Figyeld meg a handle_unknown paramétert: üzemben előbb-utóbb jön egy fajta, amit a tanításkor nem láttunk.
A `handle_unknown=″ignore″` azt mondja meg, mi történjen egy üzemben felbukkanó, tanításkor nem látott kategóriával: csupa nulla sor lesz belőle a kódolásban, hibadobás helyett. Ez tudatos döntés, nem alapértelmezés — és a jelentésben ki kell mondani, mert az ilyen sorokon a modell a többi jellemzőre támaszkodva jósol.
A keresztvalidáció eredménye becslés, tehát van szórása. Átlag szórás nélkül nem eredmény.
A második sor közelítés, nem azonosság: a hajtások nem függetlenek egymástól, mert a tanítóhalmazaik átfedik egymást. Ezért a képlet ALULBECSÜLI a valódi bizonytalanságot — óvatosabban kell olvasni, mint egy független minta standard hibáját.
A hajtások számának megválasztása átváltás: nagy k kisebb torzítást ad (majdnem a teljes adaton tanítunk), de több számítást és korreláltabb hajtásokat. Az ötös és a tízes a szokásos kompromisszum. Agráradaton viszont a hajtások HATÁRA a fontosabb kérdés: táblánként, évenként vagy térbeli blokk szerint vágunk-e.
a kettős aláhúzás köti a lépés nevét a paraméterhez
a `groups` tartja egyben a táblákat
ugyanez, de a rács véletlen részhalmazán, rögzített költséggel
A rácskeresés minden paraméterkombinációt kipróbál keresztvalidációval, és a legjobbat választja. Figyeld meg a paraméterek nevét: modell kettős aláhúzás max mélység. A kettős aláhúzás a cső lépésének nevét köti össze a paraméterrel — ettől lehet a cső BÁRMELYIK lépésének bármelyik paraméterét hangolni, az előfeldolgozásét is. És figyeld meg a cv paramétert: nem szám, hanem objektum. Agráradaton ide csoportos vagy térbeli szétvágás kerül, nem véletlen hajtás.
A `scoring` alapértéke a becslő saját `score` metódusa, tehát osztályozónál a pontosság. Ritka osztályon ez pontosan a rossz választás, ahogy az előző blokk megmutatta — ezért kell kiírni. Ez az egyik leggyakoribb csendes hiba: a rácskeresés lelkiismeretesen megkeresi azt a modellt, amelyik a legjobb a rossz mérőszámon.
A beágyazott keresztvalidáció ára szorzatban nő. Ezért van véletlen keresés.
n=5 * (5 * 12 + 1) + 1=306illesztés
Húzd a csúszkát, és nézd, mi mozdul.
Három csúszka: külső hajtások, belső hajtások, paraméterkombinációk. A képlet azt adja meg, hányszor illesztünk modellt egy beágyazott keresztvalidációban. Az alapbeállítás öt külső, öt belső, tizenkét kombináció: háromszázhat illesztés. Told a kombinációkat ötvenre: ezerkétszázhatra. Ha egy illesztés tíz másodperc, az három és fél óra. Ezért nem lehet mindent végigpróbálni — és ezért van a véletlen keresés, amely a rács egy részhalmazán fut rögzített költséggel.
A plusz egyesek a végső újratanításokat jelentik: minden külső hajtásban a legjobb paraméterrel a teljes tanítórészen, és a végén az egész adaton. A `GridSearchCV` ezt a `refit=True` alapértelmezéssel automatikusan megteszi — de a költségbecslésből gyakran kifelejtik.
A paramétert a `fit` tanulja az adatból. A hiperparamétert mi adjuk meg előtte — és a validáción választjuk ki, sosem a teszten.
Két szó, amit könnyű összekeverni, pedig a különbség éles. A paraméter az, amit a fit állít be az adatból: az együtthatók, a fák vágási küszöbei, a háló súlyai. A hiperparaméter az, amit MI adunk meg a fit előtt: a lambda, a mélység, a szomszédszám, a tanulási ráta. A különbség gyakorlati következménye: a paramétert a tanítóadat választja, a hiperparamétert a VALIDÁCIÓ. Aki a hiperparamétert a teszthalmazon választja, annak nincs többé teszthalmaza.
Az oldalsó rajz az előző dia képletéé. A teszthalmaz egyszeri használata nem szertartás: minden ránézés információt szivárogtat, és néhány ránézés után a teszthalmaz már csak egy második validációs halmaz. Ha a hangolás után mégis szükség van egy újabb, torzítatlan becslésre, arra a beágyazott keresztvalidáció való — vagy egy addig érintetlenül félretett adatrész.
| eljárás | hiperparaméter | mit csinál, és mire figyelj |
|---|---|---|
| ridge / lasso | `alpha` (λ) | nagyobb érték erősebb zsugorítás, egyszerűbb modell; logaritmikus rácson keresd, ne lineárison |
| kNN | `n_neighbors` (k) | nagyobb k simább becslés, nagyobb torzítás; skálázás nélkül értelmetlen |
| döntési fa | `max_depth`, `min_samples_leaf` | a kifejezőerő korlátja; korlátlan mélységnél a tanítóhiba nulla és a teszt a lehető legrosszabb |
| véletlen erdő | `n_estimators`, `max_features` | a faszám nagyjából monoton javít, csak lassít — a `max_features` a valódi csúszka |
| gradiens erősítés | `learning_rate`, `n_estimators`, `max_depth` | a ráta és a faszám EGYÜTT hat: feleakkora ráta kétszer annyi fát kíván |
| SVM | `C`, `gamma` | C a lazítás ára, gamma a mag szélessége; mindkettő logaritmikus rácson, és skálázás kötelező |
Táblázat, hogy legyen hova visszalapozni. A második oszlop az irány: melyik felé tolva lesz a modell rugalmasabb. Az utolsó oszlop a gyakorlati tanács. Egy dolgot emelnék ki: a fokozásnál a tanulási ráta és a faszám NEM független — feleakkora ráta kétszer annyi fát kíván. Ezért nem szabad a kettőt külön hangolni.
A „logaritmikus rácson keresd” nem apróság: az `alpha` értelmes tartománya jellemzően 10⁻⁴ és 10² között van, és ezen egy egyenletes lineáris rács az érdekes tartomány nagy részét kihagyja. A `np.logspace` pontosan erre való.
Nem másik matematika — kevesebb, amit le kell írni
Utolsó blokk. A neurálisháló-modulban a háló saját visszaterjesztéssel készült, negyven soron — hogy látsszon, mi történik. Most jön a keretrendszer, és vele a leggyakoribb félreértés: hogy a PyTorch valami ERŐSEBB matematikát csinál. Nem. Megmérjük.
Automatikus deriválás, gyors algebra, kész elemek. NEM ad jobb modellt, helyes szétvágást vagy értelmes mérőszámot.
Három dolgot ad, és egyiket sem azt, amit a marketing sugall. Az első: automatikus deriválást — bármilyen kifejezés gradiensét megkapod anélkül, hogy papíron levezetnéd. A második: gyors lineáris algebrát, és a GPU-t, ha van. A harmadik: kész építőelemeket — rétegeket, optimalizálókat, adatbetöltőket. Amit NEM ad: jobb modellt, helyes szétvágást, értelmes mérőszámot. Ezek mind a mi dolgunk maradnak, és a hibák nagy része mind a mai napig ezekből jön.
Az oldalsó rajz az `nn-pytorch` demóé, és a blokk tételét mutatja: float64-ben a két megvalósítás eltérése 1,1·10⁻¹⁶ — az oszlop láthatatlanul kicsi —, float32-ben 7,3·10⁻⁸. Nyolc nagyságrend, és nem a matematikából jön, hanem a számformátumból.
Egy visszafelé menet MINDEN paraméter deriváltját megadja. A véges differencia paraméterenként kettőt kíván.
Ebből számolható, miért reménytelen a véges differencia: egy 209 paraméteres apró hálónál 418 előreterjesztés kell a gradienshez, egy milliós hálónál kétmillió. Az `nn-pytorch` demó ezért csak 60 súlyra végzi el az ellenőrzést — a kérdés az, hogy a módszer helyes-e, nem az, hogy hányszor helyes.
A „szalagra vesz” (tape) kifejezés ezt a gráfot jelenti. PyTorch-ban a gráf a futás közben épül, minden előreterjesztésnél újra — ezért lehet a háló szerkezete adatfüggő, például ciklussal vagy elágazással. Ez a dinamikus gráf, és ez volt a PyTorch eredeti különbsége.
`elore`, `tanit`, kézzel levezetett láncszabály, 40 sor
a `.T` nem ízlés: a két könyvtár más alakban tárol
Bal oldalon a kurzus magja, jobb oldalon a torch. A két oszlop UGYANAZT a függvényt írja le. Egy részletre figyelj: a súlymátrix alakja. A mag jel szorozva w-t számol, tehát w alakja bemenet szorozva kimenet. A torch Linear x szorozva W transzponálttal, tehát W alakja kimenet szorozva bemenet. Ezért kell a másoláskor transzponálni — enélkül a két háló nem ugyanaz a függvény, csak ugyanakkora.
A demó egy csendes hibán bukott meg először: az `nn.Linear` float32-ben foglalja a paramétert, tehát a float64 érték másolása LEVÁGÓDIK, mielőtt a `.to(float64)` visszaemelné. A mérés ekkor float64-ben is 10⁻⁸-t adott — épp a float32 pontosságát. A javítás egy sorrendcsere: előbb `.to(dtype)`, utána `copy_`. Ez a hibafajta minden keretrendszerben megvan, és soha nem szól.
Az ábra betöltése…
Itt a mérés. Fent a két veszteséggörbe háromszáz lépésen át: egyetlen vonalnak látszanak, mert azok is. Lent a KÜLÖNBSÉGÜK, logaritmikus tengelyen — lineáris skálán mindkettő nullának rajzolódna. A kék vonal a float64 eltérés: tíz a mínusz tizenhetedik körül, a szaggatott gépi epszilon ALATT. A vörös a float32: tíz a mínusz nyolcadik környékén. Nyolc nagyságrend különbség, és a képlet mindkét esetben ugyanaz volt.
A logaritmikus tengely itt nem szépítés: 10⁻¹⁶ és 10⁻⁸ lineáris skálán egyaránt nullának látszana, és pont a kettő közti nyolc nagyságrend a mondanivaló. Ez ugyanaz az elv, amit az 5. hét mond ki a tengelyválasztásról — a skála az állítás része.
Az ábra betöltése…
Két pontfelhő. A balon a kézzel levezetett gradiens és az autograd gradiense: kétszázkilenc paraméter, mind az y egyenlő x egyenesen, nyolc egész kilenc szor tíz a mínusz tizenhatodik legnagyobb eltéréssel. A jobbon valami más és fontosabb. Ott a hálót tanh aktivációra és súlycsillapításra cseréltem — olyasmire, amihez a numpy-magban ÚJ visszaterjesztést kellene levezetni. Az autograd gradiensét véges differenciával hasonlítottam össze, ami teljesen független attól, hogyan derivál a keretrendszer. A két számítás relatív eltérése öt egész három szor tíz a mínusz tizedik. Az autograd tehát nem állítja magáról, hogy helyes: mérés mondja ki.
A véges differencia KÖZPONTOS, tehát (f(x+h) − f(x−h)) / 2h: az egyoldali hibája h-val arányos, a központosé h²-tel. A lépésköz 10⁻⁶ — float64-en ez az optimum környéke, mert nagyobbnál a levágási hiba nő, kisebbnél a kivonás kioltása. Ez a `l00` numerikus óvatosságának ugyanaz a fajtája, mint a log-likelihoodnál.
a torch HOZZÁADJA a gradienst, nem felülírja; enélkül halmozódik
előreterjesztés, és közben épül a gráf
a veszteség, egyetlen skalár
egy visszafelé menet, minden paraméter gradiense kész
a paraméterek elmozdulnak
nincs gráfépítés, kevesebb memória
Ez az öt sor minden PyTorch-kódban ott van, és mindig ugyanebben a sorrendben. A nullázás azért kell, mert a torch a gradienseket HOZZÁADJA a meglévőhöz, nem felülírja — ez a legelső hiba, amit mindenki elkövet: kihagyja a zero grad hívást, és a gradiens halmozódik. Az előreterjesztés, a veszteség, a visszafelé menet, a lépés. És a hatodik sor, ami nem a ciklusban van: a kiértékelés no grad blokkban, mert ott nem kell gráfot építeni.
A `backward()` csak SKALÁRRA hívható, ezért kell a `.mean()` vagy a `.sum()`. Ez nem korlátozás, hanem a láncszabály feltétele: gradiens egyetlen kimenethez tartozik. Vektor kimenetnél Jacobi-mátrixról beszélnénk, és azt nem egy visszafelé menet adja meg.
Az Adam paraméterenként skáláz a gradiens eddigi nagyságából. Ettől kevesebb hangolást kíván — nem attól, hogy jobb.
A harmadik sorban a kalap a torzításkorrekciót jelöli: m̂ = m/(1−β₁ᵗ). Az első néhány lépésben a mozgóátlag nullából indul, tehát alulbecsül; ez a korrekció teszi helyre. Enélkül az Adam első lépései túl rövidek lennének.
A súlycsillapítás (weight decay) az Adamben nem ugyanaz, mint az L2-büntetés a veszteségben — a kettő csak SGD-nél esik egybe. Aki L2-t akar Adammel, az `AdamW`-t használ; ez a különbség évekig csendes hibaforrás volt a szakirodalomban is.
Táblázatos adaton a fák nyernek. A háló ott jön, ahol a bemenetnek szerkezete van: kép, hang, szöveg, idősor.
És a záró kérdés: mikor van szükség minderre. A mérés az nn-tabular demóból jön, és nem hízelgő. Táblázatos agráradaton a gradiens erősítés MIND az öt mintaméreten megverte a hálót, és a rés nem szűkült — kétszáz pontnál másfélszeres, négyezernél már 1,75-szörös. Ez nem a háló elleni érv, hanem a feladat melletti. A háló ott kerül elő, ahol a bemenetnek SZERKEZETE van, amit a fák nem tudnak kihasználni: kép, hang, szöveg, idősor. A gépi látás modul pontosan erről szól.
Az oldalsó rajz az `nn-tabular` demóé. A háló hibája 2000 pont fölött beáll, az erősítésé tovább csökken — a háló tehát előbb ér plafont, és ez a plafon a rögzített méretéből (32 neuron) és lépésszámából jön, nem elvi korlátból. A mérés ezt ki is mondja: nem tudja megmondani, mit tudna egy nagyobb háló.
%pip install -q unigaku-demofrom demo.lite import futtatfuttat('nn-pytorch')A Python a böngésződben indul el, telepítés nélkül. Az első indítás néhány másodperc, mert a futtatókörnyezet ekkor töltődik be. Utána átírhatod a paramétert, és újrafuttathatod.
Az utolsó gyakorlat. A `LEPES`-t állítsd ezerötszázra, tehát ötször annyi lépésre. A kérdés: a float64 eltérés HALMOZÓDIK-e, vagy marad a gépi epszilon környékén? Van rá elméleti érv mindkét irányban — a lebegőpontos hibák részben kiejtik egymást, részben halmozódnak —, és ezt csak megmérni lehet. Aztán nézd meg ugyanezt a float32 vonalon, ahol a hiba nagyobb, tehát a halmozódás is hamarabb látszik.
A demó `extras = ('torch',)` jelöléssel fut: a PyTorch a böngészős futtatókörnyezetben nem elérhető, tehát ez a cella a saját gépeden megy. A telepítés `uv pip install torch --index-url https://download.pytorch.org/whl/cpu` — a CPU-s változat elég, a demó apró hálót tanít.
| Rövidítés | Feloldás | Mit jelent |
|---|---|---|
| MAE | Mean Absolute Error — átlagos abszolút hiba | a hibák abszolút értékének átlaga, a kimenet egységében; kiugró értékre kevésbé érzékeny |
| RMSE | Root Mean Squared Error — négyzetes középhiba | a négyzetes hibák átlagának gyöke; a nagy hibákat aránytalanul bünteti |
| MSE | Mean Squared Error | a négyzetes hibák átlaga; az RMSE négyzete |
| R² | determinációs együttható | a kimenet szórásnégyzetének megmagyarázott hányada; teszthalmazon lehet negatív |
| OLS | Ordinary Least Squares — legkisebb négyzetek | a büntetés nélküli négyzetes illesztés, zárt alakkal |
| L1, L2 | abszolút és négyzetes norma | a lasso és a ridge büntetőtagja; az L1 nullára visz együtthatót, az L2 nem |
| kNN | k-Nearest Neighbors — k legközelebbi szomszéd | lokális átlagolás a k legközelebbi tanítópont címkéjéből |
| SVM | Support Vector Machine — tartóvektor-gép | a legszélesebb elválasztó sávot kereső osztályozó |
| RBF | Radial Basis Function — radiális bázisfüggvény | a leggyakoribb magfüggvény: exp(−γ‖u−v‖²) |
| SV | Support Vector — tartóvektor | a sáv szélén álló tanítópont; csak ezek befolyásolják a megoldást |
| TP, TN, FP, FN | True/False Positive/Negative | a tévesztési mátrix négy cellája: valódi találat, valódi elutasítás, téves riasztás, kimaradt eset |
| ROC | Receiver Operating Characteristic | a fedés és a téves riasztási arány görbéje a küszöb mentén |
| AUC | Area Under the Curve — görbe alatti terület | a ROC- vagy a PR-görbe alatti terület, egyetlen számként |
| PR | Precision-Recall — precizitás-fedés | a ritka osztályra összpontosító görbe; alapvonala az esetarány |
| CV | Cross-Validation — keresztvalidáció | több szétvágás átlagolt eredménye |
| SGD | Stochastic Gradient Descent — sztochasztikus gradiensmódszer | kötegenkénti gradienslépés; a keretrendszerek alapoptimalizálója |
| Adam | Adaptive Moment Estimation | paraméterenként skálázó optimalizáló a gradiens mozgóátlagaiból |
| PCA | Principal Component Analysis — főkomponens-elemzés | a legnagyobb szórású irányok szerinti dimenziócsökkentés |
| SSE | Sum of Squared Errors — négyzetes eltérésösszeg | a csoporton belüli négyzetes eltérések összege; a döntési fa ennek csökkenése szerint választ vágást |
| GPU | Graphics Processing Unit — grafikus processzor | sok azonos műveletet párhuzamosan végző egység; a keretrendszerek ezen gyorsítják a mátrixszorzást |
| EDA | Exploratory Data Analysis — feltáró adatelemzés | az a szakasz, amelyben még a kérdést keressük |
Minden diasor végén áll egy ilyen tábla. Ez a lecke sűrű rövidítésekben, mert a gépi tanulás szakszókincse majdnem teljes egészében angol mozaikszavakból áll — és egy feloldatlan rövidítés a hallgatót kizárja a mondatból.
Két rövidítés hasonlít, de mást jelent: az AUC önmagában általában a ROC-görbe alatti területet jelenti, a PR-AUC viszont a precizitás-fedés görbéét. A kettő alapvonala eltér — 0,500 és az esetarány —, ezért sosem cserélhetők fel, és a jelentésben mindig ki kell írni, melyikről van szó.
Az ábra betöltése…
Ahogy minden diasor végén: a használt típusok egymás mellett, ugyanazon az öt értéken. Ebben a leckében három szerepel. Az oszlop az eljárások összevetésére — ez a lecke fő állítása mindenütt egy rangsor. A vonal ott, ahol egy folytonos paraméter mentén nézünk végig valamit: a tanítópontok számánál. A harmadik a demóábra: a döntési tartományok és a logaritmikus tengelyű eltérésgörbék olyan rajzot kívánnak, amit a dia saját rajzolója nem tud.
Az ábra a `w05-encoding` demóé (`chartindex 4`). A paneleket a demó `TIPUSKESZLETEK` táblája sorolja fel, és pontosan annyi panel van rajta, ahány típust a következő dia táblázata felsorol — ezt a `check_diagramok.py` ellenőrzi is.
| diagramtípus | mit olvasol le róla | mire NEM jó |
|---|---|---|
| oszlop | eljárások nagyságrendje és sorrendje — a hossz maga az érték | folytonos paraméter menti alakulás: a köztes értékek hiányoznak |
| vonal | folytonos paraméter menti alakulás: a meredekség, a beállás és a fordulópontok | kategóriák összevetése: a vonal sorrendet állít oda is, ahol nincs |
| demóábra | amit a keretrendszer rajza nem tud: döntési tartomány, log tengely, pontfelhő | saját adatod: ez a demó kimenete, nem szerkeszthető a dián |
És a táblázat. Ebben a leckében szándékosan kevés típus van, és ennek oka van: a lecke állításai majdnem mind rangsorok — ez az eljárás kontra az az eljárás. Oda az oszlop való. A vonal egyetlen helyen jelenik meg, a tanulási görbén, ahol a köztes mintaméretekről is állítunk valamit. A középső oszlop itt is a fontos — és a jobb oldali még inkább.
A felsorolás nem kézi lista: a `check_diagramok.py` ellenőrzi, hogy pontosan ezek a típusok szerepelnek-e a diasorban — ha egy új dia más típust hoz be, vagy egy típus kikopik, az építés szól.