Este repositório implementa e compara modelos preditivos supervisionados em duas tarefas distintas de Machine Learning, desenvolvidos com NumPy e Matplotlib, sem uso de bibliotecas de ML prontas (scikit-learn, etc.).
| Etapa | Tarefa | Dataset |
|---|---|---|
| 1 | Regressão — Previsão de potência de aerogerador a partir da velocidade do vento | data/aerogerador.dat |
| 2 | Classificação — Reconhecimento de expressões faciais via sinais EMG | data/EMGsDataset.csv |
├── README.md
├── src/
│ ├── 1_REGRESSAO.py # Implementação completa da tarefa de regressão
│ └── 2_CLASSIFICACAO.py # Implementação completa da tarefa de classificação
├── data/
│ ├── aerogerador.dat # Dataset de velocidade do vento × potência gerada
│ └── EMGsDataset.csv # Dataset de sinais EMG faciais (50.000 amostras)
└── report/
└── relatorio_IA.pdf # Relatório completo com resultados e discussões
pip install numpy matplotlibVersões utilizadas: Python 3.x · NumPy · Matplotlib
Prever a potência gerada (kW) por um aerogerador a partir da velocidade do vento (m/s).
- Arquivo:
data/aerogerador.dat - Variável independente: velocidade do vento (m/s)
- Variável dependente: potência gerada (kW)
| Modelo | Descrição |
|---|---|
| Média da variável dependente | Baseline — prediz sempre a média de y do treino |
| MQO Tradicional | Mínimos Quadrados Ordinários: β = (XᵀX)⁻¹Xᵀy |
| MQO Regularizado (Tikhonov) | Ridge Regression com λ ∈ {0, 0.25, 0.5, 0.75, 1} |
- Método: Random Subsampling (Monte Carlo)
- Rodadas: R = 500
- Split: 80% treino / 20% teste
- Métricas: MSE e R²
| Modelo | Média | Desvio-Padrão | Máx. | Mín. |
|---|---|---|---|---|
| Média da var. dep. | 11.140,32 | 619,13 | 13.237,72 | 9.346,40 |
| MQO Tradicional | 778,64 | 166,08 | 1.298,09 | 459,11 |
| Tikhonov λ=0 | 778,64 | 166,08 | 1.298,09 | 459,11 |
| Tikhonov λ=0.25 | 778,64 | 166,05 | 1.297,96 | 459,17 |
| Tikhonov λ=0.5 | 778,64 | 166,02 | 1.297,83 | 459,24 |
| Tikhonov λ=0.75 | 778,64 | 165,98 | 1.297,70 | 459,30 |
| Tikhonov λ=1 | 778,64 | 165,95 | 1.297,57 | 459,37 |
| Modelo | Média | Desvio-Padrão | Máx. | Mín. |
|---|---|---|---|---|
| Média da var. dep. | −0,0026 | 0,0037 | 0 | −0,0363 |
| MQO Tradicional | 0,9301 | 0,0136 | 0,9566 | 0,8866 |
| Tikhonov (todos λ) | 0,9301 | 0,0136 | 0,9566 | 0,8866 |
Conclusão: O MQO e os modelos de Tikhonov tiveram desempenho praticamente idêntico (R² ≈ 0,93), demonstrando que a regularização não agrega ganho expressivo neste cenário de baixa dimensionalidade (p=1) com dados abundantes. O modelo de média obteve R² negativo, confirmando total incapacidade preditiva.
Reconhecer 5 expressões faciais a partir de sinais de eletromiografia (EMG) capturados em dois músculos faciais.
- Arquivo:
data/EMGsDataset.csv - Amostras: N = 50.000
- Features: p = 2 (Sensor 1: Corrugador do Supercílio; Sensor 2: Zigomático Maior)
- Classes: C = 5
| Rótulo | Expressão |
|---|---|
| 1 | Neutro |
| 2 | Sorriso |
| 3 | Sobrancelhas Levantadas |
| 4 | Surpreso |
| 5 | Rabugento |
| Modelo | Tipo de Fronteira |
|---|---|
| MQO Tradicional | Linear |
| Classificador Gaussiano Tradicional (QDA) | Quadrática |
| Classificador Gaussiano — Covariâncias Iguais (LDA) | Linear |
| Classificador Gaussiano — Covariância Agregada | Linear |
| Naive Bayes | Quadrática (diagonal) |
| Classificador de Friedman (Regularizado) | Quadrática → Linear (controlado por λ) |
- Método: K-Fold Cross Validation (K = 5)
- λ testados: {0, 0.001, 0.01, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1}
- λ ótimo encontrado:
0.01(acurácia média de validação: 99,65%)
- Método: Simulação de Monte Carlo
- Rodadas: R = 500
- Split: 80% treino / 20% teste
- Métrica: Acurácia (taxa de acerto)
| Modelo | Média | Desvio-Padrão | Maior | Menor |
|---|---|---|---|---|
| MQO Tradicional | 72,39% | 0,66% | 74,10% | 70,33% |
| Gaussiano (QDA) | 96,70% | 0,17% | 97,17% | 96,14% |
| Gaussiano (Cov. todo cj. treino — LDA) | 96,27% | 0,18% | 96,73% | 95,72% |
| Gaussiano (Cov. Agregada) | 94,85% | 0,27% | 95,56% | 93,97% |
| Naive Bayes | 96,56% | 0,17% | 97,04% | 95,98% |
| Friedman (λ=0.01) | 99,65% | 0,05% | 99,82% | 99,50% |
Conclusão: O classificador de Friedman com λ=0.01 alcançou o melhor desempenho (99,65%), confirmando que fronteiras quadráticas são essenciais para este problema não-linearmente separável. O MQO, limitado a fronteiras lineares, obteve apenas 72,39%.
python src/1_REGRESSAO.pySaídas geradas:
- Gráfico de espalhamento (velocidade × potência)
- Gráfico de ajuste dos 7 modelos
- Tabelas de MSE e R² no terminal
python src/2_CLASSIFICACAO.pySaídas geradas:
- Gráfico de espalhamento EMG por expressão facial
- Painéis com fronteiras de decisão dos 6 modelos
- Curva de acurácia × λ (K-Fold)
- Histograma de acurácias (Monte Carlo)
- Tabelas de resultados no terminal
Atenção: Os scripts assumem que os datasets estão em
../data/relativamente à pastasrc/. Ajuste os caminhos caso execute de outro diretório.
O arquivo report/relatorio_IA.pdf contém o relatório completo no formato de artigo científico, incluindo:
- Resumo — síntese dos métodos e principais resultados
- Metodologia — descrição detalhada de cada modelo e protocolo de validação
- Resultados — tabelas, gráficos e análises quantitativas
- Conclusões — discussão crítica sobre o desempenho de cada abordagem
onde
- Todos os modelos foram implementados manualmente com NumPy (sem scikit-learn ou similares).
- A regularização de Tikhonov não penaliza o intercepto (elemento [0,0] da identidade zerado).
- O classificador gaussiano utiliza log-probabilidades para evitar underflow numérico.
- A matriz de covariância recebe uma regularização numérica de
1e-6na diagonal para garantir inversibilidade.