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
следующее не работает временно отключить предупреждение:
- добавить
-W ignore
python3 -W ignore -m rasa_core.run -d models/dialogue -u models/nlu/default/current
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)