Project/산학협력프로젝트_WELT

모델 설계(MLP, KNN, LightGBM)

진성01 2022. 7. 11. 11:29

Multi Layer Perceptron

가장 먼저 시도했던 알고리즘은 MLP입니다. MLP는 현재 가장 각광받고 있는 분류기이기 때문에 저희 프로젝트에서도 좋은 성능을 나타낼 수 있을 것이라고 생각하여 먼저 시도하였습니다.

 

Batch size32 Epochs10으로 설정하였으며, 정형데이터를 이용하였기 때문에 CustomDataset클래스을 만들어 이용했습니다.

 

Train_loaderX_train 32(배치 수)*3(피처x, y, z)이고 y_train32*1(방위 값)입니다.

 

네트워크의 구조는 3개의 fully connected layer를 가지도록 구성하였습니다. Activation function으로는 ReLU를 사용하였으며, 이를 통과하기 전에 batch normalization을 수행했습니다. Activation function을 거친 이후에는 dropout0.5로 사용하였습니다. 레이어 마지막엔 log_softmax를 이용하여 확률 값을 나타내도록 하였습니다.

 

Kaiming_uniform_을 통해 parameter를 초기화 시켰고, optimizer로는 Adam을 사용하였습니다. Learning rate0.01, loss function은 분류기에서 많이 사용하는 CrossEntropyLoss를 이용하였습니다.

 

10 Epoch까지 학습한 결과 accuracy77.70%로 예상보다 훨씬 못 미치는 수준이 나타났습니다. 원인으로는 여러가지가 있을 수 있겠지만 저희가 생각한 가장 큰 문제점은 MLP가 정형 데이터에 있어서는 성능이 비교적 떨어지기 때문이라고 생각하였습니다. 퍼셉트론을 기반으로 한 신경망 분류기는 이미지 분류에 뛰어난 CNN, 자연어 처리에 뛰어난 RNN 등 복잡한 데이터를 input으로 가지는 분류에 있어서는 뛰어난 성능을 보이지만 정형 데이터에 대해서는 다른 ML 알고리즘에 비해 좋은 성능을 나타내지 못합니다. 따라서 다음 접근은 신경망이 아닌 ML 알고리즘으로 시도하였습니다.

 

K Nearest Neighbor

다음으로 선정한 알고리즘은 군집화(clustering) 알고리즘 중 하나인 KNN입니다. KNN은 예측할 데이터가 들어왔을 때 그 데이터와 가장 가까이 있는 학습 데이터를 k개 만큼 고르고 그 중 가장 많은 비율을 가지는 label을 선택하는 알고리즘입니다.

 

k값을 1부터 20까지 돌아가며 train_scorestest_scores를 산출하였고, 이중 가장 높은 값을 가진 knn과 그 값을 출력하였습니다.

 

Max test scorek=5일 때 95.532%로 가장 높은 값을 나타냈습니다. 정확도가 95% 이상으로 신경망 기반의 딥 러닝보다 훨씬 안정적이고 좋은 성능을 보였습니다.

 

LightGBM

LightGBM은 결정 트리 기반 앙상블 모델 중 boosting 방식의 알고리즘 중 하나입니다. 결정 트리 기반 앙상블 모델은 데이터셋을 이용하여 무수히 많은 결정 트리를 생성하고 예측해야 할 데이터가 들어왔을 때 각각의 결정 트리의 결과 중 가장 많은 비율을 가진 label을 예측 값으로 산출하는 알고리즘입니다. 특히 boosting 방식은 결정 트리를 무작위로 생성하는 것이 아닌, 이전에 생성 결정 트리를 기반으로 피드백하여 새로운 결정 트리를 생성하고 가중치를 다르게 부여하는 방식입니다. LightGBM은 정형 데이터 분류 문제에 있어 XGBoost와 함께 가장 사랑받는 알고리즘이며 XGBoost에 비해 학습 시간이 적게 소요되면서 비슷한 성능을 나타내기 때문에 LightGBM을 이용해 보게 되었습니다.

 

총 생성할 결정 트리 개수 n_estimators = 500으로 설정하였고 early stopping rounds 100으로 설정하여 학습에 진전이 없을 시 조기종료 하도록 하였습니다. 이렇게 생성한 LightGBM모델의 정확도는 95.381% KNN방식과 비슷하게 좋은 성능을 나타냈습니다.

 

다음으로는 hyper optimization을 통해 LightGBM의 여러 hyper parameter를 튜닝하였습니다. num_leaves, max_depth, min_child_samples, subsamples, learning_rate등의 파라미터를 튜닝했습니다.

 

Hyper parameter optimization의 결과로 가장 좋은 성능을 나타내는 hyper parameter를 이용하여 다시 정확도를 측정하였습니다. 결과는 95.11%로 기존 성능보다 근소하게 떨어진 것을 확인할 수 있었으나, 측정마다 정확도 값이 근소하게 다르게 나타날 수 있는 점과 하이퍼 파라미터 최적화 이후 과적합이 개선되었을 수 있을 것이라 판단하여 optimization이 적용된 모델을 최종 분류 모델로 선정하였습니다.

 

최종 모델을 joblib라이브러리를 이용하여 pkl 파일로 저장하였습니다. 해당 파일을 서버 파트에 전달하여 AI 서버에 모델 porting을 완료했습니다.

'Project > 산학협력프로젝트_WELT' 카테고리의 다른 글

데이터 분석  (0) 2022.07.11
데이터 수집  (0) 2022.07.11
데이터 전처리  (0) 2022.07.11
1. 산학협력프로젝트_with_WELT Intro  (0) 2022.05.09