lär dig klassificering med beslutsträd i R

Robert Wood

följ

Jul 30, 2019 * 4 min läs

när det gäller klassificering, med hjälp av ett beslut träd klassificerare är en av de enklaste att använda.

Varför använda ett beslutsträd

  • otroligt lätt att tolka
  • det hanterar saknade data & outliers mycket bra och som sådan kräver mycket mindre rengöring på framsidan
  • du får avstå från den kategoriska variabelkodningen eftersom beslutsträd hanterar kategoriska bra!
  • utan att dyka in i detaljerna för rekursiv partitionering kan beslutsträd modellera icke-linjära relationer.

varför inte använda ett beslutsträd

med allt så bra sa att de inte alltid är det perfekta alternativet.

  • på samma sätt kan de vara enkla, de kan också vara alltför komplicerade vilket gör det nästan omöjligt att konceptualisera eller tolka.
  • för att ta den här tanken lite längre, med ett träd som är alltför partiskt eller komplicerat, kan det vara för bra för att det är träningsdata och som ett resultat är överfit.

Modellutbildning

med det sagt kan vi hoppa in i det. Jag brukar tala om kors validering eller tåg, test split mycket, men kommer att lägga koden nedan. Var noga med att kommentera om det finns något du vill ha mer förklaring på.

först bryter vi data i träning & testuppsättningar.

Observera också att vi kommer att använda den klassiska titanic dataset som ingår i base R.

nu ska vi träna modellen med funktionen rpart från paketet rpart. De viktigaste sakerna att märka här är att variabeln vi vill förutsäga överlevs, så vi vill förstå sannolikheten för att en viss individ överlevde enligt vissa uppgifter. ~ kan tolkas som av; så med andra ord kan förstå överlevde av vissa variabler. Om efter ~ det finns en . det betyder att vi vill använda alla andra variabler i datasetet för att förutsäga överlevde. Alternativt som visas nedan kan vi ringa ut de variabler vi vill använda explicit.

en annan sak att notera är att method är class. Det beror på att vi vill skapa ett klassificeringsträd som förutsäger kategoriska resultat, i motsats till ett regressionsträd som skulle användas för numeriska resultat. Och slutligen är de data vi använder för att träna modellen train.

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

Tolkbarhet

som tidigare nämnts är en av de saker som gör ett beslutsträd så lätt att använda att det är otroligt lätt att tolka. Du kan följa de olika grenarna av trädet till olika resultat.

rpart.plot(model)

det är lite svårt att läsa där, men om du zoomar in en smula ser du att de första kriterierna om någon sannolikt bodde eller dog på titanic var om du var en man. Om du var en man flyttar du till vänster gren och arbetar ner två noder, oavsett om du var vuxen och din syskon/make räknas ombord. Så om du var en enda man du oddsen för överlevnad var ganska smal.

prestandautvärdering

innan vi bryter ut mätvärdena kan vi förutsäga värden för din testuppsättning. I likhet med samtalet att träna väljer du data och typ av förutsägelse. Kärnskillnaden är modellspecifikationen.

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

det finns en mängd olika mätvärden för prestandautvärdering som kommer att vara mycket praktiska när du förstår effekten av ditt beslutsträd.

noggrannhet

detta mått är mycket enkelt, vilken procentandel av dina förutsägelser var korrekta. Förvirringsmatrisfunktionen från caret inkluderar detta.

Förvirringsmatris

funktionen confusionMatrix från paketet caret är otroligt användbar. För bedömning av klassificeringsmodellens prestanda. Ladda upp paketet och skicka det dina förutsägelser & aktualerna.

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

det första som denna funktion visar är vad som kallas en förvirringsmatris. Detta visar en tabell över hur förutsägelser och aktualer uppradade. Så de diagonala cellerna där förutsägelsen och referensen är desamma representerar vad vi fick rätt. Att räkna upp dem 149 (106 + 43) och dela det med det totala antalet poster, 178; vi kommer fram till vårt noggrannhetsnummer på 83.4%.

sann positiv: cellen i kvadranten där både referensen och förutsägelsen är 1. Detta indikerar att du förutspådde överlevnad och de överlevde faktiskt.

falskt positivt: här förutspådde du positivt, men du hade fel.

True negative: när du förutspår negativ, och du har rätt.

False negative: när du förutspår negativ, och du är felaktig.

ett par fler viktiga mätvärden att tänka på är känslighet och specificitet. Känslighet är andelen sanna poster som du förutspådde korrekt.

specificitet å andra sidan är att mäta vilken del av de faktiska falska posterna du förutspådde korrekt.

specificitet är en att tänka på när man förutsäger på en obalanserad dataset. Ett mycket vanligt exempel på detta är att klassificera e-postspam. 99% av tiden är det inte spam, så om du förutspådde att ingenting någonsin var spam skulle du ha 99% noggrannhet, men din specificitet skulle vara 0, vilket leder till att all spam accepteras.

slutsats

jag hoppas att du gillade den här snabba lektionen i beslutsträd. Låt mig veta om det var något du ville ha mer information om eller om det är något du vill att jag ska täcka i ett annat inlägg.

Lycklig datavetenskap-ing! Om du gillade det här, kom och kolla in andra inlägg så här på datasciencelessons.com!

Lämna ett svar

Din e-postadress kommer inte publiceras.

Previous post WordPress.org
Next post Fava Bean plantering – hur man odlar Fava bönor i trädgården