2016-07-11 63 views
0

我使用XGBoost在R中訓練了我的模型,現在需要在C++中進行預測。我正在嘗試使用XGBoosterLoadModel函數在C++中加載模型文件。在C++中讀取XGBoost模型

我的代碼編譯得很好,但是在發現我的單元測試函數時失敗了。當我刪除呼叫功能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); 
     } 
    } 

回答

0

您需要首先分配您的手柄。此代碼適用於我:

BoosterHandle x; 
XGBoosterCreate(0,0,&x); 

int y = XGBoosterLoadModel(x,model_filename); 
+0

謝謝@amit。不幸的是,問題不僅僅是這個特定的功能。即使是沒有輸入的函數(如XGBGetLastError())也會導致問題!我相信這是由於xgboost和我的項目的不同運行時間! XGBoost需要靜態運行時間!但即使當我將項目運行時更改爲靜態時,問題仍然存在! –

+0

@VahidZadeh如果你發佈一個代碼來重現我可能會幫助的錯誤。我剛剛完成了一個使用xgboost的項目,在R中進行了培訓,使用C++進行了預測併成功克服了大量問題 – amit

+0

感謝您的回覆@amit。我很高興你已經解決了這些問題。我相信我也會面對他們。所以,我感謝您的幫助。 我在問題主體中的代碼基本上是我在測試文件中的所有代碼。我的項目中有其他文件,如果我從項目中刪除這個測試代碼就可以正常工作。我相信問題在於我如何包含(或構建)xgboost的目標庫。但我不確定。我遵循了安裝說明。添加庫文件到您的項目後,您有任何問題嗎? –