[경고 메시지] RuntimeWarning: invalid value encountered in log1p
🙋🏻♀️ 목표
Numpy 에서 제공하는 log 함수에 관한 경고 메시지를 분석한다.
Case 1. 0이 입력된 경우
log()
에 0 값이 들어갔다고 알려주는 경고 메시지이다. log(0)
은 음의 무한대 값을 가지기 때문에 -inf
(음의 무한대, negative infinity) 값이 반환된다.
-inf
값이 잘 반환되는데 경고 메시지를 반환하는 이유가 무엇일까?
사실 x는 0 값을 가질 때, 정확한 y 값이 없다. 로그 함수 그래프를 보면 x가 1에서 0으로 갈수록 음의 무한대로 발산한다고 표현합니다.
Case 2. 옳지않은 값이 입력된 경우
log1p()
에 적합하지 않은 값이 들어갔다고 알려주는 경고 메시지이다.
로그 함수에 음수가 들어가 ‘옳지 않은 값’이 들어갔다고 친절하게 알려주는 경고 메시지이다.
log에 음수를 넣으면, nan 으로 반환한다. (자동 결측치 처리)
🔍 예시로 이해하기
- 데이터 : Kaggle 주택 가격 예측하기 데이터셋의
train.csv
사용 - 👉 Kaggle - House Prices 데이터 보러가기
# SalePrice 데이터를 standardscaler로 스케일링
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
train[["SalePrice_ss"]] = ss.fit_transform(train[["SalePrice"]])
# 스케일링 후 Log Transformation
train[["SalePrice_ss_log1p"]] = np.log1p(train["SalePrice_ss"])
# 변수 스케이링 후, Log Transformation 전, 후 기술통계값 비교
train[["SalePrice_ss", "SalePrice_ss_log1p"]].describe()
count_bef = train["SalePrice_ss"].count()
count_aft = train["SalePrice_ss_log1p"].count()
count_neg = train.loc[(train["SalePrice_ss"]+1)< 0, "SalePrice_ss"].count()
count_bef - count_neg == count_aft # True 반환
로그에 음수를 입력하면 nan
값으로 반환하여 count 값에 포함되지 않는다.
위 코드는 nan
값을 반환하는지 확인해 본 결과이다.
👩🏻💻개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다.
댓글남기기