Печать всего вывода из sklearn GridSearchCV в файл? - PullRequest
0 голосов
/ 10 июня 2018

Я выполняю длинный поиск по сетке, используя sklearn, и я хочу записать все (выделение все ) консольный вывод в файл. Запуск из терминала с использованием > и изменение стандартного вывода на открытый файл и т. Д. Все работают ... но только частично , что является принятым ответом здесь .Все, что вызывается 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)] потеряно.Кто-нибудь знает, как сделать так, чтобы это было сохранено в файл?

1 Ответ

0 голосов
/ 11 июня 2018

Из источника пакета joblib, используемого внутренне sklearn для распараллеливания:

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

То есть с verbose=1 в качестве OP использовалось перенаправление stderr следует захватить недостающие строки.Но тогда это не получится stdout.Таким образом, их можно просто объединить, используя этот ответ и выполнив:

# 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...