sklearn DeprecationWarning значение истинности массива

запуск примере rasa_core документы с

› python3 -m rasa_core.run -d models/dialogue -u models/nlu/default/current

и получить этот вывод ошибки после каждого сообщения в диалоговом окне:

.../sklearn/...: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.

это проблема с numpy, которая была исправлена, но не была опубликована в последней версии:https://github.com/scikit-learn/scikit-learn/issues/10449

следующее не работает временно отключить предупреждение:

  1. добавить -W ignore

python3 -W ignore -m rasa_core.run -d models/dialogue -u models/nlu/default/current

  1. warnings.simplefilter

python3

>>> warnings.simplefilter('ignore', DeprecationWarning)
>>> exit()

python3 -m rasa_core.run -d models/dialogue -u models/nlu/default/current

1 ответов


это предупреждение вызвано numpy, который устарел проверка истинности значения пустого массива

обоснование этого изменения составляет

невозможно воспользоваться тем, что пустые массивы являются ложными, потому что массив может быть ложным по другим причинам.

Проверьте следующий пример:

>>> import numpy as np
>>> bool(np.array([]))
False
>>> # but this is not a good way to test for emptiness, because...
>>> bool(np.array([0]))
False

решение

по состоянию на вопрос 10449 в библиотеке scikit-learn это было исправлено в главной ветви библиотеки. Однако это будет доступно около августа 2018 года, поэтому одна из возможных альтернатив-использовать меньшую версию библиотеки numpy, у которой нет этой проблемы, т. е. 1.13.3, поскольку scikit-library по умолчанию будет ссылаться на последнюю версию numpy (которая на момент написания этого ответа 1.14.2)

sudo pip install numpy==1.13.3

или с pip3 следующим образом

sudo pip3 install numpy==1.13.3

игнорируем предупреждение(с)

в случае, если мы хотим использовать последнюю версию библиотека (numpy в этом случае), которая дает предупреждение об устаревании и просто хочет заставить замолчать предупреждение об устаревании, тогда мы можем достичь этого с помощью filterwarnings метод в Python предупреждения модуль

следующий пример ниже приведет к предупреждению об устаревании, упомянутому в вопросе выше:

from sklearn import preprocessing

if __name__ == '__main__':
    le = preprocessing.LabelEncoder()
    le.fit([1, 2, 2, 6])
    le.transform([1, 1, 2, 6])
    le.inverse_transform([0, 0, 1, 2])

производит

/ usr / local/lib / python2.7 / dist-packages/sklearn/предварительная обработка / этикетка.py: 151: DeprecationWarning: значение истинности пустого массива неоднозначно. Возврат False, но в будущем это приведет к ошибке. Использовать array.size > 0 чтобы проверить, что массив не пуст.

и чтобы позаботиться об этом, добавьте filterwarnings для DeprecationWarning

from sklearn import preprocessing
import warnings

if __name__ == '__main__':
    warnings.filterwarnings(action='ignore', category=DeprecationWarning)
    le = preprocessing.LabelEncoder()
    le.fit([1, 2, 2, 6])
    le.transform([1, 1, 2, 6])
    le.inverse_transform([0, 0, 1, 2])

в случае, если есть несколько модулей, которые дают предупреждение, и мы хотим выборочно молчать предупреждение, то используйте модуль. например, для молчаливого предупреждения об осуждении от scikit узнать модуль

warnings.filterwarnings(module='sklearn*', action='ignore', category=DeprecationWarning)