Как мне перестать показывать статус параллельных вычислений случайного леса в Python? - PullRequest
0 голосов
/ 19 июня 2020

Как я могу очистить вывод, удалив эти обновления, я получаю это, используя: n_jobs = -1:

[Parallel(n_jobs=6)]: Using backend ThreadingBackend with 6 concurrent workers.
[Parallel(n_jobs=6)]: Done  38 tasks      | elapsed:    0.0s
[Parallel(n_jobs=6)]: Done 188 tasks      | elapsed:    0.0s
[Parallel(n_jobs=6)]: Done 438 tasks      | elapsed:    0.0s
[Parallel(n_jobs=6)]: Done 788 tasks      | elapsed:    0.0s
[Parallel(n_jobs=6)]: Done 1238 tasks      | elapsed:    0.0s
[Parallel(n_jobs=6)]: Done 1788 tasks      | elapsed:    0.1s
[Parallel(n_jobs=6)]: Done 2000 out of 2000 | elapsed:    0.1s finished
[Parallel(n_jobs=6)]: Using backend ThreadingBackend with 6 concurrent workers.
[Parallel(n_jobs=6)]: Done  38 tasks      | elapsed:    0.0s
[Parallel(n_jobs=6)]: Done 188 tasks      | elapsed:    0.0s
[Parallel(n_jobs=6)]: Done 438 tasks      | elapsed:    0.0s
[Parallel(n_jobs=6)]: Done 788 tasks      | elapsed:    0.0s
[Parallel(n_jobs=6)]: Done 1238 tasks      | elapsed:    0.0s
[Parallel(n_jobs=6)]: Done 1788 tasks      | elapsed:    0.1s
[Parallel(n_jobs=6)]: Done 2000 out of 2000 | elapsed:    0.1s finished

1 Ответ

0 голосов
/ 19 июня 2020

Q : " Как мне перестать показывать состояние моих параллельных вычислений случайного леса в Python?"

a) Использование опубликованного API

b) Использование внутреннего трюка

c) Использование внешнего трюка


A) (scikit-learn) RandomForrest() -API:

В опубликованном API есть элемент verbose со значением по умолчанию, равным нулю:

RandomForestRegressor( n_estimators = 100, *, criterion = 'mse',
                       max_depth = None, min_samples_split = 2, min_samples_leaf = 1, min_weight_fraction_leaf = 0.0, max_features = 'auto', max_leaf_nodes = None, min_impurity_decrease = 0.0, min_impurity_split = None, bootstrap = True, oob_score = False,
                       n_jobs = None, random_state = None,
                       verbose = 0, warm_start = False, ccp_alpha = 0.0, max_samples = None
                       )

Установка verbose в любом месте выше увеличивает объем вывода. Тем не менее, фрагмент из RandomForest - исходного кода показывает, что scikit-learn фактически передает это значение еще одному конструктору, joblib.Parallel()delayed(), где более подробно получите объяснение.

Для которого joblib объясняет:

verbose: int, необязательно

Уровень детализации : если не ноль, печатаются сообщения о ходе выполнения. Выше 50 вывод отправляется на stdout. Частота сообщений увеличивается с уровнем детализации. Если оно больше 10, сообщается обо всех итерациях.

Это показывает, что любое значение выше нуля увеличивает сообщаемый уровень детализации плюс создает для нас шанс, если мы собираемся, как ни странно, выше 50 ... (справа, подняв stdout ... как показано на B) и C) ниже).


B) stdout внутренний трюк:

Учитывая, что было использовано verbose = 51 или больше, мы можем начать ездить на Драконе:

import sys
...
#--------------------------------------------------------------# MASK-stdout
anOldFileDESCRIPTOR = sys.stdout                               # .SAVE
pass;                 sys.stdout = open( 'aLogFILE.txt', 'w' ) # .SET
#--------------------------------------------------------------#############
# call RandomForestRegressor( ..., verbose = 51, ... )-method
...
#--------------------------------------------------------------#############
pass;                 sys.stdout.close()                       # .CLOSE
pass;                 sys.stdout = anOldFileDESCRIPTOR         # .RESTORE
#--------------------------------------------------------------# ORIG-stdout

Этот маскарад внутреннего трюка украдет все нежелательные stdout -направленные вывести и сохранить его в собранном виде в указанный файл.


C) stdout Внешний трюк:

Если вас не устраивает необходимость пересмотра базы кода в соответствии с B), можно go перебрать, используя:

$ python MyRandomForestCODE.py > aLogFILE.txt

, и весь поток stdout будет перенаправлен прямо из shell / cmd-level.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...