【问题标题】:XGBoost prediction always returning the same value - why?XGBoost 预测总是返回相同的值 - 为什么?
【发布时间】:2018-09-24 06:03:16
【问题描述】:

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

https://files.fm/u/pm7n8zcm

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

训练或验证数据集中有什么明显的东西可以解释这种行为吗?

这是我设置超参数的示例代码 sn-p:

{
                    {"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 个索引:

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

【问题讨论】:

  • 您必须更具体地使用代码示例。 ML 模型不会返回相同的值,除非您在方式上做错了什么(超参数、服务或调用模型......)
  • @Guy 我添加了我在上面测试过的超参数。我尝试了不同的值,但似乎不断得到相同的行为。我什至不知道我应该关注哪些具体参数。
  • 我注意到的另一件事是我在 SageMaker 中使用的所有示例,我们使用“libsvm”作为 XGBoost 训练的数据类型,但我正在尝试使用“csv”。
  • @PaulFryer 我查看了您的数据,它非常稀疏。因此,建议您使用“libsvm”。不用担心,因为 xgboost 知道如何处理“libsvm”格式:)
  • @EranMoshe 有趣的是,我没有意识到一种格式比另一种更适用于稀疏数据。我将研究 libsvm 实现并使用您建议的超参数进行测试,并将跟进结果。在此感谢您的帮助。

标签: machine-learning xgboost amazon-sagemaker


【解决方案1】:

当我对时间序列进行分组时,某些频率会导致数据出现缺口。 我通过填充所有 NaN 解决了​​这个问题。

【讨论】:

    【解决方案2】:

    你有几件事错了。

    1. 使用{num_round“,”50“}具有如此小的eta {”eta“,”0.001“}将为您提供任何信息。
    2. {“max_depth”,“1000”} 1000是疯狂的! (默认值为6)

    建议:

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

    尝试此操作并报告您的输出

    【讨论】:

    • 我转换为libsvm并发布培训,验证和单个测试数据:files.fm/u/wnpexcmm#_ 987654321 @当我将测试数据发送到推理端点时,我从Sagemaker运行时服务中获取以下错误:“无法评估提供的有效载荷“。您是否在此处在此处提供的Test.txt文件示例查看了任何问题? span>
    • @ paulfryer无法看到任何问题。发布培训过程。每次迭代都有错误最小化吗?您现在对不同的事件有不同的预测吗? span>
    • 培训验证RMSE在0.48213开始,200次迭代后,它降至0.116052 span>
    • 我仍然与我发送的任何值获得相同的值。如果我发送超过10个值,它将炸掉说“无法评估提供的有效载荷”。如何增加允许值的数量?我需要发送百分之一。 span>
    • 尝试从您的训练中拍摄真正的“事件”,如第2行中的一个(他的目标值为0.00184)。来自行16的另一个事件(目标值为-0.00679)并预测这些事件。并告诉我你如何询问你的模型 span>
    猜你喜欢
    • 2018-12-23
    • 1970-01-01
    • 2016-02-01
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    相关资源
    最近更新 更多