---
title: "Caso 04: Classificador de digitos - Regressao Logistica"
output:
  html_document: default
  pdf_document: default
---
## autor: *Rodrigo A. Scarpel*

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
  
***
  
### Pacotes do R utilizados:
+ MASS (https://cran.r-project.org/web/packages/MASS/index.html)
+ Nnet (https://cran.r-project.org/web/packages/nnet/index.html)
+ Caret (https://cran.r-project.org/web/packages/caret/index.html)
+ Ggplot2 (<https://cran.r-project.org/web/packages/ggplot2/index.html>)
+ Dplyr (<https://cran.r-project.org/web/packages/dplyr/index.html>)
  

```{r include = TRUE}
library(MASS)
library(nnet)
library(caret)
library(ggplot2)
library(dplyr)
```

  
***  
  
### Etapa 1: Selecao dos dados  
  
```{r include = TRUE}
load(file="df_classificador.Rdata")
str(DADOS)
```
  
  
***  

### Etapa 2: Pre-processamento (ja realizado nos casos anteriores)  
  

***  

### Etapa 3: Transformacao dos dados  
  

#### Divisao dos dados em amostras de treinamento e de teste do modelo:  
  
  Nesta etapa os dados serao divididos de forma a ficar 60% para treinamento do modelo e 40% para teste do modelo. Assim:

  
```{r include = TRUE}
set.seed(101)
Treino.Index <- createDataPartition(y = DADOS$y, p = 0.6, 
                                    times = 1,list = FALSE)
treino <- DADOS[Treino.Index,]
teste <- DADOS[-Treino.Index,]
message('Distribuicao das classes na base de treino:');table(treino$y)
message('')
message('Distribuicao das classes na base de teste:');table(teste$y)
```

***  

### Etapa 4: Mineracao dos dados  
  

Na etapa de mineracao dos dados vamos criar o modelo de regressao logistica.  
  

```{r include = TRUE}
fit.RLOG = train(y~.,method ='glm',family = "binomial",
                 trControl=trainControl(method='cv',number=5),
                 metric     = "Accuracy",
                 data       = treino)
fit.RLOG
summary(fit.RLOG)
```
   
  
Verifica-se pelos resultados da regressão logistica, que as 2 variáveis independentes são significativas. Contudo, a acurácia final obtida não foi muito alta. Vamos visualizar os gráficos de dispersão e de classificação obtido:
  
  
```{r include = TRUE}
x_1 = seq(0,0.5,0.001)
x_2 = seq(0,0.6,0.001)
z = data.frame(expand.grid(x_1,x_2))
colnames(z) = c("x_1","x_2")
P.CLASS.RLOG <- predict(fit.RLOG,newdata = z)
plot(z,col=unclass(P.CLASS.RLOG))
```
  
Verifica-se que a baixa acurácia se deve pelo fato de ser um classificador linear.
  
- Performance concolidada no conjunto de treino:  
  
```{r}
Prev.treino <- predict(fit.RLOG,newdata = treino)
confusionMatrix(factor(Prev.treino), factor(treino$y))
```
  
---


#### Etapa 5: Avaliacao dos resultados  
  
- Performance no conjunto de teste:
  
```{r include = TRUE}
Prev.teste <- predict(fit.RLOG,newdata = teste)
confusionMatrix(factor(teste$y),Prev.teste)
```
  

#### Aplicacao da regra de classificacao:  

Qual sera a classificacao de um digito com:\
- x_1: 0.1253\
- x_2: 0.2714

```{r include = TRUE}
nova.observacao = data.frame(
  x_1 = 0.1253,
  x_2 = 0.2714)
predict(fit.RLOG,nova.observacao)
predict(fit.RLOG,nova.observacao,type="prob")
```
  
Portanto, será da classe 2.

***  


