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()