【问题标题】:How to export / save a fitted model after cross_validate and use it later on pandas如何在 cross_validate 之后导出/保存拟合模型并稍后在 pandas 上使用
【发布时间】:2019-11-16 03:52:33
【问题描述】:

我正在使用 cross_validate sklearn-function 来拟合 RandomForest 分类器。 我想知道是否有办法导出拟合模型以保存它们并导入以预测新数据。

我尝试使用return_estimator=True 选项

[return_estimator : boolean, default False 是否返回 适合每个拆分的估计器。]

然后joblib 保存估算器。但是当我加载保存的模型并尝试将其用于predict 时,出现错误,(见下文)。

rfc = RandomForestClassifier(n_estimators=100)
cv_results = cross_validate(rfc, X_train_std ,Y_train, scoring=scoring, cv=5, return_estimator=True)
rfc_fit = cv_results['estimator']

#save estimated model
savedir = ('C://Users//.......//src//US//') 

from sklearn.externals import joblib
filename = os.path.join(savedir, 'final_model.joblib')
joblib.dump(rfc_fit,filename)

rfc_model2 = joblib.load(filename)
bla = rfc_model2.predict(X_test_std)

AttributeError: 'tuple' object has no attribute 'predict'

我想我对return_estimator 的真正回馈感到困惑.. 看起来他们不是合适的模型。那么,有没有办法提取交叉验证过程中拟合的模型以便重新使用它们?

谢谢

【问题讨论】:

  • 如果我的回答有帮助,请告诉我
  • 谢谢!好像没问题!

标签: python pandas scikit-learn random-forest


【解决方案1】:

return_estimator 返回所有拟合模型的“元组”。

要解决这个问题,您需要选择所需的模型,保存,加载,然后进行预测。

示例:

from sklearn import datasets, linear_model
from sklearn.model_selection import cross_validate

diabetes = datasets.load_diabetes()
X = diabetes.data[:150]
y = diabetes.target[:150]
lasso = linear_model.Lasso()

cv_results = cross_validate(lasso, X, y, cv=3, return_estimator=True)
rfc_fit = cv_results['estimator']
print(rfc_fit)

上面打印了3个模型:

(套索(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=1000,
normalize=False,肯定=False,预计算=False,random_state=None, 选择='循环', tol=0.0001, warm_start=False), Lasso(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=1000, normalize=False, 正=假,预计算=假,随机状态=无,
选择='循环', tol=0.0001, warm_start=False), Lasso(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=1000, normalize=False, 正=假,预计算=假,随机状态=无,
selection='循环', tol=0.0001, warm_start=False))

要查看其中包含多少模型,请执行以下操作:

print(len(rfc_fit))
# 3

假设您要选择第一个模型:

# select the first model
rfc_fit = rfc_fit[0]

# save it
from sklearn.externals import joblib
filename = os.path.join(savedir, 'final_model.joblib')
joblib.dump(rfc_fit,filename)

# load it
rfc_model2 = joblib.load(filename)

Predict 现在可以正常工作了:

predicted = rfc_model2.predict(X)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    相关资源
    最近更新 更多