반응형
데이터 전처리(Data Preprocessing)은 머신러닝을 하는 데 있어 매우 중요합니다. 머신러닝에서는 결손값, 즉 NaN, Null값은 허용되지 않습니다. 따라서 이러한 Null값은 고정된 다른 값으로 변환해야 합니다. Null값을 어떻게 처리해야 할지는 경우에 따라 다릅니다.
Feature값 중 Null값이 얼마 되지 않는다면 피처의 평균값 등으로 간단하게 대체될 수 있으나 Null값이 대부분이라면 오히려 해당 피처는 드롭하는 것이 더 좋습니다. 이렇게 사이킷런의 머신러닝 알고리즘은 문자열 값을 입력 값으로 허용하지 않습니다. 그래서 모든 문자열 값은 인코딩 돼서 숫자 형으로 변환해야 합니다.
카테고리형 피처는 코드값으로 표현하는 게 더 이해하기 쉬울 것 같습니다. 반면 텍스트형 피처는 피처 벡터화등의 기법으로 벡터화하거나 불필요한 피처라고 판단되면 삭제하는 게 좋습니다.
레이블 인코딩
대표적인 인코딩 방식은 레이블 인코딩과 원-핫 인코딩이 있습니다. 레이블 인코딩은 카테고리 피처를 코드형 숫자 값으로 변환하는 것입니다.
from sklearn.preprocessing import LabelEncoder
items = ['TV', '냉장고', '전자레인지', '컴퓨터', '선풍기', '믹서', '믹서']
encoder = LabelEncoder()
encoder.fit(items)
labels = encoder.transform(items)
print('인코딩 변환값', labels)
print('인코딩 클래스', encoder.classes_)
print('디코딩 원본값', encoder.inverse_transform([4,5,2,3,4,0]))
#인코딩 변환값 [0 1 4 5 3 2 2]
원-핫 인코딩(One-Hot Encoding)
원-핫 인코딩은 피처 값의 유형에 따라 새로운 피처를 추가해 고유 값에 해당하는 칼럼에만 1을 표시하고 나머지 칼럼에는 0을 표시하는 방식입니다. 즉, 행 형태로 돼 있는 피처의 고유 값을 열 형태로 차원을 변환한 뒤, 고유 값에 해당하는 칼럼에만 1을 표시하고 나머지 칼럼에는 0을 표시합니다.
from sklearn.preprocessing import OneHotEncoder
import numpy as np
items = ['TV', '냉장고', '전자레인지', '컴퓨터', '선풍기', '믹서', '믹서']
encoder = LabelEncoder()
encoder.fit(items)
labels = encoder.transform(items)
labels = labels.reshape(-1,1)
oh_encoder = OneHotEncoder()
oh_encoder.fit(labels)
oh_labels = oh_encoder.transform(labels)
print(oh_labels.toarray())
print(oh_labels.shape)
import pandas as pd
df = pd.DataFrame({'items':['TV', '냉장고', '전자레인지', '컴퓨터', '선풍기', '믹서', '믹서']})
df_dummary = pd.get_dummies(df)
print(df_dummary)
반응형
'Lecture ML' 카테고리의 다른 글
머신러닝 강좌 #9] 머신러닝 모델 성능 평가 - F1, ROC-AUC (0) | 2021.05.24 |
---|---|
머신러닝 강좌 #8] 머신러닝 모델 성능 평가 - 정밀도(Precision), 재현율(Recall) (0) | 2021.05.21 |
머신러닝 강좌 #7] 머신러닝 모델 성능 평가 - 정확도 (Accuracy), Confusion Matrix (0) | 2021.05.20 |
머신러닝 강좌 #6] 타이타닉 생존자 예측 실습 (0) | 2021.05.19 |
머신러닝 강좌 #5] 피처스케일링 (표준화 / 정규화) / StandardScler, MinMaxScaler (0) | 2021.05.17 |
머신러닝 강좌 #3] GridSearchCV - 교차 검증과 최적 하이퍼 파라미터 튜닝을 한 번에 (0) | 2021.05.15 |
머신러닝 강좌 #2] 교차검증에 대해 (0) | 2021.05.13 |
머신러닝 강좌 #1] 나의 첫번째 머신러닝 프로그램 (0) | 2021.05.11 |