Могу ли я использовать файл .pkl, даже если он дает мне предупреждение об устаревании? - PullRequest
0 голосов
/ 25 января 2019

Я работаю через чужой плохо документированный код (он использует tf-idf для поиска кластеров документов), и я наткнулся на это:

from sklearn.externals import joblib

#joblib.dump(km,  'doc_cluster.pkl')
km = joblib.load('doc_cluster.pkl')
clusters = km.labels_.tolist()

Предполагается, что uncickle doc_cluster.pkl, нокогда я запускаю его, я получаю предупреждение DepreciationWarning, в котором говорится, что файл был создан с версией JobLib менее 0,10, и он запрашивает, чтобы я заново сгенерировал файл.Однако я не могу этого сделать, потому что я не создал doc_cluster.pkl.Так можно ли просто двигаться вперед и игнорировать предупреждение, или это все испортит?

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Предупреждения об устаревании - это только предупреждения о том, что используемый вами код был обновлен в пакете и что существует лучший / более эффективный способ написания вашей программы. Пакет все еще поддерживает его, просто знайте, что в будущем обновлении пакета теперь могут поддерживаться старые функции.

0 голосов
/ 25 января 2019

Предупреждение об устаревании , просто предупреждение , и загрузка успешно завершена.Файл pickle по-прежнему загружается и поддерживается, по крайней мере, в этой версии sklearn (которая включает сторонний joblib проект ).Будущая версия joblib может перестать поддерживать этот конкретный формат, но это еще не произошло.

Вы можете заново создать файл pickle с текущей версией, просто сбросив этот же объект обратно на диск:

km = joblib.load('doc_cluster.pkl')
joblib.dump(km, 'doc_cluster.pkl', compress=True)

Также см. Документацию joblib постоянство .

Кроме того, вы можете подавить предупреждение, используя фильтр предупреждений.,Вы можете установить фильтры в переменной окружения PYTHONWARNINGS , с помощью 1023 * переключателя командной строки (я бы использовал строку ignore::DeprecationWarning:sklearn.externals.joblib) или с помощью warnings модуль напрямую:

import warnings
warnings.filterwarnings(
    "ignore", category=DeprecationWarning,
    module=r'sklearn\.externals\.joblib'
)
...