귀퉁이 서재
머신러닝 - 8. Feature Scaling & Feature Selection 본문
Feature Scaling
Feature Scaling이란 Feature들의 크기, 범위를 정규화시켜주는 것을 말합니다. 예를 하나 들어보겠습니다. A, B, C라는 사람이 있습니다. A는 6.1ft에 140 lbs, B는 5.9ft에 175 lbs, C는 5.2ft에 115 lbs입니다. 단위가 생소하겠지만 피트(ft), 파운드(lbs)로 했습니다. B의 상의 사이즈는 L이고, C의 상의 사이즈는 S라고 할 때, A의 상의 사이즈는 L일까요 S일까요? 직관적으로 봤을 때 L일 것입니다. B보다 몸무게는 작지만 키가 더 크기 때문입니다.
이제 사람이 아니라 컴퓨터에게 A의 상의 사이즈를 예측하는 걸 시켜본다고 합시다. 키와 몸무게에 대한 데이터를 토대로 상의 사이즈를 예측하려면 어떻게 해야 할까요? 가장 간단한 방법은 키와 몸무게를 더해서 계산하는 것입니다. 더한 값이 B와 더 가깝다면 L, C와 더 가깝다면 S인 식입니다.
A의 키+몸무게 = 6.1 + 140 = 146.1
B의 키+몸무게 = 5.9 + 175 = 180.9
C의 키+몸무게 = 5.2 + 115 = 120.2
A의 키+몸무게 값은 B와 가깝나요? C와 가깝나요? C와 가깝습니다. B와의 차는 34.8이고 C와의 차는 25.9이기 때문입니다. 그럼 A의 상의 사이즈는 C와 비슷하기 때문에 S라는 결론이 나옵니다. 이상하죠?
이런 결론이 나온 이유는 키와 몸무에의 단위가 서로 다르기 때문입니다. 몸무게의 범위는 5.2ft ~ 6.1ft이므로 정수로 표현하면 [5, 7]입니다. 반면 몸무게의 범위는 [115, 175]입니다. 서로 매우 다른 범위를 가집니다. 따라서 키는 사실상 무시해도 좋을 만큼 차이가 적습니다. 최대와 최소의 차가 고작 0,9ft밖에 안되니까요. 몸무게는 최대와 최소의 차가 60으로 매우 큽니다. 키는 무시되고 몸무게에 의해 결과가 도출됩니다. A의 몸무게는 B보단 C와 가까워서 C와 같은 옷 사이즈가 나온 것입니다.
이렇듯 단위가 서로 상이하면 머신러닝의 결과가 잘못될 수 있습니다. 정확한 분석을 위해서는 Feature를 서로 정규화시켜주는 작업이 필요합니다. 이를 Feature Scaling이라고 합니다.
Feature Scaling 공식
1. Min-Max Normalization
위 예시에서 A, B, C의 키, 몸무게를 Scaling 해보겠습니다.
A, B, C의 키는 각 6.1, 5.9, 5.2 이므로, x_max = 6.1, x_min = 5.2입니다.
x_A = (6.1 - 5.2) / (6.1 - 5.2) = 1
x_B = (5.9 - 5.2) / (6.1 - 5.2) = 0.78
x_C = (5.2 - 5.2) / (6.1 - 5.2) = 0
따라서 스케일 된 키는 1, 0.78, 0입니다. 최대 값은 1이고 최소 값은 0 임을 알 수 있습니다.
A, B, C의 몸무게는 각 140, 175, 115이므로, x_max = 175, x_min = 115입니다.
x_A = (140 - 115) / (175 - 115) = 0.42
x_B = (175 - 115) / (175 - 115) = 1
x_C = (115 - 115) / (175 - 115) = 0
따라서 스케일 된 몸무게는 0.42, 1, 0입니다. 역시, 최대 값은 1이고 최소 값은 0입니다.
스케일된 키의 값은 1, 0.78, 0이며, 스케일된 몸무게의 값은 0.42, 1, 0입니다. 이제 단위에 따른 키와 몸무게의 편차가 없으므로 두 값을 더해서 옷 사이즈를 결정해도 됩니다.
두 값을 더하면 A, B, C 각 1.42, 1.78, 0입니다. A는 C보다 B와 가까우므로 옷 사이즈는 L이다라고 말할 수 있습니다.
2. Standardization
Feature Scaling의 또 다른 방법으로는 Standardization이 있습니다.
이는 정규분포를 만들 때 쓰는 공식과 똑같습니다.
sklearn 실습
sklearn에서 Min-Max Normalization과 Standardization을 지원합니다. 위와 같이 공식으로 구할 필요 없이 간단한 코드로 scale 값을 구할 수 있습니다.
1. Min-Max Normalization
import pandas as pd
from sklearn import preprocessing
height_weight_people = {'height': [6.1, 5.9, 5.2], 'weight': [140, 175, 115]}
df = pd.DataFrame(height_weight_people, index=['A', 'B', 'C'])
df
minmax_scaler = preprocessing.MinMaxScaler()
minmax_scaler.fit(df)
print(minmax_scaler.transform(df))
위에서 공식으로 구한 Scale 값과 동일합니다.
2. Standardization
standard_scaler = preprocessing.StandardScaler()
standard_scaler.fit(df)
standard_scaler.transform(df)
Feature Selection
머신러닝 할 때 모든 feature가 중요한 정보는 아닙니다. 그중에는 필요 없는 feature도 있고, 보다 더 중요한 feature도 있습니다. 따라서 머신러닝에서는 어떤 feature로 훈련을 시키는지가 중요합니다. 전체 feature 중 몇 개의 feature를 선택할지 그중 어떤 feature를 선택할지가 중요합니다. 너무 적은 feature를 선택하면 oversimplified 됩니다. 반면 너무 많은 feature를 선택하면 overfitting이 됩니다.
Feature Selection을 하는 하나의 방법으로 Lasso Regression이 있습니다.
Lasso (Least Absolute Shrinkage and Selection)는 extra feature에 penalty를 주는 방법입니다.
Lasso Regression
minize SSE + λ |β|
SSE는 Sum of Square이고, λ는 parameter, β는 coefficients of regression입니다. SSE는 모델이 데이터에 얼마나 fit 한 지를 나타내는 것이며, λ |β| 는 얼마나 많은 feature를 사용할지를 나타내는 것입니다. SSE가 너무 작아지면 오버피팅됩니다. 모델이 훈련 데이터에 딱 맞게 fit 되기 때문입니다. 따라서 SSE를 최소화하면 오버피팅이 됩니다. 반면 λ |β| 은 feature의 개수를 의미한다고 했습니다. λ |β| 가 작으면 feature의 개수가 작은 것입니다. 의미 없는 feature의 coefficient는 0으로 하면 됩니다. feature의 개수가 작으면 oversimplified 됩니다. 따라서 λ |β| 가 작으면 oversimplified 됩니다. 결론적으로 Minimizse SSE + λ |β| 는 모델이 훈련 데이터에 잘 들어맞게 해 주면서도 λ |β| 라는 penalty term을 줘서 필요 없는 feature를 없애줍니다. 적당한 개수의 feature를 선택해주는 것이라고 보시면 됩니다.
아래는 sklearn으로 Lasso Regression을 구현해본 것입니다.
import sklearn.linear_model.Lasso
regression = Lasso()
regression.fit(features, labels)
regression.coef_
>>> [0.7, 0.0]
regression coefficients가 0.7, 0.0이라는 것은 선택한 feature가 1개라는 것입니다. 하나의 계수는 0.7인데 다른 하나의 계수는 0이기 때문입니다. 0인 계수를 갖는 feature는 모델에 중요한 요소가 아니라는 뜻입니다.
References
Reference1: 데이터 분석을 위한 Learn by doing
Reference2: Medium (Why, How and When to Scale your Features)
'머신러닝' 카테고리의 다른 글
머신러닝 - 10. 교차검증(Cross Validation)과 혼동행렬(Confusion Matrix) (0) | 2019.08.13 |
---|---|
머신러닝 - 9. 차원 축소와 PCA (Principal Components Analysis) (9) | 2019.08.11 |
머신러닝 - 7. K-평균 클러스터링(K-means Clustering) (4) | 2019.07.29 |
머신러닝 - 6. K-최근접 이웃(KNN) (6) | 2019.07.27 |
머신러닝 - 5. 랜덤 포레스트(Random Forest) (6) | 2019.07.25 |