🔹 1. LabelEncoder란?
LabelEncoder는 범주형(카테고리형) 데이터를 숫자로 변환하는 기법입니다.
머신러닝 모델은 문자열 데이터를 직접 이해할 수 없기 때문에, 문자 데이터를 숫자로 변환해야 합니다.
예를 들어, "Male", "Female" 같은 성별 데이터를 0, 1과 같은 숫자로 변환할 수 있습니다.
📌 LabelEncoder 적용 전
ID | Gender | Smoker |
1 | Male | Yes |
2 | Female | No |
3 | Male | No |
📌 LabelEncoder 적용 후
ID | Gender (Encoded) | Smoker (Encoded) |
1 | 1 | 1 |
2 | 0 | 0 |
3 | 1 | 0 |
✅ 이제 머신러닝 모델이 숫자로 변환된 데이터를 학습할 수 있습니다!
왜 레이블 인코딩이 필요할까?
머신러닝 모델은 숫자 데이터만 이해할 수 있기 때문입니다.
따라서, 문자열로 된 범주형 데이터를 숫자로 변환해야 합니다.
예제 데이터:
ID | Gender | Smoker |
1 | Male | Yes |
2 | Female | No |
3 | Male | No |
👎 이 데이터를 그대로 머신러닝 모델에 넣으면 오류 발생!
✅ → "Male"을 0, "Female"을 1로 변환해야 함
✅ → "Yes"를 1, "No"를 0으로 변환해야 함
🔹 2. LabelEncoder 사용법 (Python 코드 예제)
Python의 scikit-learn 라이브러리를 사용하면 간단하게 LabelEncoder를 적용할 수 있습니다.
✅ LabelEncoder 기본 사용법
from sklearn.preprocessing import LabelEncoder
# 샘플 데이터
gender = ["Male", "Female", "Male", "Female", "Male"]
smoker = ["Yes", "No", "No", "Yes", "No"]
# LabelEncoder 객체 생성
encoder = LabelEncoder()
# Gender 변환
gender_encoded = encoder.fit_transform(gender)
smoker_encoded = encoder.fit_transform(smoker)
print("Gender 인코딩 결과:", gender_encoded)
print("Smoker 인코딩 결과:", smoker_encoded)
📌 출력 결과
Gender 인코딩 결과: [1 0 1 0 1] # Male → 1, Female → 0
Smoker 인코딩 결과: [1 0 0 1 0] # Yes → 1, No → 0
✅ 이제 범주형 데이터를 숫자로 변환 완료!
🔹 3. Pandas 데이터프레임에서 LabelEncoder 적용하기
실제 머신러닝 프로젝트에서는 pandas.DataFrame에 LabelEncoder를 적용하는 경우가 많습니다.
import pandas as pd
from sklearn.preprocessing import LabelEncoder
# 데이터프레임 생성
df = pd.DataFrame({
"Gender": ["Male", "Female", "Male", "Female", "Male"],
"Smoker": ["Yes", "No", "No", "Yes", "No"]
})
# LabelEncoder 객체 생성
encoder = LabelEncoder()
# 모든 범주형 컬럼을 LabelEncoder로 변환
for col in df.columns:
df[col] = encoder.fit_transform(df[col])
print(df)
📌 출력 결과
✅ 데이터프레임에서도 쉽게 변환 가능!
✅ 컬럼이 많다면 apply(LabelEncoder().fit_transform)으로 한 번에 변환 가능!
🔹 4. LabelEncoder의 주의할 점
1️⃣ 숫자가 크다고 해서 더 중요한 의미를 가지지는 않음!
- 예를 들어, ["Low", "Medium", "High"]를 LabelEncoder로 변환하면 [0, 1, 2]가 됨.
- 하지만 머신러닝 모델이 2 > 1 > 0처럼 크기가 의미 있는 데이터로 잘못 해석할 수 있음.
- ❌ 이런 경우에는 OneHotEncoder를 사용해야 함!
2️⃣ OneHotEncoder가 더 적절한 경우도 있음
- 범주형 데이터의 개수가 3개 이상이면 OneHotEncoding이 더 나을 수 있음.
- 예제: ["Red", "Green", "Blue"] → OneHotEncoding하면 [1,0,0], [0,1,0], [0,0,1]
🔹 5. LabelEncoder vs OneHotEncoder 비교
비교 항목 | LabelEncoder | OneHotEncoder |
변환 방식 | 각 값을 고유한 숫자로 변환 | 각 값을 별도 컬럼(One-Hot Vector) 으로 변환 |
데이터 형태 | 순서가 없는 범주형 데이터 | 순서가 없는 범주형 데이터, 클래스가 많을 때 적합 |
특징 | 숫자로 변환하지만 의미 있는 관계가 아님 | 여러 개의 컬럼이 생겨 메모리 사용량 증가 |
예제 | "Male" → 1, "Female" → 0 | "Male" → [1,0], "Female" → [0,1] |
사용 추천 | 이진(2개) 범주형 데이터 | 3개 이상 범주형 데이터 |
📌 💡 LabelEncoder를 사용할 때, 숫자 크기에 의미가 없다는 점을 명심하세요!
📌 👉 OneHotEncoder가 더 적절한 경우도 있으므로 주의해야 합니다!
🔹 6. LabelEncoder 활용: 음료 추천 시스템 적용
현재 진행 중인 스타벅스 음료 추천 시스템에서 LabelEncoder를 활용하면,
✅ "음료 카테고리(Beverage Category)" 를 숫자로 변환 가능
✅ "핫/아이스(Hot/Iced)" 여부를 숫자로 변환 가능
📌 음료 추천 시스템에서 LabelEncoder 적용 예제
import pandas as pd
from sklearn.preprocessing import LabelEncoder
# 데이터 로드
df = pd.read_csv("data/starbucks_drinkMenu_expanded.csv")
# 적용할 범주형 컬럼 선택
categorical_columns = ["Beverage_category", "Beverage_prep"]
# LabelEncoder 적용
encoder = LabelEncoder()
for col in categorical_columns:
df[col] = encoder.fit_transform(df[col])
print(df.head())
✅ 이제 머신러닝 모델이 음료 데이터를 학습할 수 있도록 변환 완료!
✅ 음료 추천 시스템에 LabelEncoder를 적용해 머신러닝 모델을 더욱 최적화할 수 있습니다.
✅ 마무리: LabelEncoder는 이렇게 활용하자!
✔ 이진 데이터(Yes/No, Male/Female) 변환할 때 사용
✔ 머신러닝 모델이 숫자 데이터를 요구할 때 적용
✔ 순서가 중요하지 않은 카테고리형 데이터에 적합
✔ 클래스 개수가 많으면 OneHotEncoder 고려
🔥 이제 직접 LabelEncoder를 활용해 보세요!
'🐍 Python' 카테고리의 다른 글
VS Code 과 Jupyter Notebook / Python 코드 실행 방법, 비교 & 활용 가이드 (0) | 2025.02.09 |
---|---|
범주형 데이터를 숫자로 변환하는 방법: One-Hot Encoding 완벽 가이드 (0) | 2025.02.09 |
Python 데이터 분석 & 머신러닝 파이프라인으로 보험 데이터 예측하기 (1) | 2025.02.08 |
Streamlit 배포 가이드 (1) | 2025.02.04 |
비주얼 스튜디오 코드에서 Streamlit 문법 배우기: 출력 함수 실습과 실행 결과 (0) | 2025.02.03 |