обновление scikit-learn – как исправить разрывное изменение?

Вопрос или проблема

Я унаследовал решение, которое работает на Databricks Runtime 7.3 и использует scikit-learn 0.21. Databricks Runtime необходимо обновить, и поэтому существующая версия scikit-learn несовместима с версией Python в более новых Databricks Runtime. Я попытался обновить версию scikit-learn, но теперь решение не работает с следующими сообщениями: ModuleNotFoundError: No module named ‘sklearn.neighbors.ball_tree’

Секция кода, где возникает ошибка: bt = pickle.load(open(‘/dbfs/mnt/storage/Numpy/’ + area + ‘.bt’, ‘rb’))

По этой ссылке: https://stackoverflow.com/questions/60145652/no-module-named-sklearn-neighbors-base я прочитал, что модули изменили названия, чтобы включать ‘_’ . Но я не вижу, что это здесь так.

Нет предыдущего опыта работы с scikit, pickle и так далее. Что мне нужно сделать, чтобы заставить рабочий дерево шаров?

Другие библиотеки, установленные в кластере/runtime:

  • azure-storage-blob==2.0.1 PyPI
  • geopy==1.23.0 PyPI
  • haversine PyPI
  • pyproj==3.7.0 PyPI
  • scipy PyPI
  • vincenty PyPI
  • applicationinsights PyPI
  • cryptography==2.9 PyPI
  • numpy==1.26.4 PyPI
  • pandas==1.5.3 PyPI
  • scikit-learn PyPI
  • shapely PyPI
  • xarray PyPI

Ответ или решение

Обновление scikit-learn: Как исправить проблему с несовместимостью

После обновления Databricks Runtime и попытки повышения версии библиотеки scikit-learn, вы столкнулись с ошибкой ModuleNotFoundError: No module named 'sklearn.neighbors.ball_tree'. Эта проблема возникла в результате изменений в архитектуре библиотеки scikit-learn, что часто случается при переходе на более новые версии.

Причины проблемы

  1. Изменения в API: Поскольку вы обновили scikit-learn, некоторые классы или модули могли быть перемещены, удалены или изменены. Ваша версия 0.21 могла использовать модули или классы, которые не существуют в новых версиях.

  2. Формат сериализации (pickle): Вы использовали pickle для сериализации объекта BallTree, что может оказаться несовместимым между разными версиями библиотеки. Если BallTree был сериализован в более ранней версии, его нельзя будет загрузить в новой без изменений.

Шаги для решения проблемы

  1. Определите используемую версию библиотеки: Узнайте, какая версия scikit-learn установлена в вашей среде, и проверьте документацию по API для этой версии. Это поможет вам определить, какие изменения произошли.

  2. Локальная проверка: Если это возможно, создайте локальное окружение с такой же версией Python и scikit-learn, которая использовалась в исходном решении. Это позволит протестировать код и поработать над преобразованиями.

  3. Обновление кода:

    • Замените инстанцирование BallTree в вашем коде на:

      from sklearn.neighbors import BallTree

      Убедитесь, что вы не используете sklearn.neighbors.ball_tree как отдельный модуль.

    • Если в вашем коде использовались специфические параметры или методы для BallTree, проверьте их, так как они могли измениться в новой версии.

  4. Переопределение или сохранение модели: Если вы не можете использовать pickle для загрузки ранее сохраненной модели, рассмотрите возможность переобучения модели с использованием новых данных. Это также даст вам возможность убедиться в том, что ваша модель адаптирована под новую версию библиотеки.

  5. Использование альтернативных методов сериализации: Если pickle вызывает подобные проблемы и вы хотите сохранить точность ваших данных, рассмотрите возможность использования библиотеки joblib, которая может лучше справляться с большими объектами NumPy.

    from joblib import dump, load
    
    # Сохранение
    dump(bt, '/dbfs/mnt/storage/Numpy/' + area + '.bt')
    
    # Загрузка
    bt = load('/dbfs/mnt/storage/Numpy/' + area + '.bt')
  6. Тестирование: После внесения изменений не забудьте протестировать свой код. Убедитесь, что все функции работают корректно после обновления библиотеки.

Заключение

Ошибки при обновлении библиотек, таких как scikit-learn, могут быть вызваны множеством факторов, включая изменения в API и несовместимость сериализованных объектов. Следуя предложенным шагам, вы сможете устранить проблему и адаптировать ваше приложение к новой версии библиотеки. Важно также поддерживать актуальность документации и учитывать изменения при дальнейших обновлениях.

Оцените материал
Добавить комментарий

Капча загружается...