일반화된 모델을 학습하는데 어려움이 있는 분포를 가지는 변수가 있어, 일반화된 모델을 학습하지 못하는 문제 발생.
각 특징에 다양한 방법으로 변환.
다음의 데이터를 제곱과 로그를 적용하여 특징을 생성하고 적용해보자.
먼저 data와 라벨을 분리하고, 특징을 추가할 새로운 데이터를 생성한다.
# 특징과 라벨 분리
X = df.drop('EP', axis = 1)
Y = df['EP']
# 신규 데이터 생성
X_added = X.copy() # 특징이 추가된 데이터를 부착할 데이터
그리고 기존의 데이터에 제곱과 로그를 적용하여 새로운 컬럼을 생성하자.
부차적으로 새로운 특징을 생성한다고 하여 반드시 성능이 좋아지지는 않으며, 오히려 성능이 떨어질 수도 있다.
# 로그와 제곱 관련 변수만 추가
for col in X.columns:
X_added[col + '_squared'] = X[col] ** 2 # 제곱 추가
X_added[col + '_log'] = np.log(X[col]) # 로그 추가
기존의 데이터와 추가한 데이터의 차이를 확인하기 위해 'LinearRegression' 모델을 사용하여 'cross_val_score'의 수치를 확인한다.
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LinearRegression as LR
# 5겹 교차 검증 기반의 평가 수행
X_score = cross_val_score(LR(), X, Y, cv = 5, scoring = 'neg_mean_absolute_error').mean()
X_added_score = cross_val_score(LR(), X_added, Y, cv = 5, scoring = 'neg_mean_absolute_error').mean()
결과를 보면 특징을 추가 생성한 모델의 수치가 조금 더 좋아졌음을 알 수 있다.