Линейная регрессия дает худшие результаты после нормализации или стандартизации - PullRequest
0 голосов
/ 12 января 2019

Я выполняю линейную регрессию для этого набора данных: 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

Это особый случай, когда стандартизация не помогает, или я что-то не так делаю?

РЕДАКТИРОВАТЬ: Даже когда я пропускаю двоичные функции, большинство преобразователей дает худшие результаты.

1 Ответ

0 голосов
/ 12 января 2019

Ваш набор данных имеет много категориальных и порядковых особенностей. Вы должны позаботиться об этом сначала отдельно . Кроме того, похоже, что вы применяете нормализацию и к категориальным переменным, что совершенно неправильно.

Вот nice-link , который объясняет, как обрабатывать категориальные признаки для проблемы регрессии.

...