Skip to main content

Algoritmo Genético para Classificação

Biblioteca em Python que treina um classificador linear usando algoritmo genético, escrita do zero com NumPy.

Em vez de usar gradiente (como a regressão logística), o modelo evolui uma população de soluções: as melhores se reproduzem, sofrem mutações e, geração após geração, a classificação melhora.

Funciona para:

  • Classificação binária (2 classes: 0 e 1)
  • Classificação ordinal (K classes com ordem, ex: ruim < médio < bom)

Como funciona

Cada cromossomo é uma lista de números: um bias e um peso para cada feature. Com eles o modelo calcula uma nota para cada amostra:

nota = bias + peso₁·x₁ + peso₂·x₂ + ... + pesoₙ·xₙ
  • Binário: nota ≥ 0 → classe 1, nota < 0 → classe 0
  • Ordinal: a nota é dividida em faixas pelos thresholds (pontos de corte), e cada faixa é uma classe

O fitness

A nota de cada cromossomo (fitness) é o produto do recall de cada classe:

fitness = recall(classe 0) × recall(classe 1) × ... × recall(classe K-1)

Se o modelo errar todas as amostras de uma classe, o fitness vira 0. Isso obriga o modelo a acertar todas as classes, e não só a mais comum, o que é útil quando as classes são desbalanceadas.

O ciclo do algoritmo

 1. criar população aleatória
          │
          ▼
 2. calcular fitness ◄──────────────┐
          │                         │
          ▼                         │
 3. selecionar pai e mãe (roleta)   │
          │                         │
          ▼                         │
 4. cruzamento (corte em 1 ponto)   │
          │                         │
          ▼                         │
 5. mutação                         │
          │                         │
          ▼                         │
 6. trocar os piores pelos ─────────┘
    melhores filhos

O ciclo para quando atinge o fitness alvo ou acaba o número de gerações.

Etapa O que faz
Criação Gera cromossomos com genes aleatórios entre -1 e 1
Fitness Dá uma nota de 0 a 1 para cada cromossomo
Seleção Sorteia pai e mãe por roleta: quem tem fitness maior tem mais chance
Cruzamento O filho pega o começo do pai e o final da mãe, a partir de um ponto de corte aleatório
Mutação Troca alguns genes de cada filho por valores aleatórios novos
Atualização Os piores da população saem e os melhores filhos entram (elitismo)

Instalação

Requer Python 3.10+.

pip install algoritmo-genetico

Ou direto do GitHub:

pip install git+https://github.com/FeAlmassy/AlgoritmoGenetico.git

Para desenvolver

git clone https://github.com/FeAlmassy/AlgoritmoGenetico.git
cd AlgoritmoGenetico
python -m venv venv_ag
source venv_ag/bin/activate        # no Windows: venv_ag\Scripts\activate
pip install -e .                   # modo editável: mudanças no código valem na hora

Uso rápido

Binário

from algoritmo_genetico import rodar, prever, ler_excel, dividir_treino_teste

X, y = ler_excel("exemplos/exemplo_1_binario/dados_binario_1.xlsx")
X_treino, X_teste, y_treino, y_teste = dividir_treino_teste(X, y, seed=0)

modelo = rodar(X_treino, y_treino, geracoes=500, fitness_alvo=0.90, seed=0)

previsoes = prever(modelo, X_teste)

As funções de cada etapa (criar_cromossomos, fitness_binario, selecionar_pais_roleta, cruzar_um_ponto, mutar, atualizar_populacao) também podem ser usadas separadamente, importando dos seus módulos (ex: from algoritmo_genetico.mutacao import mutar).

Ordinal (várias classes)

As classes precisam ser números de 0 a K-1, na ordem da menor para a maior. Para K classes, passe K-1 thresholds em ordem crescente:

import numpy as np

thresholds = np.array([-1.5, -0.5, 0.5, 1.5])   # 4 cortes -> 5 classes

modelo = rodar(X, y, thresholds=thresholds, geracoes=2000, fitness_alvo=1.0)
previsoes = prever(modelo, X_novo)

Parâmetros do rodar

Parâmetro Padrão Descrição
X — array (amostras, features) com os dados
y — vetor com a classe de cada amostra
qtd_cromossomos 6 tamanho da população
qtd_genes_mutados 1 quantos genes mudam em cada filho
qtd_filhos 3 quantos filhos por geração
qtd_substituicoes 2 quantos piores da população são trocados pelos melhores filhos (no máximo o menor entre qtd_cromossomos e qtd_filhos)
geracoes 100 número máximo de gerações
fitness_alvo 0.90 para quando o melhor fitness chega nesse valor
thresholds None None = binário; array com K-1 cortes = ordinal
minimo -1.0 menor valor dos genes na população inicial
maximo 1.0 maior valor dos genes na população inicial
seed None semente para reprodutibilidade (None = aleatório a cada rodada)
verbose True mostra o melhor fitness e a acurácia de cada geração

O rodar devolve um dicionário com cromossomo (o melhor encontrado), fitness, acuracia (fração de acertos nos dados de treino), geracao (em que geração parou), thresholds e historico (listas melhor, medio e acuracia com a evolução por geração).


Formato dos dados

A planilha (.xlsx ou .csv) deve seguir este layout:

Lições X1 X2 ... Xn CLASS
Y001 1 0 ... 1 1
Y002 0 1 ... 0 0
  • Primeira coluna: identificador da amostra (é ignorada)
  • Colunas do meio: features
  • Última coluna: classe

Um modelo pronto está em exemplos/base_de_dados_para_exemplos/modelo_base.xlsx.


Exemplos e resultados

Notebook Dataset Classes Acurácia no teste*
exemplo_binario.ipynb dados_binario_1.xlsx (539 amostras, 18 features) 2 87%
exemplo_multiclasse.ipynb dados_multiclasse.xlsx (261 amostras, 30 features) 5 79%

* Treino com 80% dos dados e teste com os 20% restantes, que o modelo nunca viu. Com np.random.seed(0).

O notebook binário mostra uma geração passo a passo, chamando cada função na ordem do algoritmo. O multiclasse mostra como escolher a ordem das classes quando ela não é conhecida.


Estrutura do projeto

AlgoritmoGenetico/
├── src/
│   └── algoritmo_genetico/
│       ├── __init__.py      # API pública: rodar, prever, ler_excel, ler_csv, dividir_treino_teste
│       ├── nucleo.py        # loop principal (rodar) e previsão (prever)
│       ├── criacao.py       # 1. população inicial
│       ├── fitness.py       # 2. fitness binário, ordinal e percentual
│       ├── selecao.py       # 3. seleção por roleta
│       ├── cruzamento.py    # 4. cruzamento de 1 ponto
│       ├── mutacao.py       # 5. mutação
│       ├── atualizacao.py   # 6. troca dos piores pelos melhores filhos
│       ├── leitura.py       # leitura de .xlsx e .csv
│       └── divisao.py       # divisão em treino e teste (estratificada)
├── exemplos/                # notebooks e datasets de exemplo
├── testes/                  # testes automáticos
├── pyproject.toml           # configuração do pacote (nome, versão, dependências)
├── LICENSE                  # licença MIT
└── requirements.txt

Cada etapa do algoritmo fica em um módulo próprio, então dá para trocar uma peça (por exemplo, testar outra seleção) sem mexer nas outras. Todas as funções verificam os parâmetros recebidos e dão mensagens de erro claras.


Próximos passos

  • Empacotar com pyproject.toml e publicar no PyPI
  • Testes automáticos com pytest
  • Classe no estilo scikit-learn (treinar / prever)
  • Salvar e carregar modelos treinados
  • Aceitar classes em texto (ex: "bom", "ruim") sem conversão manual

Licença

Distribuído sob a licença MIT: pode usar, modificar e redistribuir livremente, desde que mantenha o aviso de copyright.


Autores

Metadata

Release files for algoritmo-genetico 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for algoritmo-genetico 1.0.0
File Size Uploaded Provenance Actions
algoritmo_genetico-1.0.0.tar.gz 147.4 kB With provenance Details for algoritmo_genetico-1.0.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for algoritmo-genetico 1.0.0
File Interpreter ABI Platform Actions
algoritmo_genetico-1.0.0-py3-none-any.whl Python 3 none any Details for algoritmo_genetico-1.0.0-py3-none-any.whl

Total release size: 165.1 kB

Release files / algoritmo_genetico-1.0.0.tar.gz

Download URL algoritmo_genetico-1.0.0.tar.gz
Size 147.4 kB
Tags Source
SHA-256 checksum
How to use checksums
45e3033d30a3ed4ae72defb5f2de36fa31c095a5fcbdf2a2a8f7d76aa24cfa3f
BLAKE2b-256 checksum
How to use checksums
e8a409b78767ae5893b37b366a64ee630e1085deaa90df782233c55c0c6e7c31
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / algoritmo_genetico-1.0.0-py3-none-any.whl

Download URL algoritmo_genetico-1.0.0-py3-none-any.whl
Size 17.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f9107ef6cbacdbc41f44c477085e994fe8c7665eacbcc2d55ee852a8173f0b65
BLAKE2b-256 checksum
How to use checksums
cea5f9bd8a643bd491ad7a59b477c021a88e231079da1b653d890a5a3d880b85
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Security for algoritmo-genetico 1.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for algoritmo_genetico-1.0.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page