Metode de ansamblu: Campionul Kaggle Machine Learning

Publicat: 2022-03-11

Proverbul „Două capete sunt mai bune decât unul” capătă un nou sens atunci când vine vorba de ansambluri de învățare automată. Metodele de ansamblu sunt unele dintre cele mai decorate familii ML la competițiile Kaggle, unde adesea câștigă concursuri cu rezultatele lor impresionante.

Dar a trecut un secol înainte de Kaggle când statisticianul Sir Francis Galton a observat potența inteligenței agregate. Sa întâmplat cu o competiție la un târg de animale în care participanții trebuiau să ghicească greutatea unui bou. Opt sute de oameni au trimis ipoteze, dar nivelurile lor de calificare au variat: fermierii și măcelarii au ghicit alături de locuitorii orașului care nu văzuseră niciodată un bou de aproape, așa că Galton s-a gândit că ipoteza medie ar fi destul de greșită.

S-a dovedit că media ipotezelor mulțimii a fost redusă cu mai puțin de o liră (< 0,1%). Cu toate acestea, chiar și cele mai bune previziuni individuale au fost cu mult depășite.

Cum ar putea fi asta? Ce a făcut posibil un rezultat atât de neașteptat?

Ce face ca ansamblurile de mașini să fie atât de eficiente

Evenimentul care l-a forțat pe Galton să-și pună la îndoială convingerile ilustrează, de asemenea, ceea ce face ansamblurile atât de puternice: dacă aveți modele diferite și independente , antrenate folosind diferite părți de date pentru aceeași problemă, acestea vor funcționa mai bine împreună decât individual. Motivul? Fiecare model va învăța o parte diferită a conceptului. Prin urmare, fiecare model va produce rezultate valide și erori pe baza „cunoștințelor” sale.

Dar cel mai interesant lucru este că fiecare parte adevărată se va completa pe celelalte, în timp ce erorile se anulează reciproc:

O imagine care înfățișează conceptul de opt modele diferite, fiecare învățând un set diferit de fapte care se pot suprapune sau nu. Rezultatul combină ceea ce a învățat fiecare model și elimină unele dintre erorile acestora.

Trebuie să antrenați modele cu varianță mare (cum ar fi arbori de decizie) pe subseturi distincte de date. Această variație adăugată înseamnă că fiecare model depășește date diferite, dar atunci când este combinat, varianța dispare, ca prin farmec. Acest lucru creează un model nou, mai robust.

La fel ca în cazul lui Galton, atunci când toate datele din toate sursele sunt combinate, rezultatul este „mai inteligent” decât punctele de date izolate.

O privire mai atentă asupra învățării ansamblului în competițiile Kaggle

La Otto Group Product Classification Challenge, participanții au trebuit să construiască un model predictiv care să poată face distincția între principalele categorii de produse.

Aici puteți vedea cum a fost construit modelul câștigător. A fost o stivuire de trei straturi: primul avea 33 de modele, al doilea a adăugat încă trei (XGBoost, o rețea neuronală și AdaBoost), iar al treilea a fost media ponderată a ieșirilor stratului anterior. A fost atât un model foarte complex, cât și un ansamblu.

Un alt succes Kaggle este modelul creat de Chenglong Chen la competiția Crowdflower Search Results Relevance. Provocarea a fost crearea unui predictor care ar putea fi utilizat pentru a măsura relevanța rezultatelor căutării. Puteți citi explicația completă a metodei sale, dar întrucât punctul nostru de interes sunt ansamblurile, partea critică a poveștii este că soluția câștigătoare a folosit un ansamblu de 35 de modele, dintre care multe erau și ansambluri — un meta-ansamblu, deci a vorbi.

Metode de ansamblu

Există multe modalități de implementare a metodelor de ansamblu în învățarea automată. Vom explora câteva dintre cele mai populare metode:

  • Ambalare
    • Pădurea aleatorie
  • Amplificare
    • AdaBoost
    • Creșterea gradului și XGBoost
  • Metode de ansamblu hibrid
    • Vot
    • Stivuire
    • În cascadă

Ambalare

După cum sa menționat, trebuie să antrenați multe modele pe diferite subseturi de date. În practică, acest lucru nu este ușor, deoarece veți avea nevoie de mult mai multe date pentru multe modele decât ați avea pentru un singur model și, uneori, nu este ușor să obțineți seturi de date de înaltă calitate. Acesta este momentul în care eșantionarea (agregarea bootstrap) este utilă, deoarece împarte datele prin bootstrapping: un eșantion aleatoriu cu o înlocuire, rezultând diferite subseturi care se suprapun.

Odată ce v-ați antrenat modelele de ansamblu, vă construiți predicția finală prin agregarea fiecărui model de predicție prin orice măsurătoare pe care o preferați: media, mediana, modul și așa mai departe. De asemenea, puteți utiliza probabilitățile de predicție a modelului pentru a realiza o valoare ponderată:

Diagrama care arată utilizarea tehnicii de însacare pentru a împărți datele prin Bootstrap, a agregat fiecare predicție de model din diferite subseturi pentru a produce rezultatul final.

Dacă dorim să folosim arbori de decizie ca modele, dar avem puține atribute predictive puternice în datele noastre, toți arborii vor fi similari. Acest lucru se datorează faptului că aceleași atribute vor avea tendința de a fi în nodul rădăcină, producând rezultate similare în fiecare ramură a arborelui.

Pădurea aleatorie

O tehnică pentru a rezolva această problemă este pădurea aleatoare . Realizează un ansamblu de ambalare folosind copaci, dar fiecare nod își constrânge atributele posibile la un subset aleatoriu. Acest lucru obligă modelele să fie diferite, rezolvând problema anterioară. De asemenea, face din pădurea aleatorie un model foarte bun pentru selecția caracteristicilor.

Pădurea aleatorie este unul dintre cele mai populare modele ML, deoarece oferă performanțe bune, cu variație redusă și timp de antrenament.

Amplificare

Boosting folosește, de asemenea, bootstrapping pentru a antrena modelele, principala diferență fiind că adaugă ponderi fiecărei instanțe pe baza erorilor de predicție a modelului. În timp ce ambalarea este un proces paralel, boostingul este unul secvenţial, în care fiecare model are mai multe probabilităţi. Acest lucru îi permite accesul la unele instanțe ale predicțiilor modelului anterior.

Cu această modificare, amplificarea încearcă să mărească concentrarea asupra instanțelor clasificate greșit pentru a atinge performanțe globale mai bune:

O diagramă care ilustrează diferitele abordări utilizate de îmbogățire și amplificare, ilustrând natura paralelă a însacării și natura secvențială a impulsionării.

Adaugă greutăți și modelelor. Predictorii cu performanțe mai bune la timpul antrenamentului vor avea o pondere mai mare la etapa de predicție.

Să aruncăm o privire mai atentă la unele dintre cele mai populare modele de stimulare:

AdaBoost

AdaBoost a fost una dintre primele implementări de boosting. Face aproape exact ceea ce am subliniat despre stimularea în general și folosește arbori de decizie ca modele. Să explicăm faza de antrenament cu o pseudocodare:

 For each instance i Assign w[i] (weight, same for all) For each iteration t Generate a subset s[t] by weighted boosting (using the w[i] weights) Train model m[t] using s[t] Store m[t] Calculate e[t] (error rate of m[t]) Assign error rate e[t] to stored m[t] model If (e[t] <= a_threshold) Exit for Update weights using m[t] errors

La momentul predicției, ponderează fiecare predicție pe baza ratei de eroare e[t] calculată pentru fiecare. Rezultatele cu o rată de eroare ridicată vor avea o greutate mai mică decât altele cu o precizie mai bună.

Creșterea gradului și XGBoost

Una dintre problemele majore atunci când antrenați atât de multe modele și le faceți să lucreze împreună este găsirea celei mai bune configurații de hiperparametri. Este dificil să găsești cea mai bună configurație pentru un singur model; găsirea celei mai bune configurații pentru n modele crește complexitatea exponențial. Configurația ideală pentru un model izolat probabil nu este aceeași cu configurația pentru un model care trebuie să funcționeze cu alții. Ca atare, ar trebui să căutați configurația tuturor modelelor în același timp, dar cum?

Amplificarea gradientului aduce o soluție elegantă la această problemă. Se creează o funcție de pierdere care are, ca intrare, toate valorile hiperparametrului tuturor modelelor și, ca ieșire, eroarea întregului ansamblu. Prin coborâre în gradient, găsește valoarea minimă a funcției (adică, cea mai mică eroare) și, prin urmare, cea mai bună configurație de hiperparametru pentru fiecare model.

Această abordare introduce o problemă de scalare. Intră în regele învățării automate pentru datele structurate: creșterea gradului extremă, XGBoost pe scurt. Este o implementare incredibil de eficientă a creșterii gradientului, datorită diferitelor tehnici, cum ar fi calculul paralelizat, capacitatea de validare încrucișată încorporată, regularizarea pentru a evita supraajustarea și optimizarea hardware. XGBoost oferă performanțe remarcabile.

XGBoost a devenit popular atunci când creatorul său l-a folosit pentru o provocare Kaggle și a câștigat cu o marjă largă. El a publicat rezultatul și a creat un wrapper Python pentru a permite mai multor persoane să-l folosească. Când mulți oameni i-au recunoscut potențialul, XGBoost a devenit rapid un campion ML.

Metode de ansamblu hibrid

Dar povestea nu se termină aici. Am văzut multe tipuri de ansambluri care folosesc toate același tip de model - de ce să nu încercați combinații de modele diferite? Dacă faci asta bine, poți crea o metodă ML și mai puternică: un ansamblu hibrid .

Vot

Votul este una dintre cele mai simple abordări pentru a crea un ansamblu hibrid. Antrenează mulți algoritmi de model diferiți și îi face să „voteze” în faza de predicție:

Diagramă care arată fluxul de date în trei modele antrenate: Support Vector Machine, Logistic Regression și KNN. Rezultatul pentru primul și cel din urmă este 1, în timp ce rezultatul pentru regresia logistică este 0. Rezultatul final este 1.

Puteți adăuga ponderi fiecărui model în funcție de performanța acestuia sau de probabilitățile de predicție și puteți genera un vot ponderat.

Stivuire

Stacking avansează ideea de a vota prin adăugarea unui nou strat peste modelele de bază pentru a face predicția finală în loc să calculeze doar media sau majoritatea. Se adaugă conceptul de meta-învățare, deoarece noul strat învață nu din date, ci din predicțiile modelului:

Diagramă care arată fluxul de date în trei modele de bază antrenate, combinând rezultatele lor într-un model stivuit înainte de afișarea rezultatului final.

Puteți stivui toate metastraturile care vă plac, rezultând un model cu mai multe niveluri. Pentru modelele stivuite, recomand să utilizați arbori de decizie, SVM-uri sau perceptroni. Pentru modelele de bază, puteți folosi orice metodă doriți, chiar și un alt ansamblu, creând un ansamblu de ansambluri. Stivuirea funcționează și mai bine cu modele de bază, cum ar fi arbori de decizie, care generează nu numai o predicție de valoare, ci și probabilitatea ca aceasta să fie corectă.

Stacking-ul este mai puțin popular decât bagging-ul sau boosting, deoarece este mai dificil de interpretat ceea ce învață modelele stivuite și pentru că există un număr mult mai mare de variante: vă puteți juca cu multe combinații de algoritmi de model, configurații de hiperparametri și straturi de stivuire. Cu toate acestea, cu o combinație potrivită de modele, stivuirea poate fi chiar mai puternică decât întărirea și însacarea.

În cascadă

Cascada este folosită atunci când doriți să aveți un grad mare de siguranță în predicție. Utilizează o abordare de stivuire, dar are doar un model în fiecare strat. La fiecare nivel, modelele renunță la cazurile pe care le consideră a nu fi din clasa dorită.

Cu cascada, modelele simple evaluează datele înaintea modelelor complexe. La pasul de predicție, primul model primește datele. Dacă certitudinea nu este mai mare decât x (valoarea trebuie să fie mare, ceva mai mare de 0,9), acesta trece instanța la următorul model. În caz contrar, cascada returnează rezultatul estimat al modelului respectiv. Dacă niciun strat nu poate prezice clasa dorită cu un grad ridicat de certitudine, ansamblul returnează clasa negativă.

Un caz de utilizare clasic pentru acest model este prezicerea când o tranzacție este probabil să fie frauduloasă. Să presupunem că un sistem calculează milioane de tranzacții pe zi și că este imposibil să controlezi fiecare dintre ele manual. Utilizarea unui ansamblu în cascadă poate elimina tranzacțiile care nu sunt frauduloase cu o probabilitate foarte mare, lăsând doar un mic subset de tranzacții de verificat manual:

Diagramă care ilustrează utilizarea cascadării pentru a detecta tranzacțiile frauduloase. Două modele resping posibilitatea fraudei cu o certitudine mai mare de 0,9, în timp ce unul dintre modelele ulterioare detectează o certitudine mai mică, determinând o verificare manuală.

Aceste modele sunt opțiuni bune atunci când aveți nevoie de o valoare excelentă a retragerii.

Spre deosebire de vot și de stivuire, un ansamblu în cascadă folosește o abordare multistat, mai degrabă decât o abordare multiexpert. Este important să fii precaut cu privire la cascada foarte adâncă, deoarece ar putea produce o supraadaptare.

Valoarea metodelor de ansamblu

Combinarea multor modele ne permite să creăm predictori mai buni și mai puternici, așa cum se întâmplă atunci când oamenii lucrează împreună. Am schițat trei familii de ansambluri — bagging, boosting și hibrizi — și am văzut cum se antrenează și prevăd.

Un arbore de decizie ar putea fi un model foarte slab și instabil (cu o variație mare), dar o mulțime de copaci diferiți (pădure aleatoare) poate fi un predictor foarte precis și stabil. Unul dintre avantajele principale ale ansamblurilor este că ele construiesc modele cu varianță scăzută și părtinire redusă, unul dintre cele mai mari compromisuri în învățarea automată. În cele mai multe cazuri, depășesc alte metode și, uneori, sunt chiar mai bune decât învățarea profundă. Ele tind să fie mai slabe decât rețelele neuronale profunde numai atunci când funcționează pe date nestructurate.

Dacă continuăm comparația cu rețelele neuronale profunde, putem spune și că ansamblurile tind să fie mai ușoare și mai rapide la fazele de antrenament și testare. De asemenea, nu necesită hardware scump pentru a rula, cum ar fi GPU-uri puternice și discrete.

Este adevărat că ansamblurile nu au posibilitatea de a fi înțelese intuitiv de oameni pentru că a avea zeci sau sute de modele care lucrează în același timp creează un instrument uriaș și complex. Din fericire, unele tehnici ne permit să înțelegem cum aceste metode își iau deciziile. Una dintre cele mai populare este LIME, o metodă care creează explicații interpretabile pentru o anumită instanță peste orice model de învățare automată.

Concursurile Kaggle nu există doar pentru ca dezvoltatorii să se distreze, să învețe noi abilități sau să câștige premii. Scopul final este de a crea modele puternice și de a le elibera în sălbăticie, pentru a le lăsa să-și facă magia în scenarii din lumea reală. Aceste tipuri de modele sunt folosite de organizațiile care se ocupă de probleme critice. De exemplu, detectarea fraudei este un caz de utilizare obișnuit în industrii precum bancare și călătorii, care se ocupă cu sume mari de bani mutate în tranzacții unice.

Ansamblurile produc predicții mai bune, cu o varianță și o părtinire mai reduse decât alte modele. Cu toate acestea, este dificil de interpretat ceea ce învață și acest lucru poate fi de o importanță critică în unele aplicații sensibile. Un exemplu în acest sens este industria împrumuturilor personale: un model ML ar putea determina dacă o persoană este sau nu eligibilă pentru un împrumut. Cu toate acestea, dacă clientul întreabă de ce instituția financiară a refuzat împrumutul, ar trebui să existe o explicație detaliată, nu doar „Pentru că așa a spus modelul nostru ML”.

În cele din urmă, fie că doriți să creați modele ML puternice pentru aplicații de întreprindere, bănci mari sau întreprinderi mici sau doar să participați la concursuri pentru a vă crește reputația profesională, ansamblurile ar trebui să fie instrumentul dvs. de alegere.