2025.02.09 - [🐍 Python] - LabelEncoder란? 머신러닝에서 범주형 데이터를 숫자로 변환하는 방법
LabelEncoder란? 머신러닝에서 범주형 데이터를 숫자로 변환하는 방법
🔹 1. LabelEncoder란?LabelEncoder는 범주형(카테고리형) 데이터를 숫자로 변환하는 기법입니다.머신러닝 모델은 문자열 데이터를 직접 이해할 수 없기 때문에, 문자 데이터를 숫자로 변환해야 합니다
boohoday.com
One-Hot Encoding(원-핫 인코딩)은 머신러닝에서 범주형 데이터를 숫자로 변환하는 필수적인 방법입니다.
LabelEncoder와 어떤 차이가 있을까? 언제 One-Hot Encoding을 써야 할까?
이 글에서 초보자도 쉽게 이해할 수 있도록 개념부터 실습 코드까지 완벽 정리해드립니다!
🔹 1. One-Hot Encoding이란?
One-Hot Encoding(원-핫 인코딩)은 범주형 데이터를 머신러닝 모델이 이해할 수 있도록 변환하는 기법입니다.
✔ 각 카테고리를 새로운 컬럼(열)으로 변환하고, 해당하는 값만 1, 나머지는 0으로 표시합니다.
✔ 숫자의 크기(순서)가 의미가 없도록 변환하여, 모델이 데이터를 올바르게 학습하도록 합니다.
📌 예제: One-Hot Encoding이 필요한 이유
예를 들어, 스타벅스 음료의 카테고리가 있다고 가정해 봅시다.
이 데이터를 LabelEncoder를 사용하면 다음과 같이 변환됩니다.
Label Encoding 적용 전 | Label Encoding 적용 후 | |
Beverage_Category | → | Beverage_Category |
Coffee | → | 0 (Coffee) |
Tea | → | 1 (Tea) |
Smoothie | → | 2 (Smoothie) |
Coffee | → | 0 (Coffee) |
Smoothie | → | 2 (Smoothie) |
🚨 문제점:
- 모델이 Tea(1)가 Coffee(0)보다 크다고 잘못 이해할 수도 있음 ❌
- 즉, 순서가 없는 범주형 데이터에는 LabelEncoder를 사용하면 안 됨!
✅ 해결책: One-Hot Encoding!
각 카테고리를 별도의 열(Column)로 변환하여 숫자의 크기에 의미가 없도록 만든다.
📌 One-Hot Encoding 적용 후
Coffee | Tea | Smoothie |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 1 |
1 | 0 | 0 |
0 | 0 | 1 |
🔥 이제 머신러닝 모델이 "범주형 데이터 간의 순서가 없다"는 것을 올바르게 이해할 수 있음!
🔹 2. One-Hot Encoding 적용 방법 (Python 코드 예제)
✅ 1️⃣ pandas.get_dummies() 사용 (가장 간단한 방법)
import pandas as pd
# 샘플 데이터프레임 생성
df = pd.DataFrame({"Beverage_Category": ["Coffee", "Tea", "Smoothie", "Coffee", "Smoothie"]})
# One-Hot Encoding 적용
df_encoded = pd.get_dummies(df, columns=["Beverage_Category"])
# 결과 출력
print(df_encoded)
📌 출력 결과
Beverage_Category_Coffee Beverage_Category_Tea Beverage_Category_Smoothie
0 1 0 0
1 0 1 0
2 0 0 1
3 1 0 0
4 0 0 1
✅ pandas.get_dummies()를 사용하면 간단하게 변환 가능!
✅ 각 카테고리가 새로운 열(Column)로 변환되고, 해당 값이면 1, 아니면 0으로 표시!
✅ 2️⃣ OneHotEncoder (Scikit-learn 사용)
pandas.get_dummies()보다 더 정교한 머신러닝 전처리를 원한다면, OneHotEncoder를 사용합니다.
from sklearn.preprocessing import OneHotEncoder
# 데이터 준비
df = pd.DataFrame({"Beverage_Category": ["Coffee", "Tea", "Smoothie", "Coffee", "Smoothie"]})
# OneHotEncoder 객체 생성
encoder = OneHotEncoder(sparse=False) # sparse=False 설정하면 배열 형태로 반환
# 변환 실행
encoded_array = encoder.fit_transform(df[["Beverage_Category"]])
# 결과를 데이터프레임으로 변환
df_encoded = pd.DataFrame(encoded_array, columns=encoder.get_feature_names_out(["Beverage_Category"]))
print(df_encoded)
📌 출력 결과
Beverage_Category_Coffee Beverage_Category_Tea Beverage_Category_Smoothie
0 1 0 0
1 0 1 0
2 0 0 1
3 1 0 0
4 0 0 1
✅ OneHotEncoder는 get_feature_names_out()을 사용해 자동으로 컬럼 이름을 생성함!
✅ sparse=False를 설정하면 NumPy 배열이 아닌 일반적인 DataFrame 형식으로 변환 가능!
🔹 3. LabelEncoder vs One-Hot Encoding 차이점
비교 항목 | LabelEncoder | OneHotEncoder |
변환 방식 | 각 값을 숫자로 매핑 (0, 1, 2, ...) | 각 값을 별도의 열(Column)로 변환 |
데이터 형태 | 순서가 없는 범주형 데이터 | 순서가 없는 범주형 데이터 (더 안전) |
특징 | 숫자로 변환되지만, 모델이 크기(순서)로 오해할 수 있음 | 숫자의 크기 개념이 없음 (순서가 중요하지 않음) |
예제 | "Coffee" → 0, "Tea" → 1, "Smoothie" → 2 | "Coffee" → [1,0,0], "Tea" → [0,1,0], "Smoothie" → [0,0,1] |
사용 추천 | 이진(2개) 데이터에 적합 (예: Yes/No) | 3개 이상 범주형 데이터에 적합 |
✅ 즉, 순서가 없는 범주형 데이터는 One-Hot Encoding이 더 안전하고 일반적으로 사용됩니다!
✅ 결론: One-Hot Encoding을 이렇게 활용하자!
✔ LabelEncoder는 숫자의 크기가 의미가 있을 때만 사용 (이진 분류용)
✔ One-Hot Encoding은 숫자 크기의 의미가 없는 다중 클래스 데이터에 사용
✔ pandas.get_dummies()를 사용하면 쉽게 변환 가능
✔ OneHotEncoder를 사용하면 Scikit-learn에서 모델과 함께 쉽게 활용 가능
'🐍 Python' 카테고리의 다른 글
파이썬으로 영화 추천 시스템 만들기: 상관계수 & 코사인 유사도 기반 추천(구글 코랩) (0) | 2025.02.10 |
---|---|
VS Code 과 Jupyter Notebook / Python 코드 실행 방법, 비교 & 활용 가이드 (0) | 2025.02.09 |
LabelEncoder란? 머신러닝에서 범주형 데이터를 숫자로 변환하는 방법 (0) | 2025.02.09 |
Python 데이터 분석 & 머신러닝 파이프라인으로 보험 데이터 예측하기 (1) | 2025.02.08 |
Streamlit 배포 가이드 (1) | 2025.02.04 |