Ответ 1
Это предупреждение вызвано numpy, которое не одобряло проверку значения истины в пустом массиве
Обоснованием для этого изменения является
Невозможно воспользоваться тем фактом, что пустые массивы False, потому что массив может быть False по другим причинам.
Проверьте следующий пример:
>>> 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 library, это было исправлено в основной ветке библиотеки. Однако это будет доступно примерно в августе 2018 года, поэтому одним из возможных альтернатив является использование меньшей версии библиотеки numpy, которая не имеет этой проблемы, т.е. 1.13.3, поскольку библиотека scikit по умолчанию будет ссылаться на последнюю версию numpy (которая равна 1.14.2 на время написания ответа)
sudo pip install numpy==1.13.3
или с pip3 следующим образом
sudo pip3 install numpy==1.13.3
Игнорирование предупреждения (ов)
Если мы хотим использовать последнюю версию библиотеки (в этом случае - numpy), которая дает предупреждение об устаревании и просто хочет отключить предупреждение об устаревании, тогда мы можем добиться этого, используя метод filterwarnings модуля python Warnings
В следующем примере ниже будет приведено предупреждение об утомлении, упомянутое выше:
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/preprocessing/label.py:151: DeprecationWarning: значение истины для пустого массива неоднозначно. Возврат False, но в будущем это приведет к ошибке. Используйте
array.size > 0
чтобы проверить, что массив не пуст.
И чтобы позаботиться об этом, добавьте фильтрацию для 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)