주제
스마트폰 센서 기반 데이터를 활용한 행동 인식
주요 기술
데이터 처리, 머신러닝, 딥러닝
데이터 구분
Tabular
중심 사항
561개 feature에 대한 데이터 탐색, 6개 class를 고려한 모델링
class
[LAYING, STANDING, SITTING, WALKING, WALKING_UPSTAIRS, WALKING_DOWNSTAIRS]
프로젝트 목표
새로운 도메인의 데이터를 탐색하고 좋은 성능을 낼 수 있게 전처리한 후
최적의 머신러인/딥러닝 모델을 완성한다.
데이터 소개
피험자 30명이 허리에 갤럭시S2를 차고 행동한 데이터 수집
- 가속도 센서 : 물체의 선형 가속도를 측정
- 자이로스코프 센서 : 각 속도를 측정하는 센터(각이 얼마나 변했나)
데이터 분석
561개의 feature들 중 중요한 feature를 알기 위해 tree모델로 변수 중요도 확인
정적/동적 을 구분하는데 중요한 feature가 무엇인지 찾아보기
모델 별로 정확도, feature importances 확인하기
먼저 feature importances를 확인하기 위해 tree 모델을 여러개 선정했다.
1. Random Forest
2. Decision Tree
3. XGBoost
4. LightGBM
5. CatBoost
* LightGBM은 feature 명에 특수문자가 포함되어 있어 에러가 났다.
정규식으로 변환할 수 있지만 중복feature가 생길 것을 염려해 일단은 사용하지 않았다.
(1) Random Forest - 전체 변수 학습시 정확도 98%
1. Feature Impotance 상위 20개
중요도가 높게 나온 변수의 대부분은 Gravity로 acc를 측정한 값들이었다.

2. Feature Impotance 하위 20개
하위 변수의 대부분은 Body 센서로 자이로스코프나 가속도를 측정한 것이었다.

위 결과를 보면 행동 인식에는 중력가속도 센서가 Body 센서에 비해 상대적으로 더 중요하다는 것이다.
정적/비정적인 운동이 나뉘어 있어 중력가속도 센서가 더 중요시 여겨지는 것 같다.
3. 상위 15개 변수 학습시 정확도 97%

(2) Decision Tree - 전체 변수 학습시 정확도 93%
1. 상위 15개 변수 학습시 정확도 94%


Decision Tree에서는 변수를 축소하니 오히려 성능히 높아지는 모습을 보였다.
특히 5개 까지의 변수가 높아보여 정확도를 구해봤다.
2. 상위 5개 변수 학습시 정확도 92%

살짝 낮아졌는데 역시나 나머지 10개의 변수가 영향을 끼쳤음을 알 수 있다.
XGB는 거의 모든 변수가 정확도에 가담했다면 DT는 축소된 상위 변수가 더 높은 영향을 끼친다는 것을 알았다.
(3) XGB - 전체 변수 학습시 정확도 99%
1. 상위 15개 변수 학습시 정확도 95%


상위 4개 변수가 유독 높게 튀어서 4개로 줄여서 다시 정확도를 구해봤다.
2. 상위 4개 변수 학습시 정확도 : 71%

변수를 15개에서 4개로 줄이니 정확도도 20%가까이 낮아졌다.
변수 중요도에서 큰 차이를 안보여도 학습에 필요한 변수들이 었음을 확인했다.
(4) CatBoost - 전체 변수 학습시 정확도 99%
1. 상위 15개 변수 학습시 정확도 97%


XGB와 비슷한 결과가 나왔다.
XGB와 CatBoost는 다른 tree모델들보다 정확도가 높고 15개 정도 변수에는 크게 정확도 하락이 없음을 확인했다.
Kaggle
kaggle로는 feature가 50개로 줄어든 데이터로 성능을 향상시켰다.
# IDEA1
변수 중요도를 계산한 만큼 50개중에 상위 몇 개의 feature를 사용해야 가장 잘 나올지 확인하기
#IDEA2
561개 에서 뽑은 상위 5개 feature를 사용해서 target 예측하기
해당 컬럼은 없어서 knn regression으로 예측해서 train/test로 사용했다.
#IDEA3
이전 train 를 concat(이어 붙여서) 데이터 증강 후 전체 학습
과정
#IDEA2
IDEA 1을 생각한 후 IDEA2에 시간을 가장 많이 쏟았다.
기존 train데이터에서 상위 5개 feature만으로도 88%정도의 예측률이 나오길래 회귀 분석해서 feature를 만든다음에 test하면 성능이 잘 나올거라 생각했다!
각 feature의 평균 예측율은 85%정도였다.
하지만 kaggle에 제출하니 23%? 의 낮은 결과를 보였다.ㅜㅜ
위 과정을 진행하다보니 시간이 얼마 안남아서 제공된 train set을 XGB로 학습시킨후 결과를 봤더니
77%정도 나왔다..(kaggle 평균)
#IDEA3
증강시켜서 해보니까 살짝 떨어진 76%가 나왔다..
#IDEA1
마지막으로 상위 39개 feature만 뽑아서 XGB 돌리니까 78%로 향상함을 보였다.(순위가 많이 오름..)
근데 시간이 지나서 IDEA1은 기록되지 못했다 ㅜㅜ
배운 점
학습 변수가 많을 때 중요도 별로 나눠 학습 모델링을 하는 법을 배웠다.
데이터 전처리를 하다보니 아직도 df 문법이 완벽하지 않다는 생각을 했다.
문법을 좀 외우면서 하면 시간단축도 되고 효율적일 것 같다.
Kaggle은 너무 재밌는데 결국은 autoML이 제일 좋다는 점이 허무하게 만든다 ㅜㅜ
'KT AIVLE SCHOOL' 카테고리의 다른 글
| [KT AIVLE] 웹 프로그래밍 기초 정리 및 VSCODE 환경설정 (0) | 2023.04.25 |
|---|---|
| [KT AIVLE] 세미나 특강- AI 자연어 트렌드 (0) | 2023.04.21 |
| [AICE Associate 자격증 준비] python 코드 공부 (0) | 2023.04.11 |
| [KT AIVLE] 미니프로젝트2 kaggle 참가 (0) | 2023.03.29 |
| [KT AIVLE] 미니프로젝트2 미세먼지 농도 예측 (0) | 2023.03.29 |
댓글