데이터 인코딩

jh_k·2023년 2월 14일
0

데이터 분석

목록 보기
13/17

컴퓨터에서 인코딩이란 컴퓨터에서 연산이 가능하도록 범주형자료,명목형자료와 같은 변수를 0또는 1 로 인코딩하여 머신러닝 알고리즘에서 사용가능하도록 데이터를 변환하는 것

사이킷런 머신러닝 알고리즘은 문자열 값을 입력 값으로 허용하지 않습니다. 그러므로 문자열 값들을 숫자 형으로 변환하는 인코딩 작업이 필요합니다.

머신러닝에서의 인코딩 방식을 대표적으로 레이블 인코딩, 원-핫 인코딩 두 가지가 있습니다. 각각의 인코딩 방식에 대해 공부해 보겠습니다

  1. 레이블 인코딩
    레이블 인코딩은 데이터프레임의 열을 숫자값으로 변환하는 방법입니다.
from sklearn.preprocessing import LabelEncoder


items = ['TV','냉장고','전자렌지','컴퓨터','선풍기','선풍기','믹서','믹서']

## LabelEncoder 를 객체로 생성한 후, fit() 과 transform()으로 label인코딩 수행.

encoder = LabelEncoder()
encoder.fit(items)
labels = encoder.transform(items)
print('인코딩 변환값:',labels)
print('인코딩 클래스:',encoder.classes_)
print('디코딩 원본 값:',encoder.inverse_transform([0, 1, 4, 5, 3, 3, 2, 2]))

인코딩 변환값: [0 1 4 5 3 3 2 2]
인코딩 클래스: ['TV' '냉장고' '믹서' '선풍기' '전자렌지' '컴퓨터']
디코딩 원본 값: ['TV' '냉장고' '전자렌지' '컴퓨터' '선풍기' '선풍기' '믹서' '믹서']

classes_ : 0번부터 순서대로 어떤 문자열이 변환된 것인지 보여줍니다.
inverse_transform : 인코딩된 값을 받아 디코딩해줍니다.

  1. 원-핫 인코딩
    원-핫 인코딩은 새로운 열들을 추가해 그 값에 해당하는 칼럼에만 1을 표시하고 나머지 칼럼에는 0을 표시하는 방법입니다. 그림을 통해 자세히 알아보겠습니다.
from sklearn.preprocessing import OneHotEncoder
import numpy as np
items = ['TV','냉장고','전자렌지','컴퓨터','선풍기','선풍기','믹서','믹서']

oh_encoder = OneHotEncoder()
## 리스트 형태의 데이터를 array로 바꿔 차원을 2차원 배열로 변경한다는 의미
## 여기서 reshape(8,1) = reshape(-1,1)과 같은 의미로 일단 1열로 정리하면 알아서
## 행의 값이 지정

items = np.array(items).reshape(-1,1)
oh_labels =  oh_encoder.fit_transform(items)
oh_labels.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.]])

판다스의 get_dummies 메서드를 사용하면 숫자형 값 변환없이 원-핫 인코딩을 쉽게 구현 할 수 있습니다.

import pandas as pd
df = pd.DataFrame({'item':["TV","냉장고","전자렌지","컴퓨터","선풍기","선풍기","믹서","믹서"]})
pd.get_dummies(df['item'])
TV	냉장고	믹서	선풍기	전자렌지	컴퓨터
0	1	0	0	0	0	0
1	0	1	0	0	0	0
2	0	0	0	0	1	0
3	0	0	0	0	0	1
4	0	0	0	1	0	0
5	0	0	0	1	0	0
6	0	0	1	0	0	0
7	0	0	1	0	0	0
profile
Just Enjoy Yourself

0개의 댓글