라벨인코딩과 원핫인코딩 후, 데이터 크기 비교
안녕하세요. 데이터 인코딩 관련하여 궁금한 점이 있어서 질문남기게 되었습니다.
선생님께서 알려주신대로, 인코딩을 필수로 진행하되, 라벨인코딩과 원핫인코딩은 선택하여 자유롭게 진행하여도 학습에 문제가 없다고 이해하였습니다.
예시문제를 라벨인코딩과 원핫인코딩으로 둘다 진행하던 중,
라벨인코딩시에는 X_train데이터와 X_test데이터의 컬럼 수가 동일하여 학습에 문제가 없었으나, 원핫인코딩을 진행하니 X_train데이터와 X_test 데이터의 컬럼 수가 달라져서 학습 시, 오류가 발생하는 점을 확인하였습니다.
어떤 점이 문제이며, 원핫인코딩을 이용하려고 한다면 어떻게 접근해야할지 여쭤볼 수 있을까요?
라벨인코딩 시 X_train, X_test의 shape => (3500,9), (2482,9)
원핫인코딩시 X_train,X_test의 shape => (3500,73), (2482,72) => 컬럼 수가 일치하지않아 학습 시, 에러 발생
import pandas as pd
pd.set_option('display.max_columns',None)
X_test = pd.read_csv("data/X_test.csv")
X_train = pd.read_csv("data/X_train.csv")
y_train = pd.read_csv("data/y_train.csv")
# 사용자 코딩
# print(X_train.info(),X_test.info())
# 결측치 처리
# print(X_train.isnull().sum())
X_train['환불금액'] = X_train['환불금액'].fillna(0)
X_test['환불금액'] = X_test['환불금액'].fillna(0)
X_test_id = X_test.pop('cust_id')
X_train = X_train.drop(['cust_id'],axis = 1)
# 1. LabelEncoder
cols = X_train.select_dtypes(include='object').columns
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
for col in cols:
X_train[col] = le.fit_transform(X_train[col])
X_test[col] = le.transform(X_test[col])
print(X_train.shape,X_test.shape)
# 2. one-hot Encoder
X_train = pd.get_dummies(X_train)
X_test = pd.get_dummies(X_test)
print(X_train.shape,X_test.shape)
X_train = X_train.drop('cust_id',axis =1) 과 X_train = X_train.drop(['cust_id'],axis =1)를 각각 실행하였을 때, 에러없이 cust_id 컬럼이 동일하게 삭제되는 점을 확인했는데 혹시 drop시 컬럼명에 대괄호를 묶고 안묶고의 차이가 있을까요??
답변 1
0
안녕하세요 아래코드로 컬럼을 뽑아낸 다음 차집합을 찾아보니
# 2. one-hot Encoder
X_train = pd.get_dummies(X_train)
X_test = pd.get_dummies(X_test)
print(X_train.shape,X_test.shape)
set1 = set(X_train.columns)
set2 = set(X_test.columns)
print(set1 - set2){'주구매상품_소형가전'} 차이가 있네요
이럴 경우 합쳐서 인코딩 후 다시 train과 test로 변환하는 코드가 필요합니다.
# train 데이터 프레임과 test 데이터 프레임을 합칩니다.
df = pd.concat([train, test], axis=0)
#인코딩작업
# 다시 train 데이터 프레임과 test 데이터 프레임으로 분리합니다.
train = df.iloc[:len(train), :]
test = df.iloc[len(train):, :]
1
자세히 답변해주셔서 감사합니다!!
X_train = X_train.drop('cust_id',axis =1) 과 X_train = X_train.drop(['cust_id'],axis =1)를 각각 실행하였을 때, 에러없이 cust_id 컬럼이 동일하게 삭제되는 점을 확인했는데 혹시 drop시 컬럼명에 대괄호를 묶고 안묶고의 차이가 있을까요??
이 질문도 혹시 확인해주실 수 있으신가요??
0
차이 없습니다.
1개면 안묶어도 됨
X_train = X_train.drop(['A'],axis = 1)
X_train = X_train.drop('A',axis = 1)2개면 묶어야 함
X_train = X_train.drop(['A', 'B'],axis = 1)
작업형 1번문제... 환경관련
0
8
1
12회 기출은 언제 업데이트 될까요??
0
8
1
8/6 작성한 연장문의 질문글에 대한 재요청
0
20
1
수강기간 연장 문의
0
24
1
수강기간 연장문의
0
24
1
수강기간 연장 요청 문의드립니다
0
29
1
수강 기간 연장 문의
0
35
1
수강연장 가능 문의 (기간 약 한달반)
0
53
2
수강기간 연장 가능할까요 선생님
0
70
2
Section15. 수업에 사용하는 데이터 주소가 다 보이지 않아서 실습을 위한 데이터를 다운 받지 못하고 있습니다.
0
47
3
수강연장요청 문의
0
83
2
아무래도 다음 시험 연장은 어렵겠죠?
0
103
2
빅분기 12회 결과 관련 문의
0
106
1
책이랑 강의랑 순서나 예제가 다른것 같네요
0
78
2
수강연장 문의
0
102
2
재검토 요청 방법 좀 알려주셔요...-.-;;
0
100
2
12회 실기 질문(작업형 2)
0
88
2
뒤로가기 버튼 같은 것이 있나요?
0
61
1
강의 연장 문의
0
97
2
출력값 질문
0
69
2
수업노트가 어디에 있나요?
0
59
1
실기시험 제출관련
0
222
3
6.20 작업형 2 과적합
0
227
3
코딩팡 장업형2 베이스 라인 인코딩 종류 질문
0
86
2





