반응형
데이터 전처리
데이터 전처리는 ML 알고리즘 급으로 중요한데 내부에 있는 값들을 깔끔하게 정리해 준다고 생각하면 편하다.
그리고 사이킷런 의 ML 알고리즘은 문자열 값을 입력값으로 허용하지 않기 때문에 우리는 모든 문자열을 인코딩하여 숫자로 만들 것이다.
데이터 인코딩
레이블 인코딩(Label Encoding)
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([1, 2, 3]))
쉽게 디코딩도 가능하다.
하지만 몇몇 ML 알고리즘의 경우 예측 성능이 떨어진다.
값이 클수록 가중치가 더 부여돼서 더 중요하다고 인식하는 경우가 있어서 이러한 문제점을 해결하기 위해 원-핫인코딩이 나왔다.
원-핫 인코딩(One-Hot Encoding)
단순하게 사진만 봐도 구분이 가능하다. 즉, 여러 개의 속성 중에서 단 한 개만 1로 표시하는 걸 뜻한다.
from sklearn.preprocessing import OneHotEncoder
import numpy as np
items=['TV','냉장고','전자레인지','컴퓨터','컴퓨터','선풍기','믹서','믹서']
# 2차원 ndarray로 변환합니다.
items = np.array(items).reshape(-1, 1)
print(items)
# 원-핫 인코딩을 적용합니다.
oh_encoder = OneHotEncoder()
oh_encoder.fit(items)
oh_labels = oh_encoder.transform(items)
print(oh_labels.toarray())
print(oh_labels.shape)
이런 식으로 원핫인코딩을 구현할 수 있다.
음 아주 멋있다. 하지만 이렇게 하면 우리가 행렬도 맞춰줘야 하고 상당히 귀찮다. 귀차니즘 저는 우리들을 위해 pandas에서 더 쉽게 API로 지원한다.
get_dummies()
import pandas as pd
df = pd.DataFrame({'item':['TV','냉장고','전자레인지','컴퓨터','컴퓨터','선풍기','믹서','믹서'] })
pd.get_dummies(df)
아주 편해
반응형