ML
선형 회귀 모델을 위한 데이터 변환
hyerimir
2022. 11. 18. 17:18
선형 회귀의 경우 최적의 하이퍼 파라미터를 찾아내는 것 못지않게 데이터 분포도의 정규화와 인코딩 방법이 매우 중요
타깃값의 경우 일반적으로 로그 변환을 적용한다
-> 결정 값을 정규 분포나 다른 정규값으로 변환하면 변환된 값을 다시 원본 타깃값으로 원복하기가 어려울 수 있다
왜곡된 분포도 형태의 타깃값을 로그 변환하여 예측 성능 향상이 된 경우가 많은 사례에서 검증됨
로그 변환의 경우 np.log()가 아니라 np.log1p()를 이용한다, log()함수를 사용하면 언더 플로우가 발생할 수 있음
사이킷런을 이용해 피처 데이터 세트에 적용하는 변환 작업
1. StandardScaler 클래스를 이용해 평균이 0이고, 분산이 1인 표준 정규 분포를 가진 데이터 세트로 변환하거나 MinMaxScaler 클래스를 이용해 최솟값이 0이고 최댓값이 1인 값으로 정규화를 수행
2. 스케일링/정규화를 수행한 데이터 세트에 다시 다항 특성을 적용하여 변환, 보통 1번 방법을 통해 예측 성능에 향상이 없을 경우 이와 같은 방법 적용
3. 로그변환(log transformation)
#method는 표준 정규 분포 변환(Standard), 최댓값/최솟값 정규화(MinMax), 로그변환(Log) 결정
#p_degree는 다항식 특성을 추가할 때 적용. p_degree는 2 이상 부여하지 않음.
def get_scaled_data(method='None', p_degree=None, input_data(None):
if method == 'Standard':
scaled_data = StandardScaler().fit_transform(input_data)
elif method == 'MinMax':
scaled_data = MinMaxScaler().fit_transform(input_data)
elif method == 'Log':
scaled_data = np.log1p(input_data)
else:
scaled_data = input_data
if p_degree != None:
scaled_data = PolynomialFeatures(degree=p_degree, include_biase=False).fit_transform(scaled_data)
return scaled_data
alpha = [0.1, 1, 10, 100]
#5개 방식으로 변환. 먼저 원본 그대로, 표준정규 분포, 표준정규 분포 + 다항식 특성
#최대/최소 정규화, 최대/최소 정규화 + 다항식 특성, 로그 변환
scale_methods = [(None, None), ('Standard', None), ('Standard',2),('MinMax', None), ('MinMax', 2)], ('Log', None)]
for scale_method in scale_methods:
X_data_scaled = get_scaled_data(method=scaled_method[0], p_degree=scale_method[1],
input_data = X_data)