예시문제 작업형2(구 버전)
ValueError: array length 2482 does not match index length 3500
제가 안보고 풀어봤는데 이런 에러가 뜨는건 무슨 이유일까요..
밑에는 제가 작성한 코드입니다. # 5. 평가까지 잘 돌아가다가 # 6. 제출 부분 작성하니깐 갑자기 저런 오류가 뜨네요 ㅠㅠ.. 제 코드 중에 어느 부분이 잘못된 걸까요..
# 2. 전처리
# 2-1. 결측치 처리
# print(X_train.isnull().sum())
X_train['환불금액'] = X_train['환불금액'].fillna(0)
X_test['환불금액'] = X_test['환불금액'].fillna(0)
# 2-2. object 컬럼 라벨인코딩
from sklearn.preprocessing import LabelEncoder
cols = ['주구매상품', '주구매지점']
le = LabelEncoder()
for col in cols :
X_train[col] = le.fit_transform(X_train[col])
X_test[col] = le.transform(X_test[col])
# 2-3. 불필요한 컬럼 삭제
X_train = X_train.drop(columns = 'cust_id')
X_test = X_test.drop(columns = 'cust_id')
test_id = y_train.pop('cust_id')
# 3. 분리
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(X_train, y_train['gender'], test_size = 0.2, random_state = 2022)
# 4. 학습
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(random_state = 2022)
model.fit(X_tr, y_tr)
pred = model.predict_proba(X_val)
# 5. 평가
from sklearn.metrics import roc_auc_score
# print(roc_auc_score(y_val , pred[:, 1]))
# 6. 제출
pred = model.predict_proba(X_test)
pd.DataFrame({'custid' : test_id, 'gender' : pred[:,1]}).to_csv('00000.csv', index = False)
# print(pd.read_csv('00000.csv'))
回答 2
0
시험에서 0점 맞기 쉬운 부분입니다.
컬럼의 수가 다름을 이전에는 id와 예측 결과가 달라서 이렇게 에러로 발견할 수 있었지만
지금은 예측컬럼만 제출하기 때문에 이렇게 발견하기 어렵습니다.
제출하기 전에 예측 컬럼의 수가 맞는지 반드시 확인해주세요!!
0
pd.DataFrame 만드실 때,
test_id를 y_train에 있는 cust_id 값으로 만드신 거 같은데요
y_train shape이 아마 3500 이었을거 같고,
결과값으로 저장하시려는 gender의 예측값은 2482개라서 에러발생한거 같습니다.
분리과정에서 y_train['gender']에 대한 시리즈 값을 명시하셨으니,
drop 과정에서 y_train은 column drop이라던지 pop 없이
test_id = X_test.pop('cust_id')로 pop 하시면 될거같습니다.
0
# 2-3. 불필요한 컬럼 삭제
X_train = X_train.drop(columns = 'cust_id')
test_id = X_test.pop('cust_id')
y_train = y_train.drop(columns = 'cust_id')
혹시 이렇게 수정하면 되는걸까요?
만약 분리과정이 없었더라면 아래와 같이 그대로 사용하면 되는걸까요?
# 2-3. 불필요한 컬럼 삭제
X_train = X_train.drop(columns = 'cust_id')
X_test = X_test.drop(columns = 'cust_id')
test_id = y_train.pop('cust_id')
2
네 아래 코드로 하시면 test_id가 X_test 'cust_id'를 받기때문에 DataFrame 생성시 pred하고 같은 행수를 가질거 같습니다.
저라면 분리과정에서 y_train['Gender']라고 명시하셨기때문에 drop 처리는 하지 않을거같습니다.
X_train = X_train.drop(columns = 'cust_id')
test_id = X_test.pop('cust_id')
근데 만약 분리과정에서 y_train['Gender']가 아닌 y_train으로 하셨으면
앞서 컬럼 삭제시 y_train에 'cust_id' 컬럼을 삭제해야 'Gender'만 남는 시리즈 형태가 되기 때문에 아래와 같이 작성할거같습니다.
X_train = X_train.drop(columns = 'cust_id')
y_train = y_train.drop(columns = 'cust_id')
test_id = X_test.pop('cust_id')
수강 연장 문의드립니다.
0
4
1
강의 연장 문의
0
14
1
수강 신청 연장 문의드립니다.
0
27
1
작업형 1번문제... 환경관련
0
24
2
12회 기출은 언제 업데이트 될까요??
0
35
2
8/6 작성한 연장문의 질문글에 대한 재요청
0
38
2
수강기간 연장 문의
0
35
2
수강기간 연장문의
0
36
2
수강기간 연장 요청 문의드립니다
0
37
2
수강 기간 연장 문의
0
46
2
수강연장 가능 문의 (기간 약 한달반)
0
58
2
수강기간 연장 가능할까요 선생님
0
73
2
Section15. 수업에 사용하는 데이터 주소가 다 보이지 않아서 실습을 위한 데이터를 다운 받지 못하고 있습니다.
0
53
3
수강연장요청 문의
0
88
2
아무래도 다음 시험 연장은 어렵겠죠?
0
106
2
빅분기 12회 결과 관련 문의
0
111
1
책이랑 강의랑 순서나 예제가 다른것 같네요
0
80
2
수강연장 문의
0
104
2
재검토 요청 방법 좀 알려주셔요...-.-;;
0
105
2
12회 실기 질문(작업형 2)
0
91
2
뒤로가기 버튼 같은 것이 있나요?
0
66
1
강의 연장 문의
0
99
2
출력값 질문
0
71
2
수업노트가 어디에 있나요?
0
63
1

