如何隐藏拟合ARIMA/SARIMAX模型时的L-BFGS-B运行输出?
解决statsmodels最新版本ARIMA/SARIMAX拟合时L-BFGS-B日志输出过多的问题
问题背景
使用最新版statsmodels的ARIMA(statsmodels.tsa.arima.model.ARIMA)和SARIMAX(statsmodels.tsa.statespace.sarimax.SARIMAX)处理大型数据集时,迭代拟合过程会反复输出L-BFGS-B的运行日志,占用大量屏幕空间。此前尝试使用model.fit(iprint=-1)和model.fit(disp=-1)均报错,因为这两个参数在新版本中已被弃用。
解决方案
在最新版statsmodels中,需通过fit()方法的method_kwargs参数,将优化器控制参数传递给底层的L-BFGS-B优化器,具体操作如下:
方法1:通过method_kwargs关闭日志(推荐)
直接在fit()中传入method_kwargs={'iprint': -1},即可完全关闭L-BFGS-B的日志输出:
ARIMA示例
from statsmodels.tsa.arima.model import ARIMA # 初始化模型(假设ts_data为你的时间序列数据,order为模型阶数) arima_model = ARIMA(ts_data, order=(1, 1, 1)) # 拟合时传递method_kwargs关闭日志 arima_results = arima_model.fit(method_kwargs={'iprint': -1})
SARIMAX示例
from statsmodels.tsa.statespace.sarimax import SARIMAX # 初始化模型(seasonal_order为季节性阶数) sarimax_model = SARIMAX(ts_data, order=(1, 1, 1), seasonal_order=(1, 1, 1, 12)) # 拟合时传递method_kwargs关闭日志 sarimax_results = sarimax_model.fit(method_kwargs={'iprint': -1})
原理:新版本statsmodels将优化器的配置参数统一通过method_kwargs传递,iprint=-1是scipy的L-BFGS-B优化器的参数,用于关闭所有迭代日志输出。
方法2:临时重定向标准输出(备选)
如果上述方法失效,可通过临时重定向标准输出到空设备,彻底屏蔽所有输出(注意:会同时屏蔽其他可能有用的警告或信息):
from contextlib import redirect_stdout import os from statsmodels.tsa.arima.model import ARIMA arima_model = ARIMA(ts_data, order=(1, 1, 1)) with redirect_stdout(open(os.devnull, 'w')): arima_results = arima_model.fit()
内容的提问来源于stack exchange,提问作者sriv05
相关产品推荐
相关产品推荐

