라벨인코딩과 원핫인코딩 후, 데이터 크기 비교
안녕하세요. 데이터 인코딩 관련하여 궁금한 점이 있어서 질문남기게 되었습니다.
선생님께서 알려주신대로, 인코딩을 필수로 진행하되, 라벨인코딩과 원핫인코딩은 선택하여 자유롭게 진행하여도 학습에 문제가 없다고 이해하였습니다.
예시문제를 라벨인코딩과 원핫인코딩으로 둘다 진행하던 중,
라벨인코딩시에는 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)
작업형 2 기출7회분에서
0
14
1
작업형2 모의문제1 (30강)
0
22
2
수강 기간 연장 문의 드립니다.
0
28
2
수강 계획과 관련해 문의 드립니다.
0
24
2
작업형1 - 연습문제 16~39 풀이는 몇강을 보면 되나요?
0
48
2
작업형 1 -연습문제 4-6
0
34
2
작업형 1 유형 부분
0
42
2
작업형 1 (삭제예정, 구 버전)
0
51
2
수강기간 연장 문의드립니다.
0
37
2
2유형 레이블 인코딩 VS 원핫 인코딩
0
37
3
수강기간 연장 문의드립니다.
0
42
2
인덱스 슬라이싱
0
36
2
질문 드립니다.
0
50
2
강의 내용 관련 질문드립니다~
0
46
2
수강 연장 문의
0
63
2
강의자료 일괄 다운로드
0
58
2
수강기간 연장 문의드립니다
0
48
2
list 문제 질문드립니다~
0
38
2
빅분기 실기 12회 재도전
0
63
2
강의 기간 연장 가능여부 검토 요청건
0
50
2
수강기간 연장 문의 드립니다
0
46
2
수강기간 연장 문의드립니다
0
52
2
질문이요
0
57
2
수강기간 연장 문의드립니다.
0
60
2





