Data encoding

레이블(Label)인코딩과 원핫(One-hot)인코딩 소개

Label Encoding

문자열 데이터 값들을 숫자 값(Categorical )으로 변환하는 방식이지만 숫자값들이 서로 연관이 없음에 관계성(대소관계)이 생겨 원치 않은 방향으로 흐를 수 있다.

CodeReview

  • 파이썬 머신러닝완벽가이드 참조

from sklearn.preprocessing import LabelEncoder

Appliances = [ 'TV', '냉장고', '에어드레서' , '세탁기', '노트북', '모니터', '기타']

encoder= LabelEncoder() #객체생성

encoder.fit(Appliances) #틀을 만든다 생각...

Labels= encoder.transform(Appliances) #실제변환

print(Labels)

print('encoder class : ', encoder.classes_) # 인코더 클래스값

print('decoder variable?', encoder.inverse_transform([0, 2, 6, 5, 3, 4, 1])) #원본값

Titanic_code Review (Labelencoding(Cabin,Embarked,sex variable)

필요한 모듈생성

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

데이터 가져오기

train = pd.read_csv('./train.csv')

train.head()

print('Null 값 수 ',train.isnull().sum()) #cabin의 전체 891개중 204개밖에 없음을 알 수있다.또한 embarked도 2개모자라다.

범주형 변수들(cabin,Embarked) 전처리

#Cabin

train['Cabin'].fillna('N',inplace=True) #891개 중 687개를 N이라는 글자로 채움

train['Cabin'] = train['Cabin'].str[:1] #객실의 방번호를 제외하고 앞글자만 가져오기

train['Cabin'].value_counts()

#Embarked

train['Embarked'].fillna('Q',inplace=True) #2개를 Q로 채

print('Null 값 수 ',train.isnull().sum())

Label Encoding

from sklearn.preprocessing import LabelEncoder

#함수생성(labelencoder 생성 )

def encode_features(dataDF):

features = ['Cabin', 'Sex', 'Embarked']

for feature in features:

encoder= LabelEncoder() #객체생성

encoder.fit(dataDF[features]) #틀을 만든다 생각...

dataDF[features]= encoder.transform(dataDF[features])

return dataDF

#Labelencoder 함수 적

train = encode_features(train)

train.head()

One-hot Encoding

피쳐 유형에 따라 새로운 피쳐를 추가하여 해당컬럼값만 1을 표시하고 이외에는 0을 표기하는 방식이 있고 더 편리한 방식으로는 Pandas의 pd.get_dummies(Dataframe)를 이용한다.

한 가지 덧붙여 말하자면, R에서는 factor값으로 변환하는데, Python에서는 factor로 변환기능이 없기로 알고 있다.

CodeReview

  • 파이썬 머신러닝완벽가이드 참조

scikitlearn preprocessing 부분의 One-hot Encoder 경우 2차원 데이터로 변환하는 번거로움이 있어서 Pandas로 간단 변환하는 방식만 다루겠다.

import pandas as pd

df_appliances= pd.DataFrame( {'appliance':['TV', '냉장고', '에어드레서' , '세탁기', '노트북', '모니터', '기타']})

print(df_appliances.shape) # 초기 7행 1열의 dataframe 형태

print(df_appliances)

df_appliances=pd.get_dummies(df_appliances) #get_dummies를 이용해 피쳐 늘리기

print(df_appliances.shape)

df_appliances.head() #7행7열로 피쳐가 늘어났을 알 수 있다.

Titanic_code Review One-hot encoding(Cabin,Embarked,Sex variable)

  • 위에서 Label Encoding codereview 를 바탕으로 이어 나가겠다.

train=pd.get_dummies(train['Cabin', 'Sex', 'Embarked']) #get_dummies를 이용해 피쳐 늘리기

print(train.shape)

train.head()

Reference

Last updated