• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

5.9 bike sharing demand에서 standardScaler

23.05.28 15:55 작성 23.05.28 15:59 수정 조회수 258

0

bike sharing demand예제에서 LinearRegression모델이 다른 모델에 비해 RMSLE가 큰 것이 Scaler문제는 아닌가 해서 StandardScaler를 다음과 같이 적용시켜 봤습니다만, 성능이 좋아지질 않는 것 같습니다.

X_train, X_test, y_train, y_test = train_test_split(X_features_ohe, y_target_log, test_size = 0.3, random_state = 0)
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
def get_model_predict(model, X_train, X_test, y_train, y_test, is_expm1 = False, sts = False):
    if sts:
        ct = ColumnTransformer([
            ('standard', StandardScaler(), ['temp', 'atemp', 'humidity', 'windspeed'])
        ], remainder = 'passthrough')
        model = Pipeline([
            ('ct', ct), 
            ('model', model)
        ])
    model.fit(X_train, y_train)
    pred = model.predict(X_test)
    if is_expm1:
        y_test = np.expm1(y_test)
        pred = np.expm1(pred)
    print(model.__class__.__name__)
    evaluate_regr(y_test, pred)

선형 모델임에도 불구하고 이게 통하지 않는것이 좀 의문입니다. 게다가 다른 모델에서는 성능이 나빠지기도 합니다.

그리고 StandardScaler를 적용하기 전과 후의 coef_가 많이 다릅니다. 다음 그래프는 StandardScaler를 적용했을 때 LinearRegression의 coef_입니다.

feature중요도 측면에서, StandardScaler를 적용한 후의 coef_가 더 믿을만 한지, 아니면 적용하지 않은게 더 믿을만 하다고 봐야하는지 궁금합니다.

그래프 출력하는 코드는 다음과 같습니다.

# X_features_ohe_sts 
ct = ColumnTransformer([
            ('standard', StandardScaler(), ['temp', 'atemp', 'humidity', 'windspeed'])
        ], remainder = 'passthrough')
model = Pipeline([
    ('ct', ct), 
    ('model', LinearRegression())
])
# model = LinearRegression()
model.fit(X_train, y_train)
series = pd.Series(np.abs(model[-1].coef_), index = X_features_ohe.columns)
series = series.sort_values(ascending = False)[:20]
sns.barplot(series.values, series.index)

답변 1

답변을 작성해보세요.

0

안녕하십니까,

강의에서도 얼핏 말씀드리지만, 선형 모델에서 StandardScaler를 적용한다고, 무조건 성능이 좋아지지는 않습니다.

경험적으로 말씀하신대로 성능이 약간 떨어지는 경우도 있습니다. 충분한 학습 데이터와 테스트 데이터를 적용해 보면 성능이 약간 떨어지는 경우는 없을 것 같습니다만 정확한 원인은 저도 잘 모르겠습니다.

원칙적으로는 선형 모델에 StandardScaler이든 MinMaxScaler이든 데이터에 적용을 하는 것이 좋습니다. 하지만 적용하지 않고 모델 성능을 한번 판정해 보는 것도 방법입니다.

선형 모델의 경우 StandardScaler, MinMaxScaler, Scaler 미 적용등의 경우를 각각 적용해서 최적 모델을 판단하는 것도 방법입니다.

감사합니다.