ㅎㅇ
저번에 질문한 거 코드 수정 및 정리했습니다. 선생님
※ 피쳐엔지니어링에서 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
0
train = pd.get_dummies(train[cols_c])
test = pd.get_dummies(test[col_c])이 코드 그대로 사용할 건 아니죠? 범주형만 저장됩니다.
그리고 만약 행의 수만큼 유니크한 ID가 있다면 ??
ID가 숫자라면 함께 스케일링 되지 않도록 제거 (스케일링 생략하면 상관없음)
ID가 문자라면 함께 인코딩 되지 않도록 제거
질문 드립니다.
0
37
2
강의 내용 관련 질문드립니다~
0
34
2
수강 연장 문의
0
31
1
강의자료 일괄 다운로드
0
41
2
수강기간 연장 문의드립니다
0
27
1
list 문제 질문드립니다~
0
28
2
빅분기 실기 12회 재도전
0
39
1
강의 기간 연장 가능여부 검토 요청건
0
30
1
수강기간 연장 문의 드립니다
0
36
2
수강기간 연장 문의드립니다
0
46
2
질문이요
0
51
2
수강기간 연장 문의드립니다.
0
48
2
문제 3-2 질문드립니다
0
43
2
수강기간 연장 문의 드립니다.
0
57
2
변수, 칼럼 , df 구분
0
47
2
수강기간 연장 문의드립니다.
0
49
2
수강기간 연장 문의
0
46
2
수강기간 연장 문의드립니다.
0
40
2
수강기한 연장 문의
0
75
2
수강기간 연장 문의드립니다
0
57
2
결정트리에서 적절한 깊이 선택 후 시각화 과정에서 학습 데이터만 사용하는 이유
0
44
2
수강기간 연장 문의드립니다.
0
70
2
수강연장 문의
0
76
2
수강연장문의
0
53
2





