작업형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에서 발생하는 에러를 해결할 수 있습니다.
추가적인 참고 링크
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
강의 연장 문의
0
8
1
수강 신청 연장 문의드립니다.
0
19
1
작업형 1번문제... 환경관련
0
24
2
12회 기출은 언제 업데이트 될까요??
0
35
2
8/6 작성한 연장문의 질문글에 대한 재요청
0
36
2
수강기간 연장 문의
0
33
2
수강기간 연장문의
0
35
2
수강기간 연장 요청 문의드립니다
0
35
2
수강 기간 연장 문의
0
44
2
수강연장 가능 문의 (기간 약 한달반)
0
57
2
수강기간 연장 가능할까요 선생님
0
72
2
Section15. 수업에 사용하는 데이터 주소가 다 보이지 않아서 실습을 위한 데이터를 다운 받지 못하고 있습니다.
0
50
3
수강연장요청 문의
0
84
2
아무래도 다음 시험 연장은 어렵겠죠?
0
104
2
빅분기 12회 결과 관련 문의
0
110
1
책이랑 강의랑 순서나 예제가 다른것 같네요
0
79
2
수강연장 문의
0
102
2
재검토 요청 방법 좀 알려주셔요...-.-;;
0
102
2
12회 실기 질문(작업형 2)
0
89
2
뒤로가기 버튼 같은 것이 있나요?
0
63
1
강의 연장 문의
0
97
2
출력값 질문
0
70
2
수업노트가 어디에 있나요?
0
62
1
실기시험 제출관련
0
224
3





