Отключение предупреждений scikit-learn при использовании n_jobs> 1 - PullRequest
2 голосов
/ 15 марта 2019

Я могу отключить предупреждения с помощью scikit-learn с несколькими опциями, используя библиотеку warnings:

# After the imports
warnings.filterwarnings(action='ignore')
# Or in the code
with warnings.catch_warnings():
    warnings.simplefilter("ignore") 
    # do stuff

Но это не работает для классификатора, как только параметр n_jobs становится больше 1 (из-за многопроцессорности?). Следующий пример кода иллюстрирует это:

import numpy as np
from sklearn.multiclass import OneVsRestClassifier
from sklearn.linear_model import LogisticRegression
import warnings
import logging

logger = logging.getLogger()

for n_job in [1, 2]:
    print("START")
    print("n_jobs =", n_job)
    clf = OneVsRestClassifier(LogisticRegression(solver="liblinear", multi_class="ovr"), n_jobs=n_job)

    x_train = np.array([[1,1], [0,1], [0,0], [1,5], [2,1], [3,1]])
    y_train = np.array([[False, False, True], [False, False, True], [True, False, False], [True, False, False], [True, False, True], [True, False, False]])

    with warnings.catch_warnings():
        warnings.simplefilter("ignore")
        clf.fit(x_train, y_train) # "UserWarning: Label not 1 is present in all training examples."
    print("END")
    print() 

Выход:

START
n_jobs = 1
END

START
n_jobs = 2
UserWarning: Label not 1 is present in all training examples.
END

Как отключить предупреждения, даже когда n_jobs> 1?

РЕДАКТИРОВАТЬ: Поскольку это может быть связано с multiprocessing, я мог бы добавить, что я запускал этот скрипт на Linux, с Python 3.6.

...