在Python中使用XGboost_Regressor会产生很好的训练效果,但预测效果很差

时间:2018-12-11 20:01:19

标签: python machine-learning regression xgboost

我一直在尝试在python中使用XGBregressor。这是迄今为止我使用过的最好的机器学习技术之一,但是在某些数据集中,我对R平方的训练非常高,但在预测或测试方面却表现不佳。我尝试使用伽玛,深度和二次采样来降低模型的复杂性,或确保模型不过度拟合,但训练和测试之间仍然存在巨大差异。我想知道是否有人可以帮助我:

下面是我正在使用的代码:

fred.log.2

以下是培训与测试中的表现:

培训: MAE:0.10 R ^ 2:0.99

测试: MAE:1.47 R ^ 2:-0.89

2 个答案:

答案 0 :(得分:4)

XGBoost倾向于使数据过拟合,因此减少n_estimator和n_depth并使用特定的迭代,其中火车损失和val损失之间没有太大差异。

答案 1 :(得分:1)

这里的问题是过度拟合。您需要调整一些参数(Source)。

  
      
  • 如果数据大小很大(大约10万),请将n_estimators设置为80-200,如果中等大小则将n_estimators设置为80-1200
  •   
  • learning_rate:介于0.1和0.01之间
  •   
  • 子样本:介于0.8和1
  •   
  • colsample_bytree:每棵树使用的列数。如果特征向量或列很多,则值为0.3到0.8;如果特征向量或列很少,则值为0.8到1。
  •   
  • gamma:0、1或5
  •   

由于max_depth已经很低,因此可以尝试调整以上参数。另外,如果您的数据集非常小,则预期训练和测试会有所不同。您需要检查训练和测试数据中是否存在良好的数据分割。例如,在测试数据中,输出列中“是”和“否”的百分比是否几乎相等。

您需要尝试各种选择。当然,xgboost和随机森林将为数据量较少提供过拟合模型。您可以尝试:-

1。朴素的贝叶斯。它适用于较少的数据集,但它考虑了所有特征向量的相同。

逻辑回归-尝试调整正则化参数,并查看召回得分最高。这其中的其他内容是体重=平衡。

具有交叉验证的Logistic回归-这同样适用于小数据。我之前也告诉过的最后一件事,请检查您的数据,看看它是否偏向一种结果。就像在70个案例中有50个案例的结果是“是”一样,它存在很大的偏差,您可能无法获得很高的准确性。