hyeori
특성 스케일 맞추기 본문
결정 트리와 랜덤 포레스트는 특성 스케일 조정 걱정 필요 X, scale 에 영향 받지 않는다.
대부분의 머신 러닝과 최적화 알고리즘은 특성의 스케일이 같을 때 성능 ↑
스케일이 다른 특성을 맞추는 대표적인 방법 두 가지
- 정규화 (normalization)
- [0,1]
- min_max scaling
from sklearn.preprocessing import MinMaxScaler
mms = MinMaxScaler()
X_train_norm = mms.fit_transform(X_train)
X_test_norm = mms.transform(X_test)
2. 표준화 (standardization)
- 경사 하강법과 같은 최적화 알고리즘에 널리 사용된다.
- 평균 : 0, 표준편차 : 1
- min_max scaling에 비해 이상치에 덜 민감하다.
3. 사이킷런에서 특성 스케일을 조정하는 다른 방법 : RobustScaler
- 이상치가 많이 포함된 작은 데이터셋을 다룰 때 추천한다.
- 과대적합되기 쉬울 때 선택
- feature 마다 독립적으로 작용, 1사분위수, 3사분위수 사용해서, 스케일을 조정한다.
- 극단적인 값과 이상치에 영향을 덜 받는다.
4. MaxAbsScaler : 각 특성별로 데이터를 최대 절댓값으로 나눈다. 각 특성의 최댓값은 1이 된다. 전체 특성 [-1,1] 범위로 설정된다.
5. Normalizer 클래스와 normalize() 함수
- 함수의 특성X, sample별로 정규화를 수행
- 희소행렬 처리 가능
- L2의 노름이 1이 되도록 정규화
from sklearn.preprocessing import Normalizer
nrm = Normalizer()
X_train_l2 = nrm.fit_transform(X_train)
ex_2f = np.vstack((ex[1:], ex[1:]**2))
ex_2f
l2_norm = np.sqrt(np.sum(ex_2f ** 2, axis=1))
print(l2_norm) # 2차원 [ , ] 형태로 출력
ex_2f / l2_norm.reshape(-1, 1) # 차원 바꾸기
L2 노름 공식 :
'머신러닝' 카테고리의 다른 글
랜덤 포레스트의 특성 중요도 사용 (0) | 2024.05.08 |
---|---|
유용한 특성 선택 (0) | 2024.05.08 |
데이터셋을 훈련 데이터셋과 테스트 데이터 셋으로 나누기 (0) | 2024.05.08 |
범주형 데이터 다루기 (0) | 2024.05.08 |
누락된 데이터 다루기 (0) | 2024.05.08 |