드레:
코딩 뿌시기
드레:
전체 방문자
오늘
어제
  • 분류 전체보기 (268)
    • Python (74)
      • Python 기초 (42)
      • Numpy (8)
      • Pandas (22)
    • Machine Learning (31)
      • Machine Learning (1)
      • Deep Learning (27)
    • AWS (22)
      • RDS (3)
      • EC2 (9)
      • Lambda (8)
      • S3 (2)
    • MySQL (24)
    • Git (8)
    • Streamlit (12)
    • REST API (22)
    • Java (24)
    • Android (36)
    • Debugging (15)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 딥러닝
  • Ann
  • AWS Lambda
  • 액션바
  • Python
  • CNN
  • flask
  • 네이버 API
  • AWS
  • Retrofit2
  • rest api
  • pandas
  • JWT
  • aws s3
  • Java
  • tensorflow
  • 안드로이드 스튜디오
  • Lambda
  • Callback
  • github
  • volley
  • Transfer Learning
  • 서버리스
  • 깃이그노어
  • API
  • GET
  • Streamlit
  • serverless
  • EC2
  • fine tuning

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
드레:

코딩 뿌시기

데이터 전처리 - Categorical Encoding
Machine Learning

데이터 전처리 - Categorical Encoding

2022. 12. 5. 15:55

카테고리컬 인코딩

 

컴퓨터는 문자를 인식하지 못하기 때문에, 컴퓨터가 이해할 수 있도록

카테고리컬 데이터를 숫자로 바꿔주는 작업.

카테고리컬 인코딩에는 크게 2가지가 있다.

  • Label Encoding : 0부터 넘버링, 카테고리컬 데이터가 3개 이상일 경우 학습 성능이 떨어진다.
  • One-Hot Encoding : 카테고리컬 데이터를 0과 1의 숫자로 변환, 3개 이상의 카테고리컬 데이터일 경우 사용한다.

 

 

1. 레이블 인코딩(Label Encoding)

 

X

 

import pandas as pd
from sklearn.preprocessing import LabelEncoder

encoder = LabelEncoder()
X['Country'] = encoder.fit_transform( X['Country'] )

sorted(X['Country'].unique())
>>> ['France', 'Germany', 'Spain']

카테고리컬 데이터의 정렬순서에 따라 넘버링 된다.

따라서 France가 0, Germany는 1, Spain이 2로 바뀌었다.

 

 

 

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

 

X

from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer

ct = ColumnTransformer( [ ('encoder', OneHotEncoder(), [0]) ],
                      # [(   이름,    트랜스포머,    컬럼 ) ]                 
                       remainder= 'passthrough')
                       # remainder = 'drop' : 변환하지 않는 컬럼을 모두 버린다.
                       # remainder = 'passthrough : 변환하지 않는 컬럼을 그대로 놔둔다.
                       
X = ct.fit_transform(X)
X
>>> array([[1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 4.40000000e+01,
        7.20000000e+04],
       [0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 2.70000000e+01,
        4.80000000e+04],
       [0.00000000e+00, 1.00000000e+00, 0.00000000e+00, 3.00000000e+01,
        5.40000000e+04],
       [0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 3.80000000e+01,
        6.10000000e+04],
       [0.00000000e+00, 1.00000000e+00, 0.00000000e+00, 4.00000000e+01,
        6.37777778e+04],
       [1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 3.50000000e+01,
        5.80000000e+04],
       [0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 3.87777778e+01,
        5.20000000e+04],
       [1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 4.80000000e+01,
        7.90000000e+04],
       [0.00000000e+00, 1.00000000e+00, 0.00000000e+00, 5.00000000e+01,
        8.30000000e+04],
       [1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 3.70000000e+01,
        6.70000000e+04]])
sorted(X['Country'].unique())
>>> ['France', 'Germany', 'Spain']

원핫인코딩의 경우 카테고리컬 데이터의 정렬 순서에 따라
France는 (1, 0, 0)

Germany는 (0, 1, 0)

Spain은 (0, 0 ,1) 로 변환되었다.

 

※ 주의할 점은 기존 순서에 상관없이, ColumnTransformer를 사용하면 변환한 컬럼이 맨 앞으로 이동한다.

 

원핫인코딩을 하면 범주형 데이터 종류만큼 컬럼 수가 늘어나기 때문에,

컬럼 10개짜리 데이터프레임이 원핫인코딩 후 수백개의 컬럼이 될 수도 있다.

'Machine Learning' 카테고리의 다른 글

머신러닝 - Linear Regression 으로 수치 예측  (0) 2022.12.07
데이터 전처리 - 결측값 처리, 피처 스케일링, train_test_split  (0) 2022.12.05
    'Machine Learning' 카테고리의 다른 글
    • 머신러닝 - Linear Regression 으로 수치 예측
    • 데이터 전처리 - 결측값 처리, 피처 스케일링, train_test_split
    드레:
    드레:

    티스토리툴바