XGBoost预测总是返回相同的值 - 为什么?

时间:2018-04-13 20:09:02

标签: machine-learning xgboost amazon-sagemaker

我正在使用SageMaker内置的XGBoost算法以及以下培训和验证集:

https://files.fm/u/pm7n8zcm

当使用上述数据集运行训练中出现的预测模型时,总会产生完全相同的结果。

培训或验证数据集中是否有明显的东西可以解释这种行为?

以下是我正在设置超级参数的示例代码段:

{
                    {"max_depth", "1000"},
                    {"eta", "0.001"},
                    {"min_child_weight", "10"},
                    {"subsample", "0.7"},
                    {"silent", "0"},
                    {"objective", "reg:linear"},
                    {"num_round", "50"}
                }

以下是源代码:https://github.com/paulfryer/continuous-training/blob/master/ContinuousTraining/StateMachine/Retrain.cs#L326

我不清楚可能需要调整哪些超参数。

此屏幕截图显示我收到8个索引的结果: enter image description here

但是当我添加第11个时,它失败了。这让我相信我必须用零索引训练模型而不是删除它们。所以我接下来会尝试。 enter image description here 更新:包含零值的再培训似乎没有帮助。我每次都得到同样的价值。我注意到我不能向预测端点发送超过10个值,否则它将返回错误:“无法评估提供的有效负载”。所以此时使用libsvm格式只会增加更多问题。

2 个答案:

答案 0 :(得分:0)

你在那里遇到了一些问题。

  1. 使用{“num_round”,“50”}这么小的ETA {“eta”,“0.001”}将不会给你任何东西。
  2. {“max_depth”,“1000”} 1000是疯了! (默认值为6)
  3. 暗示:

        {"max_depth", "6"},
        {"eta", "0.05"},
        {"min_child_weight", "3"},
        {"subsample", "0.8"},
        {"silent", "0"},
        {"objective", "reg:linear"},
        {"num_round", "200"}
    

    尝试此操作并报告输出

答案 1 :(得分:-1)

当我对时间序列进行分组时,某些频率会在数据中造成间隙。 我通过填充所有NaN来解决了这个问题。