해결된 질문
작성
·
3.5K
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
x 와 y 데이터 갯수가 맞아야 해요 행을 삭제 한다면 합쳐서 진행해주세요! 3개가 x에서는 삭제되었는데 y에서는 삭제가 되지 않은 것 같아요 !!
test 데이터는 이상치 처리 하는 것이 아닙니다. test=test[test['age']>=0] 에서 음수가 없는 것으로 알지만 혹시 음수가 있어 행이 삭제 된다면 작업형 2에서는 0점 처리됩니다.
그 이유는 우리가 예측해야 하는 행이 100개인데 수험생이 임의로 90개만 제출하면 체점을 할 수가 없어 0점 처리 됩니다.
이상치 처리는 꼭 해야 하는 것이 아닌 선택입니다. 꼭 해야 하는건 아니니 이상치 처리는 제외하고 학습하는것을 추천해요!
0
넵!! 감사합니다!! 결측치->이상치 처리 순으로 했고, 결측치 처리에서는 삭제 없이 모든 값을 대체했습니다!!
그리고, 처음부터 코드를 다시 돌려봤는데요
원래 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갯수는 생략했습니다) 감사합니다!!!
아아! 네!여기에 주의해야 할 두 가지 경우가 다 포함이었네요!! 너무 감사합니다!!