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

hankilzoa님의 프로필 이미지
hankilzoa

작성한 질문수

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

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

작업형2 한가지 방법으로 풀기

작성

·

49

0

#train['환불금액']=train['환불금액'].drop

#test['환불금액']=test['환불금액'].drop

train=pd.get_dummies(train)

test=pd.get_dummies(test)

target=train.pop('성별')

from sklearn.model_selection import train_test_split

X_tr, X_val, y_tr, y_val = train_test_split(train,target,test_size=0.2,random_state=0)

from sklearn.ensemble import RandomForestClassifier

model=RandomForestClassifier(random_state=0)

model.fit(X_tr,y_tr)

pred=model.predict(test)

submit=pd.DataFrame({'pred':pred})

submit.to_csv('result.csv',index=False)

a=pd.read_csv('result.csv')

print(a.head())

 

위와 같이 한가지방법으로 풀기와 동일하게 진행하였는데 model.fit(X_tr,y_tr) 에서 오류가 납니다. 결측치가 있는 '환불금액'열을 삭제해도 동일한데 한가지방법으로 푸는 코드에 오류나 잘못된 부분이 있을가요?.

답변 3

0

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

target=train.pop('성별')

df=pd.concat([train,test])

df=pd.get_dummies(df)

train=df.iloc[:3500,] #1번방식

test=df.iloc[3500:,] #1번방식

2번방식# train=df.iloc[:len(train)]

2번방식# test=df.iloc[len(train):]

  1. 확인차 재문의 드리면 위와 같이 1번/2번방식으로 진행하면 되는걸까요?

  2. '인코딩이 안될때' 강의에서 2번에 해당한다하셨는데 문제에서는 포함되는지 여부는 언급이 없고 '성별'열만 test에 없다고 되어있는데 2번 방식이라 하셔서요('train'범주형 컬럼이 'test'를 포함한다)

    세가지로 구분하신 방식이 어떤 데이터가 큰지/합집합인지 등 구분이 안되는데 구분방법이 궁금합니다.

  3. 마지막으로 '인코딩이 안될때' 강의에서 3가지 케이스 모두다 숙지하고 있어야 되나요? 원핫 말고 레이블인코딩은 잘모르겠습니다

0

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

작업형2 한가지 방법으로 풀기는 기출에서 통한 방법이었어요

(8회에서도 통했지만 본 강의 에서는 문제는 조금 어렵게 출제했어요)

 

예시문제는 데이터가 어렵게 출제 되었어요 강의영상을 보면 알겠지만 train의 특정 컬럼에서 1개의 카테고리가 더 있어요

pd.get_dummies를 사용하려면 train과 test를 합친후 진행해야 합니다.
꿀팁 - 인코딩에서 에러가 발생한다면 영상 참고

0

안녕하세요, 인프런 AI 인턴입니다. hankilzoa님의 질문에 답변드리겠습니다.

문의하신 내용을 기반으로 오류가 발생할 수 있는 몇 가지 요소와 이에 대한 해결 방법을 안내드리겠습니다. 일반적으로 model.fit(X_tr, y_tr)에서 오류가 발생하는 원인은 주로 입력 데이터에 맞지 않는 형식입니다. 특히, train 혹은 target 데이터에 결측치가 존재하는 경우 오류가 발생할 수 있습니다.

해결 방법 및 체크리스트

  1. 결측치 확인 및 처리:

    • traintarget 데이터에 결측치가 있는지 확인해 보세요. 결측치를 제어하지 않으면 모델 학습 시 오류가 발생할 수 있습니다.
    • train.isnull().sum()target.isnull().sum()을 사용하여 결측치를 확인하고, 필요시 fillna 또는 특정 열을 삭제하여 결측치를 처리하세요.
  2. 데이터 프레임 셰이프 확인:

    • traintarget의 길이가 일치하는지 확인하세요. 만약 한 행이라도 누락된다면 레이블 데이터의 길이가 입력 데이터의 길이와 맞지 않아 학습이 불가능할 수 있습니다.
    • assert len(train) == len(target) 를 통해 길이를 확인하세요.
  3. 범주형 변환 확인:

    • pd.get_dummies(train)pd.get_dummies(test)에서 train 데이터와 test 데이터셋에 대해서는 get_dummies를 적용, 이후 컬럼 간 차이를 초래하지 않도록 했는지 확인하세요. 두 데이터셋에 모두 존재할 수 있는 동일한 컬럼에 대해 원핫 인코딩을 수행했는지 점검 필요합니다.
  4. 데이터 분할:

    • sklearn.model_selection.train_test_split 메서드를 통해 데이터를 실제 학습 및 검증 데이터로 분할할 때, 데이터의 전/후 셰이프와 명확하게 분할되었는지 체크하세요.
    • X_tr, X_val, y_tr, y_val이 분할된 데이터가 올바르게 분리되었는지, 데이터의 타입이 깨지지 않았는지도 점검해야 합니다.

본 문제와 유사한 경우를 다룬 기존 게시글이 있어 추천드립니다. 이러한 오류 해결 절차를 포함한 더 자세한 정보를 얻고자 하면, 다음 링크의 게시글을 참고해보세요:
- 예시문제 작업형2 신버전
- 작업형 2 모의문제 2번

특히 훈련 및 검증 오류 관련하여 모델 학습 시 자주 발생하는 착오를 피할 수 있는 유용한 조언을 얻으실 수 있을 것입니다.

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

hankilzoa님의 프로필 이미지
hankilzoa

작성한 질문수

질문하기