728x90
반응형
※ 본내용은 퇴근후딴짓 강의를 참고하였습니다
인코딩 정리전에는 타겟을 미리 pop으로 빼줌
개인적인 의견
- 원핫 인코딩: 카테고리 10개 미만
- 레이블 인코딩: 카테고리 10개 이상
1. train과 test 데이터에서 범주형 컬럼의 카테고리가 같을 때
- 원핫 or 레이블 둘 다 상관없음
import pandas as pd
train = pd.DataFrame({
'과일': ['사과', '배', '포도'],
'색상': ['빨강', '노랑', '보라'],
'가격': [5000, 7000, 10000],
'target': ['a', 'a', 'b']
})
test = pd.DataFrame({
'과일': ['사과', '배', '포도'],
'색상': ['빨강', '노랑', '보라'],
'가격': [5000, 7000, 10000]
})
train.info()
# target이 문자면 인코딩에 영향이 있음
target = train.pop('target')
# pop은 아래 코드와 같음
# target = train['target']
# train = train.drop('target', axis=1)
# 원-핫 인코딩
train_oh = pd.get_dummies(train)
test_oh = pd.get_dummies(test)
print(train_oh)
print(test_oh)
# 원-핫 인코딩 (특정 컬럼만 인코딩) 예) 과일은 원핫, 색상은 레이블
cols=['과일']
train_oh = pd.get_dummies(train, columns=cols)
test_oh = pd.get_dummies(test, columns=cols)
print(train_oh)
print(test_oh)
# 레이블 인코딩
from sklearn.preprocessing import LabelEncoder
cols = ['과일', '색상']
for col in cols:
le = LabelEncoder()
train[col] = le.fit_transform(train[col])
test[col] = le.transform(test[col])
print(train)
print(test)
2. train 데이터의 범주형 컬럼이 test 데이터를 포함한다면
- 레이블 인코딩, train+test 합쳐서 원핫 인코딩
train = pd.DataFrame({
'과일': ['사과', '배', '포도'],
'색상': ['빨강', '노랑', '보라'],
'가격': [5000, 7000, 10000]
})
test = pd.DataFrame({
'과일': ['배', '포도'],
'색상': ['노랑', '보라'],
'가격': [7000, 10000]
})
# 레이블 인코딩
from sklearn.preprocessing import LabelEncoder
cols = ['과일', '색상']
for col in cols:
le = LabelEncoder()
train[col] = le.fit_transform(train[col])
test[col] = le.transform(test[col])
print(train)
print(test)
# 원-핫 인코딩
train = pd.DataFrame({
'과일': ['사과', '배', '포도'],
'색상': ['빨강', '노랑', '보라'],
'가격': [5000, 7000, 10000]
})
test = pd.DataFrame({
'과일': ['배', '포도'],
'색상': ['노랑', '보라'],
'가격': [7000, 10000]
})
df = pd.concat([train, test])
df = pd.get_dummies(df)
# 다시 분리
train = df.iloc[:len(train)]
test = df.iloc[len(train):]
print(train.shape, test.shape)
print(train)
print(test)
3. test 데이터의 범주형 컬럼이 train 데이터를 포함하거나 카테고리가 다르다면
- train+test 합쳐서 인코딩
train = pd.DataFrame({
'과일': ['사과', '배', '포도'],
'색상': ['빨강', '노랑', '보라'],
'가격': [5000, 7000, 10000]
})
test = pd.DataFrame({
'과일': ['딸기', '배', '포도'],
'색상': ['빨강', '노랑', '보라'],
'가격': [15000, 7000, 10000]
})
df = pd.concat([train, test])
# 원-핫 인코딩
df = pd.get_dummies(df)
# 다시 분리
train = df.iloc[:len(train)]
test = df.iloc[len(train):]
print(train)
print(test)
train = pd.DataFrame({
'과일': ['사과', '배', '포도'],
'색상': ['빨강', '노랑', '보라'],
'가격': [5000, 7000, 10000]
})
test = pd.DataFrame({
'과일': ['딸기', '배', '포도'],
'색상': ['빨강', '노랑', '보라'],
'가격': [15000, 7000, 10000]
})
df = pd.concat([train, test])
from sklearn.preprocessing import LabelEncoder
cols = ['과일', '색상']
for col in cols:
le = LabelEncoder()
df[col] = le.fit_transform(df[col])
# 다시 분리
train = df.iloc[:len(train)]
test = df.iloc[len(train):]
print(train)
print(test)
728x90
'IT&게임 > 빅데이터분석기사(빅분기)' 카테고리의 다른 글
[공식문제] 빅분기 제1유형 예제문제 (MinMaxScaler) (0) | 2024.06.18 |
---|---|
빅분기 작업형2 기출 정리 (0) | 2024.06.18 |
작업형2 유형 참고(lightBGM-분류/회귀) (0) | 2024.06.18 |
[빅분기] 여러가지 에러 케이스 (0) | 2024.06.18 |
빅데이터분석기사 제2유형 : 회귀문제 예제1 (0) | 2024.06.07 |
댓글