빅데이터 분석가 양성과정/Python - 머신러닝

회귀(Regression) - 데이터 전처리(정규화, 로그 변환, 스케일러, 원-핫 인코딩)

분석가 황규진 2024. 7. 12. 14:57

선형 회귀 모델을 위한 데이터 변환

선형 회귀의 데이터 인코딩은 일반적으로 레이블이 아니라 원-핫 인코딩을 적용합니다.

실습

데이터 전처리(정규화, 로그변환)을 해주는 함수 정의

from sklearn.preprocessing import StandardScaler, MinMaxScaler, PolynomialFeatures

# 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_bias=False).fit_transform(scaled_data)
    
    return scaled_data
# Ridge의 alpha값을 다르게 적용하고 다양한 데이터 변환방법에 따른 RMSE 추출. 
alphas = [0.1, 1, 10, 100]
#변환 방법은 모두 6개, 원본 그대로, 표준정규분포, 표준정규분포+다항식 특성
# 최대/최소 정규화, 최대/최소 정규화+다항식 특성, 로그변환 
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=scale_method[0], p_degree=scale_method[1], 
                                    input_data=X_data)
    print(X_data_scaled.shape, X_data.shape)
    print('\\n## 변환 유형:{0}, Polynomial Degree:{1}'.format(scale_method[0], scale_method[1]))
    get_linear_reg_eval('Ridge', params=alphas, X_data_n=X_data_scaled, 
                        y_target_n=y_target, verbose=False, return_coeff=False)

(506, 13) (506, 13)

 

## 변환 유형:None, Polynomial Degree:None

alpha 0.1일 때 5 폴드 세트의 평균 RMSE: 5.788

alpha 1일 때 5 폴드 세트의 평균 RMSE: 5.653

alpha 10일 때 5 폴드 세트의 평균 RMSE: 5.518

alpha 100일 때 5 폴드 세트의 평균 RMSE: 5.330

(506, 13) (506, 13)

 

## 변환 유형:Standard, Polynomial Degree:None

alpha 0.1일 때 5 폴드 세트의 평균 RMSE: 5.826

alpha 1일 때 5 폴드 세트의 평균 RMSE: 5.803

alpha 10일 때 5 폴드 세트의 평균 RMSE: 5.637

alpha 100일 때 5 폴드 세트의 평균 RMSE: 5.421

(506, 104) (506, 13)

 

## 변환 유형:Standard, Polynomial Degree:2

alpha 0.1일 때 5 폴드 세트의 평균 RMSE: 8.827

alpha 1일 때 5 폴드 세트의 평균 RMSE: 6.871

alpha 10일 때 5 폴드 세트의 평균 RMSE: 5.485

alpha 100일 때 5 폴드 세트의 평균 RMSE: 4.634

(506, 13) (506, 13)

 

## 변환 유형:MinMax, Polynomial Degree:None

alpha 0.1일 때 5 폴드 세트의 평균 RMSE: 5.764

alpha 1일 때 5 폴드 세트의 평균 RMSE: 5.465

alpha 10일 때 5 폴드 세트의 평균 RMSE: 5.754

alpha 100일 때 5 폴드 세트의 평균 RMSE: 7.635

(506, 104) (506, 13)

 

## 변환 유형:MinMax, Polynomial Degree:2

alpha 0.1일 때 5 폴드 세트의 평균 RMSE: 5.298

alpha 1일 때 5 폴드 세트의 평균 RMSE: 4.323

alpha 10일 때 5 폴드 세트의 평균 RMSE: 5.185

alpha 100일 때 5 폴드 세트의 평균 RMSE: 6.538

(506, 13) (506, 13)

 

## 변환 유형:Log, Polynomial Degree:None

alpha 0.1일 때 5 폴드 세트의 평균 RMSE: 4.770

alpha 1일 때 5 폴드 세트의 평균 RMSE: 4.676

alpha 10일 때 5 폴드 세트의 평균 RMSE: 4.836

alpha 100일 때 5 폴드 세트의 평균 RMSE: 6.241