Machine learning 标准化或标准化后,线性回归的结果更差
我正在对此数据集执行线性回归: archive.ics.uci.edu/ml/datasets/online+news+popularity 它包含各种类型的功能-速率、二进制、数字等 我试过使用scikit learn Normalizer、StandardScaler和PowerTransformer,但它们都导致了比不使用它们更糟糕的结果 我是这样使用它们的:Machine learning 标准化或标准化后,线性回归的结果更差,machine-learning,scikit-learn,linear-regression,Machine Learning,Scikit Learn,Linear Regression,我正在对此数据集执行线性回归: archive.ics.uci.edu/ml/datasets/online+news+popularity 它包含各种类型的功能-速率、二进制、数字等 我试过使用scikit learn Normalizer、StandardScaler和PowerTransformer,但它们都导致了比不使用它们更糟糕的结果 我是这样使用它们的: from sklearn.preprocessing import StandardScaler X = df.drop(colu
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_和_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
这只是一个特例,标准化没有帮助,还是我做错了什么
编辑:即使我不使用二进制特性,大多数转换器也会产生更糟糕的结果。您的数据集有许多分类和顺序特性。你应该分别处理好第一个。此外,您似乎也在对分类变量应用规范化,这是完全错误的
这里解释了如何处理回归问题的分类特征。
除了URL之外,哪些特征是分类的,我已经从X数据集中排除了?分类数据放在一边,考虑标准化二进制值。您会得到非二进制值,比如0.42,这是没有意义的。有20多个功能需要转换。我保留了二进制值的方式,但仍然得到了更糟糕的结果。这是多类问题,请尝试在ligistic回归()中使用mult-class选项。小建议,在应用任何模型之前,请先浏览数据集。因为对数据的理解有助于你适应好的模型。我观察到了完全相同的问题。我确信我的数据也是分类的。