이것으로 더 이상 고민하지 않는다! 기계 학습을 위한 폴더 구성 템플릿을 사용합시다.

고민



주로 기계 학습 프로젝트의 폴더 관리에서 ...


  • 자신이 파악하고 있어도, GitHub등으로 외부에 공개할 때, 제3자에게 있어서는 한눈에 알 수 있는 폴더 구성으로 되어 있지 않다(가독성의 문제).
  • 템플릿은 특별히 생각하지 않고, 프로젝트마다 다른 폴더 구성을 취해 버리고 있다(통일성/범용성의 문제).
  • 위의 이유로 업데이트 데이터와 새로운 모델로 학습 할 때 (무언가 궁리하지 않으면) 폴더가 혼합되어 기계 학습에서 얻은 결과와 학습 데이터의 대응을 얻을 수 없거나 (재현성 (?) 문제).

  • 해결책



    여러가지 조사해 본 결과, Cookiecutter 라고 하는 프로젝트 템플릿을 작성하는 커멘드 라인 유틸리티를 꽤 사용할 수 있을 것 같았습니다.



    Cookiecutter creates projects from project templates, e.g. Python package projects.

    아래 여기의 지침에 따라 프로젝트를 만들었습니다.

    설치 환경


    $ sw_vers
    ProductName:    Mac OS X
    ProductVersion: 10.14
    BuildVersion:   18A391
    $ python -V
    Python 3.7.4
    $ pip -V
    pip 19.2.3 from /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pip (python 3.7)
    

    설치 방법



    설치는 pip로 쉽게 할 수 있습니다.
    $ pip install cookiecutter
    $ cookiecutter --version
    Cookiecutter 1.6.0 from /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (Python 3.7)
    

    템플릿 다운로드



    이번에는 Python의 기계 학습 프로젝트를위한 템플릿 Data Science Cookiecutter을 다운로드했습니다.
    우선 홈 아래에 적당한 디렉토리를 작성해 실행했습니다.
    $ mkdir ~/test_cc
    $ ~/test_cc
    $ cookiecutter https://github.com/drivendata/cookiecutter-data-science
    You've downloaded /Users/YOUR_NAME/.cookiecutters/cookiecutter-data-science before. Is it okay to delete and re-download it? [yes]: yes
    project_name [project_name]: ml_project
    repo_name [ml_project]: 
    author_name [Your name (or your organization/company/team)]: mj
    description [A short description of the project.]: templates for ml project       
    Select open_source_license:
    1 - MIT
    2 - BSD-3-Clause
    3 - No license file
    Choose from 1, 2, 3 (1, 2, 3) [1]: 1
    s3_bucket [[OPTIONAL] your-bucket-for-syncing-data (do not include 's3://')]: 
    aws_profile [default]: 
    Select python_interpreter:
    1 - python3
    2 - python
    Choose from 1, 2 (1, 2) [1]: 1
    $ ls
    ml_project/
    

    위와 같이 cookiecutter https://github.com/drivendata/cookiecutter-data-science 명령을 실행하면 프로젝트 작성에 대한 질문을 받기 때문에 담담하게 대답합니다.
    궁극적으로 위의 질문 project_name에서 답변 한 ml_project/라는 디렉토리가 만들어졌습니다.

    작성된 디렉토리의 내용


    $ ls ml_project 
    LICENSE              models/              setup.py
    Makefile             notebooks/           src/
    README.md            references/          test_environment.py
    data/                reports/             tox.ini
    docs/                requirements.txt
    

    처음부터 여러가지 들어 있습니다.

    폴더 구성 설명



    자세한 것은 여기에도 기재되어 있습니다만, 다운로드된 템플릿에는 아래와 같이 상세한 설명이 더해진 마크다운 파일: README.md가 처음부터 존재하고 있습니다.

    README.md
    ml_project
    ==============================
    
    templates for ml project
    
    Project Organization
    ------------
    
        ├── LICENSE
        ├── Makefile           <- Makefile with commands like `make data` or `make train`
        ├── README.md          <- The top-level README for developers using this project.
        ├── data
        │   ├── external       <- Data from third party sources.
        │   ├── interim        <- Intermediate data that has been transformed.
        │   ├── processed      <- The final, canonical data sets for modeling.
        │   └── raw            <- The original, immutable data dump.
        │
        ├── docs               <- A default Sphinx project; see sphinx-doc.org for details
        │
        ├── models             <- Trained and serialized models, model predictions, or model summaries
        │
        ├── notebooks          <- Jupyter notebooks. Naming convention is a number (for ordering),
        │                         the creator's initials, and a short `-` delimited description, e.g.
        │                         `1.0-jqp-initial-data-exploration`.
        │
        ├── references         <- Data dictionaries, manuals, and all other explanatory materials.
        │
        ├── reports            <- Generated analysis as HTML, PDF, LaTeX, etc.
        │   └── figures        <- Generated graphics and figures to be used in reporting
        │
        ├── requirements.txt   <- The requirements file for reproducing the analysis environment, e.g.
        │                         generated with `pip freeze > requirements.txt`
        │
        ├── setup.py           <- makes project pip installable (pip install -e .) so src can be imported
        ├── src                <- Source code for use in this project.
        │   ├── __init__.py    <- Makes src a Python module
        │   │
        │   ├── data           <- Scripts to download or generate data
        │   │   └── make_dataset.py
        │   │
        │   ├── features       <- Scripts to turn raw data into features for modeling
        │   │   └── build_features.py
        │   │
        │   ├── models         <- Scripts to train models and then use trained models to make
        │   │   │                 predictions
        │   │   ├── predict_model.py
        │   │   └── train_model.py
        │   │
        │   └── visualization  <- Scripts to create exploratory and results oriented visualizations
        │       └── visualize.py
        │
        └── tox.ini            <- tox file with settings for running tox; see tox.testrun.org
    
    
    --------
    
    <p><small>Project based on the <a target="_blank" href="https://drivendata.github.io/cookiecutter-data-science/">cookiecutter data science project template</a>. #cookiecutterdatascience</small></p>
    

    보시다시피 폴더가 깔끔하게 나뉘어져 있으며 어디에 어떤 파일을 둘지 명기되어 있습니다. 우수합니다.
    이것을 베이스로 폴더 구성의 설명(필요에 따라서 스스로 어레인지)을 하는 것으로, GitHub상에서 공개해도 한눈에 폴더 구성을 파악해 줄 수 있다(편집측으로서도 매우 편리합니다) 때문에 매우 도움이 됩니다 (이것은 무엇보다도 내 자신의 작업/데이터 관리를위한 공부가 될 것입니다).

    Cookiecutter에 의하면, 해석에는 Python에 한정되지 않고 다른 언어로도 사용 가능하다고 하는 것입니다만, 상기의 인스톨을 실시했을 경우, 디폴트로 몇개의 Python 코드를 두어 줍니다(e.g. src 폴더내 .py 스크립트).

    With this in mind, we've created a data science cookiecutter template for projects in Python. Your analysis doesn't have to be in Python, but the template does provide some Python boilerplate that you'd want to remove (in the src fold for example, and the Sphinx documentation skeleton in docs).

    더 잘 알려질 수 있어야합니다.



    진지하게 이 세상의 모든 기계 학습 프로젝트의 폴더 구성에 고민하는 분들에게 가르쳐 주고 싶지만, Cookiecutter라고 하는 모든 인간을 포로로 하는 프로젝트 템플릿이 있다.
    폴더 구성이 처음부터 거의 최적화되어 있어 범용성도 높기 때문에 꼭 전국의 데이터 분석을 사랑하는 자, 데이터 관리를 미워하는 자, 모든 기계 학습 관계자에게 전해진다

    참고


  • Cookiecutter
  • 좋은 웹페이지 즐겨찾기