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
10
1
수업노트가 어디에 있나요?
0
20
1
실기시험 제출관련
0
153
2
6.20 작업형 2 과적합
0
158
3
코딩팡 장업형2 베이스 라인 인코딩 종류 질문
0
49
2
로지스틱회귀, 회귀
0
48
2
회귀 문제를 풀때 질문입니다.
0
55
1
불균형 처리 후 성능이 더 낮아졌다면,
0
61
2
실기 체험 제2유형 에러 문의
0
61
1
LIGHTGBM 으로 하면 pred값이 소수점 6자리까지 나오는게 맞나요
0
50
2
3번문제 등분산 가정
0
48
2
작업형3 target 형 변환 질문
0
35
2
[작업형1] 연습문제 섹션1 ~ 10 의 section4
0
36
3
원핫인코딩과 레이블 인코딩에서 concat
0
59
2
제2유형 질문입니다.
0
46
2
C()
0
44
2
작업형 2에서 strafity 적용 유무
0
52
2
수강 기간 연장 가능 여부 문의드립니다.
0
61
1
ols
0
43
2
2유형 작성관련 질문(일반 심화)
0
39
2
2유형 작성관련 질문
0
41
2
2유형 object컬럼 개수 다르면
0
48
2
코딩팡질문이요ㅠㅠ
0
45
2
관찰값과 기대값의 개념이 헷갈립니다.
0
25
2





