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.