월간 데이콘 운동 동작 분류 AI 경진대회

CNN과 Catboost의 결합(public 33등 / private 35등)

2021.02.22 18:44 8,136 조회 language

*위 코드는 public score 0.64622(33등), private score 0.67768(35등)을 달성한 코드입니다.  높은 등수는 아니라 공유하기 민망하지만, 참고가 될만한 부분이 있을까하여 올립니다! (사실 dobby님이 제시해주신 transformer 모델을 사용해보고 싶었는데, transformer에 대한 지식이 부족하여 CNN 모델을 구성했습니다 ㅠㅠ)
*위 코드는 google colab에서 작성하여 파일을 불러오는 방식이 일반 jupyter와는 다릅니다.

모델은 크게 두 부분으로 구성됩니다. feature extraction을 위해 CNN 모델을 적용했으며, 이렇게 추출된 feature를 가지고 Catboost로 최종 분류를 진행했습니다.  
1. 1d-CNN에 ResNet의 Residual Block을 적용하여 모델 훈련을 진행했으며, 최종 output인 61개의 probability 대신 직전 layer의 GlobalAveragePooling의 output으로 한 id 당 128개의 feature를 추출했습니다.

2. CNN 모델의 여러 hyperparameter를 tuning하기 위해 kerastuner 라이브러리의 BayesianOptimization 함수를 사용했습니다. 

3. 이렇게 추출된 모델의 최종 classifier는 Catboost로 선정했습니다.(lightGBM 등의 모델을 실험하고자 했으나 colab에서 GPU를 사용하기 위해선 여러 설정이 필요한데, 결국 실패하여 Catboost를 사용했습니다. ) Catboost의 경우, tuning의 효과가 그리 크지 않다는 점에서 BayesianOptimization 대신 sklearn의 GridsearchCV를 사용하여 tuning했습니다.

처음 참가하는 대회인데, 세상은 넓고 고수분들은 참 많네요. 훌륭한 성적은 아니지만, 좋은 스타트라고 생각하고 열심히 공부하겠습니다. 감사합니다!

코드
로그인이 필요합니다
0 / 1000
정개
2021.02.22 19:51

이번 대회를 진행하며 고민했던 내용들과, 결론적으로 왜 이런 코드를 짜게 되었는지에 대한 구체적인 설명은 아래 링크에서 확인 가능합니다!
https://blog.naver.com/chunsa0127/222251765153

hahaha
2021.02.22 20:50

좋은 코드 공유 감사합니다! 저도 처음에는 gru에서 feature를 extract하고 machine learning 기법들을 이용해 stacking 하려고 했는데 성능이 안 좋아서 포기했던 기억이 있네요.

정개
2021.02.22 21:41

감사합니다! 
다른 분들 공유하신 코드보니, 분산이나 왜도같은 변수들을 직접 추출해서 바로 머신러닝으로 돌리신 분들도 있더라구요. 

저는 맨처음에 시도하고 잘 성능 안나와서 바로 포기했는데 CNN output에 추가했다면 어땠을까 하는 아쉬움이 남습니다 ㅠㅠ