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 [ ]: