Data scientist/Machine Learning

[ML/DL] 데이터 인코딩 - Label Encoding / One-hot Encoding/ dummies

반응형

데이터 인코딩이란?

 

머신러닝 알고리즘은 문자열 데이터 속성을 입력받지 않으며 모든 데이터는 숫자형으로 표현되어야 한다.

그래서 문자형 카테고리형 속성은 모두 숫자 값으로 변환/인코딩 되어야 한다.

 


 

인코딩의 종류

 

label Encoding  - 범주형 변수의 문자열을 수치형으로 변환

 

One-hot Encoding  -  피처값의 유형에 따라 새로운 피처를 추가해 고윳값에 해당하는 칼럼에만 1을 표시하고 나머지 칼럼에는 0을 표시한다.

 

get_dummies() - pandas에서 제공해주는 함수로서 더미의 가변수를 만들어준다. 

 


예제)

# label Encoding

#[실습] breast_cancer
from sklearn.datasets import load_iris, load_breast_cancer
from sklearn.tree     import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV,train_test_split
from sklearn.metrics import accuracy_score

from sklearn.preprocessing import LabelEncoder

import pandas as pd
import numpy  as np

 

item_label = ['TV','냉장고','전자렌지','컴퓨터','선풍기','선풍기','믹서','믹서']
encoder = LabelEncoder() # labelEncoder함수를 가져온다.
encoder.fit(item_label) # 이걸 내가 가지고 있는 데이터에 fit한다.
digit_label = encoder.transform(item_label) # transform으로 변환한다.
print('encoder',encoder)
print('encoder 결과',digit_label)
print("*"*50)
print('decoder 결과',encoder.inverse_transform(digit_label)) # 변환 했던것을 다시 변환한다.

 

# One-hot encoding

from sklearn.preprocessing import OneHotEncoder
item_label = ['TV','냉장고','전자렌지','컴퓨터','선풍기','선풍기','믹서','믹서']
encoder = LabelEncoder() # labelEncoder함수를 가져온다.
encoder.fit(item_label) # 이걸 내가 가지고 있는 데이터에 fit한다.
digit_label = encoder.transform(item_label) # transform으로 변환한다.

print('type', type(digit_label))

# 2차원 데이터로 변환
digit_label = digit_label.reshape(-1,1)
print(digit_label)
print(digit_label.shape)

# One-Hot 인코딩
one_hot_encoder = OneHotEncoder()
one_hot_encoder.fit(digit_label)
one_hot_label = one_hot_encoder.transform(digit_label)
print(one_hot_label.toarray())
print(one_hot_label.shape)

 

# get_dummies()

one_hot_df = pd.DataFrame({'item':['TV', '냉장고', '전자렌지', '컴퓨터', '선풍기', '선풍기', '믹서','믹서']})
pd.get_dummies(one_hot_df)

 

 

반응형