在c+中加载一个经过python训练的xgboost+;api,则预测结果为空
我正在python xgboost上训练一个13类分类,我的功能dim是3207,模型是在python xgboost训练后保存的,我检查了一些案例,结果是正常的。 但是当我在C++ XGBOST中加载模型并做预测时,结果是什么都没有。这是我的C++代码演示:在c+中加载一个经过python训练的xgboost+;api,则预测结果为空,python,c++,xgboost,Python,C++,Xgboost,我正在python xgboost上训练一个13类分类,我的功能dim是3207,模型是在python xgboost训练后保存的,我检查了一些案例,结果是正常的。 但是当我在C++ XGBOST中加载模型并做预测时,结果是什么都没有。这是我的C++代码演示: BoosterHandle booster_ = nullptr; std::cout << "befor:" << booster_ << std::endl; if
BoosterHandle booster_ = nullptr;
std::cout << "befor:" << booster_ << std::endl;
if (XGBoosterCreate(NULL, 0, &booster_) == 0 &&
XGBoosterLoadModel(booster_, model_path.c_str()) == 0) {
LOG(INFO) << "load xgboost model success !";
} else {
LOG(ERROR) << "load xgboost model error !";
booster_ = NULL;
}
// build Dmatrix data, two fake example, the expect predict label is 1, prob = 0.927.
float d_values[2][3207] = {0};
d_values[0][0] = 1.0;
d_values[0][8] = 1.0;
d_values[0][6] = 1.0;
d_values[0][14] = 1.0;
d_values[1][0] = 1.0;
d_values[1][8] = 1.0;
d_values[1][6] = 1.0;
d_values[1][14] = 1.0;
std::cout <<"predict:" << booster_ << std::endl;
int r = XGDMatrixCreateFromMat(&d_values[0][0], 2, 3207, 0.0, &data);
if (r != 0) {
LOG(ERROR) << "build DMatrix failed!!";
}
std::cout <<"r=" << r << std::endl;
const float* out;
uint64_t len;
auto ret = XGBoosterPredict(booster_, data, 0, 0, &len, &out);
if (ret < 0) {
LOG(ERROR) << "xgboost inference error !";
return -1;
}
std::cout << "len=" << len << std::endl;
XGDMatrixFree(data);
return 0;
此演示中的常量步骤,返回状态代码等于0,但最终LeN=0,有什么问题?
< P>我找到原因,我的Python XGBOOST是训练AcANDA,XGBOOST不同于C++ XGBOST源代码版本。 r=0
len=0