1. 결측치 처리
데이터를 처리하는 과정에서 결측치를 처리해야 하는 방법을 선정하는 것이 중요하다.
Null값이 많지 않다면 피처의 평균값으로 대체할 수도 있고, Null값이 너무 많다면 그 피처는 드랍할 수도 있다.
하지만, 만약 그 피처가 중요한 피처이고 단순히 평균값이나 0으로 대체할 경우에 예측 왜곡이 심해질 수도 있으므로 이 결측치를 잘 채우는 것이 중요하다!
2. 인코딩
또, 중요한 것은 사이킷런에서 문자열은 입력값으로 허용하지 않으므로, 문자열 값들은 모두 숫자형으로 인코딩 해야 한다.
1) Label Encoding
문자열로 구성된 카테고리 형태의 데이터를 머신러닝에서 이용할 수 있도록 카테고리를 숫자형으로 바꿔주는 것이다.
from sklearn.preprocessing import LabelEncoder
fruits = ['apple','mango','lemon','orange']
encoder = LabelEncoder()
encoder.fit(fruits)
labels = encoder.transform(fruits)
fruits 라는 카테고리명들에 대해 LabelEncoder를 통해 라벨인코딩을 진행한 결과 아래와 같은 결과가 나왔다.
# 출력결과
array([0, 2, 1, 3])
순서대로 apple : 0, mango : 2, lemon : 1, orange : 3 으로 변환된 것을 의미한다.
인코딩된 값을 다시 디코딩하고 싶다면 inverse_transform() 을 통해 디코딩할 수 있다.
encoder.inverse_transform(labels)
아래와 같은 출력 결과를 통해 디코딩값을 확인할 수 있다.
array(['apple', 'mango', 'lemon', 'orange'], dtype='<U6')
혹시 0번부터 순서대로 값을 확인하고 싶다면 classes_를 통해 확인할 수 있다.
encoder.classes_
LableEncoding의 주의사항
LableEncoding의 경우 문자형을 숫자형으로 바꾸기 위해 임의로 숫자값을 부여하는데, 혹시 이것을 회귀와 같은 ML 알고리즘에 이용할 경우, 큰 숫자로 인코딩된 값을 가중치가 부여된 것이라 판단하고 더 중요하게 판단할 수도 있다.
따라서 , 회귀와 같은 ML 알고리즘에서는 라벨인코딩한 값을 피처로 사용하지 않아야 한다!
하지만, 트리 계열의 ML 알고리즘은 숫자의 이런 특성을 반영하지 않기에 괜찮다..!
2) One-Hot Encoding
피처 유형별로 피처를 모두 만들어서 자신에게 해당하는 컬럼에만 1, 나머지 컬럼은 0으로 채우는 방식을 말한다.
예를 들면, 아래와 같다.
apple | mango | lemon | orange | |
apple | 1 | 0 | 0 | 0 |
mango | 0 | 1 | 0 | 0 |
lemon | 0 | 0 | 1 | 0 |
orange | 0 | 0 | 0 | 1 |
이번에도 코드를 통해 실습해보겠다
from sklearn.preprocessing import OneHotEncoder
import numpy as np
# 2차원 ndarray로 변환
fruits = np.array(array).reshape(-1,1)
# one-hot encodig 적용
oh_encoder = OneHotEncoder()
oh_encoder.fit(fruits)
oh_labels = oh_encoder.transform(fruits)
oh_label.toarray()
.
OneHotEncoder로 변환한 결과는 희소 행렬이므로 결과를 확인하려면 toarray()를 통해 밀집 행렬로 변환해야 한다.
변환 결과, 위에 그렸던 표와 같은 형태로 저장된 것을 볼 수 있다.
array([[1., 0., 0., 0.],
[0., 0., 1., 0.],
[0., 1., 0., 0.],
[0., 0., 0., 1.]])
위의 과정을 pandas의 get_dummies()를 이용하면 더 쉽게 변환할 수 있다.
import pandas as pd
df = pd.DataFrame({'fruits':['apple', 'mango', 'lemon', 'orange']})
pd.get_dummies(df)
'ASAC 5기 > Machine Learning' 카테고리의 다른 글
06. Regression Model (0) | 2024.07.22 |
---|---|
05. Linear Regression 관련 용어 (2) | 2024.07.17 |
04. 분류의 성능 평가 지표 (0) | 2024.06.27 |
02. 교차 검증 (0) | 2024.06.18 |
01. Numpy 기초 (0) | 2024.04.08 |
댓글