인프런 커뮤니티 질문&답변
계속 질문드려서 죄송합니다ㅜㅜ
작성
·
346
1
def rmsle(y , y_pred):
return np.sqrt(np.mean(np.power(np.log1p(y) - np.log1p(y_pred), 2)))
def evaluate_org_price(y_test , preds):
preds_exmpm = np.expm1(preds)
y_test_exmpm = np.expm1(y_test)
rmsle_result = rmsle(y_test_exmpm, preds_exmpm)
return rmsle_result
print('rmsle 값:', evaluate_org_price(y_test , linear_preds))
evaluate_org_price에서 왜 expm1을 하는지 이해가 가지 않습니다. rmsle를 할때, 어차피 다시 log1p를 하잖아요. 처음부터 expm1도 하지않고 log1p도 하지않고, 바로 값을 넣으면 왜 안되는 건가요?
그러니깐
def rmsle(y , y_pred):
return np.sqrt(np.mean(np.power(np.y- np.y_pred, 2)))
print('rmsle 값:',rmsle(y_test , linear_preds))
이런식으로 하면 안되는 건가요?
답변 1
1
타겟값이 log 변환을 했기 때문에 말씀하신대로 아무변환을 하지 않고 바로 값을 넣어도 rmsle 가 됩니다.
하지만 이는 원래 타겟값을 log변환을 했기 때문에 가능한 것이지 원래 rmsle 의 의미는 아니기에 보다 명시적으로 수강생 분들에게 보여주기 위해서 그런것입니다.
타겟값을 log 변환했기에 다시 expm1 을 해야 원본 타겟값으로 복원이 되고 이를 다시 log 변환하여 rmsle 변환한 식을 적용한 것입니다.
그리고 질문은 언제나 환영입니다.
감사합니다.





