我正在接觸所有的SO C++天才。c + +中的xgboost加載模型(python - > 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);
我得到完全不同的分數比加載完全相同的模型,並用它來預測(以蟒蛇)。無論是誰幫助我在C++和python中獲得一致的結果,都可能會進入天堂。順便說一句,我需要應用C++預測實時應用程序,否則我會使用不同的語言。