Здесь я сделаю длинный выстрел.
Вы не предоставили достаточно информации.Вы только что упомянули, что используете SVM
, но не какой тип SVM
, так как существует много его реализаций, таких как SVC
, NuSVC
и LinearSVC
.Эти разные типы имеют разные свойства.
Зачем заботиться?потому что некоторые из них поддерживают / принимают выполнение заданий в параллельно , таких как LinearSVC
one!
with warnings.catch_warnings():
warnings.filterwarnings("ignore", category=ConvergenceWarning)
Приведенный выше код (или другие его варианты) должен выполнять эту работу, ноесли он работает параллельно, он будет работать только в самом первом запуске / итерации (я не совсем уверен, почему, но кажется, что каждое задание имеет свою собственную конфигурацию Pythonic, как будто это новый экземпляр или что-то еще!)
Кроме того, вы упомянули, что используете GridSearchCV
, который также имеет параметр n_job
.Его Scikit
Документация гласит:
Количество заданий для параллельного запуска.None означает 1, если только в контексте joblib.parallel_backend.-1 означает использование всех процессоров
joblib.parallel_backend
означает, какое количество заданий задано в оценщике или любых заданных конфигурациях.
Сводка
Параллельное выполнение заданий может стать причиной не подавления предупреждений.Требуется больше информации от OP.
РЕДАКТИРОВАТЬ
Я проверил это снова, и действительно, используя GridSearchCV
с scikit-learn
версией 0.20.3 и низким max_iter
при подавлении предупреждений приводит к следующим результатам:
SVC or LinearSVC
+ GridSearchCV(n_jobs=-1 or >1)
: Сбой для подавления предупреждений. SVC or LinearSVC
+ GridSearchCV(n_jobs=None or 1)
: Успешно в подавлении предупреждений. LogisticRegression(n_jobs=-1, solver='sag')
+ GridSearchCV(n_jobs=None or 1 or >1 or -1)
: Не удалось для подавления предупреждений. LogisticRegression(n_jobs=1, solver='sag')
+ GridSearchCV(n_jobs=-1 or >1)
: Не удалось для подавления предупреждений. LogisticRegression(n_jobs=1, solver='sag')
+ GridSearchCV(n_jobs=None or 1)
: Успешно в подавлении предупреждений.
Как видите, если оценщик поддерживает многозадачность, настройка n_jobs=-1 or >1
не будет подавлять предупреждения независимо от n_jobs
в GridSearchCV
.С другой стороны, если оценщик не поддерживает многозадачность, установка n_jobs=-1 or >1
в GridSearchCV
не сделает работу по подавлению предупреждений, однако установка n_jobs=None or 1
сделает ее работу.
Важное примечание
Это то, что я нашел с scikit-learn
версией 0.20.3 , тем не менее, я попробовал это на своем другом ноутбуке с scikit-learn
версией 0.19.2 и подавление предупреждений работало всегда, независимо!Я проверил scikit-learn
GitHub репозиторий и заметил некоторые коммиты по поводу joblib
начиная с версии 0.19.2, но я не уверен, было ли реальное изменение / обновление, которое вызвало вышеуказанное поведение!Вы можете открыть тикет там и обратиться к вышеупомянутым результатам.
ОБНОВЛЕНИЕ
Единственный способ, которым я мог бы подавить все предупреждения Scikit-learn
, - это ввести следующий код в начале модуля.(но учтите, что все предупреждения, включая ваше, будут подавлены - мне это нужно, потому что у меня есть журналы, сохраненные в базе данных):
if not sys.warnoptions:
warnings.simplefilter("ignore")
os.environ["PYTHONWARNINGS"] = "ignore" # Also affect subprocesses