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

Machine learning XGBoost预测总是返回相同的值-为什么?,machine-learning,xgboost,amazon-sagemaker,Machine Learning,Xgboost,Amazon Sagemaker,我正在使用SageMaker的内置XGBoost算法和以下训练和验证集: 当使用上述数据集运行训练得出的预测模型时,总是产生完全相同的结果 在培训或验证数据集中是否有明显的东西可以解释这种行为 下面是一个示例代码段,我在其中设置超参数: { {"max_depth", "1000"}, {"eta", "0.001"}, {"min_child_weight", "10"},

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

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

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

下面是一个示例代码段,我在其中设置超参数:

{
                    {"max_depth", "1000"},
                    {"eta", "0.001"},
                    {"min_child_weight", "10"},
                    {"subsample", "0.7"},
                    {"silent", "0"},
                    {"objective", "reg:linear"},
                    {"num_round", "50"}
                }
以下是源代码:

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

此屏幕截图显示我得到了一个包含8个索引的结果:

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

您有一些错误

  • 使用{“num_round”,“50”}和这么小的ETA{“ETA”,“0.001”}将不会给您带来任何好处。
  • {“最大深度”,“1000”}1000简直是疯了!(默认值为6)
  • 建议:

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

    试着这样做并报告您的输出

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

    您必须更具体地使用代码示例。ML模型不会返回相同的值,除非您在方法上出错(超参数、服务或调用模型…)@Guy我添加了我在上面测试过的超参数。我尝试了不同的价值观,但似乎总是得到相同的行为。我甚至没有直觉知道我应该关注哪些具体参数。我注意到的另一件事是我使用SageMaker us的所有示例“libsvm”作为XGBoost培训的数据类型,但我尝试使用“csv”。@PaulFryer我查看了您的数据,数据非常稀疏。因此,建议您使用“libsvm”。不用担心,因为xgboost知道如何处理“libsvm”格式:)@EranMoshe有趣的是,我没有意识到一种格式比另一种格式更适用于稀疏数据。我将使用您建议的hypterparameters进行libsvm实现和测试,并将跟踪结果。感谢您在这里的帮助。我转换为libsvm并在这里发布了培训、验证和单个测试数据:当我将测试数据发送到推断端点时,SageMaker运行时服务出现以下错误:“无法评估提供的有效负载”。你看到我在这里的链接中提供的test.txt文件示例有任何问题吗?@PaulFryer看不到任何问题。没有。发布培训过程。每次迭代时错误是否最小化?你现在对不同的事件有不同的预测了吗?训练验证RMSE从0.48213开始,经过200次迭代,它下降到了0.116052,我仍然得到了与我发送的任何值相同的值。此外,如果我发送超过10个值,它会爆炸,说“无法评估提供的有效负载”。如何增加允许值的数量?我需要发送数百个。试着从你的训练中获取一个真实的“事件”,如第2行中的事件(他的目标值为0.00184)。以及第16行中的另一个事件(其中目标值为-0.00679)并预测这些事件。让我看看你是怎么问你的模特的