작업형2 연습문제 섹션3
Section 3. 항공권 가격 예측
# 컬럼 삭제
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컬럼의 유니크 값 개수가 크게 다르기 때문에 이 컬럼이 데이터 분석에 유용하지 않을 수 있습니다. 예를 들어flightID처럼 범주형 데이터가 크게 다를 경우, 이러한 컬럼은 모델에 불필요한 잡음을 추가할 수 있습니다. 특히 머신러닝 모델은 각 범주가 서로 다른 정보를 가진다고 이해할 수 있으며, 차이가 클 경우 모델의 예측에 혼란을 줄 수 있습니다.
- 모델의 성능 및 복잡성: 많은 유니크 값을 포함하는 범주형 데이터는 원핫 인코딩 시 매우 많은 수의 열을 생성하게 되고 이는 데이터 처리에 부담을 줄 수 있습니다. 데이터셋의 크기와 모델의 학습 시간, 복잡성을 줄이기 위해 이런 컬럼은 제거하는 것이 일반적입니다.
2. 데이터셋의 불일치 문제
- 에러 발생 원인:
train_test_split이전에train데이터셋과test데이터셋에 각각 이루어진get_dummies처리 결과 컬럼 수가 다릅니다. 이는 두 데이터셋에서 원핫 인코딩 후의 열 형식이 다르게 만들어져 발생하는 문제입니다.
train과test를 합쳐서get_dummies처리한 후, 다시 나누는 것이 일반적입니다. 이렇게 하면 모든 범주가 동일한 컬럼을 가지게 되어 데이터 구조가 일치하게 됩니다.
해결 방법
- 데이터를 합쳐 인코딩 후 분리:
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에서 발생하는 에러를 해결할 수 있습니다.
추가적인 참고 링크
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
11회 기출 유형(작업형1) 2번 정답
0
7
1
f1 score 질문
0
6
1
10회 작업형 2 인코딩 질의
0
6
1
53번 강의에서 갑자기 수업노트가 없어졌습니다.
0
10
2
28:19 roc_auc이유
0
15
2
수강연장문의
0
15
2
전체적인 머신러닝 순서
0
10
1
빅분기 실기 유형2질문
0
15
1
ID 전처리 이유
0
28
2
데이터제공
0
23
2
예시문제 작업형3 꼬리질문2번
0
15
1
데이터 개수를 구할 때, len과 value_counts 차이
0
19
2
작업형 2 제출방
0
19
2
인코딩 스케일링 순서
0
20
2
실제 시험에서도 공식을 문제에서 주는지
0
20
2
수강 연장 문의
0
17
2
작업형2 정리한 내용 확인 부탁드립니다 ㅜㅜ
0
21
1
14강 "" 사용 관련 질문
0
22
2
캐글 제출 점수
0
26
2
기출 마무리 방법
0
50
2
빅이시 작업형2 기초 - 케이스 1~3 관련 문의
0
33
6
데이터프레임 슬라이싱 인덱싱 질문2
0
29
2
단일표본검정, 샤피로검정, 윌콕슨검정
0
38
2
강의자료 다운로드 여부
0
39
2





