LightGBM-在joblib.load()之后出现估计器未拟合错误



I拟合LGBMRegressor((模型,甚至预测一些值。我决定保存它(当然是在合适之后(以便以后使用,但当我尝试加载模型时,我得到了这个异常:

Estimator not fitted, call fit before exploiting the model.

我尝试用3种不同的方式保存:

  • dump(model, 'model.txt')
  • dump(model, 'model.pkl')
  • dump(model, 'model.joblib')

然后我关闭IDE并尝试像这样加载:

  • model = joblib.load('model.allExtensionsMentionedBefore')

当我print(model)时,我可以看到整个模型以及它的超参数:

LGBMRegressor(colsample_bytree=0.9596645565436184,
learning_rate=0.025825537313443326, min_child_samples=72,
num_leaves=32, random_state=0, silent=True,
subsample=0.9311181768429686, subsample_freq=1)

然而,当我尝试model.predict(X)时,我会得到一个例外,说它不合适。

我做错了什么?

附言:我能够使用sklearn MLPRegressor()来完成这个精确的过程(保存和加载(,它运行得很好。

lightgbm支持使用joblib保存和加载模型。

这里有一个最小的、可重复的例子来演示如何做到这一点。我使用Python 3.3.8、lightgbm==3.3.1joblib==1.0.1numpy==1.21.0scikit-learn==0.24.1测试了这段代码。

在新的Python会话中:

import joblib
import lightgbm as lgb
from sklearn.datasets import make_regression
X, y = make_regression(n_samples=10_000, n_features=10)
reg = lgb.LGBMRegressor(
n_estimators=10,
verbose=-1,
)
reg.fit(X, y)
joblib.dump(reg, 'lgb.pkl')

然后,在从同一工作目录运行的单独Python会话中:

import joblib
from sklearn.datasets import make_regression
X, y = make_regression(n_samples=1_000, n_features=10)
reg = joblib.load('lgb.pkl')
preds = reg.predict(X)

我使用lightgbm==3.0.0(从2020年8月开始(尝试了同样的代码,效果也很好。

我也遇到了类似的问题。在我的案例中,问题源于我将模型保存在一个conda环境中,但在另一个环境中加载。lightgbm中的版本差异导致了问题。如果您使用的是环境,请确保从同一环境中保存和加载模型。

最新更新