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

뚜디니님의 프로필 이미지
뚜디니

작성한 질문수

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

예시문제 작업형2(신 버전)

오류가 뜹니다

해결된 질문

작성

·

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'로 안전하게 변환할 수 없는 데이터 값이 없는지 확인해보세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

뚜디니님의 프로필 이미지
뚜디니

작성한 질문수

질문하기