Wenn es um die Klassifizierung geht, ist die Verwendung eines Entscheidungsbaumklassifikators eine der am einfachsten zu verwendenden.
Warum man einen Entscheidungsbaum benutzt
- Unglaublich einfach zu interpretieren
- Es behandelt fehlende Daten & Ausreißer sehr gut und erfordert daher weit weniger Vorreinigung
- Sie können auf die kategoriale Variablencodierung verzichten, da Entscheidungsbäume kategoriale Daten gut verarbeiten!
- Ohne in die Besonderheiten der rekursiven Partitionierung einzutauchen, sind Entscheidungsbäume in der Lage, nichtlineare Beziehungen zu modellieren.
Warum nicht einen Entscheidungsbaum verwenden?
Mit all dem Guten, dass sie nicht immer die perfekte Option sind.
- So wie sie einfach sein können, können sie auch übermäßig kompliziert sein, was es fast unmöglich macht, sie zu konzipieren oder zu interpretieren.
- Um diese Idee ein bisschen weiter zu bringen, kann es sein, dass ein Baum, der übermäßig voreingenommen oder kompliziert ist, zu gut auf seine Trainingsdaten eingeht und daher überfit ist.
Modelltraining
Nachdem das gesagt ist, lass uns hineinspringen. Ich werde nicht viel über Kreuzvalidierung oder Zug, Test oder Split sprechen, sondern den folgenden Code veröffentlichen. Achten Sie darauf, zu kommentieren, wenn es etwas gibt, das Sie mehr Erklärung möchten.
Zuerst werden wir die Daten in Training & Testsets aufteilen.
Beachten Sie auch, dass wir den klassischen Titanic-Datensatz verwenden, der in base R enthalten ist.
Jetzt trainieren wir das Modell mit der Funktion rpart
aus dem Paket rpart
. Das Wichtigste, was Sie hier beachten sollten, ist, dass die Variable, die wir vorhersagen möchten, überlebt wird, Daher möchten wir die Wahrscheinlichkeit verstehen, mit der ein bestimmtes Individuum nach einigen Daten überlebt hat. ~ kann als by interpretiert werden; mit anderen Worten, lasst uns verstehen, was durch einige Variablen überlebt wurde. Wenn nach dem ~ gibt es eine . das bedeutet, dass wir jede andere Variable im Datensatz verwenden möchten, um die Ergebnisse vorherzusagen. Alternativ können wir, wie unten gezeigt, die Variablen aufrufen, die wir explizit verwenden möchten.
Eine andere Sache zu beachten ist, dass die method
ist class
. Das liegt daran, dass wir einen Klassifikationsbaum erstellen möchten, der kategoriale Ergebnisse vorhersagt, im Gegensatz zu einem Regressionsbaum, der für numerische Ergebnisse verwendet würde. Und schließlich sind die Daten, die wir zum Trainieren des Modells verwenden, train
.
model <- rpart(formula = Survived ~ Pclass + Sex + Age + SibSp + Parch + Fare + Embarked,
data = titanic_train,
method = "class")
Interpretierbarkeit
Wie bereits erwähnt, ist eines der Dinge, die einen Entscheidungsbaum so einfach zu bedienen machen, dass er unglaublich einfach zu interpretieren ist. Sie können den verschiedenen Zweigen des Baumes zu unterschiedlichen Ergebnissen folgen.
rpart.plot(model)
Es ist ein bisschen schwierig, dort zu lesen, aber wenn Sie ein bisschen hineinzoomen, werden Sie sehen, dass das erste Kriterium, ob jemand wahrscheinlich auf der Titanic lebte oder starb, war, ob Sie ein Mann waren. Wenn Sie ein Mann waren, bewegen Sie sich zum linken Zweig und bearbeiten zwei Knoten, unabhängig davon, ob Sie ein Erwachsener waren und Ihr Geschwister / Ehepartner an Bord zählt. Wenn Sie also ein einzelner Mann waren, waren Ihre Überlebenschancen ziemlich gering.
Leistungsbewertung
Bevor wir die Metriken aufschlüsseln, können wir Werte für Ihren Testsatz vorhersagen. Ähnlich wie beim Aufruf zum Trainieren wählen Sie die Daten und die Art der Vorhersage aus. Der Hauptunterschied ist die Modellspezifikation.
test$pred <- predict(object = model,
newdata = test,
type = "class")
Es gibt eine Vielzahl von Leistungsbewertungsmetriken, die sehr nützlich sind, um die Wirksamkeit Ihres Entscheidungsbaums zu verstehen.
Genauigkeit
Diese Metrik ist sehr einfach, wie viel Prozent Ihrer Vorhersagen korrekt waren. Die Verwirrungsmatrix-Funktion von caret
schließt dies ein.
Verwirrungsmatrix
Die Funktion confusionMatrix
aus dem Paket caret
ist unglaublich nützlich. Zur Bewertung der Leistung des Klassifikationsmodells. Laden Sie das Paket und übergeben Sie ihm Ihre Vorhersagen & die Istwerte.
library(caret)
confusionMatrix(data = test$pred,
reference = test$Survived)
Das erste, was diese Funktion Ihnen zeigt, ist eine sogenannte Verwirrungsmatrix. Dies zeigt Ihnen eine Tabelle, wie Vorhersagen und Istwerte ausgerichtet sind. Die diagonalen Zellen, in denen Vorhersage und Referenz gleich sind, repräsentieren also das, was wir richtig erhalten haben. Zählen Sie diese 149 (106 + 43) und dividieren Sie sie durch die Gesamtzahl der Datensätze, 178; Wir kommen zu unserer Genauigkeitszahl von 83.4%.
True positiv: Die Zelle im Quadranten, in der sowohl die Referenz als auch die Vorhersage 1 sind. Dies zeigt an, dass Sie das Überleben vorhergesagt haben und sie tatsächlich überlebt haben.
Falsch positiv: Hier haben Sie positiv vorhergesagt, aber Sie haben sich geirrt.
Wahr negativ: Wenn Sie negativ vorhersagen, und Sie sind richtig.
Falsch negativ: Wenn Sie negativ vorhersagen und falsch liegen.
Ein paar weitere wichtige Metriken sind Sensitivität und Spezifität. Die Empfindlichkeit ist der Prozentsatz der wahren Datensätze, die Sie richtig vorhergesagt haben.
Die Spezifität besteht andererseits darin, zu messen, welchen Teil der tatsächlichen falschen Datensätze Sie richtig vorhergesagt haben.
Die Spezifität ist bei der Vorhersage eines unausgeglichenen Datensatzes zu beachten. Ein sehr häufiges Beispiel dafür ist die Klassifizierung von E-Mail-Spam. 99% der Zeit ist es kein Spam, also wenn Sie vorhergesagt haben, dass nichts jemals Spam war, hätten Sie 99% Genauigkeit, aber Ihre Spezifität wäre 0, was dazu führt, dass alle Spam akzeptiert werden.
Fazit
Ich hoffe, Ihnen hat diese kurze Lektion in Entscheidungsbäumen gefallen. Lassen Sie mich wissen, ob es etwas gab, über das Sie weitere Informationen wünschen, oder ob es etwas gibt, das ich in einem anderen Beitrag behandeln soll.
Glückliche Daten Wissenschaft-ing! Wenn dir das gefallen hat, Schauen Sie sich andere Beiträge wie diesen an datasciencelessons.com!