如何停止在Python中显示随机林并行计算的状态?

2024-09-30 22:13:55 发布

您现在位置:Python中文网/ 问答频道 /正文

如何通过删除这些更新来清理输出,我通过以下方式接收: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

Tags: ofbackendparallelwith方式jobsoutconcurrent
1条回答
网友
1楼 · 发布于 2024-09-30 22:13:55

Q : "How do I stop showing the status of my random forest parallel computing in Python?"

a)使用已发布的API

b)使用内部技巧

c)使用外部技巧


A)(scikit学习){}-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设置得更高会增加输出量。然而,来自随机林-source-code的片段显示,scikit learn实际上将此值传递给另一个构造函数joblib.Parallel()delayed(),在这里解释了更多细节

其中joblib说明:

verbose: int, optional

The verbosity level: if non zero, progress messages are printed. Above 50, the output is sent to stdout. The frequency of the messages increases with the verbosity level. If it more than 10, all iterations are reported.

这表明,在零以上的任何地方都会增加报告的详细程度,并且为我们创造了一个机会,如果有点违反直觉,超过50。。。(右,通过hi顶起stdout…如下面的B)和C)所示)


B)内部技巧:

如果使用了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)外部技巧:

如果不满足于必须按照B)修改代码库,则可以使用以下方法:

$ python MyRandomForestCODE.py > aLogFILE.txt

整个stdout流直接从shell/cmd级别重定向

相关问题 更多 >