Home
Login

2단계: 고전적인 머신러닝

파이썬으로 머신러닝 기초 모델과 알고리즘을 처음부터 구현하는 교육 프로젝트입니다. 선형 회귀부터 딥러닝까지 다양한 알고리즘을 다루며, 알고리즘 내부 작동 메커니즘의 투명한 전시를 중시합니다.

MachineLearningPythonNumPyGitHubTextFreeEnglish

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. 연구 및 개발 기반

  • 추가적인 알고리즘 연구 및 개선을 위한 기반을 제공합니다.
  • 기존 머신러닝 프레임워크의 하위 구현을 이해하는 데 도움이 됩니다.

적합한 대상

  • 머신러닝 초급 및 중급 학습자
  • 알고리즘 내부 메커니즘을 깊이 이해하고자 하는 연구원
  • 프로그래밍 구현 능력을 향상시키고 싶은 개발자
  • 머신러닝 관련 전공 학생

프로젝트 장점

  1. 높은 교육성: 코드가 명확하고 이해하기 쉬우며, 교육적 가치에 중점을 둡니다.
  2. 광범위한 커버리지: 기초부터 고급 알고리즘까지 모든 것을 포함합니다.
  3. 강력한 실용성: 완전한 실행 가능한 예시를 제공합니다.
  4. 지속적인 업데이트: 프로젝트가 활발하게 운영되며, 새로운 알고리즘 구현이 계속 추가됩니다.

주의사항

  • 이 프로젝트는 주로 교육 및 학습 목적으로 사용되며, 프로덕션 환경에는 적합하지 않습니다.
  • 알고리즘 구현은 성능 최적화보다는 가독성에 중점을 둡니다.
  • 이론 학습과 병행하여 사용하는 것이 더 효과적입니다.