python - 如何修复“DMatrix/Booster 尚未初始化或已被处理”错误
问题描述
我训练了一个 xgboost 模型并保存了它。然后我将它复制到我的另一个系统中,以通过以下代码预测结果。
Python 3.7、xgboost 0.8、康达
如果我从 csv 文件加载数据,相同的模型文件可以工作。
try:
d_input = xgb.DMatrix([].append(input_vector))
xgb_model = xgb.Booster({'nthread': 4})
xgb_model.load_model('./models/xgboost.model')
print("Load model successfully.")
print(xgb_model)
docs[i].weight = xgb_model.predict(d_input)
except Exception as fail_xgb:
print(fail_xgb)
错误消息是:
Load model successfully.
<xgboost.core.Booster object at 0x1a1e72d4a8>
b'[11:51:46] src/c_api/c_api.cc:817: DMatrix/Booster has not been intialized or has already been disposed.\n\nStack trace returned 5 entries:\n[bt] (0) 0 libxgboost.dylib 0x0000001a1dfe7181 dmlc::StackTrace() + 305\n[bt] (1) 1 libxgboost.dylib 0x0000001a1dfe6f0f dmlc::LogMessageFatal::~LogMessageFatal() + 47\n[bt] (2) 2 libxgboost.dylib 0x0000001a1e0007c3 XGDMatrixNumCol + 99\n[bt] (3) 3 libffi.6.dylib 0x000000010b6e6884 ffi_call_unix64 + 76\n[bt] (4) 4 ??? 0x0000700000e63d70 0x0 + 123145317399920\n\n'
解决方案
错误已修复。只需要改变
d_input = xgb.DMatrix([].append(input_vector))
至
d_input = xgb.DMatrix([[].append(input_vector)])
异常信息很奇怪。我被它弄糊涂了。
推荐阅读
- android - Gradle - Android - 添加版本号作为 versionNameSuffix 以调试 buildTypes
- python-3.x - 将两个 URL 路由到同一个函数
- android - 使用首选项库和材质组件主题时,首选项类别是可点击的
- apache-kafka - Kafka 代理遇到致命问题,错误日志如“在读取响应之前已断开与 X 的连接”
- c++ - 如何在 C++ 中使用 arctanx 函数修复此错误
- powershell - 在管理员用户下导入 PFX 有效,但在非管理员用户下不会。为什么?
- bash - 我怎样才能编写一个脚本,导致相当于获取文件?
- linux - 相同的脚本,相同的权限,一个挂一个不,如何?为什么?
- java - 为什么 println 在 for 循环中只打印一次并且值错误?
- angular - 如何对齐不同行上的 2 个 mat-slide-toggle 字段