라벨인코딩과 원핫인코딩 후, 데이터 크기 비교
안녕하세요. 데이터 인코딩 관련하여 궁금한 점이 있어서 질문남기게 되었습니다.
선생님께서 알려주신대로, 인코딩을 필수로 진행하되, 라벨인코딩과 원핫인코딩은 선택하여 자유롭게 진행하여도 학습에 문제가 없다고 이해하였습니다.
예시문제를 라벨인코딩과 원핫인코딩으로 둘다 진행하던 중,
라벨인코딩시에는 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)
수업노트가 어디에 있나요?
0
17
1
실기시험 제출관련
0
150
2
6.20 작업형 2 과적합
0
157
3
코딩팡 장업형2 베이스 라인 인코딩 종류 질문
0
48
2
로지스틱회귀, 회귀
0
47
2
회귀 문제를 풀때 질문입니다.
0
54
1
불균형 처리 후 성능이 더 낮아졌다면,
0
61
2
실기 체험 제2유형 에러 문의
0
61
1
LIGHTGBM 으로 하면 pred값이 소수점 6자리까지 나오는게 맞나요
0
49
2
3번문제 등분산 가정
0
47
2
작업형3 target 형 변환 질문
0
34
2
[작업형1] 연습문제 섹션1 ~ 10 의 section4
0
36
3
원핫인코딩과 레이블 인코딩에서 concat
0
58
2
제2유형 질문입니다.
0
46
2
C()
0
44
2
작업형 2에서 strafity 적용 유무
0
51
2
수강 기간 연장 가능 여부 문의드립니다.
0
60
1
ols
0
43
2
2유형 작성관련 질문(일반 심화)
0
39
2
2유형 작성관련 질문
0
41
2
2유형 object컬럼 개수 다르면
0
48
2
코딩팡질문이요ㅠㅠ
0
45
2
관찰값과 기대값의 개념이 헷갈립니다.
0
25
2
작업형2 ID 컬럼 삭제 질문
0
45
2





