machine learning

Első versenyes tanulságok, tapasztalatok

CHAMPS postitVoltam ugyebár ezen a Champs Scalar Coupling nevű versenyen. Menet közben volt néhány “ahaaa” pillanat, amikor rádöbbentem valamire, és amit jó lett volna tudni verseny elején. Úgy érzem ezeket érdemes összeszedni, hasznos lehet azok számára, akik első Kaggle versenyükre készülnek.

De mielőtt belevágnánk, egy fontos megjegyzés: minden verseny más, nagyon. Nincs egységes recept. És persze én sem vagyok veterán, másoknak más lehetett a tapasztalata. Na de akkor vágjunk bele.

Cross-Validation mindenek felett

Számomra a legnagyobb tanulság volt, hogy a jó kereszt-validáció nagyon nehéz. Ezt egyébként már sokan mondták, de olvasni és megtapasztalni egész más.

Én a verseny utolsó pillanatáig azt hittem, hogy a CV (Cross-Validation) stratégiám jó. De kiderült, hogy nem volt tökéletes, csak amíg kis pontossággal becsült a modell, addig nem volt gond. A kereszt validáció azért fontos, hogy meg lehessen állapítani a modellről, hogy mennyire képes generalizálni, azaz mennyire működik jól ismeretlen adatokon.

Éppen ezért érdemes minél hamarabb, minél több becslést beküldeni, mert így a teszt adathalmazról és a készülő modellről is szerzünk információt.

A kaggle.com egy közösségi oldal

Egy másik fontos tapasztalat, hogy rengeteg hasznos információ, trükk, ötlet, stb… található a verseny fórumában és a publikus notebookookban (kernelekben). Én tulajdonképpen úgy értem el a “bronz” eredményt, ami amúgy egyáltalán nem egy nagy szám, hogy semmi mást nem csináltam, csak próbáltam minél több dolgot kipróbálni majd beépíteni az elérhető anyagokból.

Eltérő modellek kellenek

Végül pedig egy közismert dolog, a “kiátlagolás” tényleg nagyon hatékony eszköz. A saját modellem pontszáma -1.7 volt (a kisebb szám a jobb). Ezt kevertem -1.3 és -1.5 pontos becslésekkel, és a végeredmény -1.9 körüli eredmény lett, tehát sokkal jobb, mint bármelyik külön komponense.

Éppen ezért nagyon megtérül, ha nem csak egy modellt építünk, hanem minél többet. Egy GBM, egy neurális háló, stb, stb… Akkor is sokat fognak hozzátenni a végeredményhez, ha külön-külön nem annyira erősek.

Én ennyi tanáccsal tudtam szolgálni, végül két linket osztanék meg, korábbi nyertesekkel készült interjúk. Érdemes elolvasni, mit mondtak, tudhatnak valamit, elvégre győztek :)

"Bestfitting"-gel készült interjú, 2018-ban Kaggle #1

Abhishek Thakur interjú, Competition Grandmaster, Kernel Grandmaster és Discussion Grandmaster

Zárásként még annyit, hogy én elképesztően jól éreztem magam a verseny közben, végre valami olyannal foglalkozhattam amiért 110%-ig lelkesedni tudtok. És közben rengeteget tanultam. Mindenkinek csak ajánlani tudom, hogy belevágjon.

Becsüljünk mágneses kölcsönhatást

Részt vettem egy Kaggle versenyen

Elég régen nem írtam erre a blogra, pedig lett volna miről. Viszont most olyan témám van, amiről mindenképpen érdemes írni. Mesterséges intelligenciával kezdtem foglalkozni, és beleszerettem. Ennek egyik eredménye, hogy részt vettem egy Kaggle versenyen.

Mi az a Kaggle?

A kaggle egy közösségi oldal ahol a gépi tanulás és mesterséges intelligencia iránt érdeklődők tudják tartani a kapcsolatot. Vannak ugyan általános beszélgetések is, de az egész portál valójában adathalmazok köré, illetve versenyek köré szerveződik.

Nagyon-nagyon leegyszerűsítve egy ilyen verseny úgy néz ki, hogy kapunk két adathalmazt, a tanító és a teszt adathalmazt. Mindkét halmazra egy hatalmas táblázatként kell gondolni rengeteg sorral és oszloppal (mondom, leegyszerűsítve). A tanító és a teszt adathalmaz ugyanazokkal az oszlopokkal rendelkezik (X0, X1, … , Xn). A tanító halmazban ezen felül van egy extra oszlop (Y), ez az adat amiről a verseny szól. A teszt adatokból hiányzik ez az oszlop, ezt kell tudni minél pontosabban megbecsülni a tanító adatok alapján. A verseny kiíróinak rendelkezésére áll a teszt halmazon is az Y adat, így amikor beküldesz egy megoldást (becslés a teszt halmaz Y értékére) akkor azonnal kapsz egy hiba pontszámot a becslésedre. Minél kisebb a hiba, annál jobb vagy, annál előrébb kerülsz a ranglétrán.

Egy tipikus példa szokott lenni, ingatlan árának a becslése. Itt az X oszlopok az ingatlan adatai (hány négyzetméter, hány szintes, mikor épült, mikor volt felújítva, milyen a fűtése, stb…) az az Y oszlop hogy mennyibe kerül az ingatlan. Korábbi eladásokból lehet becsülni eladási árat új ingatlan hirdetésekre.

Egy másik klasszikus példa, ahol a bemeneti adatok valójában képek, itt a képen egy pixel egy oszlop (X) a pixel színe pedig az oszlopban az érték. Az Y kimenet pedig annyi, hogy cica vagy kutyus van a képen.

Az ingatlanos példa egy regresszió, mert egy számot kell becsülni, a képfelismeréses példára pedig bináris klasszifikáció. Klasszifikáció, mert csoportokat kell képezni, és bináris, mert két halmaz van, kutya és macska.

Becsüljünk atomok közötti mágneses kölcsönhatást

Sok verseny fut egyszerre a Kaggle-ön, én szándékosan olyat választottam, ahol semmilyen domain tudásom nincsen, azaz semmilyen információt nem tudok hozzátenni az X és az Y adatok közötti kapcsolathoz.

Ilyen volt a Champs Scalar Coupling verseny. Léteznek ugye a molekulák, azon belül meg vannak az atomok, a molekulán belüli atomok között pedig mágneses kölcsönhatás van. Ez egy nagyon fontos adat a kémiával (gyógyszeripar, építő ipar, stb…) foglalkozó kutatók számára. Ma már rendelkezésre áll a tudásunk, hogy ezt a mágneses kölcsönhatást pontosan kiszámoljuk, de egy ilyen számítás hetekig is eltarthat egy db. molekulára. A verseny célja volt, hogy a molekula struktúrájából (a molekulában lévő atomok és elhelyezkedésük) becslést kellett adni a mágneses kölcsönhatás mértékére.

Júniustól augusztusig tartott a verseny, a 3 hónap alatt összesen kb. 2700 csapat indult a világ minden tájáról. Legfeljebb 5 fős csapatok nevezhettek. A pontozás, mint mindig, itt is a becslésre adott hiba volt. A legjobbak nagyon profi megoldásokat szállítottak. A legjobbak között természetesen sok ázsiai csapat és orosz csapat is volt.

A legjobb megoldást két kutatócsoport, a Bosch Research és a Bosch Center for AI kutatói közös erővel hozták össze. Gratulálok nekik, elolvastam a fórumban, hogy hogyan csinálták, annyit mondhatok, nem semmi eredmény.

Én 202.-ik helyezést értem el, a 2749 indulóból. Elégedett vagyok az eredménnyel, rengeteg dolgot meg kellett tanulnom menet közben, és persze elkövettem pár amatőr hibát is. A megoldásomat Python nyelven írtam, és a Microsoft LightGBM rendszerét használtam, ami egy Gradient Boosting Machine implementáció. A Python kódot feltettem GitHub-ra is.

A pontszám amit én kaptam -1.95 volt, a legjobb megoldás pedig -3.24. Azért negatív számok, mert nagyon pici számokat kellett becsülni, ezért a pontszám az átlagos hiba logaritmusa. Visszatranszformálva a logaritmust, az jön ki, hogy én átlagos hibám 0.142 körül alakult, a legjobb megoldás átlagos hibája 0.039.

Tervezek majd írni egy technikai jellegű posztot is, ahol néhány tanulságot, érdekességet kiemelek a versenyről.

Feliratkozás RSS - machine learning csatornájára