qcoding

[데이터전처리]LabelEncoding / OneHotEncoding 본문

Python 데이터분석

[데이터전처리]LabelEncoding / OneHotEncoding

Qcoding 2022. 6. 29. 22:01
반응형

## label encoding

## label encoding

from sklearn.preprocessing import LabelEncoder

fruits= ['사과','블루베리','바나나','귤','블루베리','바나나','바나나','사과']

# 레이블 인코더 생성
label_encoder=LabelEncoder()

# 레이블 인코딩 적용
fruits_label_encoded=label_encoder.fit_transform(fruits)

print(fruits_label_encoded)
fruits_label_encoded.reshape(-1,1)

-> 단점으로는 머신러닝에서는 숫자로 값을 판단하기 때문에 1와 2 의 관계가 1과 3의 관계보다 상관성이 높다고 판단할 수 있음. 실제로는 범주형 데이터 이므로 상관관계가 없지만 숫자로 표현할 때 상관관계를 갖는다고 판단할 수 있음.

 

 

## OneHot Encoding

## 원핫인코딩 / 문자열에 바로 원-핫 인코딩 적용안되니 -> 숫자형 변경 후 원핫인코딩 진행
## label encoding

from sklearn.preprocessing import LabelEncoder , OneHotEncoder

fruits= ['사과','블루베리','바나나','귤','블루베리','바나나','바나나','사과']

# 레이블 인코더 생성
label_encoder=LabelEncoder()
onehot_encoder=OneHotEncoder()

# 레이블 인코딩 적용
fruits_label_encoded=label_encoder.fit_transform(fruits)

#원핫인코딩적용
fruits_one_hot_encoded=onehot_encoder.fit_transform(fruits_label_encoded.reshape(-1, 1))

fruits_one_hot_encoded.toarray()

-> 수행할 때 문자열 데이터에 바로 원핫인코딩을 적용할 수 없으니, LabelEncoder를 통해서 숫자형 데이터로 변환한 다음에 수행함

-> reshape으로 1-d 를 2-d로 바꾸어 진행해줌

-> 마지막 toarray()는 원핫 인코딩은 대부분 값이 0인 희소행렬을 만들어 내고, 희소행렬은 메모리 낭비가 심하기 때문에 변환결과를 압축형태인 CSR (Compressed Sparse Row) 행렬로 주는데, 다시 일반배열로 변경하기 위해 toarray()를 사용함

 

## Pandas get_dummies 는 숫자형으로 데이터를 변경하지 않고 바로 변환가능함

import pandas as pd

pd.get_dummies(fruits)

반응형
Comments