작성
·
199
0
파이썬 래퍼 XGboost 조기 중단 결과 (일부만)
[0] train-logloss:0.65016 eval-logloss:0.66183
[1] train-logloss:0.61131 eval-logloss:0.63609
[2] train-logloss:0.57563 eval-logloss:0.61144
[3] train-logloss:0.54310 eval-logloss:0.59204
[4] train-logloss:0.51323 eval-logloss:0.57329
[5] train-logloss:0.48447 eval-logloss:0.55037
[6] train-logloss:0.45796 eval-logloss:0.52930
[7] train-logloss:0.43436 eval-logloss:0.51534
사이킷런 래퍼 XGboost 조기 중단 결과 (일부만)
[0] validation_0-logloss:0.65016 validation_1-logloss:0.66183
[1] validation_0-logloss:0.61131 validation_1-logloss:0.63609
[2] validation_0-logloss:0.57563 validation_1-logloss:0.61144
[3] validation_0-logloss:0.54310 validation_1-logloss:0.59204
[4] validation_0-logloss:0.51323 validation_1-logloss:0.57329
[5] validation_0-logloss:0.48447 validation_1-logloss:0.55037
[6] validation_0-logloss:0.45796 validation_1-logloss:0.52930
[7] validation_0-logloss:0.43436 validation_1-logloss:0.51534
결과가 train-logloss, eval-logloss 이렇게 두 개가 나오는데 eval-logloss의 값만 확인 하는 이유가 궁금합니다. ( 사이킷런 래퍼의 경우 validation_0_logloss 와 validation_1_logloss 두개가 있는데 validation_1_logloss만 확인하는 이유)
train-logloss 와 eval-logoss(validation_0_logloss / validation_1_logloss) 가 각각 의미하는 것이 뭔지 궁금합니다.
logloss는 실제값과 예측값의 차이에서 발생하는 값일텐데 어떻게 두개가 나올 수 있는지 궁금합니다. (학습 데이터와 검증데이터를 전달했다면 검증 데이터의 예측 결과로만 손실값이 나올텐데 train-logloss 는 어디서 나온 손실값인가요?)
답변 1
0
안녕하십니까,
질문 1, 2, 3을 먼저 묶어서 답변드리자면,
위 예제는 XGBoost는 학습 데이터를 기반으로 학습을 하고, 검증 데이터를 기반으로 모델의 성능 평가 검증을 하는 예제 입니다.
학습 데이터로 학습을 할 경우에는 loss를 최소화 하는 방향성으로 학습을 하므로 당연히 loss값을 계산합니다. 먼저 첫번째 iteration을 모델을 학습하였으면 이 모델에 검증 데이터를 이용해서 성능 평가를 하는데 이때도 검증 데이터 기반으로 loss를 계산합니다. 이런 식으로 n_estimators에 기술된 값 만큼 iteration을 돌면서 학습 데이터 기반으로 loss를 계산, 검증 데이터 기반으로도 loss를 계산합니다.
그러면 왜 학습 데이터 외에 검증 데이터로도 loss를 계산하는가 하면, 일반적으로 XGBoost 모델을 iteration을 할때 마다 계속 loss를 감소 시키는 방향으로 학습을 시키기 때문에 학습 데이터 기반에서는 무조건 loss가 계속 줄어드는 성향이 있습니다. 하지만 학습 데이터가 아닌 검증 데이터에서는 loss가 감소하지 않을 수도 있습니다. 이러한 오버 피팅 현상때문에 검증 데이터를 통해 학습 모델이 다른 데이터 에서도 성능이 잘 나오는지 확인할 필요가 있기에 검증 loss값을 구하게 됩니다.
아래는 1, 2,3 질문에 대한 답입니다.
train loss도 중요한데, eval loss가 더 중요합니다. 학습 데이터 외에 다른 데이터에서 성능이 나오는지 확인하는 게 더 중요할 수 있습니다.
train-logloss는 모델이 학습데이터로 예측한 loss 값이며, eval-logloss는 모델이 검증 데이터로 예측한 loss값입니다.
이건 위에서 설명드려서, 별도 설명은 스킵하겠습니다.
감사합니다.