Scikit-当n_jobs!= 1时,在FeatureUnion中了解变压器的无日志记录输出

时间:2018-11-23 22:51:51

标签: python logging scikit-learn

FeatureUnion与一些自定义转换器一起使用时,我注意到我的终端中没有出现我期望从转换器中的logger.info()语句得到的某些输出。深入研究之后,我能够将其跟踪到FeatureUnion的{​​{1}}参数。如果未设置为n_jobs,则n_jobs=1的输出将不会显示。但是,常规logger语句的输出确实会显示。

MWE

print()

输出import logging import numpy as np from sklearn.pipeline import FeatureUnion from sklearn.preprocessing import MinMaxScaler logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) class MyMinMaxScaler(MinMaxScaler): def fit(self, X, y=None): logger.info("fitting MyMinMaxScaler") print("fitting MyMinMaxScaler") super().fit(X, y) fu = FeatureUnion( [("myscaler", MyMinMaxScaler()), ("regular_scaler", MinMaxScaler())], n_jobs=-1 ) data = np.array([40, 41, 42]).reshape(-1, 1) fu.fit(data) logger.info(fu.transform(data))

n_jobs=-1

输出fitting MyMinMaxScaler INFO:__main__:[[0. ] [0.5] [1. ]]

n_jobs=1

我想知道这是否是预期的行为。我以为这可能与多处理和子进程的输出未显示有关。但是,为什么常规INFO:__main__:fitting MyMinMaxScaler fitting MyMinMaxScaler INFO:__main__:[[0. ] [0.5] [1. ]] 语句会照常工作,而记录输出却不能呢?

起初,这种行为让我相信我的变压器实际上并没有安装,因此根本没有使用。现在,我知道变压器已按预期使用,这显然不是什么大问题。但是,我希望能对为什么这种日志记录行为可能会以这种方式发生以及是否有任何解决方法有所了解。

0 个答案:

没有答案