如何解决LightGBM在任何输入C ++上产生相同的概率
我已经用python在具有5个类的数据集(分类问题)上训练了LGBM模型(gbdt),并且能够对测试集进行正确的推断,并将该模型加载到python脚本中。 现在,我需要在C ++程序中使用此模型。为此,我导出了该模型,并在C ++中添加了该模型以进行推理。问题在于,在C ++中,输出概率始终相同,因此我无法选择获胜者类别(每个类别的结果始终为0.2)。
要保存模型,我尝试了两种方法。 首先,我尝试将模型保存为字符串:
s = lgb_model.model_to_string(num_iteration=114)
f = open('model_out.txt','w')
f.write(s)
f.close()
直接使用保存模型方法第二:
lgb_model.save_model('model_out.txt')
要在C ++中加载模型,我已经使用了它,没有错误:
int ret = LGBM_BoosterLoadModelFromString(model_string,&num_iter,&booster_handle);
为了进行推断,我准备了一个输入缓冲区,并将其传递给了此函数:
int res = LGBM_BoosterPredictForMat(booster_handle,input_data,C_API_DTYPE_FLOAT64,n_row,n_cols,1,C_API_PREDICT_NORMAL,-1,"",&out_len,out_result);
我获得了一个包含5行的矩阵,每个样本都有一个列,如下所示:
0.2
0.2
0.2
0.2
0.2
我试图做出许多更改,但结果始终是相同的(随机输入,不同参数等)。此外,我已经检查了加载的模型,尝试使用此函数将其转储,结果似乎是正确的:
LGBM_BoosterDumpModel(booster_handle,C_API_FEATURE_IMPORTANCE_SPLIT,out_string);
我在哪里错了?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。