Redes Neurais 3: Implementação de um Perceptron em Python

Com os conceitos dos posts anteriores e todo esse embasamento, vamos seguir aos notebooks Jupyter!

Eu gosto de começar um projeto pensando em como podemos representá-lo em classes. Parece razoável pensar em uma classe Perceptron com alguns métodos que falamos anteriormente.

Minha estratégia de implementação será:

  1. Discutir minha definição de classe do Perceptron;
  2. Implementar os métodos concretos;
  3. Determinar um data set de exemplo para um teste;
  4. Ver se o perceptron aprende mesmo.

Definindo a classe Perceptron

Vamos pensar em quais atributos e métodos vamos precisar para desenhar nossa classe Perceptron.

Atributos

  • Taxa de aprendizagem (η);
  • Número de Epochs (para mais informações, veja [1]);

Métodos

  • Método para a função ativação: _activation(X);
    • Descrição: Como função de ativação, escolhi a função degrau, descrita no post anterior. Outras funções são comuns para esta finalidade (para mais informações, veja [2]). 
  • Método para a função soma: _sum(X);
    • Descrição: O processo de sum vai multiplicar X pelo peso correspondente. 
  • Método para iniciar um treinamento: fit(X, y);
    • Descrição: É o método que vai de fato colocar as epochs para rodar, calcular os erros e manter um historico de erros na lista _errors
  • Método para gerar uma predição: predict(X);
    • Descrição: Passa o input X para a função de soma e de ativação e retorna a classe esperada.

Implementação

Teste

Vamos testar nosso perceptron! Para fazer isso, vamos utilizar um método muito pratico do sklearn, o make_blobs. Este método cria dados concentrados em volta de um ponto. É bastante util para gerar dados para testes de regressão e classificação. Nosso perceptron é capaz de aprender a classificar dados lineares.

Pronto. Vamos colocar nosso perceptron para rodar e classificar os blobs.

Para isso, basta inicializarmos a nossa classe anterior, separar os X (features) e o y (classe).

Vamos em seguidar rodar o comando fit do perceptron para treinar os pesos.

Após alguns segundos de treinamento, nosso perceptron já vai ter aprendido os pesos para classificar os blobs.

Com a ajuda do método plot_decision_regions da lib mlxtend, podemos plotar a região de classificação:

Vamos também dar uma olhada no histórico de erros:

Conforme os pesos foram sendo corrigidos, o perceptron passa a classificar 100% dos pontos de maneira correta.

Espero que tenha sido interessante para você leitor como foi pra mim construir essa série de posts sobre Machine Learning!

Até a próxima! 


Bibliografia

[1] https://towardsdatascience.com/epoch-vs-iterations-vs-batch-size-4dfb9c7ce9c9

[2] https://medium.com/the-theory-of-everything/understanding-activation-functions-in-neural-networks-9491262884e0


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *