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

duddl님의 프로필 이미지
duddl

작성한 질문수

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

모델링 및 평가(분류)

머신러닝 실행 오류(ValueError: Input X contains NaN.) 질문드립니다

해결된 질문

작성

·

3.6K

0

 

안녕하세요. 동영상대로 따라하다가 에러가 났는데 잘못된 부분을 찾지 못해 질문드립니다 ㅠㅠ

[고/저소득을 0또는 1로 분류할 때]

저는 x,y,test로 3개 데이터를 불러온 후->전처리->피처엔지니어링까지 했고

 

inty=(y['income']=='>50K').astype(int)

from sklearn.model_selection import train_test_split
x_tr, x_val, y_tr, y_val= train_test_split(x, inty, test_size=0.1, random_state=100)


x_tr.shape, x_val.shape, y_tr.shape, y_val.shape

여기서 값이 ((26373, 15), (2931, 15), (26373,), (2931,))

이렇게 나오면서 정상 실행 됐는데요..

from sklearn.ensemble import RandomForestClassifier
rf=RandomForestClassifier()
rf.fit(x_tr,y_tr)
pred=rf.predict(x_val)

**여기에서 아래와 같은 오류가 납니다.ㅠㅠ 왜 그런 걸까요ㅠㅠㅠ
<ipython-input-112-e7142a22ea96> in <cell line: 3>()
      1 from sklearn.ensemble import RandomForestClassifier
      2 rf=RandomForestClassifier()
----> 3 rf.fit(x_tr,y_tr)
      4 pred=rf.predict(x_val)

/usr/local/lib/python3.10/dist-packages/sklearn/utils/validation.py in _assert_all_finite(X, allow_nan, msg_dtype, estimator_name, input_name)
    159                 "#estimators-that-handle-nan-values"
    160             )
--> 161         raise ValueError(msg_err)
    162 
    163 

ValueError: Input X contains NaN.

답변 2

1

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

  1. x 와 y 데이터 갯수가 맞아야 해요 행을 삭제 한다면 합쳐서 진행해주세요! 3개가 x에서는 삭제되었는데 y에서는 삭제가 되지 않은 것 같아요 !!

  2. test 데이터는 이상치 처리 하는 것이 아닙니다. test=test[test['age']>=0] 에서 음수가 없는 것으로 알지만 혹시 음수가 있어 행이 삭제 된다면 작업형 2에서는 0점 처리됩니다.

    그 이유는 우리가 예측해야 하는 행이 100개인데 수험생이 임의로 90개만 제출하면 체점을 할 수가 없어 0점 처리 됩니다.

  3. 이상치 처리는 꼭 해야 하는 것이 아닌 선택입니다. 꼭 해야 하는건 아니니 이상치 처리는 제외하고 학습하는것을 추천해요!

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

아아! 네!여기에 주의해야 할 두 가지 경우가 다 포함이었네요!! 너무 감사합니다!!

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

데이터 전처리가 진행 되었을가요? 결측치가 처리되지 않아서 나타나는 에러입니다

완성된 코드에서 제공되는 노트북을 확인한 후 결측치 처리 부탁해요!!

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

넵!! 감사합니다!! 결측치->이상치 처리 순으로 했고, 결측치 처리에서는 삭제 없이 모든 값을 대체했습니다!!

그리고, 처음부터 코드를 다시 돌려봤는데요

원래 x,y에서 29304개이던 데이터가

age 이상치 처리에서

x=x[x['age']>=0]

test=test[test['age']>=0]

이렇게 하면 x가 29301개로 바뀌고 에러코드도

ValueError: Found input variables with inconsistent numbers of samples: [29301, 29304]

이렇게 나옵니다.

 

그런데, age이상치 처리하는 함수를 빼고 다시 실행하면 갯수가 맞아서 이상없이 진행되는데, age 이상치처리하는 과정이 잘못된걸까요?ㅜㅜ (test갯수는 생략했습니다) 감사합니다!!!

duddl님의 프로필 이미지
duddl

작성한 질문수

질문하기