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
}
- 임베딩: 데이터의 의미를 반영하는 저차원 실수 벡터로 변환 (학습 가능)
- 인코딩: 데이터를 특정 형식으로 변환하여 컴퓨터가 처리할 수 있게 만드는 과정 (비학습적)
'Python to AI' 카테고리의 다른 글
Machine learning (6) | 2024.12.16 |
---|---|
Python - 객체 탐색과 속성 관리 (4) | 2024.12.15 |
Python - 함수의 기본적 개념과 사용법 (6) | 2024.12.12 |
Python - Pandas, Scikit-learn, SciPy(데이터 전처리 : 데이터 정규화와 표준화) (4) | 2024.12.11 |
Python - Pandas(데이터 전처리 : 이상치 탐지 및 처리) (10) | 2024.12.10 |