如何控制fbprophet的输出? [英] how to control output from fbprophet?

查看:180
本文介绍了如何控制fbprophet的输出?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望能够在拟合预测模型的同时抑制一些来自fbprophet的输出.此输出(初始对数联合概率...",优化正常终止:",检测到收敛:..."等)显然来自Stan的cpp代码,我找不到任何明显的方法来控制它[我正在使用python接口].在高级stan()例程(在pystan/api.py中)的默认情况下,稍微深入一下代码会发现verbose = False作为默认值,但是显然,此参数不会抑制此打印输出.不修改代码是否可行?

I would like to be able to suppress some output coming from fbprophet while fitting a forecasting model. This output ("Initial log joint probability...", "Optimization terminated normally:", "Convergence detected:...", etc.) is apparently coming from Stan's cpp code and I cannot find any obvious way to control it [I am using python interface]. Digging a little bit into the code discovers verbose=False as default in high level stan() routines (in pystan/api.py), but apparently this parameter does not suppress this printout. Is it feasible without code modifications?

推荐答案

不幸的是,它比应该的要复杂.我认为某些输出来自C或Fortran编译代码或其他东西.这是您的操作方法(在在此处找到):

Unfortunately, it's more complex than it should be. I think some of the output is coming from C or Fortran compiled code or something. Here is how you can do it (found here):

import os
import sys

import pandas as pd
from fbprophet import Prophet


# from https://stackoverflow.com/questions/11130156/suppress-stdout-stderr-print-from-python-functions
class suppress_stdout_stderr(object):
    '''
    A context manager for doing a "deep suppression" of stdout and stderr in
    Python, i.e. will suppress all print, even if the print originates in a
    compiled C/Fortran sub-function.
       This will not suppress raised exceptions, since exceptions are printed
    to stderr just before a script exits, and after the context manager has
    exited (at least, I think that is why it lets exceptions through).

    '''
    def __init__(self):
        # Open a pair of null files
        self.null_fds = [os.open(os.devnull, os.O_RDWR) for x in range(2)]
        # Save the actual stdout (1) and stderr (2) file descriptors.
        self.save_fds = (os.dup(1), os.dup(2))

    def __enter__(self):
        # Assign the null pointers to stdout and stderr.
        os.dup2(self.null_fds[0], 1)
        os.dup2(self.null_fds[1], 2)

    def __exit__(self, *_):
        # Re-assign the real stdout/stderr back to (1) and (2)
        os.dup2(self.save_fds[0], 1)
        os.dup2(self.save_fds[1], 2)
        # Close the null files
        os.close(self.null_fds[0])
        os.close(self.null_fds[1])

m = Prophet()
df = pd.read_csv('somefile.csv')

with suppress_stdout_stderr():
    m.fit(minimal_df)

更简单"的方式(如果可行,则行不通)将类似于:

The 'simpler' way (if it would've worked, which it doesn't) would've been something like:

import os
import sys

import pandas as pd
from fbprophet import Prophet

m = Prophet()
df = pd.read_csv('somefile.csv')

orig_out = sys.stdout
sys.stdout = open(os.devnull, 'w')
m.fit(df)
sys.stdout = orig_out

这篇关于如何控制fbprophet的输出?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆