Quando se trata de classificação, usando uma árvore de decisão do classificador é um dos mais fáceis de usar.
Why to use a decision tree
- Incredibly easy to interpret
- it handles missing data & outliers very well and as such requires far less up front cleaning
- you get to forego the categorical variable encoding as decision trees handle categorical well!Sem mergulhar nas especificidades do particionamento recursivo, as árvores de decisão são capazes de modelar relações não-lineares.
Why not to use a decision tree
With all that good said they are not always the perfect option.
- da mesma forma que eles podem ser simples, eles também podem ser excessivamente complicados tornando quase impossível de conceituar ou interpretar.
- para levar esta ideia um pouco mais longe, com uma árvore que é excessivamente tendenciosa ou complicada, pode ser catering demasiado bem para os seus dados de formação e, como resultado, é sobrefit.
Model Training
With that said, lets jump into it. Eu não vou falar sobre validação cruzada ou trem, teste dividido muito, mas vai postar o código abaixo. Não te esqueças de comentar se quiseres mais explicações.
Primeiro vamos dividir os dados em conjuntos de teste &.
também note que vamos usar o clássico conjunto de dados titânicos que está incluído na base R.
agora vamos treinar o modelo usando a função rpart
do pacote rpart
. As coisas-chave a serem notadas aqui é que a variável que queremos prever sobreviveu, então queremos entender a probabilidade de qualquer indivíduo sobreviver de acordo com alguns dados. ~ pode ser interpretado como by; então, em outras palavras, permite entender sobreviveu por algumas variáveis. Se depois da ~ Há um . isso significa que queremos usar todas as outras variáveis do conjunto de dados para prever que sobreviveram. Alternativamente, como mostrado abaixo, podemos chamar as variáveis que queremos usar explicitamente.
outra coisa a notar é que o method
é class
. Isso é porque queremos criar uma árvore de classificação que preveja resultados categóricos, em oposição a uma árvore de regressão que seria usada para resultados numéricos. E finalmente os dados que estamos usando para treinar o modelo são train
.
model <- rpart(formula = Survived ~ Pclass + Sex + Age + SibSp + Parch + Fare + Embarked,
data = titanic_train,
method = "class")
interprete
como mencionado anteriormente uma das coisas que torna uma árvore de decisão tão fácil de usar é que é incrivelmente fácil de interpretar. Você é capaz de seguir os diferentes ramos da árvore para diferentes resultados.
rpart.plot(model)
É um pouco difícil de ler não, mas se você ampliar um pouco, você vai ver que o primeiro critério se alguém provavelmente viveu ou morreu no titanic foi de que se tratava de um macho. Se você era um homem, você se muda para o ramo esquerdo e trabalha para baixo dois nós, se você era um adulto e seu irmão/cônjuge contar a bordo. Então, se fosses um homem solteiro, as hipóteses de sobrevivência eram poucas.
avaliação de desempenho
Antes de quebrar as métricas, permite prever os valores para o seu conjunto de teste. Semelhante à chamada para treinar, você seleciona os dados, e tipo de previsão. A principal diferença é a especificação do modelo.
test$pred <- predict(object = model,
newdata = test,
type = "class")
há uma variedade de métricas de avaliação de desempenho que será muito útil para compreender a eficácia da sua árvore de decisão.
precisão
esta métrica é muito simples, que porcentagem de suas previsões estavam corretas. A função de matriz de confusão de caret
inclui isto.
matriz de confusão
a função confusionMatrix
do pacote caret
é incrivelmente útil. Para avaliar o desempenho do modelo de classificação. Carrega o pacote e passa-lhe as tuas previsões.
library(caret)
confusionMatrix(data = test$pred,
reference = test$Survived)
A primeira coisa que esta função mostra que você é o que é chamado de uma matriz de confusão. Isto mostra-lhe uma tabela de como as previsões e os factos se alinharam. Então as células diagonais onde a previsão e referência são as mesmas representam o que temos correto. Contando esses 149 (106 + 43) e dividindo-os pelo número total de registros, 178; chegamos ao nosso número de precisão de 83,4%.
verdadeiro positivo: a célula no quadrante onde tanto a referência como a previsão são 1. Isso indica que você previu a sobrevivência e eles de fato sobreviveram.
falso positivo: aqui você previu positivo, mas você estava errado.
verdadeiro negativo: quando você prevê negativo, e você está correto.
falso negativo: quando você prevê negativo, e você está incorreto.
um par de métricas-chave mais para ter em mente são a sensibilidade e especificidade. Sensibilidade é a percentagem de registros verdadeiros que você previu corretamente.
especificidade por outro lado é medir qual parte dos registros falsos reais que você previu corretamente.
especificidade é algo a ter em mente quando se prevê um conjunto de dados desequilibrado. Um exemplo muito comum disto é para classificar o spam do email. 99% das vezes não é spam, então se você previu que nada era spam você teria 99% de precisão, mas sua especificidade seria 0, levando a que todo spam fosse aceito.
Conclusion
I hope you enjoyed this quick lesson in decision trees. Avisa-me se precisares de mais informações ou se quiseres que eu cubra algo diferente.Feliz Ciência dos dados! Se você gostou deste, venha conferir outros posts como este em datasciencelessons.com!