- (주절주절1) 열심히 정리하다가 ctrl+s를 눌렀어야 했는데 w를 눌렀나... 그러니 창이 꺼졌다. 임시저장도 안되어 있고... 어제는 서버에서 폴더명 바꾸려고 뒤에 ~ 붙이고 엔터치니 폴더가 숨겨져서 다른 분이 도와주셨다... 무튼 나중에 나중에... - 2022.06.30 오전
- (주절주절2)점심 먹고 잠도 깰겸... 미루지 말고 하자... - 2022.06.30 오후


스케일링이란?

  • 데이터 전처리 과정 중 하나(data scaling/feature scaling)
  • ex) x는 0부터 1사이의 값을 갖고, y는 10부터 100사이의 값을 갖는다고 가정하면, x의 특성은 y를 예측하는데 큰 영향을 주지 않을 수 있음
  • 때문에 특성별로 데이터의 스케일이 다르다면, ML이 잘 동작하지 않을 수 있음
  • 따라서 데이터 스케일링 작업을 통해 모든 특성의 범위 또는 분포를 같게 만들어줘야 함

주로 사용되는 스케일링 개념

1) Standardization 표준화 :

  • 특성들의 평균을 0, 분산을 1로 스케일링
  • 특성들을 정규분포로 만드는 것
    2) Normalization 정규화 :
  • 특성들을 특정 범위(주로 [0,1])로 스케일링
  • 가장 작은 값은 0, 가장 큰 값은 1로 변환되므로, 모든 특성들은 [0,1] 범위를 갖음

scikit-learn의 scaler

*** 주의사항 - 몰랐었던 내용

  • scaler는 fit와 transform 메서드를 지니고 있는데, fit 메서드는 훈련 데이터에만 적용해, 훈련 데이터의 분포를 먼저 학습하고, 그 이후 transform 메서드를 훈련 데이터와 테스트 데이터에 적용해 스케일을 조정해야 함

  • 따라서, 훈련 데이터에는 fit_transform() 메서드를 적용하고, 테스트 데이터에는 transform() 메서드를 적용해야 함(fit_transform()은 fit과 transform이 결합된 단축 메서드)

  • 스케일링할 때, 모든 특성의 범위를 유사하게 만드는 것은 중요하지만, 그렇다고 모두 같은 분포로 만들 필요는 없음, 특성에 따라 각기 다른 스케일링을 적용하는게 유리할 수도 있기 때문

  • scaler.fit() : 데이터 변환을 학습, train셋에 대해서만 적용

  • scaler.transform() : 실제로 데이터 변환을 모두 수행, train셋과 test셋 모두에 대해서 적용

  • 만약 fit_transform을 test data에도 적용하게 되면 test data로부터 새로운 평균값과 분산값을 얻게 됨, 즉 모델이 test data도 학습하게 됨(이는 모델의 성능을 평가할 수 없게 되는 것)

  • 모델은 train data에 있는 평균과 분산을 학습하게 되는데, 이렇게 학습된 scaler()의 파라미터는 test data를 스케일하는데 사용됨 --> train data로 학습된 scaler()의 파라미터를 통해 test data의 피쳐값들이 스케일 됨
    ***

1) StandardScaler() :

  • 특성들의 평균을 0, 분산을 1로 스케일링, 특성들을 (표준)정규분포로 만드는 것
  • 최솟값과 최댓값의 크기를 제한하지 않기 때문에, 어떤 알고리즘에서는 문제가 있을 수 있음
  • 평균과 표준편차가 이상치로부터 영향을 많이 받는다는 점에서 이상치에 매우 민감
  • 회귀보다 분류에 유용
  • 모든 피쳐들이 같은 스케일을 갖게 됨
  • Standardization의 궁극적인 목표는 모든 피쳐들을 공통의 척도로 변경해주는 것, 즉 값의 범위의 차이를 왜곡하지 않으면서 모든 피쳐를 공통의 척도로 스케일해주는 것

2) MinMaxScaler() :

  • Min-Max Normalization
  • 특성들을 특정 범위(주로 [0,1])로 스케일링, 가장 작은 값은 0, 가장 큰 값은 1로 변환되므로, 모든 특성들은 [0,1] 범위를 갖게 됨
  • 이상치에 매우 민감
  • 분류보다 회귀에 유용
  • (x - (x의 최솟값)) / ((x의 최댓값) - (x의 최솟값)
  • 데이터의 최솟값과 최댓값을 알 때 사용
  • 이상치가 존재할 경우 스케일링 결과가 매우 좁은 범위로 압축될 수 있음

3) MaxAbsScaler() :

  • 각 특성의 절대값이 0과 1 사이가 되도록 스케일링
  • 모든 값은 -1과 1 사이로 표현되며, 데이터가 양수일 경우 MinMaxScaler와 유사하게 동작
  • 이상치에 매우 민감, 이상치가 큰 쪽에 존재할 경우 이에 민감할 수 있음

4) RobustScaler() :

  • 평균과 분산 대신에 중간값과 사분위값을 사용(중간값은 정렬시 중간에 있는 값, 사분위값은 1/4, 3/4에 위치한 값)
  • 이상치 영향을 최소화하여 정규분포보다 더 넓게 분포
  • RobustScaler()를 사용할 경우 StandardScaler()에 비해 스케일링 결과가 더 넓은 범위로 분포
  • 모든 피쳐들이 같은 스케일을 갖게 됨

5) Normalizer() :

  • 앞의 4가지 스케일러는 각 특성/열의 통계치를 이용하여 진행되는데, Normalizer의 경우 각 샘플/행마다 적용되는 방식
  • 한 행의 모든 특성들 사이의 유클리드 거리(L2 norm)가 1이 되도록 스케일링
  • 일반적인 데이터 전처리의 상황에서 사용되는 것이 아니라, 모델, 특히 딥러닝 내 학습 벡터에 적용하며, 특히나 피쳐들이 다른 단위(키, 나이, 소득 등)라면 더더욱 사용하지 않음

0개의 댓글