You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MLFlow加载模型后无法调用fit/predict方法问题求助

解决MLFlow加载模型后无法调用fit/predict的问题

Hey there! Let's get this sorted out for you. The issue you're hitting comes down to understanding the difference between MLflow's generic PyFuncModel and the original scikit-learn model you logged.

为什么会出现AttributeError?

When you use mlflow.pyfunc.load_model(), you're loading a generic wrapper around your scikit-learn model (the PyFuncModel). This wrapper is designed to provide a consistent inference interface across different ML frameworks, but it doesn't expose the original model's methods like fit() or the scikit-learn-specific predict() directly. Your output even confirms this: the flavor is mlflow.sklearn, meaning your logged model is a scikit-learn PLS model—you just loaded it the wrong way if you want to use its native methods.

解决预测问题

You have two options here, depending on your needs:

选项1:加载原始scikit-learn模型(推荐,如果你需要原生方法)

Use mlflow.sklearn.load_model() instead of the pyfunc loader. This gives you back the actual scikit-learn PLS model, so you can call predict() just like you would normally:

# 加载原始sklearn模型
PLS_model = mlflow.sklearn.load_model("runs:/FFFFF!@#!@#@!#!/logged_model", suppress_warnings=True)
# 用新数据预测
predictions = PLS_model.predict(new_data)

选项2:使用PyFuncModel的通用预测方法

If you stick with the PyFuncModel, it does support prediction—but you need to pass a pandas DataFrame (not raw arrays) as input. Here's how:

import pandas as pd

# 确保新数据是DataFrame格式
new_data_df = pd.DataFrame(new_data)
# 调用PyFuncModel的predict方法
predictions = PLS_model.predict(new_data_df)

Note that this only works for inference—you still can't call fit() on a PyFuncModel.

解决重新拟合(Retrain)的问题

If you want to refit the model on new data, you must load the original scikit-learn model using mlflow.sklearn.load_model(). The PyFuncModel is strictly for inference, not training. Here's the step-by-step:

# 加载原始sklearn模型
PLS_model = mlflow.sklearn.load_model("runs:/FFFFF!@#!@#@!#!/logged_model", suppress_warnings=True)
# 用新的特征和标签重新拟合
PLS_model.fit(new_X_features, new_y_labels)
# 可选:保存重新训练后的模型
mlflow.sklearn.log_model(PLS_model, artifact_path="retrained_pls_model")

关键总结

  • Use mlflow.sklearn.load_model() when you need access to the original model's full set of methods (like fit() and native predict()).
  • Use mlflow.pyfunc.load_model() only when you need a framework-agnostic way to run predictions (e.g., for cross-tool deployments), but remember it doesn't support training operations.

内容的提问来源于stack exchange,提问作者bioinformatics_student

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 16:32:36