Implementando Neurônios Artificiais na linguagem Python


Introdução
Agora que você já conhece mais sobre neurônios artificiais, vamos implementar o modelo perceptron, usando a linguagem Python. Nos artigos anteriores, criamos um conjunto simples de dados usando times como exemplo, definindo a região e se possuíam ou não um técnico.
Neste artigo, abordaremos mais detalhadamente a implementação do modelo perceptron e desenharemos um gráfico que permita observar a separação das classes linearmente.
Importante notar que quando estamos falando de uma rede neural artificial, temos muitos conceitos envolvidos, como por exemplo:
O número de épocas, que é a quantidade de vezes que o modelo vai rodar e atualizar o vetor de pesos até se ajustar.
A função de perda, que ajuda a minimizar danos no processo de atualização e a função de ativação, hiperparâmetros etc.
Neste conteúdo vamos tratar apenas de uma demonstração: quando o neurônio artificial, (que é uma unidade da rede neural artificial), fará ou não o disparo para próxima camada.
Normalmente, o vetor de pesos é iniciado aleatoriamente. Conforme a rede é treinada, esses valores vão se ajustando. Para esse exemplo, vamos usar um vetor de pesos bem ajustado, apenas para demonstrar o processo de disparar ou não um sinal:
Pré-requisitos para os próximos passos:
- Noções de Programação.
- Python instalado nos ambientes.
Download Python
Fica a seu critério a escolha da IDE. https://www.python.org/downloads/
Após a instalação, precisamos também adquirir algumas bibliotecas. Logo abaixo, temos as libs e seus respectivos sites e o comando que deverá ser digitado no terminal para instalação de cada lib. Repita esse processo para lib listada abaixo:
Matplotlib https://matplotlib.org/
pip install matplotlib
Pandas https://pandas.pydata.org/
pip install pandas
Numpy https://numpy.org/doc/stable/reference/random/legacy.html
pip install numpy
Conjunto de Dados
Para esse exemplo, foi criado um conjunto de dados muito simples, veja na tabela abaixo:

Agora, vamos converter as informações para valores numéricos.
Para o TIME A, vamos atribuir o número 1; para a REGIÃO Norte e 1: TEM TÉCNICO.
Para o TIME B, vamos atribuir -1; para REGIÃO Sul e -1 para: NÃO TEM TÉCNICO.
A entrada para o neurônio artificial será A= [1, 1] e B= [-1, -1], ou X= [[1, 1], [-1, -1]],
conforme o gráfico abaixo:

É possível notar que estamos tratando de um exemplo muito simples, com poucos dados. Por conta disso, as classes estão muito bem separadas, o que nos ajuda a perceber que podemos tratar de problemas através de funções simples e lineares.
Neurônio Artificial Modelo Perceptron em Python
O dataset:

Ao final de cada linha, foi adicionado o valor esperado da predição, a título de exemplo. Esperamos que o neurônio artificial faça um disparo quando a entrada for da classe do time A, então o valor esperado será 1 e, como para a classe do time B não haverá disparo, o valor será 0.
Como dito na introdução, estamos trabalhando com um vetor de pesos mais ou menos ajustado para o nosso exemplo:

Lembrando que o vetor de pesos será iniciado aleatoriamente e durante o treinamento da rede será ajustado conforme as classes. Neste exemplo, estamos tratando da unidade da rede e se ocorre ou não o disparo para próximas camadas.
Agora, vamos ver a função que fará o cálculo para decidir sobre o disparo, relembrando as definições do modelo perceptron:

Uma implementação seria:

Finalizando, vamos ler as linhas do dataset, e chamar a função de predição.
Esperamos que para a entrada do time A, com o valor esperado 1 e valor de predição também 1, teremos um disparo. Para o caso do time B, com o valor esperado 0 e o valor de predição 0, não teremos um disparo.

Com essa chamada, temos a seguinte saída:

Abaixo, o código completo:

Conclusão
Podemos ver um exemplo do neurônio artificial decidindo sobre fazer ou não o disparo do sinal de saída. Em artigos anteriores, Neurônio Artificial – Uma Breve Introdução e Neurônios Artificiais – Modelo Perceptron, falamos sobre o aparato matemático que define o funcionamento do algoritmo. Mostramos neste artigo uma simples implementação de um neurônio artificial, lembrando que o neurônio artificial é o nó da unidade da rede neural, portanto, uma rede neural artificial é composta por um conjunto de neurônios artificiais.
Esse foi o terceiro artigo de uma série que abordou a rede neural. Fique ligado nos próximos artigos do Terça Tech. Em breve, vamos compartilhar mais conhecimento sobre inteligência artificial, funcionamento e treinamento de uma rede neural e muito mais.
Referências
https://machinelearningmastery.com/implement-perceptron-algorithm-scratch-python/
https://github.com/rasbt/python-machine-learning-book-3rd-edition/blob/master/ch02/ch02.ipynb
Python Machine Learning – 3rd Edition – Sebastian Raschka e Vahid Mirijalili
