如何导出Python训练的LGBM模型并在C++中加载实现预测
LGBM模型Python导出、C++加载实现方案
1. Python侧模型导出
不要使用Python专属的pickle序列化方式,该格式无法跨语言解析,直接调用LGBM原生的模型导出接口即可:
# 训练代码执行完成后,直接调用原生booster的save_model方法导出 clf.booster_.save_model('./lgbm_trained_model.txt') # 若追求更快的加载速度,也可导出为二进制格式 # clf.booster_.save_model('./lgbm_trained_model.bin')
导出的txt/bin文件是LGBM通用的模型结构文件,可被所有支持LGBM的语言环境加载。
2. C++侧模型加载与预测
首先需要提前在C++项目环境中配置好LightGBM的依赖:引入头文件目录,链接对应平台的lib_lightgbm静态/动态库。
加载&推理示例代码
#include <LightGBM/boosting.h> #include <vector> #include <cmath> int main() { LightGBM::Boosting* lgb_booster = nullptr; // 加载训练好的模型文件 int load_status = LightGBM::Boosting::CreateBoosting( "gbdt", "./lgbm_trained_model.txt", &lgb_booster ); if (load_status != 0 || lgb_booster == nullptr) { // 模型加载失败的异常处理逻辑 return -1; } // 构造输入样本,特征顺序必须和Python训练时的特征顺序完全一致 int feat_num = lgb_booster->GetNumFeature(); std::vector<double> input_sample(feat_num); // 这里填充你实际的样本特征值 // input_sample[0] = xxx; input_sample[1] = xxx; ... // 执行预测 std::vector<double> predict_result(1); // 二分类、回归任务输出长度为1,多分类对应类别数量 lgb_booster->PredictRaw(input_sample.data(), predict_result.data()); // 二分类任务可以手动sigmoid得到概率值 double positive_prob = 1.0 / (1.0 + exp(-predict_result[0])); // 资源释放 delete lgb_booster; return 0; }
编译注意事项
编译时需要指定LightGBM的头文件、库文件路径,示例g++编译指令如下:g++ your_predict_code.cpp -o lgb_predict -I/path/to/lightgbm/include -L/path/to/lightgbm/lib -l_lightgbm
内容的提问来源于stack exchange,提问作者alili
相关产品推荐
相关产品推荐

