gpt4 book ai didi

python - c++ 中的 xgboost 负载模型(python -> c++ 预测分数不匹配)

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:34 24 4
gpt4 key购买 nike

我正在联系所有 SO C++ 天才。

我已经在 python 中训练(并成功测试)了一个 xgboost 模型,如下所示:

dtrain 
=xgb.DMatrix(np.asmatrix(X_train),label=np.asarray(y_train,dtype=np.int), feature_names=feat_names)

optimal_model = xgb.train(plst, dtrain)

dtest = xgb.DMatrix(np.asmatrix(X_test),feature_names=feat_names)

optimal_model.save_model('sigdet.model')

我关注了 XgBoost 上的一篇文章 ( see link ),其中解释了在 C++ 中加载和应用预测的正确方法:

// Load Model
g_learner = std::make_unique<Learner>(Learner::Create({}));
std::unique_ptr<dmlc::Stream> fi(
dmlc::Stream::Create(filename, "r"));
g_learner->Load(fi.get());

// Predict
DMatrixHandle h_test;
XGDMatrixCreateFromMat((float *)features, 1, numFeatures , -999.9f, &h_test);
xgboost::bst_ulong out_len;


std::vector<float> preds;
g_learner->Predict((DMatrix*)h_test,true, &preds);

我的问题 (1): 我需要创建一个 DMatrix*,但是我只有一个 DMatrixHandle。如何使用我的数据正确创建 DMatrix?

我的问题(2):当我尝试以下预测方法时:

DMatrixHandle h_test;
XGDMatrixCreateFromMat((float *)features, 1, numFeatures , -999.9f, &h_test);
xgboost::bst_ulong out_len;


int res = XGBoosterPredict(g_modelHandle, h_test, 1, 0, &out_len, (const float**)&scores);

与加载完全相同的模型并将其用于预测(在 python 中)相比,我得到的分数完全不同。

谁能帮助我在 c++ 和 python 之间取得一致的结果,他可能会上天堂。顺便说一句,我需要在 C++ 中为实时应用程序应用预测,否则我会使用不同的语言。

最佳答案

要获取 DMatrix,您可以这样做:

g_learner->Predict(static_cast<std::shared_ptr<xgboost::DMatrix>*>(h_test)->get(), true, &pred);

对于问题(2),我没有答案。这实际上是我遇到的同样问题。我在 python 中有一个 XGBRegression,我在 C++ 中获得了具有相同功能的不同结果。

关于python - c++ 中的 xgboost 负载模型(python -> c++ 预测分数不匹配),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39335051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com