Jeg lærer om beslutningstræer, og jeg har lyst til indtil nu at jeg har forstået dem og matematikken bag dem ret godt bortset fra én ting: forstærkningsprocenten.
Som jeg forstår, implementeres forstærkningsprocenten for at straffe for funktioner, der kan få MEGE mulige værdier.
Hvis en funktion får mange mulige værdier, bliver det plausibelt, at hvis vi deler på denne funktion, kan der være værdier, der kun peger på en enkelt klasse, men simpelthen fordi der kun er 1 eller 2 data point med den værdi for den funktion alligevel.
Med andre ord, den eneste grund til, at vi ville få lav entropi for at opdele denne funktion, er fordi funktionen kunne tage mange værdier, og derfor pegede mange af disse værdier specifikt på en enkelt etiket . Så vores beslutningstræalgoritme ville ende med at dele op på noget som “ID #” og forkert beregne, at vi lige havde en Kæmpe informationsgevinst.
Dette virker dog kun som et problem, fordi “ID #” er en funktion, vi ikke skulle dele på til at begynde med. Jeg mener, hvis vi havde en anden funktion, der også påtog sig meget muligt værdier, men hver af disse værdier antydede faktisk noget mærke til det datapunkt, så ville ikke anvendelse af forstærkningsforholdet betyde, at vi faktisk ødelægger vores beslutningstræ ved at straffe, hvad der faktisk var en meget god split med masser af informationsgevinst?
Er det ikke bedre bare at identificere, hvilken funktion der ikke har noget med vores mærkning at gøre, FØR vi indfører træningsdataene til algoritmen?
IDK, jeg bare ikke se, hvorfor gevinstforholdet virkelig ville være nyttigt …
Svar
Jeg havde den samme tvivl, da jeg lavede min master “Grad. Først og fremmest inkluderer du ikke noget så tilfældigt som” IDer “. Det er her, forbehandling af data kommer ind. Lad os tage et datasæt, der har brugere og deres filmgenre-præferencer baseret på variabler som køn, aldersgruppe, vurdering, bla, bla. Ved hjælp af informationsgevinst opdeles du ved “Køn “(forudsat at den har den højeste informationsgevinst) og nu kan variablerne” Aldersgruppe “og” Bedømmelse “være lige så vigtige, og ved hjælp af forstærkningsforhold vil det straffe en variabel med mere forskellige værdier, som hjælper os med at beslutte del på næste niveau.
Kommentarer
- OKaaaay, Awesome! Så vi bruger kun gain ratio når vi er imellem at dele på to forskellige mulige funktioner ! Er det i orden at vælge den, der er mere sandsynlig, at testdataene har en tidligere set værdi for, fordi det er den stemning, jeg fik fra ID-eksemplet, årsagen til, at det var en dårlig split, at den havde så stor chance for at tage på forskellige værdier (i dette tilfælde vil ingen andre have det samme ID).
- Det giver ALT mere mening . Hver forklaring, jeg ' har læst, bruger IDer, og det bliver ved med at få mig til at tænke på, hvorfor nogen har det i et datasæt i første omgang? !!!! Tak Danny! Jeg ' kan lide dit indlæg, men jeg har ' ikke nok omdømme endnu.
Svar
Informationsgevinst er en af heuristikkerne, der hjælper med at vælge attributterne til valg.
Som du ved, er beslutningstræer en konstrueret top -down rekursiv del-og-erobre måde. Eksempler deles rekursivt på baggrund af udvalgte attributter.
I ID3-algoritmer bruger vi de attributter, der har den højeste informationsgevinst.
Lad $ p_i $ være sandsynligheden for, at en vilkårlig tuple i $ D $ tilhører klasse $ C_i $ . Så $ p_i = | C_ {i, d} | / | D | $ Forventede oplysninger (entropi), der er nødvendige for at klassificere en tuple i $ D $ $$ Info (D) = – \ sum_ {i = 1} ^ {m} {p_i * \ log (p_i)} $$
Nødvendige oplysninger (efter brug af A til at opdele D i v-dele) for at klassificere D: $$ Info_A (D) = – \ sum_ {j = 1} ^ {v} {D_j / D * Info_j (D)} $$
Oplysninger opnået ved forgrening på attribut A
$$ Gain (A) = Info (D) – Info_A (D) $$
I C4.5-algoritme er vi nødt til at opdele informationsforskellen med $ SplitInfo (A) $
$$ Gain (A) = (Info (D) – Info_A (D)) / SplitInfo (A) $$