首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何控制fbprophet的输出?

如何控制fbprophet的输出?
EN

Stack Overflow用户
提问于 2017-08-07 23:50:58
回答 1查看 6.2K关注 0票数 11

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

EN

回答 1

Stack Overflow用户

发布于 2019-06-21 09:01:03

不幸的是,它比正常情况下更复杂。我认为一些输出来自C或Fortran编译代码或其他什么。下面是你如何做到这一点(找到here):

代码语言:javascript
复制
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)

“更简单”的方法(如果它可以工作,但它不能工作)应该是这样的:

代码语言:javascript
复制
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
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45551000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档