In [1]:
    
library(keras)
    
In [2]:
    
df <- read.csv('evasao.csv')
    
Separando dados de treino e teste:
In [3]:
    
n <- nrow(df)
set.seed(42) # Se não fizer isso, verá valores diferentes dos meus
limite <- sample(1:n, size = round(0.75*n), replace = FALSE)
train_df <- df[limite,]
test_df <- df[-limite,]
    
In [4]:
    
head(test_df)
    
    
Vamos criar o modelo Sequencial:
In [5]:
    
modelo <- keras_model_sequential() 
modelo %>% 
  layer_dense(units = 128, activation = 'relu', input_shape=c(7), kernel_initializer = "normal") %>% 
  layer_dropout(rate = 0.4) %>% 
  layer_dense(units = 512, activation='relu') %>%
  layer_dropout(rate = 0.3) %>%
  layer_dense(units=2,activation='sigmoid')
    
In [6]:
    
summary(modelo)
    
    
Compilando e treinando o modelo:
In [7]:
    
modelo %>% compile(
  loss = 'categorical_crossentropy',
  optimizer = optimizer_rmsprop(),
  metrics = 'accuracy'
)
    
In [8]:
    
library(dplyr)
preditores_treino <- data.matrix(select(train_df, c('periodo','bolsa','repetiu','ematraso','disciplinas','faltas','desempenho')))
    
    
In [9]:
    
head(preditores_treino)
    
    
In [10]:
    
rotulos_treino <- to_categorical(data.matrix(select(train_df,c('abandonou'))))
head(rotulos_treino)
    
    
In [11]:
    
historico <- modelo %>% fit(
  preditores_treino, rotulos_treino, 
  epochs = 30, batch_size = 128, 
  validation_split = 0.2
)
    
In [12]:
    
plot(historico)
    
    
    
Avaliando o modelo:
In [14]:
    
rotulos_teste <- to_categorical(data.matrix(select(test_df,c('abandonou'))))
head(rotulos_teste)
preditores_teste <- data.matrix(select(test_df, c('periodo','bolsa','repetiu','ematraso','disciplinas','faltas','desempenho')))
modelo %>% evaluate(preditores_teste, rotulos_teste)
    
    
    
In [15]:
    
modelo
    
    
In [19]:
    
resultado <- modelo %>% predict_classes(preditores_teste)
    
In [24]:
    
str(resultado)
    
    
In [25]:
    
test_df$abandonou
    
    
In [26]:
    
resultado
    
    
In [ ]: