Carvalho Ribeiro Blog
  • Info

Conteúdo

  • O que é um modelo de rede neural
  • Qual o objetivo
  • De onde vem a demanda
  • Como fazer
  • Pra onde vai quem é o cliente
  • Qual o resultado

Modelo preditivo usando com rede neural

Modelos
Author

Marcelo Carvalho dos Anjos

Published

August 6, 2022

Vídeo tema para este post Redes neurais artificiais no R com nnet package

O que é um modelo de rede neural

  • Rede neural é uma técnica que usa nós interconectados ou neuronios em uma estrutura de camadas com o objetivo de resolver problemas de previsão.

    • Rede neural regressão
    • Rede neural Classificação

    Rede Neural - Regressão

    Rede Neural - Classificação

Qual o objetivo

  • A técnica é muito utilizada na solução de problemas de classificação onde o resultado(desfecho) é uma classe (e.g. gato, cachorro, cavalo).

  • Neste exemplo, nós usaremos como exemplo uma linha de produção com sensores que registram características como largura e comprimento da pétala e sepala dos três tipos de flores iris: setosa, versicolor e virgínica.

  • Nosso objetivo é fazer um modelo de previsão o qual com base nessas características, consiga classificar cada tipo de flor e separá-las corretamente.

De onde vem a demanda

  • Vem do uso de sistemas que utilizam visão computacional, processamento de linguagem natural em seu funcionamento como por exemplo veículos semi-autonomos, linhas de produção de veículos, controle de qualidade de autopeças entre outros.

  • A primeira rede neural artificial foi implementada em 1958 por Frank Rosenblat e se chamava Perceptron e naquela época já se falava que era um embrião de um computador eletronico que seria capaz de andar, falar, ver, escrever e se reproduzir. Materia New York Times

Como fazer

Neste exemplo usaremos os pacotes tidyverse, janitor, tidymodels, nnet e neuralnettools

# packages ----------------------------------------------------
library(tidyverse)
library(tidymodels)
library(nnet)
library(NeuralNetTools)

# data --------------------------------------------------------
data_iris <- iris %>% janitor::clean_names()

split_iris <- initial_split(data_iris, strata = species)
train_iris <- training(split_iris)
test_iris  <- testing(split_iris)

# model -------------------------------------------------------
mdl_fit_nn_iris <- nnet(species ~., 
                        data = train_iris, 
                        size = 5, 
                        decay = 0.01, 
                        maxit = 500)
# weights:  43
initial  value 142.466668 
iter  10 value 14.781617
iter  20 value 9.929478
iter  30 value 8.291768
iter  40 value 7.849535
iter  50 value 7.765939
iter  60 value 7.732812
iter  70 value 7.696247
iter  80 value 7.684596
iter  90 value 7.675855
iter 100 value 7.669159
iter 110 value 7.662754
iter 120 value 7.658608
iter 130 value 7.657329
iter 140 value 7.657058
iter 150 value 7.657015
final  value 7.657012 
converged

Vamos fazer uma previsão usando o modelo que construímos e colocar o resultado dentro do dataframe com os dados de teste para podermos comparar valores previstos e realizados.

# results -----------------------------------------------------
mdl_fit_nn_iris %>% 
  predict(test_iris,type = "class") %>%
  bind_cols(test_iris)
New names:
• `` -> `...1`
         ...1 sepal_length sepal_width petal_length petal_width    species
1      setosa          4.9         3.0          1.4         0.2     setosa
2      setosa          5.0         3.4          1.5         0.2     setosa
3      setosa          5.4         3.7          1.5         0.2     setosa
4      setosa          5.8         4.0          1.2         0.2     setosa
5      setosa          5.1         3.5          1.4         0.3     setosa
6      setosa          5.7         3.8          1.7         0.3     setosa
7      setosa          5.4         3.4          1.7         0.2     setosa
8      setosa          5.0         3.4          1.6         0.4     setosa
9      setosa          4.9         3.6          1.4         0.1     setosa
10     setosa          5.1         3.4          1.5         0.2     setosa
11     setosa          5.0         3.5          1.6         0.6     setosa
12     setosa          5.1         3.8          1.6         0.2     setosa
13     setosa          5.3         3.7          1.5         0.2     setosa
14 versicolor          5.5         2.3          4.0         1.3 versicolor
15 versicolor          6.3         3.3          4.7         1.6 versicolor
16 versicolor          4.9         2.4          3.3         1.0 versicolor
17 versicolor          6.2         2.2          4.5         1.5 versicolor
18 versicolor          5.6         2.5          3.9         1.1 versicolor
19 versicolor          6.7         3.0          5.0         1.7 versicolor
20 versicolor          5.7         2.6          3.5         1.0 versicolor
21 versicolor          6.0         3.4          4.5         1.6 versicolor
22 versicolor          6.7         3.1          4.7         1.5 versicolor
23 versicolor          5.5         2.6          4.4         1.2 versicolor
24 versicolor          5.6         2.7          4.2         1.3 versicolor
25 versicolor          5.7         3.0          4.2         1.2 versicolor
26 versicolor          5.7         2.8          4.1         1.3 versicolor
27  virginica          7.1         3.0          5.9         2.1  virginica
28  virginica          4.9         2.5          4.5         1.7  virginica
29  virginica          5.7         2.5          5.0         2.0  virginica
30  virginica          5.8         2.8          5.1         2.4  virginica
31  virginica          6.4         3.2          5.3         2.3  virginica
32  virginica          7.7         2.8          6.7         2.0  virginica
33  virginica          6.2         2.8          4.8         1.8  virginica
34  virginica          7.2         3.0          5.8         1.6  virginica
35  virginica          7.9         3.8          6.4         2.0  virginica
36 versicolor          6.1         2.6          5.6         1.4  virginica
37  virginica          6.4         3.1          5.5         1.8  virginica
38  virginica          5.8         2.7          5.1         1.9  virginica
39  virginica          6.3         2.5          5.0         1.9  virginica

Como já temos o resultados previstos e o real, podemos fazer uma matriz de confusão para facilitar a visualização dos resultados e analisar o desempenho inicial do modelo.

#confusion matrix
table(test_iris$species,
      predict(mdl_fit_nn_iris,
              newdata = test_iris, 
              type = "class"))
            
             setosa versicolor virginica
  setosa         13          0         0
  versicolor      0         13         0
  virginica       0          1        12

Como ficou o resultado da previsão ?

#predict classes
predict(mdl_fit_nn_iris, test_iris, type = "class")
 [1] "setosa"     "setosa"     "setosa"     "setosa"     "setosa"    
 [6] "setosa"     "setosa"     "setosa"     "setosa"     "setosa"    
[11] "setosa"     "setosa"     "setosa"     "versicolor" "versicolor"
[16] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
[21] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
[26] "versicolor" "virginica"  "virginica"  "virginica"  "virginica" 
[31] "virginica"  "virginica"  "virginica"  "virginica"  "virginica" 
[36] "versicolor" "virginica"  "virginica"  "virginica" 

Plotando o modelo que acabamos de fazer

#plotando o gráfico
NeuralNetTools::plotnet(mdl_fit_nn_iris,pad_x=0.55, circle_col = "grey90")

Pra onde vai quem é o cliente

  • Um modelos de previsão de classificação pode ser embarcado dentro do sistema de produção.

  • O modelo que fizemos é bastante simples e serve apenas como base para aprendizado, como próximo passo o uso de validação cruzada (cross validation) pode ser uma excelente opção para complementar o que aprendemos aqui.

Qual o resultado

  • Aperfeiçoar as técnicas de contrução de modelos e solução de problemas de classificação para que estes possam auxiliar na produtividade da industria de flores que usamos como exemplo.

  • Facilitar o processo de classificação.

  • Melhorar o processo de produção, qualidade do produto, satisfação do consumidor e competitividade do negócio.