본문 바로가기

Study/Machine Learning 개론

2. Data Preprocessing

인코딩(Encoding)

레이블(Label) 인코딩

카테고리 피쳐를 코드형 숫자 값으로 변환

ex)

"북미" -> 0

"남미" -> 1

"아시아" -> 2

 

- 주의사항

"북미" 가 0이고, "아시아" 가 2로 변환되어 0 < 2 이므로, "아시아" 가 "북미" 보다 더 중요한 값으로 해석될 수 있다.

따라서 회귀 계열의 ML 알고리즘에서는 사용할 수 없고, 분류 계열의 알고리즘에서는 사용해도 문제없다. 

 

원-핫 인코딩

 

여러 개 속성 중에서 하나의 속성만 1 로 표시한다고 하여 원-핫 인코딩

가령 라면은 [1,0,0,0,0] 의 값으로 표현된다.

 

#import pandas as pd

df = pd.DataFrame({'item': ['TV', '데스크탑', '선풍기', '에어컨', '에어프라이기', '제습기', '공기청정기', '가습기', '청소기']})
df_oh = pd.get_dummies(df)
df_oh


피쳐 스케일링(feature scaling)

서로 다른 변수들의 값 범위를 일정한 수준으로 맞추는 작업.

변수들 값 범위를 맞춰줌으로써 다른 변수들을 비교할 수 있게 된다. (키와 - cm 몸무게 - kg 을 비교한다던지)

 

> 표준화(Standardization)

 

정규 분포를 따르는 데이터를 평균이 0, 분산이 1인 가우시안 정규 분포화하는 작업

 

Z는 평균이 0, 분산이 1인 정규분포를 따르는 변수가 된다.

μ 는 정규분포를 따르는 데이터 집합 X 의 평균이고 𝞼는 X의 표준편차이다

정규분포의 성질에 따라 Z는 평균이 0이고 분산이 1인 변수가 된다.

from sklearn.datasets import load_iris

iris = load_iris()
iris_data = iris.data
iris_df = pd.DataFrame(data = iris_data, columns = iris.feature_names)

print(iris_df.head())

print(iris_df.mean())
print(iris_df.var())

# Standard Scale
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
scaler.fit(iris_df)
iris_scaled = scaler.transform(iris_df)

print(type(iris_scaled))

iris_df_scaled = pd.DataFrame(iris_scaled, columns=iris_df.columns)
print(iris_df_scaled.mean())
print(iris_df_scaled.var())
iris_df_scaled

각 피쳐값들의 평균값이 거의 0 이 되었고, 분산도 거의 1이 되었다.

위의 표준화 된 뒤의 데이터셋 테이블을 보면 피쳐들 단위가 cm 인데 사실 귀찮아서 그대로 둔 것뿐이고,

표준화를 거친 새 변수값들이기 때문에 cm 이라는 단위는 사라졌다고 보는 게 맞다. 

 


 

> 정규화(Normalization)

 

변수들을 최소 0 ~ 최대 1의 범위의 값으로 통일

0 ~ 100,000,000 범위의 데이터도, 0~100 의 데이터도 모두 최소 0~ 최대 1의 범위로 변환하는 셈

 

정규화 방법 중에 Min-Max feature scaling 방식이 있다.

Min-Max feature scaling 에서의 변수 X` 변환식

# min_max scale
from sklearn.preprocessing import MinMaxScaler
from sklearn.datasets import load_iris

iris = load_iris()
iris_data = iris.data
iris_df = pd.DataFrame(data = iris_data, columns = iris.feature_names)

scaler = MinMaxScaler()
scaler.fit(iris_df)
iris_scaled = scaler.transform(iris_df)

iris_df_scaled = pd.DataFrame(data = iris_scaled, columns = iris.feature_names)

print("## 평균 편차")
print(iris_df_scaled.mean())
print(iris_df_scaled.var())

print("## 최솟값 최댓값")
print(iris_df_scaled.min())
print(iris_df_scaled.max())

iris_df_scaled.head()

'Study > Machine Learning 개론' 카테고리의 다른 글

4. ROC curve 와 AUC  (0) 2023.09.17
3. Confusion matrix(오차행렬) 와 정밀도, 재현율, F1 score  (1) 2023.09.08
1. 교차 검증  (0) 2023.09.04