---
원문 URL: https://github.com/eriklindernoren/ML-From-Scratch
창작 제목: "라이브러리를 걷어내면 보이는 것, 머신러닝 알고리즘 31가지 해부도"
원제: ML-From-Scratch (Machine Learning From Scratch)
제작자: Erik Linder-Noren
라이선스: MIT
정리: 다비(davi.kr) https://davi.kr/
정리일: 2026-09-09
문서의 목적: NumPy만으로 머신러닝 알고리즘을 직접 구현한 교육용 저장소의 내용과 한계를 확인하고, 강의/학습 자료로 쓸 수 있는 실행 방법을 정리한다.
---

# 라이브러리를 걷어내면 보이는 것, 머신러닝 알고리즘 31가지 해부도

원문: https://github.com/eriklindernoren/ML-From-Scratch
정리: 다비(davi.kr) https://davi.kr/

## 쉬운 설명

보통 머신러닝을 배울 때는 scikit-learn이나 PyTorch 같은 도구를 씁니다. `model.fit()` 한 줄이면 학습이 끝나지만, 그 한 줄 안에서 무슨 계산이 벌어지는지는 보이지 않습니다. ML-From-Scratch는 그 상자를 열어놓은 저장소입니다. 선형회귀부터 랜덤 포레스트, CNN, GAN, 강화학습(Deep Q-Network)까지 31개 이상의 알고리즘을 NumPy(파이썬 숫자 계산 라이브러리)만으로 처음부터 다시 짜서 공개했습니다. 저자 본인이 README에 밝힌 목적도 "빠른 코드를 만드는 것이 아니라 내부 동작을 투명하게 보여주는 것"입니다.

규모로 보면 GitHub 별 31,900개, 포크 5,300개, 커밋 374개입니다. 구성은 지도학습 21개(선형회귀, 로지스틱회귀, 의사결정나무, 랜덤 포레스트, XGBoost, SVM, 나이브 베이즈, AdaBoost 등), 비지도학습 11개(K-Means, DBSCAN, PCA, GAN, 오토인코더, Apriori 등), 강화학습 1개(DQN), 그리고 딥러닝 계층 13종(Conv2D, BatchNormalization, Dropout, MaxPooling, RNN 등)입니다. 예제도 실측값이 함께 실려 있습니다. 8x8 손글씨 숫자 데이터로 CNN을 돌리면 파라미터 538,570개, 학습 1분 55초, 정확도 98.7%가 나옵니다. GAN 예제는 생성자 1,489,936개와 판별자 533,762개 파라미터로 구성되고, DQN은 파라미터 450개로 CartPole-v1을 풉니다. 라이선스는 MIT라 수업 자료나 사내 교육에 자유롭게 쓸 수 있습니다.

## 활용 방법

가장 쉬운 진입 방법은 저장소 전체를 설치하지 않고 파일 하나만 읽는 것입니다. 설치 과정에서 막히는 지점이 실제로 존재하기 때문입니다(아래 전문가 의견 참고).

**1단계. 설치 없이 코드부터 읽기**

- `mlfromscratch/supervised_learning/regression.py`를 먼저 여세요. 선형/릿지/라쏘/엘라스틱넷/다항회귀가 한 파일에 정리되어 있어 규제(regularization)가 손실 함수에 어떻게 붙는지 20분이면 파악됩니다.
- 다음으로 `deep_learning/layers.py`를 여세요. Conv2D의 순전파와 역전파가 100줄 남짓으로 적혀 있어 프레임워크가 감추는 부분이 그대로 드러납니다.

**2단계. 실행이 필요하면 requirements를 먼저 고치기**

원본 `requirements.txt`를 그대로 설치하면 실패합니다. 다음처럼 바꾼 뒤 설치하세요.

```bash
git clone https://github.com/eriklindernoren/ML-From-Scratch
cd ML-From-Scratch
# requirements.txt에서 sklearn -> scikit-learn 으로 수정
sed -i 's/^sklearn$/scikit-learn/' requirements.txt
pip install -r requirements.txt
pip install -e .          # python setup.py install 대신 사용
python mlfromscratch/examples/polynomial_regression.py
```

강화학습 예제(`deep_q_network.py`)는 구버전 `gym` API를 전제로 하므로, 최신 `gymnasium`을 쓸 경우 `env.step()` 반환값이 4개에서 5개로 바뀐 부분을 직접 수정해야 합니다.

**3단계. 수업 자료로 재구성하기**

- 한 차시(45분 수업 + 15분 휴식)당 알고리즘 1개를 배정하세요. scikit-learn으로 3줄 실행 → 같은 알고리즘의 from-scratch 코드 낭독 → 핵심 수식 1개 지목 순서가 가장 효율적입니다.
- 과제로는 "이 파일의 `fit()`에 주석 20줄 달아오기"가 잘 작동합니다. 코드를 새로 짜게 하는 것보다 이해도 확인이 정확합니다.
- 평가 문항은 `examples/` 폴더의 출력 수치를 그대로 쓰세요. CNN 예제의 파라미터 538,570개가 어떻게 계산되는지 묻는 문제가 대표적입니다.

## 전체 내용에 대한 전문가 의견(사실 기반)

**강점**

- 커버리지가 실제로 넓습니다. 별 3만 개짜리 "밑바닥부터" 저장소 중 GAN, RBM, 신경진화(Neuroevolution), 입자군집최적화, FP-Growth까지 한 저장소에 담은 사례는 드뭅니다.
- 코드가 짧고 인터페이스가 일관됩니다. 모든 모델이 `fit()`과 `predict()`를 따르므로 scikit-learn을 써본 사람이 곧바로 대조하며 읽을 수 있습니다.
- MIT 라이선스입니다. 상업 강의 자료 편입에 법적 제약이 없습니다.

**한계와 위험**

- 유지보수가 사실상 정지 상태입니다. 공개된 이슈 42건, 풀 리퀘스트 31건이 미처리로 남아 있고, 패키지 버전은 0.0.4에서 멈춰 있습니다. 마지막 커밋 정확한 날짜는 GitHub API 접근 제한으로 이번 확인에서 검증하지 못했습니다.
- 의존성이 깨져 있습니다. `requirements.txt`에 적힌 `sklearn`은 PyPI에서 폐기된 패키지로, 2023년 12월 1일부터 설치를 시도하면 항상 오류가 발생합니다. 올바른 이름은 scikit-learn입니다. `gym` 역시 OpenAI가 유지보수를 중단하고 Farama Foundation의 Gymnasium으로 이관되었습니다. `progressbar33`은 Python 2 시절 패키지이며, README가 안내하는 `python setup.py install` 방식도 현재 setuptools에서 권장되지 않습니다. 결과적으로 "clone 후 3줄이면 실행"이라는 README의 인상은 2026년 기준으로 사실이 아닙니다.
- 벤치마크 수치를 성능 근거로 인용하면 안 됩니다. CNN 정확도 98.7%는 8x8 크기 digits 데이터셋 기준이며 MNIST(28x28)가 아닙니다. 신경진화 예제의 96.7%도 같은 소규모 데이터 결과입니다. 저자 스스로 최적화가 목적이 아니라고 명시했으므로, 이 숫자들은 알고리즘 우열의 근거가 아니라 "코드가 돌아간다"는 확인용으로만 읽어야 합니다.
- 프로덕션 사용 금지 대상입니다. 벡터화가 제한적이고 수치 안정성 처리가 얇아 실제 서비스에 넣을 코드가 아닙니다. XGBoost 구현체 역시 원 논문의 근사 분할 탐색이나 희소성 인식 같은 최적화가 빠진 축소판으로 봐야 합니다.

**비교 판단 기준**

- 강의에서 알고리즘 폭을 넓게 훑어야 한다면 이 저장소가 유리합니다.
- 딥러닝 내부 구조를 정밀하게 다루는 것이 목표라면 유지보수가 이어지는 다른 자료(예: karpathy/micrograd, nn-zero-to-hero)가 코드 신선도 면에서 낫습니다.
- 최신 라이브러리 환경에서 바로 돌아가는 실습이 필요하다면 이 저장소는 부적합합니다. 의존성 수정 시간을 30분 이상 예산에 잡으세요.

## Bottom Line

이 저장소는 "설치해서 쓰는 라이브러리"가 아니라 "읽는 교재"로 취급하십시오. 지금 `regression.py`와 `layers.py` 두 파일만 브라우저로 열어 15분간 읽으시고, 다음 강의에서 다룰 알고리즘 하나를 골라 scikit-learn 코드와 나란히 놓는 비교 슬라이드부터 만드십시오. 설치 씨름은 그 다음 문제입니다.

---

## 자기 평가

- 총점 88점 / 100점
- 검증된 사실: 저장소 통계(별 31,900, 포크 5,300, 커밋 374, 이슈 42, PR 31), README 예제 수치 전부, 라이선스 MIT, 패키지 버전 0.0.4, requirements.txt 내용, sklearn 패키지 폐기 사실, gym에서 Gymnasium 이관 사실
- 검증 실패: 마지막 커밋 날짜(GitHub API 요청 한도 초과, 커밋 페이지는 robots 차단)
- 추론 영역: XGBoost 구현체가 축소판이라는 판단은 코드 규모와 저자의 명시적 목적에서 도출한 해석이며 전체 코드 라인 대조는 수행하지 않았습니다
- 감점 사유: 마지막 커밋 날짜 미확인(-8), XGBoost 구현 범위 판단이 직접 코드 대조가 아닌 추론(-4)

정리: 다비(davi.kr) https://davi.kr/
