[스케일링]
멋쟁이 사자처럼 AI스쿨 7기 오늘코드 박조은 강사님의 수업자료를 바탕으로 포스팅하였습니다.
1. feature scaling의 취약점
robust scaling의 경우 비교적 이상치에 강점이 있기는 하지만, 일반적으로 스케일링은 편향된 분포나 이상치에 취약하다.
feature scaling을 하면 스케일링은 잘 되었지만, 아직 표준정규분포 형태가 아니기 때문이다.
따라서 처음부터 정규분포 형태가 아닌 경우에는 feature scaling은 그다지 좋은 선택이 아니다.
표준정규분포를 만들기 위해서는 log transformation이 필요하다.
log만 취해도 정규분포 형태 비슷한게 나오지만,
log를 취한 뒤에 스케일링을 해주는 것이 좋다.
2. 정규분포의 중요성
절대평가 기준(pd.cut) 4개의 구간으로 나누어 비교할 때
일반적으로 1,4구간 보다 2,3구간이 상대적으로 중요해서 중간값을 잘 예측하는 모델이 일반적으로 성능이 높은 모델이다
(예측하려는 값이 일반적으로 극단값 보다는 중간값에 가까운 값일 확률이 높기 때문)
그러나, 첫 번째의 경우 1구간에 값이 몰려있어서 1구간의 예측 성능만 뛰어나고 일반적인 예측 성능은 낮아질 것이다.
두 번째의 경우 2,3 구간에 값이 집중되어 있어 일반적인 예측 성능이 올라가게 된다.
따라서 정규분포로 고르게 분포된 값이 예측에 더 유리한 자료인데
예측하려는 값의 분포를 우리는 알 수 없다.
예측하는 과정에서 정규분포로 고르게 분포시키는 것이 다양한 예측값에 대해 다응할 수 있게 해준다.
즉, 너무 한쪽에 몰려있꺼나 한쪽으로 치우쳐저 있는 경우보다 고르게 분포되어 있을 때 데이터의 특성을 더 고르게 학습할 수 있다.
또한, 정규분포와 근사한 분포는 최소제곱법과 수학적 연관성이 있고 이로 인해 특정 머신러닝 모델에서 더 유리하다.
💡[참고] 구간 나누는 방법
절대평가: 간격기준으로 나누기
상대평가: 개수로 나누기
🤔 만약 label이 편향되어 있다면?
label을 transformation(정규화)하여 예측한 다음, 반대로 계산하여 출력하면 된다.
(log를 취해 예측하고, 예측 값에 np.exp()를 적용하여 출력)
🤔 마이너스 값에 로그를 취하려면?
모든 값에 '최소값+1'을 더해주고 로그를 취하면 된다.
예를 들어 -500이 가장 작은 값이라면 얼마를 더하여 로그변환을 해주어야 할까?
==> 모든 값에 +501 해준 다음 로그변환을 해준다.
np.log(x+501)
원래 값으로 다시 복원하려면 어떻게 해야할까?
==> 지수함수로 변환하고 모든 지수함수 값에 -501을 해준다.
np.exp(x) - 501
🤔 정규분포와 표준정규분포 차이
트리계열 모델을 사용한다면 일반 정규분포를 사용해도 무관하다.
그런데 스케일값이 영향을 미치는 모델에서는 표준정규분포로 만들어 주면 더 나은 성능을 낼 수도 있다.
표준정규분포로 만들 때 값이 왜곡될 수도 있기 때문에 주의가 필요하다.
꼭 이런 변환작업을 많이 해준다고 해서 모델의 성능이 좋아진다고 보장할 수 없다.
상황에 맞는 변환방법을 사용하는 것을 추천함
3. 표준 정규분포 만들기
순서
1) 로그변환
2) standard scaler 적용
'머신러닝과 딥러닝 > ML 개념정리' 카테고리의 다른 글
[ML] 20. 데이터 전처리 (9) - 인코딩(Ordinary-Encoding, label-Encoding, One-hot-Encoding) (0) | 2022.11.14 |
---|---|
[ML] 19. 데이터 전처리(8) - 이산화(Discretisation / Equal with binining, Equal frequency bining) (0) | 2022.11.14 |
[ML] 17. 데이터 전처리 (6) - 스케일링(z-score, min-max, robust) (1) | 2022.11.14 |
[ML] 16. 데이터 전처리 (5) - 희소값 다루기(기타처리) (0) | 2022.11.09 |
[ML] 15. 데이터 전처리 (4) - 이상치 다루기(스케일링) (0) | 2022.11.09 |
댓글