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 (将#修改为@)