Autores: Caio Eduardo Tomaz Ferreira, Eliandro de Souza Junior
Primeiro trabalho de Inteligencia Artificial. Classifica a aceitabilidade de carros usando KNN, Naive Bayes, Arvore de Decisao e MLP.
O dataset Car Evaluation (UCI) avalia a aceitabilidade de veiculos com base em 6 atributos categoricos. O objetivo e classificar um carro em uma de 4 classes de aceitabilidade.
Dataset: 1728 instancias, 6 atributos categoricos, 4 classes.
| Atributo | Valores possiveis | Descricao |
|---|---|---|
buying |
low, med, high, vhigh | Preco de compra |
maint |
low, med, high, vhigh | Preco de manutencao |
doors |
2, 3, 4, 5more | Numero de portas |
persons |
2, 4, more | Capacidade de passageiros |
lug_boot |
small, med, big | Tamanho do porta-malas |
safety |
low, med, high | Nivel de seguranca |
| Classe | Instancias | Porcentagem |
|---|---|---|
| unacc (inaceitavel) | 1210 | 70,0% |
| acc (aceitavel) | 384 | 22,2% |
| good (bom) | 69 | 4,0% |
| vgood (muito bom) | 65 | 3,8% |
| Total | 1728 | 100% |
Desbalanceamento severo: 70% das instancias sao unacc. A acuracia e enganosa
neste cenario — um modelo que chuta sempre unacc teria 70% de acerto. Por
isso, a metrica principal de avaliacao e o F1-weighted.
Quatro algoritmos de familias distintas para comparacao:
| Algoritmo | Familia | Como funciona |
|---|---|---|
| KNN | Baseado em instancia/distancia | Classifica pela maioria dos k vizinhos mais proximos |
| Naive Bayes | Probabilistico | Estima probabilidades condicionais via teorema de Bayes |
| Arvore de Decisao | Simbolico/regras | Particiona o espaco com splits baseados em entropia/gini |
| MLP | Redes neurais | Aproxima funcoes com camadas densas e retropropagacao |
O objetivo e comparar o desempenho e as caracteristicas de cada abordagem no mesmo problema.
- Python >= 3.8
- pip
python -m venv venv
source venv/bin/activate # Linux / macOS
# .\venv\Scripts\activate # Windows
pip install -r requirements.txtDependencias instaladas: scikit-learn, pandas, numpy, matplotlib.
O split treino/teste e compartilhado entre todos os algoritmos para garantir comparacao justa. Execute antes de qualquer algoritmo:
python scripts/preprocessing.pyIsso gera os splits pickle em data/processed/ com divisao 70/30 estratificada
(seed=42).
python scripts/exploratoria.pyGera graficos e estatisticas sobre a distribuicao dos dados em output/.
python main.pyO terminal exibe um menu com as opcoes:
1 - KNN
2 - Naive Bayes
3 - Arvore de Decisao
4 - MLP
5 - Executar TODOS os algoritmos
6 - Exibir resultados salvos
7 - Pre-processamento dos dados
0 - Sair
- Execute a opcao 7 (pre-processamento) na primeira vez que usar o projeto.
- Em seguida, escolha os algoritmos que deseja executar (1 a 4) ou execute todos de uma vez (5).
- Use a opcao 6 para consultar resultados de execucoes anteriores.
python scripts/preprocessing.py # pre-processamento (uma vez)
python algoritmos/knn/knn.py # KNN
python algoritmos/naive/naive.py # Naive Bayes
python algoritmos/arvore/arvore.py # Arvore de Decisao
python algoritmos/mlp/mlp.py # MLP.
├── main.py CLI interativo (ponto de entrada)
├── requirements.txt dependencias do projeto
├── scripts/
│ ├── preprocessing.py pre-processamento compartilhado
│ └── exploratoria.py analise exploratoria dos dados
├── algoritmos/
│ ├── knn/ KNN (k-Nearest Neighbors)
│ ├── naive/ Naive Bayes (CategoricalNB)
│ ├── arvore/ Arvore de Decisao (DecisionTreeClassifier)
│ └── mlp/ MLP (Multilayer Perceptron)
├── data/
│ ├── car.data dataset original
│ └── processed/ splits pickle (gerados pelo pre-processamento)
├── output/ saidas da analise exploratoria
└── docs/ documentacao detalhada dos algoritmos
A pasta docs/ contem a documentacao completa de cada algoritmo, incluindo
decisoes de projeto, interpretacao de resultados e comparativos entre metodos.
docs/
index.md indice da documentacao
knn/01-visao-geral.md KNN
naive/01-visao-geral.md Naive Bayes
arvore/01-visao-geral.md Arvore de Decisao
mlp/01-visao-geral.md MLP
geral/
01-comparativo-knn-naive.md Comparativo: KNN vs Naive Bayes
02-comparativo-knn-arvore.md Comparativo: KNN vs Arvore
03-comparativo-final.md Comparativo: todos os 4 algoritmos
Apos executar todos os algoritmos, a leitura recomendada e o comparativo final, que analisa desempenho, trade-offs e a conclusao do projeto.
| Algoritmo | Acuracia | F1-weighted |
|---|---|---|
| KNN | 89,4% | 0,886 |
| Naive Bayes | 85,4% | 0,848 |
| Arvore | 98,46% | 0,9846 |
| MLP | 98,46% | 0,9846 |
Arvore de Decisao e MLP empatam no melhor desempenho geral. A Arvore tem a vantagem da interpretabilidade; o MLP, da capacidade de aproximacao.
O dominio dos dois se deve a natureza deterministica do dataset (construido a partir de regras bem definidas de um sistema especialista). KNN sofre com a esparsidade do espaco one-hot; Naive Bayes, com a violacao da independencia entre atributos. Detalhes completos no comparativo final.
| Problema | Causa provavel | Solucao |
|---|---|---|
ModuleNotFoundError |
Dependencias nao instaladas | Ative o venv e rode pip install -r requirements.txt |
FileNotFoundError: data/processed/ |
Pre-processamento nao executado | Rode a opcao 7 do menu ou python scripts/preprocessing.py |
Erro com tkinter no Linux |
Biblioteca grafica ausente | sudo apt install python3-tk (Debian/Ubuntu) |
| Opcao 6 nao mostra resultados | Algoritmo ainda nao foi executado | Execute o algoritmo desejado primeiro (opcoes 1-5) |