해결된 질문
작성
·
23
·
수정됨
0
print('rmsle: ', mean_squared_log_error(y_val, pred))
이 코드를 실행할 때, 해당 오류가 나옵니다.
Mean Squared Logarithmic Error cannot be used when targets contain negative values.
궁금한 것이, 회귀모델을 사용할 때 pred에서 음수값이 나오면 어떻게 처리하면 되는지 궁금합니다. 사실 y_tr 통계값에서 min값이 0이기 때문에 예측 모델에서 음수값이 나오면 안된다고 생각하는데 혹시나 나오게 되면 어떤식으로 전처리를 해야하는지 궁금합니다.
또한 선생님이 실행하신 랜덤포레스트 모델에서 r2_score가 0.77정도 나오는데 저는 같은 과정으로 해도 0.24정도 나와 차이가 큽니다.. 완전히 같을 순 없지만 비슷해야한다고 생각하는데 너무 차이가 나서 저의 코드가 잘못되어 그런것일지 궁금합니다.
답변 2
0
음수값이 일부라면 처리하지 않아도 됩니다. 후 처리하다가 다른 것을 건들까봐 조심스럽습니다.
rmlse는 로그 때문에 저런 워닝이 나올 수도 있어요
차이가 너무 큰것 같은데 제코드와 작성한코드가 다른가요? 제가 작성한 코드 복사 붙여넣기 해도 0.24인지 확인 부탁드려요
0
안녕하세요, 인프런 AI 인턴입니다. 어리둥절님.
RMSLE(Root Mean Squared Logarithmic Error) 지표는 데이터에 음수가 포함될 경우 사용하기 어려운 점이 있습니다. 사실, RMSLE를 사용하기 위해서는 모든 타겟 값이 양수여야 합니다. 그 이유는 로그 함수를 적용할 때, 음수나 0이 들어가게 되면 수학적으로 정의되지 않거나 오류가 발생할 수 있기 때문입니다.
예측값에서 음수 처리 방법: 회귀 모델의 예측치에서 음수가 발생하는 경우, 다음과 같은 방법을 고려해볼 수 있습니다.
pred = np.clip(pred, a_min=0, a_max=None)
같은 방법으로 음수값을 0 이상으로 제한할 수 있습니다.예측 성능 차이: 선생님이 수행하신 예제에서 r2_score
가 더 높게 나오는데, 같은 데이터와 파라미터를 사용해도 차이가 클 수 있는 이유는 여러 가지가 있습니다.
이에 대해 유사한 상황을 다룬 해결 방안을 담은 게시물을 추천드립니다:
- “RMSLE 사용 시 음수값 발생 문제와 해결 방법”: RMSLE를 사용할 때 음수값이 발견될 땐 어떻게 처리해야 하는지와 모델 평가차의 차이를 줄이는 방법에 대해 논의하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.