해결된 질문
작성
·
130
0
#1.문제정의
#평가:ROC-AUC
#target:'성별'
1
#최종파일:"result.csv"(컬럼 1개 pred, 1확률값)
#2.라이브러리 및 데이터 불러오기
import pandas as pd
train = pd.read_csv("data/customer_train.csv")
test = pd.read_csv("data/customer_test.csv")
#3.탐색적 데이터분석(EDA). shape head info isnull.sum. value_counts. describe target
pd.set_option('display.max_columns', None)
print(train.shape, test.shape)
print(train.head(2))
print(test.head(2))
print(train.info())
print(test.info())
print(train.isnull().sum())
print(test.isnull().sum())
print(train['성별'].value_counts())
#결측치채우기
train = train.fillna(0)
test = test.fillna(0)
print(train.isnull().sum())
print(test.isnull().sum())
# 4.데이터전처리 - object데이터를 인코딩
df = pd.concat([train,test])
df = pd.get_dummies(df)
train = df[:len(train)].copy()
test = df[len(train):].copy()
print(train.shape, test.shape)
#5. 검증 데이터 분할
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train.drop('성별', axis=1), train['성별'], test_size=0.2, random_state=10)
print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)
#6. 머신러닝 학습 및 평가
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score
model = RandomForestClassifier(random_state=0)
model.fit(X_tr, y_tr)
pred = model.predict_proba(X_val)
score = roc_auc_score(y_val, pred[:,1])
print(score)
# 7. 예측 및 평가 파일 생성
pred = model.predict_proba(test)
submit = pd.DataFrame({'pred':pred[:,1]})
submit.to_csv("result.csv")
print(pd.read_csv("result.csv"))
이렇게 했는데요. pred = model.predict_proba(test)만 작성하면 오류가 나는 이유가 뭘까요??
Makefile:6: recipe for target 'py3_run' failed
make: *** [py3_run] Error 1
Traceback (most recent call last):
File "/goorm/Main.out", line 64, in <module>
pred = model.predict_proba(test)
File "/usr/local/lib/python3.9/dist-packages/sklearn/ensemble/_forest.py", line 674, in predict_proba
X = self._validate_X_predict(X)
File "/usr/local/lib/python3.9/dist-packages/sklearn/ensemble/_forest.py", line 422, in validateX_predict
return self.estimators_[0]._validate_X_predict(X, check_input=True)
File "/usr/local/lib/python3.9/dist-packages/sklearn/tree/_classes.py", line 407, in validateX_predict
X = self._validate_data(X, dtype=DTYPE, accept_sparse="csr",
File "/usr/local/lib/python3.9/dist-packages/sklearn/base.py", line 421, in validatedata
X = check_array(X, **check_params)
File "/usr/local/lib/python3.9/dist-packages/sklearn/utils/validation.py", line 63, in inner_f
return f(*args, **kwargs)
File "/usr/local/lib/python3.9/dist-packages/sklearn/utils/validation.py", line 720, in check_array
assertall_finite(array,
File "/usr/local/lib/python3.9/dist-packages/sklearn/utils/validation.py", line 103, in assertall_finite
raise ValueError(
ValueError: Input contains NaN, infinity or a value too large for dtype('float32').
답변 2
0
df = pd.concat([train,test])
df = pd.get_dummies(df)
train = df[:len(train)].copy()
test = df[len(train):].copy()
print(train.shape, test.shape)
여기서 train.shape, test.shape의 결과가 어떤가요? 타겟 컬럼 1개의 차이가 있나요? 아마 차이가 없을 것이에요~ test에도 타겟컬럼이 결측값으로 생겨버렸어요
타겟을 pop()으로 먼저 분리 하고 데이터합치는 작업하길 추천합니다.
target = train.pop('타겟')
0
안녕하세요, 인프런 AI 인턴입니다.
뚜디니님의 질문에 따르면, pred = model.predict_proba(test)
해당 부분에서 오류가 발생하는 상황입니다. 문제의 핵심은 입력 데이터인 test
에 NaN 값, 무한대 혹은 float32 형으로 표현 불가능한 너무 큰 값이 포함되어 있다는 것입니다. 이러한 문제는 데이터 전처리 과정에서 해결할 수 있습니다.
질문하신 문제와 유사한 상황을 다룬 기존 답변 링크가 있어 안내드립니다:
- 게시글 제목: 예시문제 작업형2 test 데이터 예측시 발생하는 오류
위 링크의 게시글에서, 동일한 오류 상황에 대한 해결 방법이 제시되었습니다. 질문자의 경우, 테스트 데이터 X_test
에 결측치(NaN)가 있어서 모델 예측 과정에서 오류가 발생한 것으로 나타났습니다. 따라서, 테스트 데이터에 결측치가 없도록 처리하는 것이 필요합니다.
뚜디니님의 경우도 비슷한 해결 방법이 적용될 수 있습니다. 테스트 데이터에 대해 모든 결측치가 채워졌는지 (fillna(0)
혹은 다른 방법으로) 다시 한번 확인해보시는 것을 권장드립니다. 또한, 데이터 합치기 전(pd.concat([train, test])
)과 이후에 데이터 타입이나 잠재적인 이상치가 변화하지 않았는지 체크하는 것도 좋습니다. 이 과정에서 dtype='float32'
로 안전하게 변환할 수 없는 데이터 값이 없는지 확인해보세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.