Jeg lærer om beslutningstrær, og jeg har inntil nå forstått dem og matematikken bak dem ganske bra bortsett fra én ting: forsterkningsforholdet.

Som jeg forstår, blir forsterkningsgraden implementert for å straffe for funksjoner som kan ta mange mulige verdier.

Hvis en funksjon får mange mulige verdier, blir det sannsynlig at hvis vi deler på den funksjonen, kan det være verdier som bare peker mot en enkelt klasse, men bare fordi det bare er 1 eller 2 data poeng med den verdien for den funksjonen uansett.

Med andre ord, den eneste grunnen til at vi ville få lav entropi for å dele på den funksjonen, er fordi funksjonen kan ta på seg mange verdier, og derfor pekte mange av disse verdiene spesifikt på en enkelt etikett . Så beslutningstreet-algoritmen vår ville ende opp med å splitte seg opp i noe som «ID #», og feilaktig beregne at vi nettopp hadde en STOR informasjonsgevinst.

Dette virker imidlertid bare som et problem fordi «ID #» er en funksjon vi ikke skal dele på til å begynne med. Jeg mener, hvis vi hadde en annen funksjon som også tok på seg mye mulig verdier, men hver av disse verdiene innebar faktisk noen merkelapper for det datapunktet, ville da ikke anvendelse av forsterkningsgraden bety at vi faktisk ødelegger beslutningstreet vårt ved å straffe det som faktisk var en veldig god splittelse med tonnevis av informasjonsgevinst?

Er det ikke bedre å bare identifisere hvilken funksjon som ikke har noe med merkingen vår å gjøre FØR vi leverer treningsdataene til algoritmen?

IDK, jeg bare ikke se hvorfor gevinstforholdet virkelig ville være nyttig …

Svar

Jeg hadde samme tvil da jeg gjorde min master «Grad. Først og fremst inkluderer du ikke noe så tilfeldig som» ID «. Dette er hvor forhåndsbehandling av data kommer inn. La oss ta et datasett som har brukere og deres filmgenreinnstillinger basert på variabler som kjønn, aldersgruppe, vurdering, bla, bla. Ved hjelp av informasjonsgevinst deler du deg under «Kjønn «(forutsatt at den har den høyeste informasjonsgevinsten) og nå kan variablene» Aldersgruppe «og» Rangering «være like viktige, og ved hjelp av gevinstforhold vil det straffe en variabel med mer tydelige verdier som vil hjelpe oss å bestemme del på neste nivå.

Kommentarer

  • OKaaaay, kjempebra! Så vi bruker bare forsterkningsgrad når vi er i mellom å dele på to forskjellige mulige funksjoner ! Er det for å velge den som er mer sannsynlig for testdataene å ha en tidligere sett verdi for, fordi det er stemningen jeg fikk fra ID-eksemplet, årsaken til at det var en dårlig splittelse den hadde så stor sjanse til å ta på forskjellige verdier (i dette tilfellet vil ingen andre ha samme ID).
  • Det gir mye mer mening . Hver forklaring jeg ' har lest bruker ID-er, og det får meg til å tenke på hvorfor noen har det i et datasett i utgangspunktet? !!!! Takk Danny! Jeg ' liker innlegget ditt, men jeg har ikke ' ikke nok rykte ennå.

Svar

Informasjonsgevinst er en av heuristikkene som hjelper til med å velge attributter for valg.

Som du vet beslutningstrær, er en konstruert topp -ned rekursiv del-og-erobre måte. Eksempler blir porsjonert rekursivt basert på utvalgte attributter.

I ID3-algoritmer bruker vi velg attributtene med høyest informasjonsgevinst.

La $ p_i $ være sannsynligheten for at en vilkårlig tuple i $ D $ tilhører klasse $ C_i $ . Så $ p_i = | C_ {i, d} | / | D | $ Forventet informasjon (entropi) som er nødvendig for å klassifisere en tuple i $ D $ $$ Info (D) = – \ sum_ {i = 1} ^ {m} {p_i * \ log (p_i)} $$

Informasjon som trengs (etter å ha brukt A for å dele D i v-deler) for å klassifisere D: $$ Info_A (D) = – \ sum_ {j = 1} ^ {v} {D_j / D * Info_j (D)} $$

Informasjon hentet ved å forgrene seg på attributt A

$$ Gain (A) = Info (D) – Info_A (D) $$

I C4.5-algoritme må vi dele informasjonsforskjellen med $ SplitInfo (A) $

$$ Gain (A) = (Info (D) – Info_A (D)) / SplitInfo (A) $$

skriv inn bildebeskrivelse her

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *