【问题标题】:Reading XGBoost Model in C++在 C++ 中读取 XGBoost 模型
【发布时间】:2016-07-11 18:50:14
【问题描述】:

我使用 XGBoost 在 R 中训练了我的模型,现在需要在 C++ 中进行预测。我正在尝试使用 XGBoosterLoadModel 函数在 C++ 中加载模型文件。

我的代码可以正常编译,但无法发现我的单元测试函数。当我删除对函数 XGBoosterLoadModel 的调用时,一切正常,我可以看到我的单元测试。

这是我的单元测试文件中的内容。任何关于我所缺少的线索将不胜感激:

    #include <xgboost/c_api.h>
    #include "stdafx.h"
    #include <google/gtest/gtest.h>

    namespace UnitTests
    {
        TEST(XGBoost, HysteresisPeakDetection_WithEmptyInput_ReturnsFalse)
        {
            const char *fname;
            BoosterHandle handle;

            int a = XGBoosterLoadModel(handle, fname);
        }
    }

【问题讨论】:

    标签: c++ unit-testing visual-studio-2013 xgboost


    【解决方案1】:

    您需要先分配句柄。这段代码对我有用:

    BoosterHandle x;
    XGBoosterCreate(0,0,&x);
    
    int y = XGBoosterLoadModel(x,model_filename);
    

    【讨论】:

    • 谢谢@amit。不幸的是,问题不仅仅是这个特定的功能。即使是没有输入的函数(如 XGBGetLastError())也会导致问题!我相信这是由于 xgboost 和我的项目的运行时不同! XGBoost 需要静态运行时!但即使我将项目运行时更改为静态,问题仍然存在!
    • @VahidZadeh 如果您发布一个重现错误的代码,我可能会提供帮助。我刚刚使用 xgboost 完成了一个项目,使用 R 进行训练,使用 C++ 进行预测,并成功克服了许多问题
    • 感谢@amit 的回复。我很高兴你已经克服了这些问题。我相信我也会面对他们。所以,我感谢你提供帮助。我在问题正文中的代码基本上是我在测试文件中的所有代码。如果我从项目中删除此测试代码,我的项目还有其他文件可以正常工作。我相信问题在于我如何包含(或构建?)xgboost 的目标库。但我不确定。我按照安装说明进行操作。将包含库文件添加到项目后是否有任何问题?
    • 嗨@VahidZadeh:我是C++新手。我已经能够构建 libxgboost.a 和 libxgboost.so 文件。没有头文件,如何将静态库集成到我的c++项目中?我正在使用 netbeans
    • @vodkhang 这也是我的问题。我不确定包含它们的正确方法是什么。您可能想研究将它们包含在 cmake 文件中!
    猜你喜欢
    • 1970-01-01
    • 2019-03-02
    • 2020-01-05
    • 2021-05-12
    • 2019-03-03
    • 2021-09-16
    • 1970-01-01
    • 2017-01-13
    • 2020-04-08
    相关资源
    最近更新 更多