将FeatureUnion
与一些自定义转换器一起使用时,我注意到我的终端中没有出现我期望从转换器中的logger.info()
语句得到的某些输出。深入研究之后,我能够将其跟踪到FeatureUnion
的{{1}}参数。如果未设置为n_jobs
,则n_jobs=1
的输出将不会显示。但是,常规logger
语句的输出确实会显示。
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. ]]
语句会照常工作,而记录输出却不能呢?
起初,这种行为让我相信我的变压器实际上并没有安装,因此根本没有使用。现在,我知道变压器已按预期使用,这显然不是什么大问题。但是,我希望能对为什么这种日志记录行为可能会以这种方式发生以及是否有任何解决方法有所了解。