Я выполняю линейную регрессию для этого набора данных:
archive.ics.uci.edu/ml/datasets/online+news+popularity
Содержит различные типы функций - скорости, двоичные числа, числа и т. Д.
Я пытался использовать нормализатор scikit-learn, StandardScaler и PowerTransformer, но все это привело к худшим результатам, чем без их использования.
Я использую их так:
from sklearn.preprocessing import StandardScaler
X = df.drop(columns=['url', 'shares'])
Y = df['shares']
transformer = StandardScaler().fit(X)
X_scaled = transformer.transform(X)
X_scaled = pd.DataFrame(X_scaled, columns=X.columns)
perform_linear_and_ridge_regression(X=X_scaled, Y=Y)
Функция в последней строке perform_linear_and_ridge_regression()
точно верна и использует GridSearchCV для определения наилучших гиперпараметров.
Просто чтобы убедиться, что я также включил функцию:
def perform_linear_and_ridge_regression(X, Y):
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.25, random_state=10)
lin_reg_parameters = { 'fit_intercept': [True, False] }
lin_reg = GridSearchCV(LinearRegression(), lin_reg_parameters, cv=5)
lin_reg.fit(X=X_train, y=Y_train)
Y_pred = lin_reg.predict(X_test)
print('Linear regression MAE =', median_absolute_error(Y_test, Y_pred))
Результаты удивительны, поскольку все они дают худшие результаты:
Линейная рег. по исходным данным: MAE = 1620.510555135375
Линейная рег. после использования нормализатора: MAE = 1979,8525218964242
Линейная рег. после использования StandardScaler: MAE = 2915.024521207241
Линейная рег. после использования PowerScaler: MAE = 1663.7148884463259
Это особый случай, когда стандартизация не помогает, или я что-то не так делаю?
РЕДАКТИРОВАТЬ: Даже когда я пропускаю двоичные функции, большинство преобразователей дает худшие результаты.