[BASIC, TIP] 피처 스케일링이란? 정규화 vs 표준화?

2022.03.01 15:37 11,874 조회

피처 스케일링은 ML 성능을 좋게하기 위해 많은 분들이 시도하는 기법입니다! 정규화와 표준화가 헷갈린적이 많아서 관련 내용을 알아보던 중 좋은 글이 있어서 일부분 번역해서 정리해 보았습니다.


-------------------------------------------------------


1. 왜 피처 스케일링이 필요한가?

✔️ 몇몇 머신러닝 알고리즘들은 피처 스케일링에 민감하기 때문입니다. 다음은 피처 스케일링에 민감한 알고리즘과 그렇지 않은 알고리즘에 대한 설명입니다.

➡️ 1. Gradient Descent Based Algorithms.

  • Linear regression, Logistic Regression, Neural Network 등
  • 최적화 기법을 위해 gradient descent 알고리즘 (경사 하강법)을 사용하는 머신러닝 알고리즘들은 피처 스케일링을 필요로 합니다.
  • 경사하강법에서 x값은 경사하강법의 단계의 크기에 큰 영향을 미치므로, 경사하강이 최소값으로 부드럽게 이동하고, 하강 단계가 모든 특징에 대해 동일한 속도로 업데이트 되도록 하기 위해 피처 스케일링이 필요합니다.


➡️ 2. Distance-Based Algorithms

  • KNN, K-means, SVM
  • Distance Algorithms들은 데이터 점들간의 거리로 유사성을 판단하기 때문에 피처의 크기에 영향을 받습니다.
  • 쉽게 설명하자면, 스케일링 전과 후의 유클리드 거리(Euclidean distance)가 변하는걸 생각하면 됩니다.
  • 예를 들어, 임의의 점 A와 B사이의 거리가 스케일링 이전에  Euclidean distance 과 같이 구해졌다면,
  • 스케일링 이후에는 Euclidean distance 이런식으로 변화한다고 생각하면 됩니다.


➡️ 3. Tree-Based Algorithms

  • 반면 Tree-Based Alogrithms ( decision tree, bagging, random forests, boosting 등)은 피처 스케일에 민감하지 않습니다.
  • 결정 트리는 특징을 기반으로 노드를 분류해나가기 때문입니다.



2. Normalization(정규화)란 무엇인가?

✔️ 정규화란 값들을 0과 1 사이의 범위로 이동하고 재조정시키는 스케일링 기법입니다. min-max scaling이라고도 합니다.

  • 정규화 공식은 다음과 같습니다.
  • Normalization equation
  • X값이 최소일 때 분자가 최소가 되어 X'은 0이 되고, X값이 최대일 때 분자와 분모는 같으므로 X'값이 1이 됩니다.
  • X의 값이 최소값과 최대값 사이일 때 X'값은 0과 1 사이의 값을 갖게 됩니다.
  • python의 경우 minmaxscaler로 간단하게 구현 가능합니다



3. Standardization(표준화)란 무엇인가?

✔️ 표준화는 표준편차와 평균을 중심으로 하는 또다른 스케일링 기법입니다. 평균을 0으로 하고 결과 분포에 단위 표준편차를 사용합니다.

  • 표준화 공식은 다음과 같습니다.
  • Standardization equation
  • 여기서 Feature scaling: Mu는 평균, Feature scaling: Sigma는 표준편차를 의미합니다.
  • 표준화의 경우 값이 특정범위로 제한되지 않습니다.



4. Normalize or Standardize ? 언제 정규화를 사용하고 언제 표준화를 사용해야 하는가?

✔️ 정규화데이터의 분포가 가우스 분포(Gaussian distribution)를 따르지 않을 때 사용하는 것이 좋습니다.(가우스 분포는 대부분 정규분포를 말합니다)

  • 이는 K-Nearest Neighbors 및 Neural Network처럼 데이터의 분포를 가정하지 않는 알고리즘에서 유용할 수 있습니다.

✔️ 표준화데이터가 가우스분포를 따를 때 유용할 수 있습니다.

  • 그러나 꼭 그럴필요는 없습니다.
  • 또한, 정규화와 달리 표준화에는 0과 1사이라는 경계 범위가 없기 대문에 데이터에 특이치가 있어도 그 이상치는 표준화에 영향을 받지 않을 것입니다.



5. 피처 스케일링에 추가적인 팁

✔️ scaler는 훈련 데이터셋에 fit한 이후에 테스트 데이터에 적용해야 합니다.

  • 즉, train data에는 fit_transform(), test data에는 transfom()을 사용해야 Data Leakage를 방지할 수 있습니다.

✔️ 위에서는 다루지 않았으나, 로그화와 정규화중에는 로그화를 먼저 진행하는 것이 좋다고 합니다.

  • 로그화는 skewed 되어있는 데이터의 왜곡을 줄이기 위한 것이기 때문에 정규화 이전에 선행되어야 합니다.

✔️ 대부분의 스케일링 기법에서 이상치(outlier)는 변환 효과를 저해하기 때문에 이상치를 제거하려는 노력이 필요합니다. ( 평균과 분산으 이상치와 특이값이 굉장히 민감합니다.)

  • 이상치 제거를 위해 IQR turkey나 outlier detection 알고리즘을 선행하면 좋다고 합니다!


-------------------------------------------------------


이상으로 피처 스케일링에 대한 정리글을 마칩니다!

피처 스케일링에 대한 더 좋은 정보가 있다면 댓글로 알려주시면 좋겠습니다

감사합니다 😊

  *본 포스팅은 데이콘 서포터즈 “데이크루" 1기 활동의 일환입니다. ✔️


참고
https://www.analyticsvidhya.com/blog/2020/04/feature-scaling-machine-learning-normalization-standardization/
https://john-analyst.medium.com/%ED%94%BC%EC%B2%98-%EC%8A%A4%EC%BC%80%EC%9D%BC%EB%A7%81-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-f58f39f6a710