Search
🙄

일반화, 정규화

일반화(Generalization)

계층적인 개념을 반영하여 하위수준의 데이터를 상위수준으로 대체하는 방법
예) Street(하위수준)을 도시 또는 국가(상위수준)로 대체
예) 숫자(하위수준)를 어린이, 성인, 노인(상위수준)으로 매핑

Binning (평활화)

이웃값을 기반으로 저장된 데이터를 여러 버킷(bin)으로 나누고, 각 세그먼트의 데이터를 특정 값(예: 평균, 경계값 등)으로 바꾸는 방법
평활화 예시
Age 컬럼의 평활화

문자열 파싱 or 문자열 조합

Building-Up and Breaking-Down Features

그룹화(Group Transforms)

그룹핑하여 정보의 대표값(예 : 평균)으로 값을 반영

정규화(Normalization)

데이터 값의 범위를 변환(Rescaling)시켜 학습결과가 과적합 될 가능성을 낮추는 방법
각 샘플 값에 대해 동일한 가중치를 적용하여 특정 샘플에 쏠림없이 데이터를 이해하는 작업

정규화의 필요성

측정 단위의 영향
키 : 인치, 미터
체중 : 파운드, 킬로그램
속성을 더 작은 단위로 표현하면 해당 속성의 범위가 넓어져 더 큰 '가중치'(또는 효과)를 줄 수 있음
측정 단위 선택에 의존하지 않도록 데이터를 변환해야 함
[0.0,1.0] 또는 [-1, 1]과 같이 공통 범위 내에 있도록 데이터를 변환

정규화의 효과

신경망,  최근접 이웃 분류, 클러스터링과 같은 거리 측정에 매우 유용
신경망 역전파 알고리즘을 사용하는 경우 모든 속성의 입력 값을 정규화하면 학습 속도가 빨라짐

최소-최대 정규화(Min-Max Scaling)

원본 데이터에 대해 선형 변환을 수행
원래 데이터 값 간의 관계를 유지함
min(X)와 max(X) : 속성 X 의 최소값과 최대값
Xnew=Xmin(X)max(X)min(X)X_{new} = \frac{{X - \min(X)}}{{\max(X) - \min(X)}}
정규화 후 신규 입력 데이터가 X 의 원래 데이터 범위를 벗어나면 "범위 벗어남" 오류가 발생
[예시] “소득” 속성의 최소값과 최대값이 각각 $10,000 및 $90,000일 때, 최소-최대 정규화를 사용하여 값을 [0.0, 1.0] 범위로 변환 소득 $70,000 의 정규화 결과
Xnew=Xmin(X)max(X)min(X)=70000100009000010000=0.75X_{new} = \frac{{X - \min(X)}}{{\max(X) - \min(X)}} = \frac{{70000 - 10000}}{{90000 - 10000}} = 0.75

MinMaxScaler

from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() scaler.fit(df) scaled_array = scaler.transform(df) scaled_df = pd.DataFrame(data=scaled_array, columns=iris.feature_names) scaled_df.describe()
Python
복사
[예시] : 학습용 데이터와 테스트용 데이터

Z-점수(Z-score) 정규화

평균 및 표준편차를 사용하여 속성값을 정규화
Xnew=Xmean(X)std(X)X_{new} = \frac{{X - mean(X)}}{{std(X)}}
개별 피처를 평균이 0, 분산이 1인 값으로 변환
SVM, 선형회귀, 로지스틱 회귀에서는 반드시 정규화 진행 필요
이상 값이 있거나 속성 X 의 실제 최소값과 최대값을 알 수 없는 경우에 유용
[예시] ”소득” 속성의 평균과 표준편차가 각각 $50,000 및 $10,000일 때, z-점수 정규화를 사용하여 값을 평균, 표준편차를 고려하여 변환
소득 $70,000 의 정규화 결과
Xnew=Xmean(X)std(X)=700005000010000=2.0X_{new} = \frac{{X - mean(X)}}{{std(X)}} = \frac{{70000-50000}}{{10000}} = 2.0

StandardScaler

from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaler.fit(df) scaled_array = scaler.transform(df) scaled_df = pd.DataFrame(data=scaled_array, columns=iris.feature_names) scaled_df.describe()
Python
복사
표준화(Standardization) 필요성
표준화를 통해 단위가 다른 데이터들을 비교 할 수 있음

다양한 스케일링 기법

변환법
설명
특징
StandardScaler
- 평균 0, 분산 1로 변경 - 모든 특성이 같은 크기를 가지게 한다
- 최소값과 최대값 크기를 제한하지는 않음
RobustScaler
- 특성들이 같은 스케일을 갖게 됨 (Standscaler 와 비슷)
- 평균과 분산 대신 중간 값(median) 와 사분위값(quantile) 사용 - 이상치 영향 받지 않음
MinMaxScaler
- 모든 특성이 0과 1 사이에 위치
- 2차원 데이터 셋의 경우에는 x 축의 0과 1 , y축 0과 1사이에 값이 배치
Normalizer
- 특성 벡터의 유클리드안 길이가 1이 되도록 데이터 포인트를 조정
- 지름이 1인 원에(3차원에서는 구)에 데이터 포인트를 투영 → 데이터 포인트가 다른 비율로(길이에 비례) 스케일이 조정 - 이러한 정규화는 특성 벡터의 길이는 상관없고 데이터 방향(도는 각도)만이 중요할 때 많이 사용