线性回归在标准化或标准化后给出更差的结果



我正在这个数据集上执行线性回归:archive.ics.uci.edu/ml/datasets/online+news+popularity

它包含各种类型的功能-速率、二进制、数字等。

我试过使用scikit学习Normalizer、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

使用Normalizer后的线性调整:MAE=1979.8525218964242

使用StandardScaler后的线性调整:MAE=2915.024521207241

使用PowerScaler后的线性调整:MAE=1663.7148884463259

这只是一个特殊情况,标准化没有帮助,还是我做错了什么?

编辑:即使我忽略了二进制功能,大多数转换器也会给出更糟糕的结果。

您的数据集具有许多分类和有序特征。您应该首先单独处理。此外,你似乎也在对分类变量应用规范化,这是完全错误的。

这里有一个很好的链接,它解释了如何处理回归问题的分类特征。

相关内容

  • 没有找到相关文章

最新更新