Дорожная карта#
Цель этого документа#
В этом документе перечислены общие направления, которые основные разработчики заинтересованы развивать в 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 в трекере проблем.
Архитектурные / общие цели#
Список пронумерован не как указание порядка приоритета, а чтобы облегчить ссылки на конкретные пункты. Пожалуйста, добавляйте новые записи только в конце. Обратите внимание, что зачеркнутые записи уже выполнены, и мы стараемся поддерживать документ в актуальном состоянии по мере работы над этими проблемами.
Улучшенная обработка Pandas DataFrames
документировать текущую обработку
Улучшенная обработка категориальных признаков
Модели на основе деревьев должны уметь обрабатывать как непрерывные, так и категориальные признаки #29437.
Обработка смесей категориальных и непрерывных переменных
Улучшенная обработка пропущенных данных
Обеспечение лояльности мета-оценщиков к пропущенным данным путем реализации общего теста.
Генератор ампутационных выборок для создания пропущенных частей набора данных #6284
Более дидактическая документация
В scikit-learn добавлено все больше опций. В результате документация перегружена, что затрудняет новичкам получение общей картины. Можно провести работу по приоритизации информации.
Передача информации, не относящейся к (X, y): Свойства признаков
Обработка по признакам (например, "является ли это номинальным / порядковым / текстом на английском языке?") также не должна предоставляться конструкторам оценщиков, в идеале, но должна быть доступна как метаданные вместе с X. #8480
Передача информации, не относящейся к (X, y): Информация о целевой переменной
Упростить внешним пользователям написание компонентов, совместимых с Scikit-learn
Более самодостаточное выполнение scikit-learn-contrib или аналогичного ресурса
Поддержка передискретизации и сокращения выборок
Разрешить субдискретизацию мажоритарных классов (в конвейере?) #3855
Улучшенные интерфейсы для интерактивной разработки
Улучшите HTML-визуализации оценщиков с помощью
estimator_html_repr.Включить больше инструментов построения графиков, а не только в качестве примеров.
Улучшенные инструменты для диагностики моделей и базового вывода
работа над унифицированным интерфейсом для «важности признаков»
лучшие способы обработки проверочных наборов при обучении
Улучшенные инструменты для выбора гиперпараметров с транзитивными оценщиками
Поиск по сетке и перекрестная проверка не применимы к большинству задач кластеризации. Выбор на основе стабильности более актуален.
Улучшенная поддержка ручного и автоматического построения конвейеров
Более простой способ построения сложных конвейеров и допустимых пространств поиска #7608 #5082 #8243
предоставляют ли диапазоны поиска для общих оценщиков??
ср. searchgrid
Улучшенное отслеживание обучения
Распределенный параллелизм
Принимать данные, соответствующие
__array_function__
Путь вперед для большего количества внеядерных
Dask обеспечивает простые вычисления вне ядра. Хотя модель Dask, вероятно, не может быть адаптирована ко всем алгоритмам машинного обучения, большинство машинного обучения работает с данными меньшего размера, чем ETL, поэтому мы, возможно, можем адаптироваться к очень большому масштабу, поддерживая только часть шаблонов.
Обратно совместимая сериализация/десериализация некоторых оценщиков
В настоящее время сериализация (с помощью pickle) нарушается между версиями. Хотя мы, возможно, не сможем обойти другие ограничения pickle, такие как безопасность и т.д., было бы здорово обеспечить безопасность между версиями, начиная с версии 1.0. Примечание: Гаэль и Оливье считают, что это может вызвать тяжёлое бремя поддержки, и мы должны управлять компромиссами. Возможная альтернатива представлена в следующем пункте.
Документация и инструменты для управления жизненным циклом модели
Документирование лучших практик для развертывания моделей и жизненного цикла: перед развертыванием модели: снимок версий кода (numpy, scipy, scikit-learn, пользовательский репозиторий кода), скрипт обучения и псевдоним для получения исторических обучающих данных + снимок копии небольшого валидационного набора + снимок предсказаний (предсказанные вероятности для классификаторов) на этом валидационном наборе.
Документация и инструменты для упрощения управления обновлением версий scikit-learn:
Попробуйте загрузить старый pickle, если он работает, используйте снимок предсказаний на валидационном наборе, чтобы обнаружить, что сериализованная модель всё ещё ведёт себя так же;
Если joblib.load / pickle.load не работает, используйте версионированный управляющий скрипт обучения + исторический набор обучения для переобучения модели и используйте снимок прогнозов на валидационном наборе, чтобы убедиться, что возможно восстановить предыдущую прогнозную производительность: если это не так, вероятно, есть ошибка в scikit-learn, которую нужно сообщить.
Все в scikit-learn должно соответствовать нашему API-контракту. Мы все еще находимся в процессе принятия решений по некоторым связанным вопросам.
(Необязательно) Улучшить набор общих тестов scikit-learn, чтобы убедиться, что (по крайней мере для часто используемых) модели имеют стабильные предсказания между версиями (для обсуждения);
Расширить документацию, упомянув, как развертывать модели в средах без Python, например ONNX. и используйте вышеуказанные лучшие практики для оценки предсказательной согласованности между scikit-learn и функциями предсказания ONNX на валидационном наборе.
Документировать лучшие практики для обнаружения временного дрейфа распределения для развернутой модели и лучшие практики для повторного обучения на свежих данных без вызова катастрофических регрессий прогнозной производительности.