Streamlit中无法显示PyCaret Time Series的compare_model()指标表
解决PyCaret Time Series在Streamlit中展示compare_models性能指标表的问题
问题根源
setup()即使设置verbose=False,在Streamlit交互环境下仍可能默认输出配置结果表,这是PyCaret输出捕获逻辑在该环境下的兼容性问题。- 原代码中
st.write(best)仅输出了最优模型的对象信息,而非所有模型的性能指标对比表。
解决方案
修改代码,通过以下两步实现目标:
- 捕获
setup()的输出,避免其结果表自动显示 - 主动提取
compare_models()生成的性能指标表并展示
修改后的完整代码:
import streamlit as st from pycaret.time_series import TSForecastingExperiment import io from contextlib import redirect_stdout # 初始化时间序列实验 exp_auto = TSForecastingExperiment() # 捕获setup的输出,阻止其在Streamlit界面显示 setup_output = io.StringIO() with redirect_stdout(setup_output): exp_auto.setup( data=df_exog, target='qty', fh=fh, enforce_exogenous=False, numeric_imputation_target="ffill", numeric_imputation_exogenous="ffill", scale_target="minmax", scale_exogenous="minmax", fold_strategy="expanding", session_id=42, verbose=False ) if st.button("Run Time series models:"): # 运行多模型对比 best = exp_auto.compare_models(sort="mape", turbo=False, verbose=True) # 获取所有模型的性能指标对比表 compare_results = exp_auto.get_config("compare_results") # 在Streamlit中展示对比表 st.dataframe(compare_results) # 可选:展示最优模型的详细信息 st.subheader("最优模型参数") st.write(best)
关键说明
- 使用
redirect_stdout捕获setup()的控制台输出,彻底屏蔽其默认的结果表展示。 - 通过
exp_auto.get_config("compare_results")可直接提取compare_models()生成的完整性能指标DataFrame,再用st.dataframe()实现美观的表格展示。 - 保留
st.write(best)可同时展示最优模型的参数细节,可根据需求选择是否保留。
内容的提问来源于stack exchange,提问作者Sam.H
相关产品推荐
相关产品推荐

