Segunda Etapa: Aprendizado de Máquina Clássico
Um projeto educacional que implementa modelos e algoritmos básicos de aprendizado de máquina do zero em Python, cobrindo vários algoritmos de regressão linear ao aprendizado profundo, com foco em uma demonstração transparente dos mecanismos internos dos algoritmos.
Detalhes do Projeto ML-From-Scratch
Visão Geral do Projeto
ML-From-Scratch é um projeto que implementa modelos e algoritmos fundamentais de aprendizado de máquina do zero em Python. O objetivo deste projeto não é produzir algoritmos otimizados e computacionalmente eficientes, mas sim demonstrar o funcionamento interno dos algoritmos de forma transparente e fácil de entender.
Autor do Projeto
O autor do projeto, Erik Linder-Norén, é um engenheiro de aprendizado de máquina na Apple, apaixonado por aprendizado de máquina, basquete e construção de coisas.
Características do Projeto
1. Orientado para a Educação
- Foco na demonstração transparente do funcionamento interno dos algoritmos
- Implementação de código clara e fácil de entender, facilitando o aprendizado e a compreensão
- Fornece exemplos ricos e resultados visuais
2. Pilha Tecnológica
- Linguagem Principal: Python
- Dependências Essenciais: NumPy (para computação numérica)
- Visualização: Matplotlib (para exibição de gráficos)
3. Ampla Cobertura
Abrange várias áreas importantes do aprendizado de máquina, desde a regressão linear até o aprendizado profundo.
Instalação e Uso
Passos de Instalação
$ git clone https://github.com/eriklindernoren/ML-From-Scratch
$ cd ML-From-Scratch
$ python setup.py install
Executando Exemplos
# Exemplo de Regressão Polinomial
$ python mlfromscratch/examples/polynomial_regression.py
# Exemplo de Rede Neural Convolucional
$ python mlfromscratch/examples/convolutional_neural_network.py
# Exemplo de Agrupamento DBSCAN
$ python mlfromscratch/examples/dbscan.py
Classificação dos Algoritmos Implementados
Algoritmos de Aprendizado Supervisionado
- Adaboost: Algoritmo de Boosting Adaptativo
- Bayesian Regression: Regressão Bayesiana
- Decision Tree: Árvore de Decisão
- Elastic Net: Regressão Elastic Net
- Gradient Boosting: Gradient Boosting
- K Nearest Neighbors: Algoritmo K-Vizinhos Mais Próximos
- Lasso Regression: Regressão Lasso
- Linear Discriminant Analysis: Análise Discriminante Linear
- Linear Regression: Regressão Linear
- Logistic Regression: Regressão Logística
- Multi-class Linear Discriminant Analysis: Análise Discriminante Linear Multiclasse
- Multilayer Perceptron: Perceptron Multicamadas
- Naive Bayes: Naive Bayes
- Neuroevolution: Neuroevolução
- Particle Swarm Optimization of Neural Network: Otimização por Enxame de Partículas de Rede Neural
- Perceptron: Perceptron
- Polynomial Regression: Regressão Polinomial
- Random Forest: Floresta Aleatória
- Ridge Regression: Regressão Ridge
- Support Vector Machine: Máquina de Vetores de Suporte
- XGBoost: Extreme Gradient Boosting
Algoritmos de Aprendizado Não Supervisionado
- Apriori: Mineração de Regras de Associação
- Autoencoder: Autoencoder
- DBSCAN: Algoritmo de Agrupamento Baseado em Densidade
- FP-Growth: Algoritmo FP-Growth
- Gaussian Mixture Model: Modelo de Mistura Gaussiana
- Generative Adversarial Network: Rede Generativa Adversarial
- Genetic Algorithm: Algoritmo Genético
- K-Means: Agrupamento K-Means
- Partitioning Around Medoids: Particionamento em Torno de Medoides
- Principal Component Analysis: Análise de Componentes Principais
- Restricted Boltzmann Machine: Máquina de Boltzmann Restrita
Componentes de Aprendizado Profundo
- Neural Network: Estrutura de Rede Neural
- Vários Tipos de Camadas:
- Activation Layer (Camada de Ativação)
- Average Pooling Layer (Camada de Pooling Médio)
- Batch Normalization Layer (Camada de Normalização em Lotes)
- Constant Padding Layer (Camada de Preenchimento Constante)
- Convolutional Layer (Camada Convolucional)
- Dropout Layer (Camada de Dropout)
- Flatten Layer (Camada de Achatamento)
- Fully-Connected (Dense) Layer (Camada Totalmente Conectada (Densa))
- Fully-Connected RNN Layer (Camada RNN Totalmente Conectada)
- Max Pooling Layer (Camada de Max Pooling)
- Reshape Layer (Camada de Remodelagem)
- Up Sampling Layer (Camada de Up Sampling)
- Zero Padding Layer (Camada de Preenchimento com Zeros)
Resultados de Execução de Exemplo
1. Exemplo de Rede Neural Convolucional
+---------+
| ConvNet |
+---------+
Input Shape: (1, 8, 8)
+----------------------+------------+--------------+
| Layer Type | Parameters | Output Shape |
+----------------------+------------+--------------+
| Conv2D | 160 | (16, 8, 8) |
| Activation (ReLU) | 0 | (16, 8, 8) |
| Dropout | 0 | (16, 8, 8) |
| BatchNormalization | 2048 | (16, 8, 8) |
| Conv2D | 4640 | (32, 8, 8) |
| Activation (ReLU) | 0 | (32, 8, 8) |
| Dropout | 0 | (32, 8, 8) |
| BatchNormalization | 4096 | (32, 8, 8) |
| Flatten | 0 | (2048,) |
| Dense | 524544 | (256,) |
| Activation (ReLU) | 0 | (256,) |
| Dropout | 0 | (256,) |
| BatchNormalization | 512 | (256,) |
| Dense | 2570 | (10,) |
| Activation (Softmax)| 0 | (10,) |
+----------------------+------------+--------------+
Total Parameters: 538570
Training: 100% [------------------------------------------------------------------------] Time: 0:01:55
Accuracy: 0.987465181058
2. Exemplo de Rede Q Profunda
+----------------+
| Deep Q-Network |
+----------------+
Input Shape: (4,)
+-------------------+------------+--------------+
| Layer Type | Parameters | Output Shape |
+-------------------+------------+--------------+
| Dense | 320 | (64,) |
| Activation (ReLU) | 0 | (64,) |
| Dense | 130 | (2,) |
+-------------------+------------+--------------+
Total Parameters: 450
3. Exemplo de Neuroevolução
+---------------+
| Model Summary |
+---------------+
Input Shape: (64,)
+----------------------+------------+--------------+
| Layer Type | Parameters | Output Shape |
+----------------------+------------+--------------+
| Dense | 1040 | (16,) |
| Activation (ReLU) | 0 | (16,) |
| Dense | 170 | (10,) |
| Activation (Softmax) | 0 | (10,) |
+----------------------+------------+--------------+
Total Parameters: 1210
Population Size: 100
Generations: 3000
Mutation Rate: 0.01
[0 Best Individual - Fitness: 3.08301, Accuracy: 10.5%]
[1 Best Individual - Fitness: 3.08746, Accuracy: 12.0%]
...
[2999 Best Individual - Fitness: 94.08513, Accuracy: 98.5%]
Test set accuracy: 96.7%
Valor de Aprendizado
1. Compreensão Profunda dos Princípios do Algoritmo
- Ao implementar do zero, é possível obter uma compreensão profunda da ideia central de cada algoritmo
- A estrutura do código é clara, o que ajuda a entender os detalhes específicos da implementação do algoritmo
2. Habilidades Práticas de Programação
- Melhora as habilidades de uso de bibliotecas de computação científica como NumPy
- Aprende a transformar teoria matemática em implementação de código
3. Base para Pesquisa e Desenvolvimento
- Fornece uma base para futuras pesquisas e melhorias de algoritmos
- Ajuda a entender a implementação subjacente dos frameworks de aprendizado de máquina existentes
Público-Alvo
- Iniciantes e estudantes intermediários de aprendizado de máquina
- Pesquisadores que desejam entender profundamente os mecanismos internos dos algoritmos
- Desenvolvedores que buscam aprimorar suas habilidades de implementação de programação
- Estudantes de áreas relacionadas a aprendizado de máquina
Vantagens do Projeto
- Altamente Educacional: Código claro e fácil de entender, com foco no valor didático
- Ampla Cobertura: Abrange desde algoritmos básicos até avançados
- Altamente Prático: Fornece exemplos completos e executáveis
- Atualização Contínua: Projeto ativo, com adição constante de novas implementações de algoritmos
Observações
- Este projeto é destinado principalmente para fins de ensino e aprendizado, não sendo adequado para uso em ambiente de produção
- A implementação dos algoritmos foca na legibilidade em vez da otimização de desempenho
- Recomenda-se o uso em conjunto com o estudo teórico para melhores resultados