T2-1. 타이타닉 문제 질문있습니다.
저는 지금까지 작업형2 모든 유형의 문제를 object컬럼은 라벨인코딩을 했습니다.
이번에도 라벨인코딩을 하려고 보니 오류가 나서 이전에 질문을 드렸고,
X_train과 X_test의 데이터 수가 달라 있는 오류라고 설명해주셨습니다.
그래서 X_train과 X_test의 object 컬럼에 nuniqe, describe, velue_counts등의 함수를 적용하여 확인해보았습니다.
근데 'Embarked'컬럼은 X_train과 X_test내 데이터 종류 수와 종류도 동일한데, 라벨인코딩을 적용하려하니 계속 이런 오류가 뜹니다.
Encoders require their input to be uniformly strings or numbers. Got ['float', 'str']
오류가 뜨는 원인과 왜 'Embarekd'컬럼을 drop했을 때는 모델이 잘 적용되는지가 궁금합니다.
일단 밑에는 제가 'Embakred'컬럼을 drop한 코딩입니다.
# EDA
# X_train.info()
# X_test.info()
# drop & pop : PassengerId(pop)
# 추가 삭제 : Cabin, Embarked, Ticket, Name
# 결측치 : Age-수치형(결측값 중간값으로 채움), Cabin!!-범주형(얘는 원래 최빈값으로 채우려다가.. 값이 너무 많아서 삭제함)
# 범주형 : Sex(라벨), Embarked!!(), Ticket!!, Name!!, Cabin!!(얘네 셋은 원래 라벨인코더 하려다가, train과 test의 nunique값이 달라서 삭제함),
# 수치형 : Pclass, SibSp, Parch, Fare, Age(로버스터스케일러)
# y_train.info() : PassengerId, Survived
X_train = X_train.drop(columns = ['Ticket', 'Name', 'PassengerId', 'Cabin', 'Embarked'])
X_test = X_test.drop(columns = ['Ticket', 'Name', 'Cabin', 'Embarked'])
X_test_id = X_test.pop('PassengerId')
y_train = y_train.drop(columns = ['PassengerId'])
X_train['Age'] = X_train['Age'].fillna(X_train['Age'].mean())
X_test['Age'] = X_test['Age'].fillna(X_test['Age'].mean())
from sklearn.preprocessing import RobustScaler
num = ['Pclass', 'SibSp', 'Parch', 'Fare', 'Age']
scaler = RobustScaler()
X_train[num] = scaler.fit_transform(X_train[num])
X_test[num] = scaler.transform(X_test[num])
from sklearn.preprocessing import LabelEncoder
cols = ['Sex']
encoder = LabelEncoder()
for col in cols :
X_train[col] = encoder.fit_transform(X_train[col])
X_test[col] = encoder.transform(X_test[col])
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(X_train, y_train, test_size = 0.2, random_state = 2022)
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit(X_tr, np.ravel(y_tr))
pred = model.predict(X_val)
from sklearn.metrics import accuracy_score
accuracy_score(y_val, pred)
pred = model.predict(X_test)
pd.DataFrame({'PassengerId' : X_test_id, 'Survived' : pred}).to_csv('00000.csv', index = False)
pd.read_csv('00000.csv')
X_train.shape, X_test.shape, y_train.shape
답변 1
0
이 글의 마지막 답변을 확인해보셨을까요?
문제는 티켓 컬럼이고 티켓컬럼에 대한 처리 방법 안내드렸습니다.
0
넵 확인해보았고, 티켓 컬럼은 말씀주신대로 드롭해야되는 이유를 알겠어서 드롭해놓았습니다.
다시 질문드린건, Embarked 컬럼이 왜 드롭되어야 되는지 모르겠어서 다시 드렸습니다.
Embarked 컬럼은 범주형이고, X_train과 X_test의 데이터 수도 동일한데 왜 라벨 인코딩하려고 하면 오류가 뜨는지 이해가 안됩니다.
0
원인을 찾았습니다.
print(X_train['Embarked'].isnull().sum())
print(X_test['Embarked'].isnull().sum())
X_train['Embarked'] = X_train['Embarked'].fillna('S')
X_test['Embarked'] = X_test['Embarked'].fillna('S')
결측치가 숨어있었네요 🙂
수강연장 관련 문의
0
12
2
안녕하세요 강사님 문의사항이 있습니다
0
20
1
수강 연장 문의
0
31
4
수강기간 연장 관련 문의
0
28
2
작업형2모의문제3_updated2026.10
0
47
2
안녕하세요. 수강연장 신청드립니다
0
26
2
코랩 링크
0
26
2
작업형2 모의문제2 updated 2026.10 질문
0
41
2
카이제곱 독립성검정 질문합니다.
0
38
2
기출 7회 작업형2 평가지표 문의드립니다.
0
30
2
수강연장 문의 드립니다!
0
54
3
수강연장 문의드립니다
0
43
4
작업형2모의문제3_updated2026.10
0
52
2
작업형2 모의문제3_updated2026.10
0
47
2
38강에서 불균형 데이터 처리하는 stratify를 꼭 해줘야하는건지 질문합니다.
0
48
2
수강강의 연장 관련 문의
0
61
2
작업형1_연습문제1 section2
0
47
2
수강기간 연장 문의드립니다
0
50
2
작업형2 모의문제2_updated2026.10
0
61
2
수강기간 연장문의
0
46
2
작업형 2 질문
0
55
2
강의 연장 관련하여 문의드립니다.
0
53
2
섹션7 자료 다운로드
0
52
2
작업형 1 연습문제 Section12
0
55
2





