Skip to content

andreas-koukorinis/kata

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

수우련을 하자

@theeluwin's personal code kata.

"HMM은 기본적이고 고전적인 알고리즘이니까"라고 말하고 다니기엔 '그럼 나는 저걸 짤 수나 있나?' 싶어서 그걸 확인하고 기록해두기 위함입니다.

알고리즘 구현 능력을 마치 뜨거운 모래에 손가락 찌르기를 하듯 하드보일드하게 수련을 해야할듯 하여.. 관련 글 - 당신이 제자리 걸음인 이유: 지루하거나 불안하거나

주로 머신러닝 관련 알고리즘과 방법론을 구현하며, 딥러닝의 경우는 기본적인 부분 빼고는 KerasTensorflow를 사용 할 예정.

tasks엔 머신러닝 관련을, algorithms코세라 스탠포드 알고리즘 강의에서 다룬 알고리즘들을 구현함.

머신러닝의 경우 코딩의 제약 조건이 다음과 같이 이음:

  1. 파이썬3, PEP8에서 E501 빼고
  2. 주석은 안써도 되지만 코드 퀄리티는 남들에게 보여줄 수 있을 정도는 되어야 함
  3. numpy, scikit-learn 등에서 제공되는 보조도구까진 사용해도 되지만 알고리즘 로직 자체는 직접 짜야함
  4. 그냥 짤 수 있는것도 굳이 numpy를 활용해서 해볼 것
  5. 알고리즘이 실제로 쓰이는 task가 있어야 함
    • 이를 해결하고 evaluation하는 부분까지 구현
    • 외부 라이브러리에서 제공 되거나 간단하게 구현해 볼 수 있는 다른 알고리즘도 같이 포함 시켜서 비교 해보기 (baseline)
  6. 데이터셋 포함
    • 크기가 너무 크면 다운로더를 제공
    • 공개된 자료(출처 명시) 혹은 쉽게 생성해낼 수 있는 데이터를 사용
  7. 라이브러리 수준으로 최대한 범용적이게 구현할것
  8. utils/skeleton에 있는 형식을 사용할것
    • 이렇게 싱글톤으로 스크립트를 짜게되면 어디까지를 공통분모로 처리할지가 애매해지는데, 기준은 각각의 메소드가 유닛테스트를 하기에 적합하도록 쪼개기
    • 따라서 적합한 유닛테스트 작성도 이 수련에 포함됨
  9. 사실 위 18 원칙을 열심히 지키려고 했으나 어느새 망가져서 그냥 코드 정리도 포기하고 파이썬2, 3도 섞여있고 막 그럼ㅎㅎ.. 에라 모르겠다. 그냥 한번씩 구현 해봤다는것을 온전히 기록하기 위함일 뿐입니다. 흥흥흥

Bonus Point:

  • test set까지 학습해버리면(cheating) 정말로 성능이 증가하는지 체크
  • partial fit이 가능하면 구현 해볼것
  • 예쁘게 figure 그리기

Usage

충분히 범용적으로 쓰일 수 있도록 코딩해둔 모듈들:

테스트는 각 task 디렉토리 내에서 test.py-m 옵션 없이 실행시키면 됨!

test.py benchmark로 실행 시키면 유닛테스트 대신에 모든 메소드를 싹 돌려서 성능 비교표를 뽑아줌

(이렇게 되도록 하는 작업은 아직 하는중)


Todo

Task와 그걸 해결 할 수 있는 알고리즘들의 나열로 기재. "hard-coded"라고 써있는 부분이 이 프로젝트의 핵심.

Classification: Titanic Survival

Recommendation: MovieLens

  • numpy polyfit baseline
  • Linear Regression
    • using TF
    • hard-coded
  • Normal Equation

Classification: Iris Flower

Clustering: Random Colony

Classification: MNIST

  • CNN
    • using Keras baseline
    • using TF
  • NPLM, using TF baseline
  • RNN
    • using Keras
    • using TF
    • LSTM, using TF

이정도면 아마 고전적인 머신러닝 알고리즘들은 대부분 커버할 수 있을듯?


Advanced

최신 논문들을 TF로 구현해보기.

About

Let's study.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 99.8%
  • Shell 0.2%