해결된 질문
작성
·
189
1
# 피처 엔지니어링
cols1 = list(X_train.columns[X_train.dtypes == object]) # 범주형
cols2 = list(X_train.columns[X_train.dtypes != object]) # 수치형
Xc_train = X_train[cols1] # 범주형
Xc_test = X_test[cols1]
Xn_train = X_train[cols2] # 수치형
Xn_test = X_test[cols2]
Xc_train = pd.get_dummies(X_train[cols1])
Xc_test = pd.get_dummies(X_test[cols1])
from sklearn.preprocessing import RobustScaler
Ro = RobustScaler()
X_train[cols2] = Ro.fit_transform(X_train[cols2])
X_test[cols2] = Ro.transform(X_test[cols2])
Xn_train = X_train[cols2] # 수치형
Xn_test = X_test[cols2]
X_train = pd.concat([Xc_train, Xn_train], axis = 1)
X_test = pd.concat([Xc_test, Xn_test], axis = 1)
print(X_train)
print(X_test)
늘 빠른 답변 감사드려용
답변 1
1
네 그런데 혹시 모르니 cols2는 체크를 할 필요가 있어요 int, float외 다른 자료형이 있을 수도 있습니다.
인코딩의 경우 train과 test종류가 다르다면 합쳐서 인코딩 하고 다시 분할하는 것도 연습해주세요:)
train에는 사과 딸기 포도가 있는데
test에는 딸기 수박이 있다면 어떻게 될까요?
fit을 통해 사과는 0, 딸기는 1, 포도는 2라고 사전을 만들고
transform을 통해서 train은 무사히 변환 되지만
test는 에러발생!!!! 수박을 알 수 없음!! 이라고 나옵니다.
이에 합쳐서 인코딩(사과는 0, 딸기는 1, 포도는 2, 수박은 3)을 진행하는 것을 말했어요
(추가적으로 합쳐서 진행할 경우 데이터 누수라는 부정적 영향이 있는데 이것은 빅분기에서는 다루진 않을 것 같아 생략하겠습니다)
train과 test의 종류가 다르다면 합쳐서 인코딩하라고 하셨는데 종류가 다르다는게 무슨 뜻인가용? train과 test의 열이 다르다는 건가요?