Feature Scaling
ML에서 feature scaling이란 다음을 의미함.
input data의 각 feature들의 값이
일정한 범위(a consistent range)나
표준화된 척도(standardized scale)로 변환하는 과정.
Feature Scaling은 ML에서
- 모든 feature가 동등하게 training에 기여하도록 보장해주고,
- raw scale에 상관없이 model이 실제 각 feature가 결과에 미치는 영향력을 제대로 학습하도록 도와줌.
Featuer Scaling을 하지 않을 경우,
- 일부 큰 scale을 가지는 features가 모델의 결과에 지나치게 큰 영향력을 가지게 되어
- 편향된 모델로 학습되는 문제점을 가짐.
feature에 대한 정의가 헷갈린다면 다음 접은 글을 확인할 것.
참고로 scale이란 어떤 값을 측정할 때 사용되는 도구로서 해당 값의 크기 및 범위를 뜻함.
왜 Feature Scaling이 필요한가?
ML의 상당수의 알고리즘들은 데이터를 vector로 처리하고 이때 vector에 각 component가 feature에 해당함.
ML알고리즘을 수행할 경우,
- 각 component의 scale에 상관없이 값의 크기를 그대로 반영하여 계산되는 경우가 발생하게 되는데,
- 특정 feature가 다른 features에 비해 매우 큰 scale을 가지고 있는 경우,
- 해당 feature가 ML Algorithm의 계산 처리에 있어서 보다 큰 영향을 끼치기 쉽다는 문제점을 가지게 됨.
달리 말하면 다음과 같음.
- 많은 머신러닝 알고리즘은
- 데이터의 벡터 표현(Vector Representation)을 기반으로 동작하는데
- 이때 벡터의 각 component(구성 요소)가 feature에 해당함.
- feature 의 scale이 크게 다를 경우
- 알고리즘은 큰 scale의 feature에 불필요하게 높은 가중치를 부여할 수 있으며,
- 이는 모델의 전반적인 성능에 영향을 미침.
- 예를 들어, L-2 Norm(유클리드 노름)을 사용하는 알고리즘에서는 큰 scale을 갖는 feature가 L-2 norm 값에 과도한 영향을 주게 되는데, 실제 문제에서 해당 feature의 영향력이 오히려 작은 경우엔 모델의 성능에 나쁜 영향을 주게 됨.
이를 방지하기 위해 대부분의 ML에서 feature scaling을 수행하여 input data의 각각의 feature들이 비슷한 scale을 가지도록 조정을 해주며, 이는 Data Pre-processing에서 흔히 이루어지는 일임.
Feature Scaling은 꼭 필요한가?
- Feature scale에 민감한 Support Vector Machine (SVM)과 같은 ML 알고리즘의 경우,
feature scaling이 없이는 성능이 매우 나뻐질 수 있기 때문에 필수적으로 해줘야 한다. - DL의 경우 feature scale에 상대적으로 매우 robust하기 때문에 굳이 해주지 않아도 좋은 성능을 보이지만,
이 경우에도 feature scaling을 해주면 convergence를 보다 빨리하는 장점을 가질 수 있기 때문에 해주는 것이 권장된다. - Decision Tree와 같이 아예 상관없는 일부 기법들을 제외하고는 Feature scaling은 해주는 것이 일반적이기 때문에
여러 모델과 알고리즘을 비교하면서 문제를 해결하는 경우가 일반적인 오늘날에는 거의 필수적으로 해주는 것이 좋다.
요약하면, Feature scaling은 Data Pre-processing Pipeline의 일환으로 수행되는게 일반적임.
기본적인 Feature Scaling 종류
앞서 feature scaling의 정의에서
- 일정한 범위(a consistent range)나
- 표준화된 척도(standardized scale)로 바꾼다고 했는데,
이들 각각에 해당하는 대표적인 feature scaling 두가지가 다음과 같이 존재함.
Normalization (정규화):
Feature의 minimum과 maximum을 이용하여 값의 범위가 "일정한 범위"가 되도록 조정하는 방식.
정확한 용어는 Min-Max Normalization이며, 결과값의 범위로 [0,1] 또는 [-1,1] 를 많이 사용함.
- 일반적으로 구현 및 이해가 직관적이라 많이 사용됨.
- 단점은 outlier가 데이터의 일반적인 값과 차이가 심하게 될 경우,
실제 대부분의 샘플들이 좁은 범위에 몰리기 쉽다는 점임 (=outlier에 민감하다는 단점을 가짐).
sklearn.preprocessing.MinMaxScaler
로 구현되어 있음.
Standardization (표준화)
Feature의 mean을 0으로, std를 1이 되도록 조정하는 방식.
- Normalization과 달리, outlier에 대한 상대적으로 강건함.
- 부가적으로 통계 처리에서 표준분포 테이블을 참고하기 위해 사용되던 방식으로
관련 처리가 된 데이터에 적합한 여러 통계 기반 기법들이 많기 때문에 많이 애용되는 방식임. - 단점은 처리 후의 max,min을 구하기 전에 알기 어렵다는 점임.
Scikit-Learn의 preprocessing: Feature Scaling의 구현물들
Transformer의 일종으로 MinMaxScaler
와 StandardScaler
를 제공.
다음 코드를 참고하라.
import numpy as np
from sklearn.preprocessing import MinMaxScaler,StandardScaler
def print_data(x):
print(f'{x.min()=}')
print(f'{x.max()=}')
print(f'{x.mean()=}')
print(f'{x.std()=}')
x_raw = np.random.rand(20,1)
print_data(x_raw)
mms = MinMaxScaler()
mms.fit(x_raw)
x_scaled = mms.transform(x_raw)
print_data(x_scaled)
ss = StandardScaler()
ss.fit(x_raw)
x_scaled = ss.transform(x_raw)
print_data(x_scaled)
print('--------')
print(f'{ss.mean_=}') # array of mean
print(f'{ss.scale_=}') # array of standard deviation
https://gist.github.com/dsaint31x/3253afe07d764e26ab8eaf830ef7ae78
'Programming > ML' 카테고리의 다른 글
[ML] Ensemble 기법 (0) | 2024.09.08 |
---|---|
[Fitting] Total Least Square Regression (1) | 2024.06.22 |
[ML] RANdom SAmple Consensus (RANSAC) (0) | 2024.06.13 |
[ML] Underfit (0) | 2023.09.21 |
[Fitting] Ordinary Least Squares : OLS, 최소자승법 (0) | 2022.04.28 |