본문 바로가기
Python/머신러닝+딥러닝 Ⅱ

데이터 인코딩(레이블 인코딩, 원-핫 인코딩)

by Mr.DonyStark 2024. 4. 6.

□ 데이터 전처리
 ○ 데이터클린징
 ○ 결손값 처리(NULL/NaN처리)
 ○ 데이터인코딩(레이블,원핫인코딩)
   *머신러닝은 문자열을 취급하지않기 때문에 숫자열로 치환해야함
 ○ 데이터스케일링
 ○ 범위 척도를 맞추는것
 ○ 이상치 제거
 ○ Feature 선택, 추출 및 가공

 

데이터 인코딩 : 머신러닝 알고리즘은 문자열 데이터 속성을 입력 받지 않으며 모든 데이터는 숫자형으로 표현되야함

 ○ 레이블(Lable) 인코딩
   -  LabelEncoder 클래스
   -  fit(), transform() 이용

#데이터 인코딩 : 레이블 인코딩

from sklearn.preprocessing import LabelEncoder

items = ["TV","냉장고","전자랜지","컴퓨터","선풍기","선풍기","믹서","믹서"]

# LabelEncoder 객체 생성 후 fit()과 transform 으로 인코딩 수행

encoder = LabelEncoder() #객체 생성
encoder.fit(items) #변환1
labels = encoder.transform(items) #변환2

print(f"인코딩 클래스 : {encoder.classes_}")
print("")
print(f"레이블인코딩전 : {items}")
print("")
print(f"레이블인코딩후 : {labels}")
print("")
print(f"디코딩 원본값 : {encoder.inverse_transform(labels)}")

 

 

 ○ 원핫(One-Hot) 인코딩 : 피처 값의 유형에 따라 새로운 피처를 추가해 고유 값에 해당하는 컬럼에만 1을 표시하고 나머지 컬럼에는 0을 표시
   -  OneHotEncoder 클래스
   -  fit()과 transform()을 이용하여 변환. 인자로2차원 ndarray 입력필요. Sparse 배열 형태로 변환되므로 toarray()를 적용하여 다시 Dense 형태로 변환되어야함

#데이터 인코딩 : 원-핫 인코딩

from sklearn.preprocessing import OneHotEncoder
import numpy as np

items = [["TV","냉장고","전자랜지","컴퓨터","선풍기","선풍기","믹서","믹서"]]

# 2차원 ndarray로 변환 : 무조건 2차원으로 들어가야함
items = np.array(items).reshape(-1,1)

# 원핫 인코딩 적용
oh_encoder = OneHotEncoder() #객체 생성
oh_encoder.fit(items) #변환1
oh_labels = oh_encoder.transform(items) #변환2

print(f"원핫인코딩전 2차원 배열 변환\n{items}")
print("")
print(f"원핫인코딩후\n{oh_labels.toarray()}")
print("")
print(f"원핫인코딩 차원\n{oh_labels.shape}")

#판다스 : get_dummies를 활용한 원핫 인코딩
import pandas as pd
df = pd.DataFrame({
    "item" : ["TV","냉장고","전자랜지","컴퓨터","선풍기","선풍기","믹서","믹서"]
})

oh_df = pd.get_dummies(df)
print("")
print(f"pd.get_dummies 원핫인코딩 차원\n{oh_df}")