작성
·
629
0
선생님 안녕하세요, 퀄리티 너무 좋은 수업 덕분에 하루하루 배우는 재미가 있네요. 이런 기회를 주셔서 정말 감사드립니다.
공부를 하다가 질문이 있어서 질문을 남겨요!
제가 적용하려는 데이터의 타겟값이 -1 or 1 인 상태입니다. 현재 logloss가 eval_metric이어서 그런지, 타겟값이 -1 or 1 인 상태로 넣으면 에러가 나와서, 첫 3줄의 코드를 통해서 타겟값이 -1 인 경우는 0으로 바꾸었더니 돌아갑니다.
여기서 궁금한게 생긴게,
1) validation-logloss 값이 음수가 나오더군요! (똑같은 데이터를 Dmatrix를 구해서 똑같이 XGBoost를 적용할 때는 그러지 않았는데 wrapper를 사용할때는 왜 음수가 나오기 시작하는지 조언을 주실 수 있을까요?) 또한, logloss 값 자체가 음수가 나올 수 없는게 아닌가 싶어서 좀 찾아보니, https://stackoverflow.com/questions/26282884/why-is-the-logloss-negative 에서 설명이 나와있던데, 이 설명으로서는 잘 이해가 안되네요.
2) 똑같은 데이터에 대해서 아래와 같이 LightGBM를 적용하려고 하였습니다. n_estimator = 1000 이고, early_stopping_rounds = 50 인데도 100번째 이터레이션 이후로 값들이 나오지 않더군요. 이럴때는 그냥 100번째 이터레이션이 optimal 한것인가요?
답변 1
1
안녕하십니까,
잘 듣고 계시다니, 저도 기분이 좋습니다. ^^
1) binary logloss를 적용하면 음수값이 잘 나오지 않습니다. binary logloss가 예측값에 log 값을 취하고 이를 평균으로 구한 뒤 -1 을 곱하는데 예측값이 0 ~ 1 사이로 되면 log가 음수값이 되고 여기에 -1을 곱하면 양수가 되는게 보통입니다.
제가 정확한 답변은 아닐수도 있는데 전반적으로 뭔가 꼬인 느낌입니다. 위의 소스 코드를 보면 y_tr은 replace가 -1에서 0으로 되었는데 y_val은 해당 코드가 보이지 않는군요. 다시 한번 확인 부탁드립니다.
2) 이건 뭔가 이상하군요. loss가 계속 줄고 있기 때문에 early stopping이 될 이유가 없습니다.
마찬가지로 y_val 값이 변환되었는지 확인 부탁드립니다.
감사합니다.
안녕하세요,
답변 너무 감사드립니다.
아, 말씀해주신대로 코드가 약간 꼬인 느낌이군요. 한번 수정해서 다시 해보겠습니다.
다시 한번 귀한 시간 감사드립니다!