Lecture 0
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.
Start with AikoDeck53 slides · 90 min
01
Felügyelt tanulás: a modellcsalád mint döntés
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é.
02
Mi a felügyelt tanulás feladata
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.
03
A kockázat és az empirikus kockázat
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.
Írjuk fel, mit is minimalizálunk. Az igazi cél a kockázat: a veszteség VÁRHATÓ értéke az adat valódi eloszlása szerint. Ezt nem tudjuk kiszámolni, mert az eloszlást nem ismerjük — csak mintánk van belőle. Amit tehát ténylegesen minimalizálunk, az az empirikus kockázat: ugyanaz a veszteség, a mintán átlagolva. Az egész gépi tanulás abból a résből él, ami a két sor között van. A harmadik sor ezt a rést nevezi meg: ez a általánosítási rés, és a teljes 8. hét erről szól.
04
Regresszió
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. · A kimenete szám, nem kategória: hozam t/ha-ban, nedvesség százalékban, ár forintban · Amit becsül, az átlag, nem egyedi eset — az egyedi eltérést a maradék hordozza · Négyzetes veszteségnél a feltételes ÁTLAGOT, abszolút veszteségnél a feltételes MEDIÁNT kapjuk
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.
05
Regularizáció: ugyanaz az illesztés, megbüntetve
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 legkisebb négyzetek normálegyenletét a statisztikai eszköztár már felírta; itt az következik, ami azon túl van. Ha a négyzetösszeghez hozzáadunk egy büntetést a nagy együtthatókra, két különböző dolgot kapunk aszerint, hogy a büntetés négyzetes vagy abszolút. A négyzetes büntetés — ez a ridge — mindegyik együtthatót ZSUGORÍTJA, de nullára egyiket sem viszi. Az abszolút büntetés — ez a lasso — nullára viszi azokat, amelyek nem érik meg. Az első sor a közös alak, a második és a harmadik a két eset ortonormált tervmátrixon, ahol zárt alakja van.
06
Számold ki: mit csinál a büntetés az együtthatóval
A ridge sosem ad nullát: osztás. A lasso ad: kivonás, nullára vágva.
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.
07
A k legközelebbi szomszéd: nincs illesztés, csak emlékezet
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 kNN a másik véglet. Nem illeszt semmit: megjegyzi az összes tanítópontot, és amikor kérdezel, megkeresi a k legközelebbit, és átlagolja a válaszaikat. Két következménye van, és mindkettő fontos. Az első: a modell mérete a tanítóadat mérete, tehát a jóslás lassú, nem a tanítás. A második a második sorban áll: a becslés szórása a k gyökével csökken — ez ugyanaz a gyök-n szabály, mint a mintaátlagnál. Nagyobb k simább görbét ad, de el is keni a valódi szerkezetet.
08
Számold ki: mennyit simít a k
Ugyanaz a √n szabály, mint a mintaátlagnál — mert a kNN is átlag, csak lokális.
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.
09
A döntési fa: mi alapján vág
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 fa nem görbét illeszt, hanem DOBOZOKRA vágja a teret, és minden dobozban egyetlen számot mond. A kérdés csak az, hol vág. A válasz mohó: minden lehetséges jellemzőn és minden lehetséges küszöbön végignéz, és azt választja, amelyik a legtöbb szórásnégyzetet viszi el. Ez a második sor: a vágás előtti négyzetösszegből kivonjuk a két rész négyzetösszegét. Figyeld meg, hogy a fa minden lépésben csak EGY jellemzőt néz — ezért lesz a határ tengelypárhuzamos, és ezért látszanak a döntési tartományokon a lépcsők.
10
Zsákolás és fokozás: két mód a fák összerakására
Zsákolás (bagging) — sok fa egymástól FÜGGETLENÜL, bootstrap-mintán; a kimenet az átlaguk. A szórást csökkenti, a torzítást nem. · Véletlen erdő — zsákolás plusz véletlen jellemzőválasztás vágásonként; ez teszi a fákat kevésbé korrelálttá, és ettől lesz az átlag jobb · Fokozás (boosting) — a fák SOROSAN épülnek, mindegyik az előzők maradékára; a torzítást csökkenti, a szórást növelheti · Tanulási ráta (ν) — a fokozás lépéshossza: kicsi ν több fát kíván, de stabilabb végeredményt ad · Ár — az erdő párhuzamosítható és nehéz elrontani; a fokozás pontosabb, de hangolást kíván
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.
11
A fokozás additív alakja
Négyzetes veszteségnél a pszeudomaradék éppen a maradék. Más veszteségnél nem — de az eljárás ugyanaz.
Írjuk fel a fokozást, mert egyetlen sorból kiderül, miért működik. A modell egy ÖSSZEG: az előző modellhez hozzáadunk egy új tagot, kis súllyal. Az új tag pedig arra illeszkedik, amit az előző elrontott — pontosabban a veszteség negatív gradiensére, ezért hívják gradiens fokozásnak. A harmadik sor a négyzetes veszteség esete, és ott ez a gradiens éppen a MARADÉK. Ezért mondják gyakran, hogy a fokozás a hibára tanul: négyzetes veszteségnél ez szó szerint igaz, más veszteségnél csak nagyjából.
12
Hét eljárás, két feladat — és a rangsor megfordul
Ugyanaz az adat, ugyanaz a szétvágás, két igazságalak — és a legjobb eljárás megcserélődik.
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.
13
Ugyanaz a hét eljárás, hétféle görbe
Az illesztés ALAKJA a modellcsalád következménye, nem az adaté. Az egyenes ott is egyenes, ahol az összefüggés telítődik.
É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.
14
Mikor melyiket — és mi az ára
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.
15
Mit mérünk: MAE, RMSE, R²
Az R² nevezőjében az alapvonal áll. Ha a modell rosszabb az átlagnál, az R² NEGATÍV — és ez helyes viselkedés.
Három mérőszám, és nem cserélhetők fel. Az első az abszolút hibák átlaga: ugyanabban az egységben van, mint a kimenet, és a kiugró értékekre kevésbé érzékeny. A második a négyzetes hiba gyöke: szintén az eredeti egységben, de a nagy hibákat aránytalanul bünteti — tehát ha egyetlen nagy tévedés is elfogadhatatlan, ezt nézzük. A harmadik az R négyzet: azt mondja meg, a kimenet szórásnégyzetének mekkora hányadát magyarázza a modell — és a nevezőjében az ALAPVONAL hibája áll. Ha a modell rosszabb az átlagnál, az R négyzet negatív lesz. Ez nem hiba, hanem információ.
16
Számold ki: mit jelent az R²
R² = 0 azt jelenti: pont annyit tudsz, mint az átlag. Negatív R² azt: kevesebbet.
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.
17
Most te következel: fordítsd meg a rangsort
Az `ml-regresszio` cellája. A `MELYSEG` átírásával a fák kifejezőereje változik — a lineáris modellé nem.
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.
18
Osztályozás: milyen alakú határt húz
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.
19
Osztályozás
Osztályozás: az 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. · Kétosztályos eset: van-e fertőzés, megfelel-e a tétel, beérett-e a tábla · A modell kimenete rangsor — a küszöb külön döntés, és a költségekből jön, nem az adatból · Többosztályos eset: a kimenet osztályonkénti valószínűség, amely egyre összegződik
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.
20
A logisztikus regresszió: lineáris a LOGIT skálán
A határ hipersík — a modellcsalád miatt, nem a tanítás minősége miatt.
A név megtévesztő: ez osztályozó, nem regresszió — pontosabban a valószínűség logitjára illesztett lineáris regresszió. Az első sor mondja ki: a log-esélyt vesszük lineárisnak. A második ennek a megfordítása, a szigmoid. És most nézd meg a harmadik sort: ha a valószínűség egy felénél vágunk, az pontosan azt jelenti, hogy a lineáris kombináció nulla — vagyis a döntési határ EGYENES. Nem közelítőleg, hanem pontosan. Ez a modellcsalád tulajdonsága, és semmilyen tanítás nem változtat rajta.
21
Számold ki: az esélyhányados és a valószínűség
Az együttható az ESÉLYT szorozza, nem a valószínűséget. Ugyanaz a szorzó máshol mást ér.
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.
22
Az SVM: a legszélesebb sáv, és a magtrükk
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 tartóvektor-gép más kérdést tesz fel. Nem valószínűséget becsül, hanem azt a hipersíkot keresi, amelyik a legszélesebb ÜRES SÁVOT hagyja a két osztály között. Az első két sor ez. A harmadik a döntő trükk: a megoldás csak a pontok skaláris szorzatától függ — tehát ha ezt kicseréljük egy magfüggvényre, akkor egy magasabb dimenziós térben húzunk egyenest, anélkül hogy abba a térbe valaha átszámolnánk. Ez a magtrükk. Az RBF-mag ezért tud gyűrűt körberajzolni: az eredeti térben nem egyenes, a jellemzőtérben az.
23
Hat osztályozó ugyanazon az egyenessel szétválasztható feladaton
Az eset egy ferde egyenes fölött áll fenn. A hat panel hatféle közelítést mutat ugyanerre.
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.
24
Ugyanaz a hat osztályozó, gyűrű alakú igazságon
Ugyanaz a hat eljárás, más alakú igazság. A logisztikus regresszió ugyanazt csinálja — és most elbukik.
É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.
25
A tévesztési mátrix és ami belőle jön
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.
Négy szám, és minden mérőszám ebből a négyből számolódik. A pontosság a főátló és az összes hányadosa — és ez az a szám, amelyik ritka osztályon becsap. A precizitás: amit riasztottunk, abból mennyi volt valódi. A fedés: ami valódi volt, abból mennyit találtunk meg. A kettő ellentétes irányba mozog a küszöbbel, és az F-egy a harmonikus közepük. Azért harmonikus és nem számtani: a harmonikus közép a KISEBBIK felé húz, tehát nem lehet egyetlen jó számmal elfedni egy rosszat.
26
Számold ki: miért harmonikus közép az F₁
A harmonikus közép a KISEBBIK felé húz. Egy jó szám nem fedheti el a másikat.
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.
27
Három mérőszám, két feladat — és a pontosság csapdája
Minden mérőszámnak MÁS az alapvonala. Egyetlen vonal 0,5-nél azt sugallná, hogy a 72 % jó.
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.
28
Melyik mérőszám mikor
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ő.
29
Többosztályos eset: softmax és keresztentrópia
A softmax a szigmoid általánosítása, a keresztentrópia a log-veszteségé. Kétosztályos esetben visszakapjuk az előzőt.
Kettőnél több osztálynál a szigmoid helyére a softmax lép. Az első sor: minden osztályra kiszámolunk egy pontszámot, kitevőbe emeljük, és normáljuk — így a kimenet valószínűségeloszlás, egyre összegződik. A veszteség a keresztentrópia, a második sor: csak a HELYES osztály valószínűségének logaritmusa számít, a többi tagot a nulla címke kinullázza. És figyeld meg a harmadik sort: kétosztályos esetben a softmax pontosan a szigmoid, a keresztentrópia pontosan a log-veszteség. Nem két dolog, hanem ugyanaz általánosabban felírva.
30
Most te következel: tedd ritkává az esetet
Az `ml-osztalyozas` cellája. Az `ESETARANY` átírásával a ritka osztály csapdája megmérhető.
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.
31
A scikit-learn felület
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.
32
A becslő (estimator) négy metódusa
fit(X, y) — a modell paraméterei beállnak az adaton; a visszatérési érték maga az objektum, ezért láncolható · predict(X) — kimenet az új adatra; osztályozónál címke, regressziónál szám · predict_proba(X) — osztályonkénti valószínűség; ez az, amiből a küszöbdöntés lesz · transform(X) — átalakított jellemzők; a lépéseknél (skálázás, kódolás, dimenziócsökkentés) ez a kimenet · score(X, y) — egyetlen kényelmi szám; regressziónál R², osztályozónál pontosság — jelentésbe NEM ez megy
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.
33
A legrövidebb teljes menet
1. szétvágás: `X_tan, X_tesz, y_tan, y_tesz = train_test_split(X, y, test_size=0.3, stratify=y, random_state=0)` | 2. modell: `modell = RandomForestClassifier(n_estimators=200, max_depth=6, random_state=0)` | 3. tanítás: `modell.fit(X_tan, y_tan)` — CSAK a tanítóadaton | 4. jóslás: `p = modell.predict_proba(X_tesz)[:, 1]` — valószínűség, nem címke | 5. értékelés: `roc_auc_score(y_tesz, p)` és `average_precision_score(y_tesz, p)`
Ö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.
34
Miért nem szabad a csövön kívül skálázni
Ami az adatból TANUL, az szivároghat: a skálázó átlaga és szórása · az imputáló helyettesítő értéke · a jellemzőválasztó rangsora · a kódoló kategórialistája · a dimenziócsökkentő (PCA) tengelyei — Mind paraméter, mind a tanítóadatból kell jöjjön · A csővezeték a védelem: a `fit` minden lépést a hajtás tanítórészén futtat, a `transform` a kihagyott részen csak ALKALMAZ · Ami NEM szivárog: maga a modellcsalád megválasztása, a jellemzők neve, a rögzített mértékegység-átváltás
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.
35
A csővezeték és a vegyes típusú tábla
Egyszerű cső: `cso = make_pipeline(StandardScaler(), LogisticRegression())` — ettől kezdve `cso.fit(X_tan, y_tan)` és a cső MAGA a becslő | Vegyes tábla: `elo = ColumnTransformer([(″szam″, StandardScaler(), szamoszlopok), (″kat″, OneHotEncoder(handle_unknown=″ignore″), katoszlopok)])` | Összerakva: `cso = Pipeline([(″elo″, elo), (″modell″, GradientBoostingClassifier())])` | Ezután minden ugyanaz: `cross_val_score(cso, X, y, cv=...)` a TELJES csövet validálja, az előfeldolgozással együtt
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.
36
A keresztvalidáció mint becslés
A keresztvalidáció eredménye becslés, tehát van szórása. Átlag szórás nélkül nem eredmény.
Írjuk fel, mit mér a keresztvalidáció. Az adatot k részre vágjuk, mindegyiket egyszer kihagyjuk, és a rajta mért hibákat átlagoljuk. Az első sor ez. A második a szórás, és ez az a szám, ami a jelentésekből a leggyakrabban hiányzik: egyetlen átlag önmagában nem mond semmit arról, mennyire stabil. Ha két modell átlagának különbsége kisebb, mint a hajtások szórása, akkor a két modell között nem tudtunk különbséget kimutatni — és ezt így kell leírni, nem „a második jobb” formában.
37
Hangolás: rácskeresés csővel
Rács: `racs = {″modell__max_depth″: [2, 4, 6], ″modell__learning_rate″: [0.03, 0.1]}` — a kettős aláhúzás köti a lépés nevét a paraméterhez | Kereső: `kereso = GridSearchCV(cso, racs, cv=GroupKFold(5), scoring=″average_precision″)` | Futtatás: `kereso.fit(X, y, groups=tabla_azonosito)` — a `groups` tartja egyben a táblákat | Eredmény: `kereso.best_params_`, `kereso.best_score_`, és `kereso.best_estimator_` a teljes újratanított cső | Sok paraméternél: `RandomizedSearchCV` — 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.
38
Számold ki: mibe kerül a hangolás
A beágyazott keresztvalidáció ára szorzatban nő. Ezért van véletlen keresés.
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.
39
Paraméter és hiperparaméter
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.
40
A fontosabb hiperparaméterek, és mit csinálnak
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.
41
PyTorch: automatikus deriválás
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.
42
Mit ad a keretrendszer, és mit nem
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.
43
Mit csinál az automatikus deriválás
Egy visszafelé menet MINDEN paraméter deriváltját megadja. A véges differencia paraméterenként kettőt kíván.
Nem szimbolikus deriválás és nem véges differencia — egy harmadik dolog. A kifejezést elemi műveletek gráfjaként tartja nyilván, és a láncszabályt a gráfon visszafelé alkalmazza. Az első sor a láncszabály. A második a lényeg: a visszafelé menet EGY végigfutással megadja MINDEN paraméter szerinti deriváltat — nem paraméterenként egyet. A harmadik sor a költség: nagyjából kétszerese az előreterjesztésnek, paraméterszámtól függetlenül. Ezért lehet kétszázmillió paraméteres hálót tanítani, és ezért nem lehet véges differenciával.
44
Ugyanaz a háló kétszer
A kurzus magja: `Halo([3, 16, 8, 1])` — `elore`, `tanit`, kézzel levezetett láncszabály, 40 sor | PyTorch: `nn.Sequential(nn.Linear(3,16), nn.ReLU(), nn.Linear(16,8), nn.ReLU(), nn.Linear(8,1))` | Súlyátvétel: `reteg.weight.copy_(torch.tensor(w.T))` — a `.T` nem ízlés: a két könyvtár más alakban tárol | A mag: `jel @ w + b`, w alakja (bemenet × kimenet) | A torch: `x @ W.T + b`, W alakja (kimenet × bemenet)
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.
45
A két tanulási görbe egybeesik
300 lépés, azonos kezdősúly. A különbség a lebegőpontos ábrázolás zaja, nem másik matematika.
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.
46
Három számítás, egy egyenes
Balra: kézi levezetés ↔ autograd. Jobbra: autograd ↔ véges differencia, tanh és L2-büntetés mellett.
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.
47
A tanítóciklus öt sora
1. `opt.zero_grad()` — a torch HOZZÁADJA a gradienst, nem felülírja; enélkül halmozódik | 2. `ki = modell(bx)` — előreterjesztés, és közben épül a gráf | 3. `veszteseg = ((ki - by) ** 2).mean()` — a veszteség, egyetlen skalár | 4. `veszteseg.backward()` — egy visszafelé menet, minden paraméter gradiense kész | 5. `opt.step()` — a paraméterek elmozdulnak | Kiértékelés: `with torch.no_grad(): ...` — 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.
48
Az optimalizálók: ugyanaz a lépés, más lépéshosszal
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.
Három sor, három optimalizáló. Az első a sima gradiensmódszer: lépj a gradienssel szemben, rögzített hosszal — ezt csinálja a kurzus magja is. A második a lendület: a mai lépéshez hozzáadjuk a tegnapi egy részét, és ettől a keskeny völgyekben nem cikázik. A harmadik az Adam: paraméterenként MÁS lépéshosszt használ, a gradiens eddigi nagyságából becsülve. Ez az, ami miatt az Adam ritkábban kíván rátahangolást — de nem az, ami miatt mindig jobb lenne. Táblázatos adaton a sima SGD gyakran általánosít jobban.
49
Mikor éri meg a háló
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.
50
Most te következel: halmozódik-e a hiba
Az `nn-pytorch` cellája. A `LEPES` átírásával megmérhető, halmozódik-e a lebegőpontos eltérés.
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.
51
A lecke rövidítései
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.
52
A lecke három diagramtípusa, ugyanazon az adaton
A lecke három diagramtípusa, ugyanazon az öt értéken.
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.
53
A lecke diagramtípusai
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.