@theeluwin's personal code kata.
"HMM은 기본적이고 고전적인 알고리즘이니까"라고 말하고 다니기엔 '그럼 나는 저걸 짤 수나 있나?' 싶어서 그걸 확인하고 기록해두기 위함입니다.
알고리즘 구현 능력을 마치 뜨거운 모래에 손가락 찌르기를 하듯 하드보일드하게 수련을 해야할듯 하여.. 관련 글 - 당신이 제자리 걸음인 이유: 지루하거나 불안하거나
주로 머신러닝 관련 알고리즘과 방법론을 구현하며, 딥러닝의 경우는 기본적인 부분 빼고는 Keras나 Tensorflow를 사용 할 예정.
tasks
엔 머신러닝 관련을, algorithms
엔 코세라 스탠포드 알고리즘 강의에서 다룬 알고리즘들을 구현함.
머신러닝의 경우 코딩의 제약 조건이 다음과 같이 이음:
- 파이썬3, PEP8에서 E501 빼고
- 주석은 안써도 되지만 코드 퀄리티는 남들에게 보여줄 수 있을 정도는 되어야 함
- numpy, scikit-learn 등에서 제공되는 보조도구까진 사용해도 되지만 알고리즘 로직 자체는 직접 짜야함
- 그냥 짤 수 있는것도 굳이 numpy를 활용해서 해볼 것
- 알고리즘이 실제로 쓰이는 task가 있어야 함
- 이를 해결하고 evaluation하는 부분까지 구현
- 외부 라이브러리에서 제공 되거나 간단하게 구현해 볼 수 있는 다른 알고리즘도 같이 포함 시켜서 비교 해보기 (
baseline
)
- 데이터셋 포함
- 크기가 너무 크면 다운로더를 제공
- 공개된 자료(출처 명시) 혹은 쉽게 생성해낼 수 있는 데이터를 사용
- 라이브러리 수준으로 최대한 범용적이게 구현할것
utils/skeleton
에 있는 형식을 사용할것- 이렇게 싱글톤으로 스크립트를 짜게되면 어디까지를 공통분모로 처리할지가 애매해지는데, 기준은 각각의 메소드가 유닛테스트를 하기에 적합하도록 쪼개기
- 따라서 적합한 유닛테스트 작성도 이 수련에 포함됨
- 사실 위 1
8 원칙을 열심히 지키려고 했으나 어느새 망가져서 그냥 코드 정리도 포기하고 파이썬2, 3도 섞여있고 막 그럼ㅎㅎ.. 에라 모르겠다. 그냥 한번씩 구현 해봤다는것을 온전히 기록하기 위함일 뿐입니다. 흥흥흥
Bonus Point:
- test set까지 학습해버리면(cheating) 정말로 성능이 증가하는지 체크
- partial fit이 가능하면 구현 해볼것
- 예쁘게 figure 그리기
충분히 범용적으로 쓰일 수 있도록 코딩해둔 모듈들:
테스트는 각 task 디렉토리 내에서 test.py
를 -m
옵션 없이 실행시키면 됨!
test.py benchmark
로 실행 시키면 유닛테스트 대신에 모든 메소드를 싹 돌려서 성능 비교표를 뽑아줌
(이렇게 되도록 하는 작업은 아직 하는중)
Task와 그걸 해결 할 수 있는 알고리즘들의 나열로 기재. "hard-coded"라고 써있는 부분이 이 프로젝트의 핵심.
- CRF with pycrfsuite
baseline
- HMM, hard-coded
Classification: Titanic Survival
- Random Forest Classifier from sklearn
baseline
- Naive Bayes Classifier, hard-coded
Recommendation: MovieLens
- Model-Based CF with scipy
baseline
- Memory-Based CF, hard-coded
- numpy polyfit
baseline
- Linear Regression
- using TF
- hard-coded
- Normal Equation
Classification: Iris Flower
- FFNN
- using Keras
baseline
- using TF
- hard-coded
- using Keras
- Logistic Regression
- using TF
- hard-coded
- SVM, hard-coded
- Random Forest, hard-coded
- k-means, hard-coded
- Hierarchical, hard-coded
- DBSCAN, hard-coded
Classification: MNIST
- CNN
- using Keras
baseline
- using TF
- using Keras
이정도면 아마 고전적인 머신러닝 알고리즘들은 대부분 커버할 수 있을듯?
최신 논문들을 TF로 구현해보기.