抑制Scikit learn预测中的控制台消息。

8

我已经使用Scikit learn构建了预测模型。我使用Flask和joblib部署了这个模型。每当我使用已加载的模型对新的请求进行预测时,它会在控制台上打印有关花费在核心上的总时间的消息。

现在,我想禁用此打印。在模型对新的输入数据进行预测时,如何抑制给定的消息。

[Parallel(n_jobs=24)]: Done 117 out of 174 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 121 out of 179 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 122 out of 181 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 123 out of 183 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 125 out of 185 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 127 out of 188 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 128 out of 190 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 129 out of 192 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 132 out of 196 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 133 out of 198 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 135 out of 201 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 137 out of 204 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 138 out of 205 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 140 out of 208 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 143 out of 213 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 148 out of 220 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 149 out of 222 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 153 out of 228 | elapsed:    0.1s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 155 out of 231 | elapsed:    0.1s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 159 out of 237 | elapsed:    0.1s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 165 out of 246 | elapsed:    0.1s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 168 out of 250 | elapsed:    0.1s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 169 out of 252 | elapsed:    0.1s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 171 out of 255 | elapsed:    0.1s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 173 out of 258 | elapsed:    0.1s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 177 out of 264 | elapsed:    0.1s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 181 out of 270 | elapsed:    0.1s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 183 out of 273 | elapsed:    0.1s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 185 out of 276 | elapsed:    0.1s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 187 out of 279 | elapsed:    0.1s remaining:    0.0s
[Parallel(n_jobs=24)]: Done 335 out of 500 | elapsed:    0.3s remaining:    0.1s
[Parallel(n_jobs=24)]: Done 500 out of 500 | elapsed:    0.3s finished

你能指出你正在使用哪个模型吗?通常有一个“verbose”参数可以修改。 - EdChum
我正在使用 model = GaussianNB(),朴素贝叶斯模型。 - Vignesh Prajapati
3个回答

7

我在使用sklearn.linear_model.LinearRegression时遇到了类似的问题。在这个方法中,我无法在.fit()方法或构造函数中找到任何verbose参数。因此,以下是Python代码:

import numpy as np
from sklearn.linear_model import LinearRegression as LR

lr = LR()
y = np.random.rand(100) + 0.01 * np.arange(100)     # noisy line to fit    
x = np.arange(100)
x = np.reshape(y,[100,1])
lr.fit(x,y)

我得到了令人烦恼的输出:
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)

由于fit()方法返回指向自身的指针,因此该文本表示该对象。抑制此行为的简单方法是修改上面的代码如下:

a = lr.fit(x,y)

将指针分配给某个变量,而不是你的屏幕。


2
不建议使用 a(或任何其他变量),我建议使用 _,因为通常用于忽略函数的输出值。因此,该行代码应该写成_ = lr.fit(x,y) - Arturo Moncada-Torres

5
如果产生的不必要输出是由于在模型的构造函数中设置了verbose = True,那么可以稍后将其更改为成员变量:
from sklearn.some_category import SomeModel as M

m = M(verbose=True)
m.fit(x, y)  # has output
m.verbose = False
m.predict(x) # no output

是的,我认为另外两个答案没有真正回答问题:它们只是关闭了所有输出,而问题明确要求在实例化后甚至在拟合后如何关闭。编辑:我对我的答案进行了轻微修改,使其更加清晰... - NichtJens
你确定所有的模型都有 verbose 属性吗? - Jarad
抱歉,我不确定。像这样确切的事情很难知道,不是吗?特别是因为sklearn开发人员现在可能会添加一个新模型,该模型可能没有它。您也可以问同样的问题,关于其他答案中使用的“verbose”参数来完全消除消息...您为什么要问呢? - NichtJens
这是预装模型的答案。 - Justas
@Justas 是的,这是它的完美应用。 - NichtJens
这对我不起作用。 - Naveen Reddy Marthala

2
verbose参数更改为False

verbose:int,可选:详细程度:如果非零,则会打印进度消息。高于50,则输出发送到标准输出。消息的频率随着详细程度的增加而增加。如果它超过10,则报告所有迭代。

例如使用SVM模型。
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,
  kernel='rbf', max_iter=-1, probability=False, random_state=None,
  shrinking=True, tol=0.001, verbose=False)

Mir,我想在预测方法中禁用它。我的数据有几GB,而且有多个模型,所以我不能重建它们。但是,如果我在模型构建时这样做,它会禁用它吗? - Vignesh Prajapati
还有其他选项吗? - Vignesh Prajapati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接