교육/KT 에이블스쿨

[KT AIVLE School(에이블스쿨)] - 6주차 후기(미니 프로젝트 2차, 시각지능 딥러닝)

aaaahy 2023. 9. 19. 21:53

에이블 스쿨 6주차(9. 11~ 9.15) - 4기 AI트랙

벌써 미프 2차가 진행된 6주차 !!
이번 미프때도 대면 교육장을 방문하여 진행하였다. 거의 한 달(?)만에 다시 보는 같은 반 에이블러분들 (ノ^o^)ノ 반갑당
 

미니프로젝트 2차

딥러닝 수업을 마치고 관련 미니프로젝트가 시작되었다.
 
1일차 

주제 : 주어진 공공 데이터를 활용하여 미세먼지 농도를 예측하기

미세먼지와 날씨 데이터를 이용하였고 데이터 분석, 전처리 과정을 오전시간에 개별적으로 진행하였다.  데이터 칼럼이 굉장히 많이 있었고 무엇보다 결측치를 처리하는 것에 대해 생각을 많이 하게 되었다.  뭔가 필요할 것 같은 칼럼이라 생각했는데 결측치가 무지하게 많아서 그냥 버리기도 했다... 또한, target 값은 1시간 후의 미세먼지 농도로 설정하기 위해 잠깐 잊고 있었던(?) shift()을 사용할 수 있었다.
오후 시간부터는 오전에 전처리한 데이터를 가지고 머신러닝 모델링을 진행하였다. 
선형회귀, 랜덤포레스트, 그레디언트부스팅 등을 이용해 보았고 나는 추가적으로 LGBRegressor 모델로도 학습시켜 보았다. 팀원들과 각자 진행한 학습으로 이야기를 나눠보니 모델들의 정확도가 비슷하게 91~93퍼 정도의 결과를 도출해 낼 수 있었다 !!  시간이 남았던 팀원분들은 모델 성능 최적화까지 진행하셨던데.. 나도 더 분발해야지 !(•̀ᴗ•́)و ̑̑
 
2-3일차  

주제 : 장애인 콜택시 대기시간을 예측하기

콜택시 운행이 종료되고 다음 날 대기시간을 예측
 
날짜별로 차량운행 건수와 평균요금, 평균 대기 시간 등이 포함되어 있는 데이터와 날씨 데이터를 이용하였다. 기본적으로 일별, 월별로 데이터를 탐색해 보며 분석하는 시간을 가졌고 두 데이터를 병합하여 추가적으로 유용할 것이라 생각되는 칼럼들을 추가하였다. 개별적으로 실습을 진행하는 과정에서 팀원분들과 서로 진행상황을 공유하며 도움을 많이 받을 수 있었다. 병합하여 완성시킨 데이터를 가지고 단변량 분석, 이변량 분석을 진행하며 시각화, 수치화를 해보며 target 값과 관련성이 높은 feature들을 정리해 볼 수 있었다. 

연도별,  계절별, 주별 분석

다음으로는 역시 모델링을 진행하였고 결정트리, knn을 사용해 보며 성능 비교를 해보았다.  데이터에 Date 칼럼이라는 날짜데이터가 포함되어 있었는데 이 칼럼을 포함하여 모델링을 진행하는 것이 안돼서 찾아보니 칼럼을 삭제하고 진행하거나 시계열 데이터를 모델링하는 방법인 ARIMA를 사용해 볼 수 있었다. 스스로 새로운 모델링 방식을 찾아보고 다른 결과를 얻을 수 있어 나름 흥미로웠다 !! 
 
실습을 먼저 개별적으로 진행하고 팀원들과 각자 결과를 공유할 수 있어서 좋았고 항상 프로젝트 마지막 시간에는 여러 에이블러분들의 발표를 들을 수 있어서 감탄(?)하는 시간을 가졌다 ,, ㅋㅋ 다들 대단하신 분들이 많은 것 같다.
2차 미프 마지막 날에는 우리 조도 발표했는데 넘 잘했다 !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 최고 ´͈  ᵕ `͈ ♡°˚
 

시각지능 딥러닝

계속되는 딥러닝 수업에 약간 정신을 잃을 뻔(?)했지만 정신 차리라고 스스로에게 채찍 중이다.
이번에 강의해 주시는 강사님은 무엇보다 판서가 좋았다 ㅎㅎ 강의 시작할 때, 끝날 때쯤에 항상 판서로 정리해주셔서 머릿속으로 복구할 수 있는 시간을 가질 수 있었다.  
 

 회귀이진분류다중분류
Output Layer Activation사용하지 않거나 linearsigmoidsoftmax
Lossmsebinary crossentropycategorical crossentropy

* 분류에서 crossentropy는 분포와 분포를 비교하는 것으로 추가적인 보조 지표가 필요
metrics로 'accuracy' 이용 ! 
 

Convolution Neural Networks

 

1) Conv2D 

  • filters : 새롭게 제작하려는 feature Map의 수
  • kernel_size : Convolution layer의 필터 사이즈
  • strides : Convolution layer의 필터 이동보폭
  • padding : 사이즈 유지, 외곽 정보를 더 반영하기 위해(same : 이전 feature map 사이즈 유지)
  • activation : 활성화 함수 

 

2) MaxPool2D

  • pool size : pooling filter의 크기(가로, 세로)
  • strides : polling filter의 이동보폭 (보통 pool size를 따라감)

 

CNN 실습(fashoin mnist, cifar10, not mnist)등을 진행순서에 따라 수행

1) 데이터 전처리

  • Data split(training set과 test set 나누기)
  • Scaling - 이전에는 MinmaxScaler을 사용해보았지만 정규 방식 이용하기 ! 
max_n, min_n = train_x.max(), train_x.min()

train_x = (train_x - min_n) / (max_n - min_n) 
test_x = (test_x - min_n) / (max_n - min_n)
  • One-hot encoding - get_dummies가 아닌 to_categorical 이용하기(다중 클래스 분류 모델)
class_n = len(np.unique(train_y)) # y 레이블 수 

from tensorflow.keras.utils import to_categorical

train_y = to_categorical(train_y, class_n) 
test_y = to_categorical(test_y, class_n) 
# 정수형 클래스 레이블을 원-핫 인코딩된 형태로 변환

 

2) 모델링 : CNN

  • 필요한 라이브러리 불러오기
  • 세션 클리어 -  clear_session()
  • 레이어 연결 - Input Layer, Hidden Layer, Output Layer (BatchNormalization, Dropout 등 이용)
  • 모델 지정 - 시작과 끝(Input Layer, Output Layer)
  • 컴파일 - optimizer, loss, metrics(분류 모델 보조 지표) 등 지정
  • Early Stopping 사용하기
from tensorflow.keras.callbacks import EarlyStopping

es = EarlyStopping(monitor='val_loss',       # 관측 대상
                   min_delta=0,              # Threshold
                   patience=3,               # 성능 개선 발생 하지 않을 때 몇 번 더 볼 것인가
                   verbose=1,
                   restore_best_weights=True # 최적 가중치를 가진 epoch로 되돌림
                   )
  • fit - 학습 진행
  • evaluate - 평가 진행
  • predict - 예측
  • 평가 지표 or 시각화하여 결과 확인해 보기