特征缩放 xgbRegressor

数据挖掘 机器学习 决策树 xgboost 正常化 特征缩放
2021-10-06 12:44:31

例如,我在这个答案中读到: GBM 方法的性能是否受益于特征缩放?

缩放不会影响任何基于树的方法的性能,而不是 lightgbm、xgboost、catboost 甚至决策树。

当我进行特征缩放并比较没有和使用 minmax 缩放的 xgboost 模型的 rmse 时,我通过特征缩放得到了更好的 rmse 值。这是代码:

from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error as MSE
import math
from math import sqrt
import pandas as pd
import numpy as np
from xgboost import XGBRegressor
import xgboost as xgb

data = pd.read_excel(r'C:...path.xlsx')
X = data.drop(['colA'], axis=1)
y = data['colA']


scaler = MinMaxScaler()
scaler.fit(X)
minmax_scaled_X = scaler.transform(X)
minmax_scaled_X
y = np.array(y).reshape(-1, 1)
scaler.fit(y)
minmax_scaled_y = scaler.transform(y)

from sklearn.model_selection import train_test_split
xtrain, xtest, ytrain, ytest = train_test_split(minmax_scaled_X, minmax_scaled_y, test_size =0.3, random_state=0, shuffle=True)

xg_reg = xgb.XGBRegressor(objective ='reg:squarederror', colsample_bytree = 0.7, learning_rate = 0.05,
                max_depth = 8, min_child_weight = 4, n_estimators = 600, subsample = 0.7)

xg_reg.fit(xtrain,ytrain)
preds = xg_reg.predict(xtest)
rmse = sqrt(MSE(ytest, preds))
print(rmse)

最小最大缩放的结果是 0.003,而没有 rmse 的结果约为 3.8。我对简单的决策树做了同样的事情,并且通过 minmax 缩放总是得到更好的结果。

我的错误在哪里?在上面链接等其他帖子中,答案是关于使用树时缩放不好。我可以说,最小最大缩放确实对我的数据上的 rmse 有积极影响吗?

1个回答

你也在缩放 y,那么你当然会得到更低的错误。那个问题是关于缩放的X.

相同的模型在单元开启时会有非常不同的错误度量 y 改变了:如果我全部相乘 y 值除以 100,如果我将所有值除以 100,误差将大 100 倍 y 值除以 100,误差将除以 100。