Árvores de Decisão - Henrique Soares
Implementação educacional completa dos algoritmos de árvore de decisão ID3, C4.5 e CART desenvolvidos do zero em Python.
Esta biblioteca foi criada como material educacional para demonstrar o funcionamento interno dos algoritmos de árvore de decisão, incluindo todas as etapas matemáticas e lógicas de construção das árvores.
🚀 Instalação
pip install arvores-henrique-soares
Dependências
- Python 3.7+
- NumPy >= 1.19.0
- Pandas >= 1.1.0
- Scikit-learn >= 0.24.0
📚 Uso Básico
Exemplo Simples
from minhas_arvores import ID3, C45, CART
import pandas as pd
# Dados de exemplo
dados = pd.DataFrame({
'Tempo': ['Sol', 'Sol', 'Nublado', 'Chuva', 'Chuva'],
'Temperatura': ['Quente', 'Quente', 'Quente', 'Frio', 'Frio'],
'Humidade': ['Alta', 'Alta', 'Alta', 'Normal', 'Normal'],
'Vento': ['Fraco', 'Forte', 'Fraco', 'Fraco', 'Forte'],
'Jogar': ['Não', 'Não', 'Sim', 'Sim', 'Não']
})
X = dados[['Tempo', 'Temperatura', 'Humidade', 'Vento']]
y = dados['Jogar']
# Treinar modelo ID3
modelo = ID3()
modelo.fit(X, y)
# Fazer predição
resultado = modelo.predict({'Tempo': 'Sol', 'Temperatura': 'Quente',
'Humidade': 'Normal', 'Vento': 'Fraco'})
print(f"Predição: {resultado}")
# Visualizar árvore
modelo.imprimir_arvore()
Exemplo com Dados Contínuos (C4.5 e CART)
from minhas_arvores import C45, CART
import pandas as pd
# Dados com atributos contínuos
dados = pd.DataFrame({
'idade': [25, 35, 45, 55, 65],
'salario': [35000, 45000, 55000, 65000, 75000],
'aprovado': ['Não', 'Não', 'Sim', 'Sim', 'Sim']
})
X = dados[['idade', 'salario']]
y = dados['aprovado']
# C4.5 - suporta atributos contínuos
c45 = C45()
c45.fit(X, y)
predicao_c45 = c45.predict({'idade': 40, 'salario': 50000})
# CART - divisões binárias
cart = CART()
cart.fit(X, y)
predicao_cart = cart.predict({'idade': 40, 'salario': 50000})
📊 Algoritmos Implementados
ID3 (Iterative Dichotomiser 3)
- Critério: Ganho de Informação
- Tipos de Dados: Apenas categóricos
- Características: Algoritmo clássico, simples e eficiente para dados categóricos
C4.5
- Critério: Razão de Ganho (Gain Ratio)
- Tipos de Dados: Categóricos e contínuos
- Características:
- Suporta valores ausentes
- Discretização automática de atributos contínuos
- Poda de árvore para evitar overfitting
CART (Classification and Regression Trees)
- Critério: Índice de Gini
- Tipos de Dados: Categóricos e contínuos
- Características:
- Divisões binárias apenas
- Robusto e eficiente
- Base para algoritmos como Random Forest
🔧 Exemplo Completo
Execute o script de exemplo incluído:
git clone https://github.com/HenriqueSoares28/lista4_ia.git
cd lista4_ia
python exemplo_uso.py
📈 Comparação de Performance
O projeto inclui testes com o dataset Titanic e comparação com scikit-learn:
| Algoritmo | Acurácia | Características |
|---|---|---|
| ID3 | 100%* | Dados categóricos simples |
| C4.5 | 100%* | Suporte a contínuos |
| CART | 85.7% | Divisões binárias robustas |
*Resultados no dataset Play Tennis (categórico)
🏗️ Estrutura do Projeto
minhas_arvores/
├── __init__.py # Exportações da biblioteca
├── id3.py # Algoritmo ID3
├── c45.py # Algoritmo C4.5
├── cart.py # Algoritmo CART
├── arvore_base.py # Classe base para nós da árvore
└── utilidades.py # Funções matemáticas auxiliares
🤝 Contribuições
Contribuições são bem-vindas! Este projeto tem fins educacionais e pode ser expandido com:
- Novos algoritmos de árvore de decisão
- Métodos de poda mais avançados
- Visualizações gráficas das árvores
- Mais datasets de exemplo
📝 Licença
Este projeto está licenciado sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
👨💻 Autor
Henrique Soares
- GitHub: @HenriqueSoares28
- Projeto: lista4_ia
Desenvolvido como projeto educacional para demonstrar a implementação de algoritmos de árvore de decisão do zero.
Metadata
Release files for arvores-henrique-soares 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| arvores_henrique_soares-1.0.1.tar.gz | 15.9 kB | Without provenance | Details for arvores_henrique_soares-1.0.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| arvores_henrique_soares-1.0.1-py3-none-any.whl | Python 3 | none | any | Details for arvores_henrique_soares-1.0.1-py3-none-any.whl |
Total release size: 36.3 kB
Release files / arvores_henrique_soares-1.0.1.tar.gz
| Download URL | arvores_henrique_soares-1.0.1.tar.gz |
|---|---|
| Size | 15.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
aa3e4187b4a3e5cfe98d163386dcb9c36699f268535f5b6f86d2f1df2bc8c505
|
|
BLAKE2b-256 checksum How to use checksums |
297c1449b8027a2c7a21db48eb078a1adde359ea3dfd70e02df05fb7b4aa8f2d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Release files / arvores_henrique_soares-1.0.1-py3-none-any.whl
| Download URL | arvores_henrique_soares-1.0.1-py3-none-any.whl |
|---|---|
| Size | 20.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e769f0d723533e5adad86558a04aab63daeee0868d5448e385a1bffba5ba0d09
|
|
BLAKE2b-256 checksum How to use checksums |
0bbf28434fc1597edb0e2f54446b3b7e617f73ee35ccc0a47d807b1aff4a0f5f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Security for arvores-henrique-soares 1.0.1
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
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.