Python 3.x 是否将sklearn GridSearchCV的所有输出打印到文件?

Python 3.x 是否将sklearn GridSearchCV的所有输出打印到文件?,python-3.x,scikit-learn,Python 3.x,Scikit Learn,我正在使用sklearn运行长网格搜索,我想将所有(emphasisall)控制台输出记录到文件中使用>从终端运行,并将标准输出更改为打开的文件等。所有工作。。。但只有部分是公认的答案。由print调用的任何内容都会保存到文件中,但不会保存控制台上显示的所有内容。特别是: Fitting 5 folds for each of 128 candidates, totalling 640 fits [Parallel(n_jobs=4)]: Done 42 tasks | elapse

我正在使用
sklearn
运行长网格搜索,我想将所有(emphasisall)控制台输出记录到文件中使用
>
从终端运行,并将标准输出更改为打开的文件等。所有工作。。。但只有部分
是公认的答案。由
print
调用的任何内容都会保存到文件中,但不会保存控制台上显示的所有内容。特别是:

Fitting 5 folds for each of 128 candidates, totalling 640 fits
[Parallel(n_jobs=4)]: Done  42 tasks      | elapsed:    2.7s
[Parallel(n_jobs=4)]: Done 192 tasks      | elapsed:   12.3s
[Parallel(n_jobs=4)]: Done 442 tasks      | elapsed:   35.1s
[Parallel(n_jobs=4)]: Done 640 out of 640 | elapsed:   55.7s finished
第一行确实会保存到文件中。但是,
[Parallel(n_jobs=4)]
的日志记录不会保存。相反:

Fitting 5 folds for each of 128 candidates, totalling 640 fits
{'estimator__max_depth': 5, 'estimator__min_samples_leaf': 4, 'estimator__min_samples_split': 8}
...
...
第二行是我简单打印得到的最佳参数;
[Parallel(n_jobs=4)]
中的所有内容都将丢失。有人知道如何将其保存到文件中吗?

来自
sklearn
内部用于并行化的
joblib
软件包:

def _print(self, msg, msg_args):
    """Display the message on stout or stderr depending on verbosity"""
    # XXX: Not using the logger framework: need to
    # learn to use logger better.
    if not self.verbose:
        return
    if self.verbose < 50:
        writer = sys.stderr.write
    else:
        writer = sys.stdout.write
    msg = msg % msg_args
    writer('[%s]: %s\n' % (self, msg))

您可以试试。我试过了,但问题提到它不起作用。如果您遵循该答案,则只会跳过包含
[Parallel(n_jobs=4)…]
的行。也可以通过将
sys.stderr
重定向到同一个文件来解决这个问题。
# necessary imports

logfile = open('test.txt', 'w')

original_stderr = sys.stderr
original_stdout = sys.stdout

sys.stdout = Tee(sys.stdout, logfile)
sys.stderr = sys.stdout
.
.
[code to log]
.
.

sys.stdout = original_stdout
sys.stderr = original_stderr
logfile.close()