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
28
2
강의 연장 문의
0
33
2
수강 신청 연장 문의드립니다.
0
48
2
작업형 1번문제... 환경관련
0
31
2
12회 기출은 언제 업데이트 될까요??
0
40
2
8/6 작성한 연장문의 질문글에 대한 재요청
0
39
2
수강기간 연장 문의
0
41
2
수강기간 연장문의
0
37
2
수강기간 연장 요청 문의드립니다
0
38
2
수강 기간 연장 문의
0
47
2
수강연장 가능 문의 (기간 약 한달반)
0
60
2
수강기간 연장 가능할까요 선생님
0
74
2
Section15. 수업에 사용하는 데이터 주소가 다 보이지 않아서 실습을 위한 데이터를 다운 받지 못하고 있습니다.
0
56
3
수강연장요청 문의
0
92
2
아무래도 다음 시험 연장은 어렵겠죠?
0
109
2
빅분기 12회 결과 관련 문의
0
113
1
책이랑 강의랑 순서나 예제가 다른것 같네요
0
83
2
수강연장 문의
0
107
2
재검토 요청 방법 좀 알려주셔요...-.-;;
0
106
2
12회 실기 질문(작업형 2)
0
94
2
뒤로가기 버튼 같은 것이 있나요?
0
67
1
강의 연장 문의
0
100
2
출력값 질문
0
74
2
수업노트가 어디에 있나요?
0
64
1





