범주형 데이터를 코드형 숫자값으로 변환해주는 것이다.
카테고리 특성을 코드형 숫자 값으로 변환하는 것이다.
from sklearn.preprocessing import LabelEncoder
items = ['TV','냉장고','전자렌지','컴퓨터','선풍기','믹서']
# 인코딩 변환값
encoder = LabelEncoder()
encoder.fit(items)
labels = encoder.transform(items)
인코딩 반환값 : [0 1 4 5 3 2]
인코딩 클래스 : ['TV' '냉장고' '믹서' '선풍기' '전자렌지' '컴퓨터']
인코딩을 진행할 결과과 다음과 같이 출력된다. 숫자가 부여되는 순서는 트리로 생각하면 쉽게 알 수 있을 것이다.
이 경우는 인코딩 된 숫자값에 따라 가중치가 적용되기 때문에 성능이 떨어질 수 있다.
범주형 변수를 0 또는 1 값을 가진 하나 이상의 새로운 특성으로 바꿔주는 것이다.
from sklearn.preprocessing import OneHotEncoder
import numpy as np
items = ['TV','냉장고','전자렌지','컴퓨터','선풍기','선풍기','믹서','믹서']
# 먼저 숫자 값으로 변환
encoder = LabelEncoder().fit(items)
labels = encoder.transform(items)
# 2차원 데이터로 변화
labels = labels.reshape(-1, 1)
# 원-핫-인코딩 적용
encoder_oh = OneHotEncoder().fit(labels)
labels_oh = encoder_oh.transform(labels)
labels_oh.toarray()
array([[1., 0., 0., 0., 0., 0.],
[0., 1., 0., 0., 0., 0.],
[0., 0., 0., 0., 1., 0.],
[0., 0., 0., 0., 0., 1.],
[0., 0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0., 0.],
[0., 0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0., 0.]])
toarray를 사용하여 원-핫 인코딩이 적용된 내용을 볼 수 있다.
위에 결과처럼 데이터의 개수만큼의 feature을 만들어서 그 데이터의 위치만 1로 표기하고 나머지는 0으로 표기.
훈련세트와 테스트 세트의 볌주형 값이 같은 방식으로 표현되어야 하기 때문에 이러한 인코딩기법을 사용한다.
영화 관람 등급같은 것은 범주형이지만 순서가 있다. 이러한 경우는 연속형으로 할지 범주형으로 사용할지 사용할 알고리즘이나 풀려는 문제에 따라 잘 설정해야한다.