Дорожная карта#

Цель этого документа#

В этом документе перечислены общие направления, которые основные разработчики заинтересованы развивать в scikit-learn. Факт включения пункта в этот список никоим образом не является обещанием его реализации, так как ресурсы ограничены. Скорее, это указание на то, что помощь по этой теме приветствуется.

Цель: Scikit-learn в 2018 году#

Мария Влайич Уилер

  • Вычислительные инструменты: использование GPU, распределенных фреймворков программирования, таких как Scala/Spark, и т.д.

  • Высокоуровневые библиотеки Python для экспериментов, обработки и управления данными: Jupyter notebook, Cython, Pandas, Dask, Numba…

  • Изменения в фокусе исследований машинного обучения: приложения искусственного интеллекта (где ключевым является структура входных данных) с глубоким обучением, обучением представлений, обучением с подкреплением, переносом доменов и т.д.

Более тонкое изменение за последнее десятилетие заключается в том, что из-за изменения интересов в ML аспиранты по машинному обучению чаще вносят вклад в PyTorch, Dask и т.д., чем в Scikit-learn, поэтому наш пул контрибьюторов сильно отличается от десятилетней давности.

Scikit-learn остается очень популярным на практике для опробования канонических методов машинного обучения, особенно для приложений в экспериментальной науке и науке о данных. Многое из того, что мы предоставляем, сейчас очень зрелое. Но поддержка может быть затратной, и поэтому мы не можем включать произвольные новые реализации. Тем не менее, Scikit-learn также важен для определения API-фреймворка для разработки совместимых компонентов машинного обучения вне основной библиотеки.

Thus our main goals in this era are to:

  • продолжать поддерживать высококачественную, хорошо документированную коллекцию канонических инструментов для обработки данных и машинного обучения в текущей области (т.е. прямоугольные данные, в основном инвариантные к порядку столбцов и строк; предсказание целей с простой структурой)

  • улучшить удобство для пользователей в разработке и публикации внешних компонентов

  • улучшить совместимость с современными инструментами анализа данных (например, Pandas, Dask) и инфраструктурами (например, распределенная обработка)

Многие более детальные цели можно найти под Тег API в трекере проблем.

Архитектурные / общие цели#

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

  1. Улучшенная обработка Pandas DataFrames

    • документировать текущую обработку

  2. Улучшенная обработка категориальных признаков

    • Модели на основе деревьев должны уметь обрабатывать как непрерывные, так и категориальные признаки #29437.

    • Обработка смесей категориальных и непрерывных переменных

  3. Улучшенная обработка пропущенных данных

    • Обеспечение лояльности мета-оценщиков к пропущенным данным путем реализации общего теста.

    • Генератор ампутационных выборок для создания пропущенных частей набора данных #6284

  4. Более дидактическая документация

    • В scikit-learn добавлено все больше опций. В результате документация перегружена, что затрудняет новичкам получение общей картины. Можно провести работу по приоритизации информации.

  5. Передача информации, не относящейся к (X, y): Свойства признаков

    • Обработка по признакам (например, "является ли это номинальным / порядковым / текстом на английском языке?") также не должна предоставляться конструкторам оценщиков, в идеале, но должна быть доступна как метаданные вместе с X. #8480

  6. Передача информации, не относящейся к (X, y): Информация о целевой переменной

    • У нас возникают проблемы с передачей полного набора классов всем компонентам, когда данные разделены/выбраны. #6231 #8100

    • У нас нет способа обрабатывать смесь категориальных и непрерывных целевых переменных.

  7. Упростить внешним пользователям написание компонентов, совместимых с Scikit-learn

    • Более самодостаточное выполнение scikit-learn-contrib или аналогичного ресурса

  8. Поддержка передискретизации и сокращения выборок

    • Разрешить субдискретизацию мажоритарных классов (в конвейере?) #3855

  9. Улучшенные интерфейсы для интерактивной разработки

    • Улучшите HTML-визуализации оценщиков с помощью estimator_html_repr.

    • Включить больше инструментов построения графиков, а не только в качестве примеров.

  10. Улучшенные инструменты для диагностики моделей и базового вывода

    • работа над унифицированным интерфейсом для «важности признаков»

    • лучшие способы обработки проверочных наборов при обучении

  11. Улучшенные инструменты для выбора гиперпараметров с транзитивными оценщиками

    • Поиск по сетке и перекрестная проверка не применимы к большинству задач кластеризации. Выбор на основе стабильности более актуален.

  12. Улучшенная поддержка ручного и автоматического построения конвейеров

    • Более простой способ построения сложных конвейеров и допустимых пространств поиска #7608 #5082 #8243

    • предоставляют ли диапазоны поиска для общих оценщиков??

    • ср. searchgrid

  13. Улучшенное отслеживание обучения

    • Verbose не очень удобен и должен использовать стандартную библиотеку логирования #6929, #78

    • Обратные вызовы или аналогичная система облегчили бы ведение журнала и раннюю остановку

  14. Распределенный параллелизм

    • Принимать данные, соответствующие __array_function__

  15. Путь вперед для большего количества внеядерных

    • Dask обеспечивает простые вычисления вне ядра. Хотя модель Dask, вероятно, не может быть адаптирована ко всем алгоритмам машинного обучения, большинство машинного обучения работает с данными меньшего размера, чем ETL, поэтому мы, возможно, можем адаптироваться к очень большому масштабу, поддерживая только часть шаблонов.

  16. Обратно совместимая сериализация/десериализация некоторых оценщиков

    • В настоящее время сериализация (с помощью pickle) нарушается между версиями. Хотя мы, возможно, не сможем обойти другие ограничения pickle, такие как безопасность и т.д., было бы здорово обеспечить безопасность между версиями, начиная с версии 1.0. Примечание: Гаэль и Оливье считают, что это может вызвать тяжёлое бремя поддержки, и мы должны управлять компромиссами. Возможная альтернатива представлена в следующем пункте.

  17. Документация и инструменты для управления жизненным циклом модели

    • Документирование лучших практик для развертывания моделей и жизненного цикла: перед развертыванием модели: снимок версий кода (numpy, scipy, scikit-learn, пользовательский репозиторий кода), скрипт обучения и псевдоним для получения исторических обучающих данных + снимок копии небольшого валидационного набора + снимок предсказаний (предсказанные вероятности для классификаторов) на этом валидационном наборе.

    • Документация и инструменты для упрощения управления обновлением версий scikit-learn:

      • Попробуйте загрузить старый pickle, если он работает, используйте снимок предсказаний на валидационном наборе, чтобы обнаружить, что сериализованная модель всё ещё ведёт себя так же;

      • Если joblib.load / pickle.load не работает, используйте версионированный управляющий скрипт обучения + исторический набор обучения для переобучения модели и используйте снимок прогнозов на валидационном наборе, чтобы убедиться, что возможно восстановить предыдущую прогнозную производительность: если это не так, вероятно, есть ошибка в scikit-learn, которую нужно сообщить.

  18. Все в scikit-learn должно соответствовать нашему API-контракту. Мы все еще находимся в процессе принятия решений по некоторым связанным вопросам.

    • Pipeline и FeatureUnion изменяют свои входные параметры в fit. Исправление этого требует уверенного понимания их случаев использования, чтобы сохранить всю текущую функциональность. #8157 #7382

  19. (Необязательно) Улучшить набор общих тестов scikit-learn, чтобы убедиться, что (по крайней мере для часто используемых) модели имеют стабильные предсказания между версиями (для обсуждения);

    • Расширить документацию, упомянув, как развертывать модели в средах без Python, например ONNX. и используйте вышеуказанные лучшие практики для оценки предсказательной согласованности между scikit-learn и функциями предсказания ONNX на валидационном наборе.

    • Документировать лучшие практики для обнаружения временного дрейфа распределения для развернутой модели и лучшие практики для повторного обучения на свежих данных без вызова катастрофических регрессий прогнозной производительности.