Sådan trænes Boosted Trees-modeller i TensorFlow

Og hvordan man fortolker dem både lokalt og globalt

Indsendt af Chris Rawles, Natalia Ponomareva og Zhenyu Tan

Træensemblemetoder såsom gradient boostede beslutningstræer og tilfældige skove er blandt de mest populære og effektive maskinlæringsværktøjer, der er tilgængelige, når man arbejder med strukturerede data. Træensemblemetoder er hurtige at træne, fungerer godt uden en masse tuning og kræver ikke store datasæt at træne på.

I TensorFlow er træningsforstærkede træer tilgængelige ved hjælp af tf.estimator API, som også understøtter dybe neurale netværk, brede og dybe modeller og mere. For boostede træer understøttes regression med foruddefineret gennemsnit kvadratisk fejltab (BoostedTreesRegressor) og klassificering med krydsentropitab (BoostedTreesClassifier). Brugere kan også vælge at bruge ethvert dobbelt differentierbart tilpasset tab (ved at give det til BoostedTreesEstimator).

I dette indlæg vil vi vise, hvordan man træner en Boosted Tree-model i TensorFlow, så demonstrerer vi, hvordan man fortolker den trænede model med funktionsbetydning, og også hvordan man fortolker en models forudsigelser for individuelle eksempler. Alle følgende koder er klar til TensorFlow 2.0 (forhåndsindstillede estimatorer understøttes fuldt ud i TensorFlow 2.0). Al koden i dette indlæg er tilgængelig i TensorFlow-dokumenter her og her.

Visualisering af forudsigelsesoverfladen for en Boosted Trees-model. Gradient boosted træer er en ensemble teknik, der kombinerer forudsigelser fra flere (tænk 10'erne, 100'erne eller endda 1000'erne) træmodeller. Forøgelse af antallet af træer vil generelt forbedre kvaliteten af ​​pasform. Prøv det fulde eksempel her.

Træning af en Boosted Trees-model i TensorFlow

Boosted Trees-estimatoren understøtter store datasæt, der ikke passer i arbejdernes hukommelse, og den giver også distribueret træning. Lad os dog demonstrere en Boosted Trees-model på et lille datasæt: det titanske datasæt. Målet med dette (temmelig sygelige) datasæt er at forudsige sandsynligheden for, at en passager overlevede den titaniske styrt ved hjælp af passageregenskaber som alder, køn, klasse osv.

Lad os først importere de nødvendige pakker og indlæse vores datasæt.

Lad os derefter definere funktionskolonner, der skal bruges med vores estimatormodel. Funktionssøjler fungerer med alle TensorFlow-estimatorer, og deres formål er at definere de funktioner, der bruges til modellering. Derudover giver de nogle funktionstekniske kapaciteter såsom one-hot-kodning, normalisering og bucketization. Nedenfor er felterne i CATEGORICAL_COLUMNS omdannet fra kategoriske kolonner til en-kodet kolonne (indikatorsøjle):

Du kan se den transformation, som en funktionskolonne producerer. Her er for eksempel output, når du bruger indikator_kolonnen på et enkelt eksempel:

Derefter skal du oprette inputfunktionerne. Disse specificerer, hvordan data læses ind i vores model til både træning og inferens. Du bruger metoden from_tensor_slices i tf.data API til at læse data direkte fra Pandas. Dette er velegnet til mindre datasæt i hukommelsen. For større datasæt understøtter tf.data API en række filformater (inklusive csv), så du kan behandle datasæt, der ikke passer i hukommelsen.

Lad os først træne en logistisk regressionsmodel for at få et benchmark:

Derefter involverer træning af en Boosted Trees-model den samme proces som ovenfor:

Modelforståelse

For mange slutbrugere er "hvorfor" og "hvordan" ofte lige så vigtige som forudsigelsen. F.eks. Fremhæver den nylige EU-regulering brugernes "ret til forklaring", som dikterer, at brugerne skal være i stand til at få en forklaring på virksomhedernes beslutninger, der væsentligt påvirker brugerne (kilde). Derudover kræver den amerikanske lov om lovgivningsmæssig kreditrapportering, at agenturer afslører "alle de vigtigste faktorer, der har haft negativ indflydelse på forbrugernes kreditværdi i den anvendte model, hvis samlede antal ikke må overstige fire" (kilde).

Modelforklarbarhed kan også hjælpe maskinlæringsudøvere (ML) med at opdage bias i modeludviklingsstadiet. En sådan indsigt hjælper ML-udøvere med at debugere og forstå deres modeller.

Der er generelt to niveauer af modelfortolkbarhed: lokal fortolkbarhed og global tolkbarhed. Lokal tolkbarhed refererer til forståelse af en modellens forudsigelser på det individuelle eksempelniveau, mens global tolkbarhed refererer til at forstå modellen som helhed.

Tolkbarhedsteknikker er ofte specifikke for modelltyper (f.eks. Træmetoder, neurale netværk osv.) Og bruger de indlærte parametre. For eksempel er gevinstbaseret funktion vigtig for træmetoder, mens teknikken Integrated Gradients bruger gradienter i et neuralt netværk.

I modsætning hertil er der også model-agnostiske metoder såsom LIME og shap. LIME fungerer ved at bygge træning af en lokal surrogatmodel for at tilnærme sig forudsigelser af den underliggende black box-model. Formmetoden forbinder spilteori med lokale forklaringer ved at tilskrive hver funktion ændringen i den forventede modelforudsigelse, når man konditionerer denne funktion.

Forståelse af individuelle forudsigelser: Bidrag i retning af funktion

Vi har implementeret den lokale funktionsbidragsmetode skitseret af Palczewska et al og af Saabas i fortolkningen af ​​tilfældige skove. Denne metode er også tilgængelig i træinterpreterpakken til scikit-learning.

Kort sagt tillader teknikken man at forstå, hvordan en model foretager en forudsigelse for et individuelt eksempel ved at analysere, hvordan forudsigelsen ændrer sig, når der oprettes en split. Start med den oprindelige forudsigelse (ofte omtalt som bias og er typisk defineret som gennemsnittet af træningsetiketterne), gennemgår teknikken forudsigelsesstien og beregner ændringen i forudsigelsen efter opsplitning på en funktion. For hver opdeling tilskrives ændringen i forudsigelse den funktion, der bruges til opdelingen. På tværs af alle opdelinger og alle træer summeres disse attributter for at angive de samlede bidrag for hver funktion.

Metoden returnerer en numerisk værdi, der er knyttet til hver funktion. Vi omtaler disse værdier som directional funktionsbidrag (DFC'er) for at skelne dem fra andre måder at evaluere virkningen af ​​funktioner, såsom funktionsvigtighed, der normalt refererer til global funktionsvigtighed. DFC'er tillader undersøgelse af individuelle eksempler og giver indsigt i, hvorfor en model forudsagde et bestemt eksempel. Ved hjælp af denne teknik kan du oprette visualiseringer som denne:

DFC'er for et eksempel i det titaniske datasæt. Uformelt kan dette fortolkes som

En dejlig egenskab ved DFC'er er, at summen af ​​bidragene fra hver funktion vil summeres til den faktiske forudsigelse. For eksempel, hvis der er fem funktioner i modellen, og for en given instans er DFC'erne

{sex_female: 0.2, alder: 0.05, billetpris = -0.02, num_siblings_aboard = -0.1, billetpris: 0.09}

den forudsagte sandsynlighed ville være summen af ​​disse værdier: 0,22.

Vi kan også samle DFC'er på tværs af datasættet for at få indsigt i hele modellen til global fortolkning:

Gennemsnitlige absolutte værdier for top DFC'er på tværs af hele evalueringsdatasættet.billetpris vs bidrag med en LAVESS pasform. Bidrag på tværs af eksempler giver mere detaljeret information end en enkelt metod for vigtighedsfunktion. Generelt resulterer en højere billetfunktion i, at modellen skubber forudsigelser tættere på 1,0 (stigende chance for overlevelse).

Sådan gør du: Bidrag i retning af funktion i TensorFlow

Alle nedenstående koder er tilgængelige i den bærbare Boosted Trees-model.

Først skal du træne en Boosted Trees-estimator ved hjælp af tf.estimator API som beskrevet ovenfor.

Efter træning af vores model kan vi derefter hente modelforklaringer ved hjælp af est.experimental_predict_with_explanations. (Bemærk: Metoden kaldes eksperimentel, da vi muligvis kan ændre API, før vi slipper det eksperimentelle præfiks.)

Ved hjælp af pandaer kan du nemt visualisere DFC'erne:

I vores Colab har vi inkluderet et eksempel, der tilføjer bidragsfordelingerne for at forstå, hvordan DFC'erne for et bestemt tilfælde sammenlignes med resten af ​​evalueringssættet:

Bidrag til et individuelt eksempel i rødt. Det skraverede blå område viser fordelingen af ​​bidrag til funktioner på tværs af hele valideringssættet.

Vi bemærker også, at der er yderligere tredjepartsmodeller agnostisk fortolkningsmetoder, der fungerer med TensorFlow, såsom LIME og shap. Se de yderligere ressourcer nedenfor for flere links.

Tolkbarhed på modelniveau: Gevinstbaserede og permutationsfunktionsimportioner

Der er forskellige måder at opnå forståelse på modelniveau (dvs. global tolkbarhed) for Boosted Tree-modeller. Tidligere viste vi, at du kan aggregerer DFC'er på tværs af datasættet for global tolkbarhed. Dette fungerer også ved at aggregere andre lokale fortolkningsværdier, såsom dem, der er produceret fra LIME eller shap (nævnt ovenfor).

To andre teknikker, som vi diskuterer nedenfor, er gevinstbaserede funktionsimportanser og vigtighed af permutationsfunktioner. Gevinstbaserede funktionsimportanser måler tabsændringen ved opdeling af en bestemt funktion, mens imputanser til permutationsfunktioner beregnes ved at evaluere modelydelsen på evalueringssættet ved at blande hver funktion én for én og tilskrive tabet i modelydelse til den blandede funktion . Betydningen af ​​permutationsfunktionen har fordelen ved at være model agnostisk, men begge metoder kan imidlertid være upålidelige i situationer, hvor potentielle prediktorvariabler varierer i deres målingsskala eller deres antal kategorier (kilde).

I estimatorerne til Boosted Trees i TensorFlow hentes gevinstbaserede funktionsimportanser vha. Est.experimental_feature_importances. Her er et fuldt eksempel med kortlægning:

Importeringer af permutationsfunktioner kan beregnes som følger:

Korrelerede variabler og andre overvejelser

Mange modelfortolkningsværktøjer giver et forvrænget billede af funktionskonsekvenser, når de to eller flere funktioner er korrelerede. For eksempel, hvis du træner en ensemble-træmodel, der indeholder to meget korrelerede funktioner, vil gevinstbaserede funktionsbetydningen for begge funktioner være mindre sammenlignet med eksklusivt at inkludere begge funktioner.

I det titanske datasæt skal vi sige, at vi ved et uheld kodede en passagers klasse to gange - i form af to variabler klasse og pclass. Efter at have kodet disse kategoriske funktioner ved hjælp af en hot kodning og træning af modellen, observeres det, at en passager, der er i tredje klasse, har forudsigelsesstyrke - vi kan se dette to gange.

Når vi har droppet en af ​​funktionerne (pclass) og undersøgt import af funktioner, fordobles betydningen af ​​en passager i tredje klasse ca.

I dette tilfælde er de to funktioner perfekt korrelerede, men det samme fænomen forekommer også med delvist korrelerede træk, bare i mindre grad.

For de teknikker, vi har diskuteret ovenfor, anbefales det at fjerne stærkt korrelerede funktioner. Dette hjælper ikke kun med at tolke, men det vil også resultere i hurtigere modeluddannelse. Plus at vedligeholde færre funktioner er lettere end at vedligeholde et stort antal funktioner.

Endelig bemærker vi, at Strobl et al. introducerede en anden teknik kaldet betinget variabel betydning ved hjælp af funktionstermutation, der kan hjælpe med at give et mere realistisk estimat af funktionskonsekvenser i nærvær af korrelerede variabler. Tjek papiret for flere detaljer.

Konklusion

Gradientforstærkede beslutningstræer er tilgængelige i TensorFlow ved hjælp af tf.estimator API, som giver brugerne mulighed for hurtigt at eksperimentere med forskellige maskinlæringsmetoder. For gradient boostede beslutningstræer, lokal modelfortolkbarhed (per-instans-tolkbarhed ved hjælp af metoden skitseret af Palczewska et al og af Saabas (Tolkning af tilfældige skove) via eksperimentel_predikt_med_forklaringer) og tolkbarhed på globalt niveau (gevinstbaserede og permutationsfunktionsimportioner) er tilgængelige i TensorFlow . Disse metoder kan hjælpe praktikere med at forstå deres modeller.

Udgivelsen af ​​TensorFlow Boosted Trees har været mulig takket være en masse mennesker, herunder, men ikke begrænset til, Soroush Radpour, Younghee Kwon, Mustafa Ispir, Salem Haykal og Yan Facai.

Yderligere ressourcer

Andre modelfortolkningsmetoder, der arbejder med TensorFlow

  • CITRON
  • Shap
  • Integrerede gradueringer (kun neurale netværk)
  • SmoothGrad (kun neurale netværk)
  • Gittermetoder i TensorFlow

Betydning af permutationsfunktion (Brieman, 2001)