hak*_*kaa 4 python regression machine-learning xgboost
我正在使用 Python 和如下所示的数据集运行 XGBoost XGBRegressor:
click_id | manufacturer | category | delivery_time | price | revenue
1 |10 | 100 | 24 | 100 | 0
2 |10 | 100 | 24 | 100 | 0
3 |10 | 100 | 24 | 100 | 0
4 |10 | 100 | 24 | 100 | 120
5 |20 | 200 | 48 | 200 | 0
收入是因变量,其余变量是特征。
当我运行XGBRegressor并设置eval_metric为“美”(平均绝对误差)的培训和验证错误不断增加。训练误差如何增加?是否有任何情况(模型参数或奇怪数据点的任意组合)可能导致 xgboost 训练误差增加?
这是代码:
model = XGBRegressor(
learning_rate=0.1,
n_estimators=200,
max_depth=5,
min_child_weight=1,
gamma=0,
subsample=0.9,
colsample_bytree=0.9,
reg_alpha=10,
nthread=4)
model.fit(X_train, y_train,
eval_set=[(X_train, y_train), (X_test, y_test)], eval_metric='mae')
Run Code Online (Sandbox Code Playgroud)
当eval_metric设置为“ rmse ”时,训练误差按预期减少。
小智 7
您必须区分最小化objective和评估集上的错误(由 计算eval_metric)。这两者可能不同 - 这就是评估集中错误增加的原因。
您设置中的 XGBoost 试图最小化均方根误差 (RMSE),因为您使用objective="reg:linear"作为参数(默认参数为XGBRegressor)。事实上,XGBoost 甚至不支持作为objective函数的平均绝对误差 (MAE) 。有关详细信息,请查看XGBoost 目标参数。MAE 作为目标没有实现的一个原因可能是 XGBoost 在算法中需要非零二阶导数(MAE 不是这种情况)。
使用 XGRegressorstrain函数(请参阅此处),您可以objective通过定义误差函数和用于计算梯度和 hessian(一阶和二阶导数)的函数来定义您自己的函数。有关详细信息,请查看此示例。
我试图通过将 hessian 设置为一个恒定但很小的值来自己实现 MAE。不幸的是,它收敛得很慢。它仍然可以处理您的数据。
| 归档时间: |
|
| 查看次数: |
4781 次 |
| 最近记录: |