Lær klassificering med beslutningstræer i R

Robert træ

Følg

Jul 30, 2019 * 4 min læst

når det kommer til klassificering, er brug af en beslutningstræklassifikator en af de nemmeste at bruge.

hvorfor bruge et beslutningstræ

  • utroligt let at fortolke
  • det håndterer manglende data & outliers meget godt og som sådan kræver langt mindre op foran rengøring
  • du kommer til at give afkald på den kategoriske variabel kodning, da beslutningstræer håndterer kategorier godt!
  • uden at dykke ned i detaljerne ved rekursiv partitionering er beslutningstræer i stand til at modellere ikke-lineære forhold.

hvorfor ikke bruge et beslutningstræ

med alt det gode sagde, at de ikke altid er den perfekte mulighed.

  • på samme måde kan de være enkle, de kan også være alt for komplicerede, hvilket gør det næsten umuligt at konceptualisere eller fortolke.
  • for at tage denne ide En smule videre, med et træ, der er alt for partisk eller kompliceret, kan det være catering for godt til det træningsdata og som følge heraf er overfit.

Model træning

med det sagt, lad os hoppe ind i det. Jeg vil ikke tale om krydsvalidering eller tog, test split meget, men vil sende koden nedenfor. Sørg for at kommentere, hvis der er noget, du gerne vil have mere forklaring på.

først bryder vi dataene i træning & testsæt.

Bemærk også, at vi bruger det klassiske titanic-datasæt, der er inkluderet i base R.

nu træner vi modellen ved hjælp af rpart – funktionen fra rpart – pakken. De vigtigste ting at bemærke her er, at den variabel, vi ønsker at forudsige, overleves, så vi vil forstå sandsynligheden for, at en given person overlevede ifølge nogle data. ~ kan fortolkes som ved; så med andre ord lader forstå overlevet af nogle variabler. Hvis efter ~ der er en . det betyder, at vi vil bruge alle andre variabler i datasættet til at forudsige overlevede. Alternativt som vist nedenfor kan vi kalde de variabler, vi vil bruge eksplicit.

en anden ting at bemærke er, at methoder class. Det skyldes, at vi ønsker at oprette et klassifikationstræ, der forudsiger kategoriske resultater, i modsætning til et regressionstræ, der vil blive brugt til numeriske resultater. Og endelig er de data, vi bruger til at træne modellen train.

model <- rpart(formula = Survived ~ Pclass + Sex + Age + SibSp + Parch + Fare + Embarked,
data = titanic_train,
method = "class")

Fortolkbarhed

som tidligere nævnt er en af de ting, der gør et beslutningstræ så let at bruge, at det er utroligt nemt at fortolke. Du er i stand til at følge de forskellige grene af træet til forskellige resultater.

rpart.plot(model)

det er lidt svært at læse der, men hvis du forstørrer en smule, vil du se, at de første kriterier, hvis nogen sandsynligvis levede eller døde på titanic, var, om du var en mand. Hvis du var en mand, flytter du til venstre gren og arbejder ned to noder, uanset om du var voksen og din søskende/ægtefælle tæller ombord. Så hvis du var en enkelt mand, er oddsene for overlevelse ret slanke.

præstationsevaluering

før vi bryder ud metrics, lad os forudsige værdier for din test sæt. I lighed med opkaldet til at træne vælger du dataene og typen af forudsigelse. Kerneforskellen er modelspecifikationen.

test$pred <- predict(object = model, 
newdata = test,
type = "class")

der er en række præstationsevalueringsmålinger, som vil være meget nyttige, når du forstår effektiviteten af dit beslutningstræ.

nøjagtighed

denne måling er meget enkel, hvilken procentdel af dine forudsigelser var korrekte. Forvirringsmatricefunktionen fra caret inkluderer dette.

Forvirringsmatrice

funktionen confusionMatrix fra pakken caret er utrolig nyttig. Til vurdering af klassificeringsmodellens ydeevne. Læg pakken op, og giv den dine forudsigelser & de faktiske.

library(caret)
confusionMatrix(data = test$pred,
reference = test$Survived)

den første ting, denne funktion viser dig, er det, der kaldes en forvirringsmatrice. Dette viser dig en tabel over, hvordan forudsigelser og faktiske linet op. Så de diagonale celler, hvor forudsigelsen og referencen er den samme, repræsenterer det, vi fik korrekt. Tælle dem op 149 (106 + 43) og dividere det med det samlede antal poster, 178; vi ankommer til vores nøjagtighed antal 83.4%.

sand positiv: cellen i Kvadranten, hvor både referencen og forudsigelsen er 1. Dette indikerer, at du forudsagde overlevelse, og de overlevede faktisk.

falsk positiv: her forudsagde du positivt, men du tog fejl.

sandt negativt: når du forudsiger negativt, og du har ret.

falsk negativ: når du forudsiger negativ, og du er forkert.

et par mere vigtige målinger at huske på er følsomhed og specificitet. Følsomhed er den procentdel af sande poster, som du forudsagde korrekt.

specificitet er derimod at måle, hvilken del af de faktiske falske poster du forudsagde korrekt.

specificitet er en at huske på, når man forudsiger et ubalanceret datasæt. Et meget almindeligt eksempel på dette er til klassificering af e-mail-spam. 99% af tiden er det ikke spam, så hvis du forudsagde, at intet nogensinde var spam, ville du have 99% nøjagtighed, men din specificitet ville være 0, hvilket fører til, at al spam accepteres.

konklusion

jeg håber du nød denne hurtige lektion i beslutningstræer. Lad mig vide, om der var noget, du ønskede mere info om, eller hvis der er noget, du gerne vil have mig til at dække i et andet indlæg.

glad data videnskab-ing! Hvis du nød dette, kom og tjek andre indlæg som dette på datasciencelessons.com!

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.

Previous post WordPress.org
Next post Fava Bønneplantning – hvordan man dyrker Fava bønner i haven