• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

pred 의 음주예측값에 대한 rmsle

21.06.10 22:22 작성 조회수 205

0

1.

pred 값을 살펴보면 음수인 값이 다수 있는 것으로 확인이 되는데, 

이 값을 그대로 rmsle 함수에 넣으면 nan 이 나와야 정상아닌가요?? 음수가 포함된 array 를 넣으면 nan이 나오는데, bike_sharing 실습시에는 정상적으로 산출이 되네요 

2. 

def rmsle(test, pred):

    log_test = np.log1p(test)

    log_pred  = np.log1p(pred)

    rmsle = np.sqrt(mean_squared_error(log_test, log_pred))

    return rmsle

이런 식으로 rmsle 를 정의하면 안되나요?

nan 이슈로 에러가 뜹니다만.... 이유를 잘 모르겠네요 ㅜ

음수를 다루는 방식의 차이인 것 같은데 설명부탁드립니다!!

답변 1

답변을 작성해보세요.

0

이게 numpy 연산과 Pandas Series 연산이 서로 달라서 그렇군요.

아래 식에서 rmsle(y, pred)에서 인자로 들어오는 y가 Pandas Series입니다.

squared_error 계산식은 Pandas Series가 되고, NaN이 포함됩니다. 이 Series에 np.mean(squared_error)를 적용하면 NaN이 제외되고 mean이 적용됩니다. 그런데 이걸 Series가 아니라 numpy array로 적용하게 되면 nan 이슈가 발생하는 군요.

def rmsle(y, pred):
    log_y = np.log1p(y)
    log_pred = np.log1p(pred)
    squared_error = (log_y - log_pred) ** 2
    rmsle = np.sqrt(np.mean(squared_error))
    return rmsle