move84

머신러닝: One-Hot Encoding vs. Label Encoding 본문

머신러닝

머신러닝: One-Hot Encoding vs. Label Encoding

move84 2025. 3. 4. 23:45
반응형

머신러닝 모델을 학습시키기 전에 데이터를 전처리하는 과정은 매우 중요합니다. 특히 범주형 데이터를 수치형 데이터로 변환하는 인코딩(Encoding) 기법은 머신러닝 모델의 성능에 큰 영향을 미칩니다. 이번 글에서는 널리 사용되는 두 가지 인코딩 기법, One-Hot Encoding과 Label Encoding을 비교 분석하고, 각 기법의 장단점과 활용 사례를 살펴봅니다.

💡 범주형 데이터와 인코딩 (Categorical Data & Encoding)

머신러닝 모델은 숫자 데이터를 기반으로 학습합니다. 하지만 현실 세계의 데이터는 숫자뿐만 아니라 텍스트(Text)나 범주(Category) 형태의 범주형 데이터도 포함합니다. 예를 들어, “색상”이라는 변수가 “빨강”, “파랑”, “초록” 세 가지 값을 가질 수 있습니다. 이러한 범주형 데이터를 머신러닝 모델이 이해할 수 있도록 수치형 데이터로 변환하는 과정이 바로 인코딩입니다.

➡️ 범주형 데이터 (Categorical Data): 몇 개의 범주로 구분되는 데이터
➡️ 인코딩 (Encoding): 범주형 데이터를 수치형 데이터로 변환하는 과정


🥇 Label Encoding (레이블 인코딩)

Label Encoding은 각 범주에 고유한 정수 값을 할당하는 간단한 인코딩 기법입니다. 예를 들어, “색상” 변수의 각 범주에 다음과 같이 정수 값을 할당할 수 있습니다.

  • 빨강: 0

  • 파랑: 1

  • 초록: 2

  • 장점*: 간단하고 구현하기 쉽습니다. 범주의 수가 많지 않을 때 유용합니다.

  • 단점*: 정수 값의 크기에 따라 모델이 영향을 받을 수 있습니다. 예를 들어, 모델이 2보다 1을 더 중요하게 인식할 수 있습니다. 순서가 없는 범주형 데이터에는 적합하지 않습니다.

    🔢 Label Encoding 예시 (Python)

    import pandas as pd
    from sklearn.preprocessing import LabelEncoder
    
    # 데이터 생성
    data = {'색상': ['빨강', '파랑', '초록', '빨강', '파랑']}
    df = pd.DataFrame(data)
    
    # LabelEncoder 객체 생성
    label_encoder = LabelEncoder()
    
    # 레이블 인코딩 수행
    df['색상_인코딩'] = label_encoder.fit_transform(df['색상'])
    
    # 결과 출력
    print(df)
    # LabelEncoder가 매핑한 클래스 확인
    print(label_encoder.classes_)

    위 코드는 Pandas DataFrame을 사용하여 “색상” 열에 Label Encoding을 적용하는 예시입니다. LabelEncoder를 사용하여 범주에 정수 값을 할당하고, 인코딩된 결과를 새로운 열에 저장합니다. classes_ 속성을 통해 각 범주에 어떤 정수 값이 할당되었는지 확인할 수 있습니다.


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

One-Hot Encoding은 각 범주를 새로운 열로 변환하고, 해당 범주에 속하는 데이터는 1, 그렇지 않은 데이터는 0으로 표시하는 기법입니다. 예를 들어, “색상” 변수의 각 범주에 One-Hot Encoding을 적용하면 다음과 같은 새로운 열이 생성됩니다.

빨강 파랑 초록
1 0 0
0 1 0
0 0 1

장점: 범주 간의 거리 개념을 없애 순서가 없는 범주형 데이터에 적합합니다. 머신러닝 모델의 성능을 향상시킬 수 있습니다.

단점: 범주의 수가 많을 경우, 데이터의 차원이 증가하여 메모리 사용량이 늘어나고 모델 학습 속도가 느려질 수 있습니다 (차원의 저주).

📊 One-Hot Encoding 예시 (Python)

 import pandas as pd

 # 데이터 생성
 data = {'색상': ['빨강', '파랑', '초록', '빨강', '파랑']}
 df = pd.DataFrame(data)

 # One-Hot Encoding 수행
 df_onehot = pd.get_dummies(df, columns=['색상'])

 # 결과 출력
 print(df_onehot)

위 코드는 Pandas의 get_dummies() 함수를 사용하여 “색상” 열에 One-Hot Encoding을 적용하는 예시입니다. columns 매개변수를 사용하여 인코딩할 열을 지정하고, One-Hot Encoding된 결과를 새로운 DataFrame에 저장합니다.


🎯 Label Encoding vs. One-Hot Encoding 비교

특징 Label Encoding One-Hot Encoding
인코딩 방식 각 범주에 정수 값 할당 각 범주를 새로운 열로 변환
장점 간단하고 구현 용이 범주 간 거리 문제 해결, 순서 없는 데이터에 적합
단점 정수 값 크기에 영향, 순서 없는 데이터에 부적합 차원 증가로 메모리 사용량 증가
사용 사례 순서가 있는 범주형 데이터 (예: 학년) 순서가 없는 범주형 데이터 (예: 색상, 성별)

💡 언제 어떤 인코딩 기법을 사용해야 할까?

  • Label Encoding: 범주 간에 순서가 있는 경우 (예: 학년, 만족도 등급) 또는 범주의 수가 적은 경우에 사용합니다.

  • One-Hot Encoding: 범주 간에 순서가 없는 경우 (예: 색상, 국가, 성별) 또는 범주의 수가 많지 않은 경우에 사용합니다. 범주의 수가 너무 많으면 차원의 저주 문제가 발생할 수 있으므로 주의해야 합니다.

    💡 결론

    One-Hot Encoding과 Label Encoding은 모두 범주형 데이터를 수치형 데이터로 변환하는 중요한 기법입니다. 각 기법의 장단점을 이해하고, 데이터의 특성에 맞는 적절한 인코딩 기법을 선택하는 것이 머신러닝 모델의 성능 향상에 기여합니다. 데이터 전처리는 머신러닝 모델의 성능을 결정하는 중요한 단계이므로, 다양한 인코딩 기법을 경험하고 데이터를 분석하여 최적의 방법을 선택해야 합니다.

반응형