Este projeto implementa um algoritmo Perceptron para classificação binária, com suas funções de cálculo principais escritas em C para otimização de desempenho e envolvidas em uma classe Python para fácil uso, manipulação de dados e visualização. 📊 O projeto inclui funcionalidades para usar o conjunto de dados Iris (convertido para um problema binário) ou gerar dados sintéticos para treinamento e teste.
🎯 Objetivo: Criar um classificador Perceptron eficiente com um backend em C e uma interface Python amigável.
✨ Visualização de Exemplo:
O Perceptron é um dos algoritmos de aprendizado de máquina supervisionado mais simples para classificação binária. Este projeto demonstra:
- Implementação do algoritmo Perceptron.
- Uso de C para as operações computacionalmente intensivas (cálculo do neurônio, ajuste de pesos, avaliação de precisão) via
ctypesem Python. - Uma classe Python
Perceptronque encapsula a lógica de treinamento, previsão, avaliação e plotagem. - Carregamento e pré-processamento de dados para o conjunto de dados Iris e geração de dados sintéticos. 🌸
- Divisão de dados em conjuntos de treinamento e teste.
- Dimensionamento de características (normalização Z-score).
- Treinamento com uma taxa de aprendizado definida e um limite de precisão.
- Cálculo de erro, acuracia e revocação. 📈
- Validação cruzada K-fold.
- Visualização de:
- Dados de treinamento e teste 📍
- Limite de decisão do modelo treinado 🗺️
- Precisão do modelo ao longo das épocas 🎯
- Evolução dos pesos durante o treinamento 🏋️
- Erro do modelo ao longo das épocas 📉
- Núcleo em C ⚙️: Funções
neuron,fit,evaluate_accuracyepredictimplementadas em C para eficiência. - Wrapper Python 🐍: Classe
Perceptronem Python fácil de usar. - Fontes de Dados 💾:
- Utiliza o conjunto de dados Iris (filtrado para duas classes e duas características).
- Gera dados sintéticos para problemas de classificação (linearmente separáveis ou com ruído).
- Pré-processamento 🧹:
- Converte problemas multiclasse para binários.
- Dimensiona características usando a média e o desvio padrão.
- Treinamento 🏋️♀️:
- Itera até que uma precisão de referência seja atingida no conjunto de teste ou um número máximo de épocas seja alcançado.
- Armazena o histórico de pesos, erros e precisão.
- Avaliação 📊:
- Calcula a precisão nos conjuntos de treinamento e teste.
- Realiza validação cruzada k-fold.
- Visualização 🖼️: Utiliza
matplotlibpara plotar:- Distribuição de dados.
- Limite de decisão.
- Curvas de aprendizado (precisão, erro, pesos).
- Flexibilidade 🛠️: Permite a configuração da taxa de aprendizado, precisão de referência e parâmetros de geração de dados.
├── 📄 perceptron.c # Implementação em C das funções principais do Perceptron
├── 📄 perceptron.h # Arquivo de cabeçalho para o código C
├── 🔗 perceptron.so # Biblioteca compartilhada compilada (gerada após a compilação)
├── 🐍 data_treatment.py # Funções para importação de dados, geração e plotagem
├── 🐍 training.py # Classe Perceptron em Python e interface ctypes para C
└── 📖 main.py # Script principal para executar o treinamento e avaliação
- Python 3.12.3 🐍
- Compilador C (como GCC) ⚙️
- Bibliotecas Python:
numpymatplotlibscikit-learn(usado emdata_treatment.pyparaload_irisemake_classification)
-
Clone o repositório:
git clone [https://github.com/seu-usuario/seu-repositorio.git](https://github.com/seu-usuario/seu-repositorio.git) cd "seu-repositorio"
-
Compile o código C para criar a biblioteca compartilhada (
perceptron.so): No Linux ou macOS:gcc -shared -o perceptron.so -fPIC perceptron.c
No Windows (pode exigir ajustes dependendo do seu compilador, por exemplo, com MinGW):
gcc -shared -o perceptron.so perceptron.c -Wl,--add-stdcall-alias
ℹ️ Certifique-se de que o arquivo
perceptron.so(ouperceptron.dllno Windows) resultante esteja no mesmo diretório que os scripts Python. -
Instale as dependências Python:
pip install numpy matplotlib scikit-learn
✅ Pronto para começar!
O script principal para executar o modelo é main.py.
python3 main.py