Python to AI

Python - Pandas(데이터 전처리: Encoding, Embedding)

최 수빈 2024. 12. 13. 23:48

 

Encoding (인코딩)

 

범주형 데이터(Categorical Data)를 수치형 데이터로 변환하는 과정

 

많은 머신러닝 모델은 수치형 데이터만 처리할 수 있기 때문에, 범주형 데이터를 인코딩하는 것이 필수적

 

 

레이블 인코딩(Lable Encoding)

범주형 데이터를 순서가 있는 숫자로 변환, 각 범주에 고유한 숫자가 할당됨

 

import pandas as pd
from sklean.preprocessing import LabelEncoder

#예시 데이터프레임 생성
data = {'과일' : ['사과','바나나', '사과','오렌지','바나나']}
df = pd.DataFrame(data)

#레이블 인코딩
lable_encoder = LabelEncoder()
df['과일_인코딩'] = label_encoder.fit_transform(df['과일'])
df

범주형 데이터에 순서가 있을 때 적합 

순서가 없는 데이터에 사용하면, 모델이 이 값을 크기로 인식해 잘못된 결과를 초래함 (과일에 번호를 준게 아니라 과일에 값을 줬다고 인식함)

 

원-핫 인코딩(One-Hot Encoding)

각 범주를 이진 벡터로 변환

각 범주는 고유한 열을 가지며, 해당하는 열에는 1, 나머지 열에는 0이 할당된다. (True는 1, False는 0으로 이해하면 되고, pd.get_dummies()는 bool dtype이  default라 True/False로 출력됨. 0과 1로 보고싶다면, pd.get_dummies(df, dtype = int)로 데이터타입변경 해주면 됨 둘 다 결과에 영향 없)

또, get_dummies함수 사용 시에 오브젝트 타입을 분리하지 않고 원본 DataFrame에 바로 적용하면, 자동으로 범주형 데이터만 원-핫 인코딩하고 수치형 데이터는 그대로 유지됨

df_one_hot = pd.get_dummies(df['과일'], prefix = '과일')
df_one_hot

범주형 데이터에 순서가 없을 때 사용하기 좋음. 모델이 범주 간의 순서나 관계를 인식하지 않고 각 범주를 독립적으로 처리할 수 있음

 

차원 축소 인코딩(Count or Frequency Encoding)

범주형 데이터가 많을 때 유용.

각 범주를 데이터셋 내에서의 출현 빈도로 인코딩함

#빈도 기반 인코딩
df['과일_빈도'] = df['과일'].map(df['과일'].value_counts())
df

범주형 데이터의 빈도가 매우 중요한 경우에 적합

범주의 고유성을 잃을 수 있으므로 주의해서 사용해야 함

 

순서형 인코딩(Ordinal Encoding)

순서가 있는 범주형 데이터를 그 순서에 따라 숫자로 변환하는 방식

#예시 데이터
data = {'등급' : ['낮음','중간','높음','중간','높음']}
df = pd.DataFrame(data)

#순서형 인코딩
order = {'낮음':1, '중간':2, '높음':3}
df['등급_인코딩'] = df['등급'].map(order)
df

만족도(낮음, 중간, 높음), 등급(A, B, C)등 순서가 중요한 경우에 적합

 

 

 

임베딩 (Embedding)

고차원 범주형 데이터를 저차원 연속적인 벡터 공간에 매핑하는 과정

주로 단어, 문장, 이미지 등 비정형 데이터를 수치화하여 모델이 처리할 수 있도록 표현하는 데 사용됨

임베딩 벡터는 연속적인 수치 값(실수)을 가지며, 유사한 의미를 가진 데이터는 벡터 공간에서 가까운 위치에 있음

모델이 학습하면서 최적화되므로 데이터의 의미를 반영하는 표현이 됨

  • Word2Vec, GloVe: 단어를 의미론적으로 유사한 벡터로 변환.
  • 이미지 임베딩: 이미지 데이터를 CNN을 통해 벡터로 변환.
  • 사용 사례: 자연어 처리(NLP), 이미지 분석, 추천 시스템 등.

 

 

 

 

특징 임베딩 인코딩
목적 데이터의 의미를 반영하며 벡터화 데이터를 컴퓨터가 처리할 수 있도록 변환
결과 값 연속적인 실수 값 (dense vectors) 이산적인 값(정수, 이진 값) 또는 특정 포맷
학습 가능 여부 모델 학습 과정에서 최적화 학습되지 않으며 규칙적으로 변환
차원 고정된 크기의 저차원 벡터 고차원일 수도 있고, 정수일 수도 있음
의미론적 유사성 유사한 데이터는 벡터 공간에서 가까운 위치 유사성 반영 하지 않음
사용 사례 NLP(Word2Vec), 추천 시스템, 이미지 분석 등 데이터 전처리, 데이터 전송, 범주형 데이터 처리 등

임베딩과 인코딩은 서로 보완적으로 사용

 

 

 

 

NLP에서 먼저 단어를 정수 인코딩으로 변환한 후, 이를 모델에 입력하여 단어 임베딩을 학습함

# 정수 인코딩 
vocab = {"apple": 1, "banana": 2, "cherry": 3} 
encoded_sentence = [1, 2, 3] 

# 임베딩: 모델이 학습한 결과 
embedding_matrix = { 
    1: [0.1, 0.2, 0.3], # apple 
    2: [0.4, 0.5, 0.6], # banana 
    3: [0.7, 0.8, 0.9], # cherry 
}
 
  • 임베딩: 데이터의 의미를 반영하는 저차원 실수 벡터로 변환 (학습 가능)
  • 인코딩: 데이터를 특정 형식으로 변환하여 컴퓨터가 처리할 수 있게 만드는 과정 (비학습적)