xgboost 回归预测相同的值
xgboost regression predict same value
我是机器学习的新手,xgboost
我正在解决回归问题。
我的目标值很小(例如-1.23e-12)。
我正在使用线性回归和 xgboost
回归量,
但是 xgboost
总是预测相同的值,例如:
[1.32620335e-05 1.32620335e-05 ... 1.32620335e-05].
我试图调整 xgboost.regressor 中的一些参数,但它也预测了相同的值。
我看过Scaling of target causes Scikit-learn SVM regression to break down
,所以我尝试将我的目标值缩放到 likes(data.target = data.target*(10**12))
, 它解决了这个问题。但是我不确定这样缩放我的目标值是否合理,我不知道 xgboost 中的这个问题是否与 SVR 相同?
.
这是我的数据的目标值:
count 2.800010e+05
mean -1.722068e-12
std 6.219815e-13
min -4.970697e-12
25% -1.965893e-12
50% -1.490800e-12
75% -1.269998e-12
max -1.111604e-12
还有我的部分代码:
X = df[feature].values
y = df[target].values *(10**(12))
X_train, X_test, y_train, y_test = train_test_split(X, y)
xgb = xgboost.XGBRegressor()
LR = linear_model.LinearRegression()
xgb.fit(X_train,y_train)
LR.fit(X_train,y_train)
xgb_predicted = xgb.predict(X_test)
LR_predicted = LR.predict(X_test)
print('xgb predicted:',xgb_predicted[0:5])
print('LR predicted:',LR_predicted[0:5])
print('ground truth:',y_test[0:5])
输出:
xgb predicted: [-1.5407631 -1.49756 -1.9647646 -2.7702322 -2.5296502]
LR predicted: [-1.60908805 -1.51145989 -1.71565321 -2.25043287 -1.65725868]
ground truth: [-1.6572993 -1.59879922 -2.39709641 -2.26119817 -2.01300088]
并且输出带有y = df[target].values
(即没有缩放目标值)
xgb predicted: [1.32620335e-05 1.32620335e-05 1.32620335e-05 1.32620335e-05
1.32620335e-05]
LR predicted: [-1.60908805e-12 -1.51145989e-12 -1.71565321e-12 -2.25043287e-12
-1.65725868e-12]
ground truth: [-1.65729930e-12 -1.59879922e-12 -2.39709641e-12 -2.26119817e-12
-2.01300088e-12]
让我们尝试更简单的方法。我怀疑如果您尝试使 DecisionTreeRegressor (sklearn) 适合您的问题(不缩放),您可能会看到类似的行为。
此外,您的 (xgboost) 树中的节点很可能根本没有分裂,请执行 xgb.get_booster().get_dump()
查看
现在,试试这个:运行 多个实验,缩放您的 y,使每个 y 的阶数为 1e-1,然后下一个实验缩放,使 y 的阶数为 1e-2,依此类推。您会看到决策树停止围绕某些顺序分裂。我相信它与最小杂质值有关,例如,sklearn 决策树值在这里 https://github.com/scikit-learn/scikit-learn/blob/ed5e127b/sklearn/tree/tree.py#L285(大约 1e-7)
这是我目前最好的猜测。如果有人可以添加或验证这一点,那么我将很乐意学习:)
我是机器学习的新手,xgboost
我正在解决回归问题。
我的目标值很小(例如-1.23e-12)。
我正在使用线性回归和 xgboost
回归量,
但是 xgboost
总是预测相同的值,例如:
[1.32620335e-05 1.32620335e-05 ... 1.32620335e-05].
我试图调整 xgboost.regressor 中的一些参数,但它也预测了相同的值。
我看过Scaling of target causes Scikit-learn SVM regression to break down ,所以我尝试将我的目标值缩放到 likes(data.target = data.target*(10**12)) , 它解决了这个问题。但是我不确定这样缩放我的目标值是否合理,我不知道 xgboost 中的这个问题是否与 SVR 相同? .
这是我的数据的目标值:
count 2.800010e+05 mean -1.722068e-12 std 6.219815e-13 min -4.970697e-12 25% -1.965893e-12 50% -1.490800e-12 75% -1.269998e-12 max -1.111604e-12
还有我的部分代码:
X = df[feature].values
y = df[target].values *(10**(12))
X_train, X_test, y_train, y_test = train_test_split(X, y)
xgb = xgboost.XGBRegressor()
LR = linear_model.LinearRegression()
xgb.fit(X_train,y_train)
LR.fit(X_train,y_train)
xgb_predicted = xgb.predict(X_test)
LR_predicted = LR.predict(X_test)
print('xgb predicted:',xgb_predicted[0:5])
print('LR predicted:',LR_predicted[0:5])
print('ground truth:',y_test[0:5])
输出:
xgb predicted: [-1.5407631 -1.49756 -1.9647646 -2.7702322 -2.5296502] LR predicted: [-1.60908805 -1.51145989 -1.71565321 -2.25043287 -1.65725868] ground truth: [-1.6572993 -1.59879922 -2.39709641 -2.26119817 -2.01300088]
并且输出带有y = df[target].values
(即没有缩放目标值)
xgb predicted: [1.32620335e-05 1.32620335e-05 1.32620335e-05 1.32620335e-05 1.32620335e-05] LR predicted: [-1.60908805e-12 -1.51145989e-12 -1.71565321e-12 -2.25043287e-12 -1.65725868e-12] ground truth: [-1.65729930e-12 -1.59879922e-12 -2.39709641e-12 -2.26119817e-12 -2.01300088e-12]
让我们尝试更简单的方法。我怀疑如果您尝试使 DecisionTreeRegressor (sklearn) 适合您的问题(不缩放),您可能会看到类似的行为。
此外,您的 (xgboost) 树中的节点很可能根本没有分裂,请执行 xgb.get_booster().get_dump()
现在,试试这个:运行 多个实验,缩放您的 y,使每个 y 的阶数为 1e-1,然后下一个实验缩放,使 y 的阶数为 1e-2,依此类推。您会看到决策树停止围绕某些顺序分裂。我相信它与最小杂质值有关,例如,sklearn 决策树值在这里 https://github.com/scikit-learn/scikit-learn/blob/ed5e127b/sklearn/tree/tree.py#L285(大约 1e-7)
这是我目前最好的猜测。如果有人可以添加或验证这一点,那么我将很乐意学习:)