강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

yonghankim7님의 프로필 이미지
yonghankim7

작성한 질문수

[개정판] 파이썬 머신러닝 완벽 가이드

XGBoost and LightGBM 질문입니다!

작성

·

629

0

선생님 안녕하세요, 퀄리티 너무 좋은 수업 덕분에 하루하루 배우는 재미가 있네요. 이런 기회를 주셔서 정말 감사드립니다.

공부를 하다가 질문이 있어서 질문을 남겨요!

1.png제가 적용하려는 데이터의 타겟값이 -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 한것인가요?

2.png3.png4.png

답변 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 값이 변환되었는지 확인 부탁드립니다.

 

감사합니다.

 

yonghankim7님의 프로필 이미지
yonghankim7
질문자

안녕하세요,

답변 너무 감사드립니다.

아, 말씀해주신대로 코드가 약간 꼬인 느낌이군요. 한번 수정해서 다시 해보겠습니다.

다시 한번 귀한 시간 감사드립니다!

yonghankim7님의 프로필 이미지
yonghankim7

작성한 질문수

질문하기