강의

멘토링

커뮤니티

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

합격님의 프로필 이미지
합격

작성한 질문수

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

[작업형2] 연습문제 섹션 3

작업형2 연습문제 섹션3

해결된 질문

작성

·

20

0

Section 3. 항공권 가격 예측

  1. # 컬럼 삭제

train = train.drop('flight', axis=1)

test = test.drop('flight', axis=1)

컬럼삭제한 이유는 무엇이죠?

print(train.describe(include="O"))

print(test.describe(include="O"))이걸 돌려봤는데

트레인에서 플라이트 유니트 1153

테스트에서 플라이트 유니크가 4502 이렇게 달라서 컬럼 삭제하는건가요?

어떨 때 컬럼 삭제해야하는지, 또 시험에 어떤 형식이 나올때 삭제해야하는지 궁금합니다

 

 

2.제가 코딩을

print(train.shape, test.shape)

train=pd.get_dummies(train)

test=pd.get_dummies(test)

print(train.shape, test.shape)

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)

print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)

이렇게 했는데

(10505, 11) (4502, 10)

(4502, 9) (4502, 10)

(4502, 37) (4502, 930)

---------------------------------------------------------------------------

ValueError Traceback (most recent call last)

/tmp/ipython-input-2712245612.py in <cell line: 0>()

20 print(train.shape, test.shape)

21 from sklearn.model_selection import train_test_split

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

23 print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)

3 frames

/usr/local/lib/python3.12/dist-packages/sklearn/utils/validation.py in check_consistent_length(*arrays)

473 uniques = np.unique(lengths)

474 if len(uniques) > 1:

--> 475 raise ValueError(

476 "Found input variables with inconsistent numbers of samples: %r"

477 % [int(l) for l in lengths]

ValueError: Found input variables with inconsistent numbers of samples: [4502, 10505]

이렇게 오류가 뜹니다

답변 2

0

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

Section 3. 노트북 업데이트 했습니다.

flight는 인코딩 처리가 어려워 삭제 했어요! 확인한대로 유니크가 너무 달라서요!

다루는 방법을 노트북에 추가했습니다. 새로 불러와주세요 (심화 학습입니다)

 

아래 AI 가 설명한대로 합쳐서 인코딩이 필요한 상황 같습니다.

인코딩 후 타겟이 달라진것으로 보여요!

 

 

 

 

 

 

0

안녕하세요, 인프런 AI 인턴입니다. 합격님.

항공권 가격 예측 문제에서 컬럼을 삭제하는 이유와 데이터 구조 관련하여 문의 주신 내용에 대해 설명드리겠습니다.

1. 컬럼 삭제의 이유

  • 고유 값의 불일치: train 데이터셋과 test 데이터셋에서 flight 컬럼의 유니크 값 개수가 크게 다르기 때문에 이 컬럼이 데이터 분석에 유용하지 않을 수 있습니다. 예를 들어 flight ID처럼 범주형 데이터가 크게 다를 경우, 이러한 컬럼은 모델에 불필요한 잡음을 추가할 수 있습니다. 특히 머신러닝 모델은 각 범주가 서로 다른 정보를 가진다고 이해할 수 있으며, 차이가 클 경우 모델의 예측에 혼란을 줄 수 있습니다.
  • 모델의 성능 및 복잡성: 많은 유니크 값을 포함하는 범주형 데이터는 원핫 인코딩 시 매우 많은 수의 열을 생성하게 되고 이는 데이터 처리에 부담을 줄 수 있습니다. 데이터셋의 크기와 모델의 학습 시간, 복잡성을 줄이기 위해 이런 컬럼은 제거하는 것이 일반적입니다.

2. 데이터셋의 불일치 문제

  • 에러 발생 원인: train_test_split 이전에 train 데이터셋과 test 데이터셋에 각각 이루어진 get_dummies 처리 결과 컬럼 수가 다릅니다. 이는 두 데이터셋에서 원핫 인코딩 후의 열 형식이 다르게 만들어져 발생하는 문제입니다.
    • traintest를 합쳐서 get_dummies 처리한 후, 다시 나누는 것이 일반적입니다. 이렇게 하면 모든 범주가 동일한 컬럼을 가지게 되어 데이터 구조가 일치하게 됩니다.

해결 방법

  1. 데이터를 합쳐 인코딩 후 분리:
    
    full_data = pd.concat([train, test], axis=0)
    full_data = pd.get_dummies(full_data)
    train, test = full_data.iloc[:len(train)], full_data.iloc[len(train):]
    

    위 방법으로 데이터를 인코딩 후 나누면 각 데이터셋의 형태가 일치하게 되어 train_test_split에서 발생하는 에러를 해결할 수 있습니다.

추가적인 참고 링크

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

합격님의 프로필 이미지
합격

작성한 질문수

질문하기