Modelo de Classificação usando Redes Neurais Artificiais (RNA)

Publicados: 2020-12-01

Na terminologia de aprendizado de máquina, Classificação refere-se a um problema de modelagem preditiva em que os dados de entrada são classificados como uma das classes rotuladas predefinidas. Por exemplo, prever Sim ou Não, Verdadeiro ou Falso se enquadra na categoria de Classificação Binária, pois o número de saídas é limitado a dois rótulos.

Da mesma forma, a saída com várias classes, como classificar diferentes faixas etárias, é chamada de problemas de classificação multiclasse. Os problemas de classificação são um dos tipos de problemas de ML mais usados ​​ou definidos que podem ser usados ​​em vários casos de uso. Existem vários modelos de Machine Learning que podem ser usados ​​para problemas de classificação.

Variando de técnicas de Bagging a Boosting, embora o ML seja mais do que capaz de lidar com casos de uso de classificação, as Redes Neurais entram em cena quando temos uma grande quantidade de classes de saída e uma grande quantidade de dados para suportar o desempenho do modelo. Daqui para frente veremos como podemos implementar um modelo de classificação usando redes neurais em Keras (Python).

Aprenda o Curso de Inteligência Artificial das melhores universidades do mundo. Ganhe Masters, Executive PGP ou Advanced Certificate Programs para acelerar sua carreira.

Índice

Redes neurais

As redes neurais são vagamente representativas do aprendizado do cérebro humano. Uma Rede Neural Artificial consiste em Neurônios que por sua vez são responsáveis ​​pela criação de camadas. Esses neurônios também são conhecidos como parâmetros sintonizados.

A saída de cada camada é passada para a próxima camada. Existem diferentes funções de ativação não linear para cada camada, o que auxilia no processo de aprendizado e na saída de cada camada. A camada de saída também é conhecida como neurônios terminais.

Fonte: Wikipédia

Os pesos associados aos neurônios e que são responsáveis ​​pelas previsões gerais são atualizados a cada época. A taxa de aprendizado é otimizada usando vários otimizadores. Cada rede neural é fornecida com uma função de custo que é minimizada à medida que o aprendizado continua. Os melhores pesos são então usados ​​nos quais a função de custo está dando os melhores resultados.

Leia: Tutorial de detecção de objetos do TensorFlow para iniciantes

Problema de classificação

Para este artigo, usaremos Keras para construir a Rede Neural. Keras pode ser importado diretamente em python usando os seguintes comandos.

importe tensorflow como tf

de keras de importação tensorflow

de keras.models import Sequencial

de keras.layers importação Dense

Conjunto de dados e variável de destino

Usaremos o conjunto de dados do Diabetes que terá os seguintes recursos:

Variáveis ​​de entrada (X):

  • Gravidezes: Número de vezes que engravidou
  • Glicose: Concentração de glicose plasmática a 2 horas em um teste oral de tolerância à glicose
  • Pressão arterial: pressão arterial diastólica (mm Hg)
  • Espessura da pele: espessura da dobra cutânea do tríceps (mm)
  • Insulina: insulina sérica de 2 horas (mu U/ml)
  • IMC: Índice de massa corporal (peso em kg/(altura em m)^2)
  • DiabetesPedigreeFunction: Diabetes pedigree function
  • Idade: Idade (anos)

Variáveis ​​de saída (y):

Resultado: Variável de classe (0 ou 1) [Paciente com Diabetes ou não]

# carrega o conjunto de dados

df= loadtxt('pima-indians-diabetes.csv', delimitador=',')

# Divida os dados em X (entrada) e Y (saída)

X = conjunto de dados[:,0:8]

y = conjunto de dados[:,8]

Definir modelo Keras

Podemos começar a construir a rede neural usando modelos sequenciais. Essa abordagem de cima para baixo ajuda a construir uma arquitetura de rede neural e brincar com a forma e as camadas. A primeira camada terá o número de recursos que podem ser corrigidos usando input_dim. Vamos configurá-lo para 8 nesta condição.

Criar Redes Neurais não é um processo muito fácil. Existem muitas tentativas e erros que ocorrem antes que um bom modelo seja construído. Construiremos uma estrutura de rede totalmente conectada usando a classe Dense em keras. O Neurônio conta como o primeiro argumento a ser fornecido à camada densa.

A função de ativação pode ser definida usando o argumento de ativação. Usaremos a Unidade Linear Retificada como função de ativação neste caso. Existem outras opções como Sigmoid ou TanH, mas RELU é uma opção muito generalizada e melhor.

# define o modelo keras

modelo = Sequencial()

model.add(Dense(12, input_dim=8, ativação='relu'))

model.add(Dense(8, ativação='relu'))

model.add(Dense(1, ativação='sigmoid'))

Compilar o modelo Keras

A compilação do modelo é o próximo passo após a definição do modelo. O Tensorflow é usado para compilação de modelos. A compilação é o processo em que os parâmetros são definidos para o treinamento e as previsões do modelo. CPU/GPU ou memórias distribuídas podem ser usadas em segundo plano.

Temos que especificar uma função de perda que é usada para avaliar os pesos das diferentes camadas. O otimizador ajusta a taxa de aprendizado e passa por vários conjuntos de pesos. Neste caso, usaremos Binary Cross Entropy como a função de perda. No caso do otimizador, usaremos o ADAM que é um eficiente algoritmo estocástico de gradiente descendente.

É muito popularmente usado para afinação. Por fim, por se tratar de um problema de classificação, coletaremos e relataremos a precisão da classificação, definida através do argumento das métricas. Usaremos precisão neste caso.

# compila o modelo keras

model.compile(loss='binary_crossentropy', otimizador='adam', métrica=['precisão'])

Ajuste e avaliação do modelo

O ajuste do modelo é essencialmente conhecido como treinamento de modelo. Depois de compilar o modelo, o modelo está pronto para analisar os dados com eficiência e treinar a si mesmo. A função fit() do Keras pode ser usada para o processo de treinamento do modelo. Os dois principais parâmetros usados ​​antes do treinamento do modelo são:

  1. Épocas: Uma passagem por todo o conjunto de dados.
  2. Tamanho do lote: Os pesos são atualizados em cada tamanho de lote. As épocas consistem em lotes de dados igualmente distribuídos.

# ajusta o modelo keras no conjunto de dados

model.fit(X, y, épocas=150, batch_size=10)

Uma GPU ou uma CPU é usada neste processo. O treinamento pode ser um processo muito longo, dependendo das épocas, do tamanho do lote e, mais importante, do tamanho dos dados.

Também podemos avaliar o modelo no conjunto de dados de treinamento usando a funçãovalu(). Os dados podem ser divididos em conjuntos de treinamento e teste e os testes X e Y podem ser usados ​​para avaliação do modelo.

Para cada par de entrada e saída, isso produzirá uma previsão e reunirá pontuações, incluindo a perda média e quaisquer medidas que instalamos, como precisão.

Uma lista de dois valores será retornada pela funçãovalu(). A primeira será a perda do modelo no conjunto de dados e a segunda será a precisão do modelo no conjunto de dados. Estamos interessados ​​apenas na precisão do relatório, por isso vamos desconsiderar a importância da perda.

# avalia o modelo keras

_, precisão = model.evaluate(Xtest, ytest)

print('Precisão: %.2f' % (precisão*100))

Leia também: Introdução ao modelo de rede neural

Conclusão

Criamos e avaliamos uma Rede Neural baseada em classificação. Embora os dados usados ​​fossem pequenos neste caso, as redes neurais são mais adequadas para grandes conjuntos de dados numéricos.

Confira o Programa de Certificação Avançado do upGrad em Aprendizado de Máquina e PNL. Este curso foi elaborado tendo em mente vários tipos de alunos interessados ​​em Machine Learning, oferecendo orientação individual e muito mais.

Como as redes neurais podem ser usadas para classificação?

Classificação é sobre categorizar objetos em grupos. Um tipo de classificação é onde várias classes são previstas. Nas redes neurais, as unidades neurais são organizadas em camadas. Na primeira camada, a entrada é processada e uma saída é produzida. Esta saída é então enviada através das camadas restantes para produzir a saída final. A mesma entrada é processada através da camada para produzir diferentes saídas. Isso pode ser representado com um perceptron multicamada. O tipo de rede neural usada para classificação depende do conjunto de dados, mas as redes neurais têm sido usadas para problemas de classificação.

Por que as redes neurais artificiais são boas para classificação?

Para responder a essa pergunta, precisamos entender o princípio básico das redes neurais e o problema que as redes neurais são projetadas para resolver. Como o nome sugere, as redes neurais são um modelo biologicamente inspirado do cérebro humano. A ideia básica é que queremos modelar um neurônio como uma função matemática. Cada neurônio recebe entradas de outros neurônios e calcula uma saída. Em seguida, conectamos esses neurônios de uma maneira que imita a rede neural no cérebro. O objetivo é aprender uma rede que pode receber alguns dados e produzir uma saída apropriada.

Quando devemos usar Redes Neurais Artificiais?

As Redes Neurais Artificiais são usadas em situações em que você está tentando duplicar o desempenho de organismos vivos ou detectar padrões em dados. Diagnósticos médicos, reconhecimento de fala, visualização de dados e previsão de dígitos manuscritos são bons casos de uso para uma RNA. As redes neurais artificiais são usadas quando há necessidade de entender relações complexas entre entradas e saídas. Por exemplo, pode haver muito ruído nas variáveis ​​e pode ser difícil entender as relações entre essas variáveis. Portanto, o uso de Redes Neurais Artificiais é uma prática comum para reter o conhecimento e os dados.