2단계: 고전적인 머신러닝
파이썬으로 머신러닝 기초 모델과 알고리즘을 처음부터 구현하는 교육 프로젝트입니다. 선형 회귀부터 딥러닝까지 다양한 알고리즘을 다루며, 알고리즘 내부 작동 메커니즘의 투명한 전시를 중시합니다.
ML-From-Scratch 프로젝트 상세 소개
프로젝트 개요
ML-From-Scratch는 Python을 사용하여 머신러닝의 기본 모델과 알고리즘을 처음부터 구현하는 프로젝트입니다. 이 프로젝트의 목적은 최적화되고 계산 효율성이 가장 높은 알고리즘을 만드는 것이 아니라, 알고리즘의 내부 작동 방식을 투명하고 이해하기 쉬운 방식으로 보여주는 데 있습니다.
프로젝트 저자
프로젝트 저자인 Erik Linder-Norén은 Apple의 머신러닝 엔지니어로, 머신러닝, 농구, 그리고 무언가를 만드는 것에 대한 열정을 가지고 있습니다.
프로젝트 특징
1. 교육 지향적
- 알고리즘 내부 작동 방식의 투명한 시연에 중점
- 코드가 명확하고 이해하기 쉬워 학습에 용이
- 풍부한 예시와 시각화 결과 제공
2. 기술 스택
- 주요 언어: Python
- 핵심 의존성: NumPy (수치 계산용)
- 시각화: Matplotlib (그래프 시각화용)
3. 광범위한 커버리지
선형 회귀부터 딥러닝까지, 머신러닝의 다양한 중요 영역을 다룹니다.
설치 및 사용법
설치 단계
$ git clone https://github.com/eriklindernoren/ML-From-Scratch
$ cd ML-From-Scratch
$ python setup.py install
예시 실행
# 다항 회귀 예시
$ python mlfromscratch/examples/polynomial_regression.py
# 컨볼루션 신경망 예시
$ python mlfromscratch/examples/convolutional_neural_network.py
# DBSCAN 클러스터링 예시
$ python mlfromscratch/examples/dbscan.py
구현된 알고리즘 분류
지도 학습 알고리즘
- Adaboost: AdaBoost (적응형 부스팅)
- Bayesian Regression: 베이즈 회귀
- Decision Tree: 결정 트리
- Elastic Net: 엘라스틱 넷 회귀
- Gradient Boosting: 그래디언트 부스팅
- K Nearest Neighbors: K-최근접 이웃 (KNN)
- Lasso Regression: 라쏘 회귀
- Linear Discriminant Analysis: 선형 판별 분석 (LDA)
- Linear Regression: 선형 회귀
- Logistic Regression: 로지스틱 회귀
- Multi-class Linear Discriminant Analysis: 다중 클래스 선형 판별 분석
- Multilayer Perceptron: 다층 퍼셉트론 (MLP)
- Naive Bayes: 나이브 베이즈
- Neuroevolution: 신경 진화
- Particle Swarm Optimization of Neural Network: 신경망의 입자 군집 최적화
- Perceptron: 퍼셉트론
- Polynomial Regression: 다항 회귀
- Random Forest: 랜덤 포레스트
- Ridge Regression: 릿지 회귀
- Support Vector Machine: 서포트 벡터 머신 (SVM)
- XGBoost: XGBoost (익스트림 그래디언트 부스팅)
비지도 학습 알고리즘
- Apriori: Apriori (연관 규칙 마이닝)
- Autoencoder: 오토인코더
- DBSCAN: DBSCAN (밀도 기반 클러스터링)
- FP-Growth: FP-Growth (빈발 패턴 성장)
- Gaussian Mixture Model: 가우시안 혼합 모델 (GMM)
- Generative Adversarial Network: 생성적 적대 신경망 (GAN)
- Genetic Algorithm: 유전 알고리즘
- K-Means: K-평균 클러스터링
- Partitioning Around Medoids: 메도이드 주변 분할 (PAM)
- Principal Component Analysis: 주성분 분석 (PCA)
- Restricted Boltzmann Machine: 제한된 볼츠만 머신 (RBM)
딥러닝 구성 요소
- Neural Network: 신경망 프레임워크
- 다양한 레이어 유형:
- Activation Layer (활성화 레이어)
- Average Pooling Layer (평균 풀링 레이어)
- Batch Normalization Layer (배치 정규화 레이어)
- Constant Padding Layer (상수 패딩 레이어)
- Convolutional Layer (컨볼루션 레이어)
- Dropout Layer (드롭아웃 레이어)
- Flatten Layer (플래튼 레이어)
- Fully-Connected (Dense) Layer (완전 연결 레이어)
- Fully-Connected RNN Layer (완전 연결 RNN 레이어)
- Max Pooling Layer (최대 풀링 레이어)
- Reshape Layer (재구성 레이어)
- Up Sampling Layer (업샘플링 레이어)
- Zero Padding Layer (제로 패딩 레이어)
예시 실행 결과
1. 컨볼루션 신경망 예시
+---------+
| 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. 딥 Q-네트워크 예시
+----------------+
| 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. 신경 진화 예시
+---------------+
| 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%
학습 가치
1. 알고리즘 원리 심층 이해
- 처음부터 구현함으로써 각 알고리즘의 핵심 사상을 깊이 이해할 수 있습니다.
- 명확한 코드 구조는 알고리즘의 구체적인 구현 세부 사항을 이해하는 데 도움이 됩니다.
2. 실용적인 프로그래밍 기술 향상
- NumPy와 같은 과학 계산 라이브러리 사용 기술을 향상시킵니다.
- 수학 이론을 코드로 구현하는 방법을 배웁니다.
3. 연구 및 개발 기반
- 추가적인 알고리즘 연구 및 개선을 위한 기반을 제공합니다.
- 기존 머신러닝 프레임워크의 하위 구현을 이해하는 데 도움이 됩니다.
적합한 대상
- 머신러닝 초급 및 중급 학습자
- 알고리즘 내부 메커니즘을 깊이 이해하고자 하는 연구원
- 프로그래밍 구현 능력을 향상시키고 싶은 개발자
- 머신러닝 관련 전공 학생
프로젝트 장점
- 높은 교육성: 코드가 명확하고 이해하기 쉬우며, 교육적 가치에 중점을 둡니다.
- 광범위한 커버리지: 기초부터 고급 알고리즘까지 모든 것을 포함합니다.
- 강력한 실용성: 완전한 실행 가능한 예시를 제공합니다.
- 지속적인 업데이트: 프로젝트가 활발하게 운영되며, 새로운 알고리즘 구현이 계속 추가됩니다.
주의사항
- 이 프로젝트는 주로 교육 및 학습 목적으로 사용되며, 프로덕션 환경에는 적합하지 않습니다.
- 알고리즘 구현은 성능 최적화보다는 가독성에 중점을 둡니다.
- 이론 학습과 병행하여 사용하는 것이 더 효과적입니다.