해결된 질문
작성
·
116
·
수정됨
0
저번에 질문한 거 코드 수정 및 정리했습니다. 선생님
※ 피쳐엔지니어링에서 train, test 셋을 분리( .copy() )해서 수치형은 스케일링하고 범주형은 인코딩 한 다음, 합치기 ( .concat() ) 하는 방식이 아니라
수치형 부분 칼럼을 변수(cols_n)로 받고, 범주형 부분을 변수(cols_c) 으로 받아서, 데이터셋을 수치와 범주형으로 분리하지 않은 상태에서 각각 스케일링, 인코딩을 적용하고 검증데이터셋 분리-> 모델 & 평가지표 불러오기 -> 예측(테스트셋 적용) -> df 생성 -> 제출 하는 방법에서
아래에 피쳐 엔지니어링 부분 코드 정리한거 확인 부탁드립니다.
경우 1. [train, test // 2개 데이터셋 제공시]
# train셋엔 있고 test셋엔 없는 "target"에 해당하는 칼럼 분리
# "target" 데이터는 범주형이든 수치형이든 스케일링이나 인코딩을 하면 안되므로 제외시킴
target = train.pop(["target"])
cols_n = train.select_dtypes(exclude="O").columns
cols_c = train.select_dtypes(include="O").columns
## 수치형 민맥스 스케일링 작업
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
train[cols_n] = scaler.fit_transform(train[cols_n])
test[cols_n] = scaler.transform(test[cols_n])
## 범주형 라벨 인코딩 작업
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
for col in cols_c:
le = LabelEncoder()
train[col] = le.fit_transform(train[col])
test[col] = le.transform(test[col])
## or 범주형 원핫 인코딩 작업 시
# .get_dummies() 원핫 인코딩은 자동으로 범주형만 찾아서 인코딩 함
# 방법 1
train = pd.get_dummies(train)
test = pd.get_dummies(test)
## 라벨 인코딩과 통일성을 원한다면 (방법 2)
train = pd.get_dummies(train[cols_c])
test = pd.get_dummies(test[col_c])
# 다만 어차피 자동으로 찾아주니 이렇게 하지 말고 간편한 위의 방법 1 방식으로 하자
그 다음 검증데이터셋 분리 등 과정 이후 ~~~~~~~~~~~ 제출
경우 2. [X_train, y_train, X_test // 3개 데이터셋 제공시]
cols_n = X_train.select_dtypes(exclude="O").columns
cols_c = X_train.select_dtypes(include="O").columns
## 수치형(스케일링) 작업
##민맥스 스케일링
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_train[cols_n] = scaler.fit_transform(train[cols_n])
X_test[cols_n] = scaler.transform(test[cols_n])
## 범주형(인코딩) 작업
## 라벨 인코딩
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
for col in cols_c:
le = LabelEncoder()
X_train[col] = le.fit_transform(X_train[col])
X_test[col] = le.transform(X_test[col])
## or 원핫 인코딩 시
# .get_dummies() 원핫 인코딩은 자동으로 범주형만 찾아서 인코딩 함
# 방법 1
X_train = pd.get_dummies(X_train)
X_test = pd.get_dummies(X_test)
## 라벨 인코딩과 통일성을 원한다면 (방법 2)
X_train = pd.get_dummies(X_train[cols_c])
X_test = pd.get_dummies(X_test[col_c])
# 다만 어차피 자동으로 찾아주니 이렇게 하지 말고 간편한 위의 방법 1 방식으로 하자
이후 검증데이터셋 분리 등 과정 이후 ~~~~~~~~~~~ 제출
이번 코딩엔 틀린게 없어야 할텐데.....
이거 제대로 한거 맞는지 확인 부탁드립니다. 선생님
여러 차례의 질문에 답변 해주셔서 감사합니다
답변 1
죄송한데요.... 그럼 제가 적은 원핫인코딩 방법 2 부분은 그냥 삭제하고 방법 1로만 하면 문제 없이 되는거 맞죠....??? 계속 질문이 생기게 되네요...