{"cells":[{"metadata":{},"cell_type":"markdown","source":"## How to split folds and train\n+ 모각캐 온 기념으로 커널 한개만 올리겠습니다. 코드는 저희 신림 스터디의 강상권님이 작성해주셨습니다.\n+ discussion 보면 fold별로 어떻게 학습할 지 고민이 많으신것 같은데요\n+ 제가 캐글 커널 활용해서 학습했던 방법 중 하나를 소개하려고 합니다.\n+ 이렇게 미리 folds.csv 를 만들고 dataset으로 올려서 학습 커널에서 불러온 이후 해당 폴드만을 validation set으로 써서 학습하시면 되겠습니다.\n+ 해당 커널 참조하시면 좋을것 같습니다.\nhttps://www.kaggle.com/yangsaewon/pytorch-baseline-updated-7-10"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd \n\nimport tqdm\nfrom pathlib import Path\nfrom collections import defaultdict, Counter","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"DATA_ROOT = Path('../input/2019-3rd-ml-month-with-kakr/')\ntrain_csv = pd.read_csv('../input/2019-3rd-ml-month-with-kakr/train.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def make_folds(n_folds: int) -> pd.DataFrame:\n    df = pd.read_csv(DATA_ROOT / 'train.csv', engine='python')\n\n    cls_counts = Counter([classes for classes in df['class']])\n    fold_cls_counts = defaultdict()\n    for class_index in cls_counts.keys():\n        fold_cls_counts[class_index] = np.zeros(n_folds, dtype=np.int)\n\n    df['fold'] = -1\n    pbar = tqdm.tqdm(total=len(df))\n\n    def get_fold(row):\n        class_index = row['class']\n        counts = fold_cls_counts[class_index]\n        fold = np.argmin(counts)\n        counts[fold] += 1\n        fold_cls_counts[class_index] = counts\n        row['fold']=fold\n        pbar.update()\n        return row\n    \n    df = df.apply(get_fold, axis=1)\n    return df","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df = make_folds(n_folds=5)\ndf.to_csv('folds.csv', index=None)","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}