Thursday, January 22, 2015

Введение в scikit-learn

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

Как появилась библиотека scikit-learn?

David Cournapeau изначально разработал библиотеку scikit-learn в рамках проекта Google Summer of Code в 2007 году. Позднее Matthieu Brucher присоединился к проекту и использовал scikit-learn в своей дипломной работе. В 2010 году INRIA подключилась к работе над библиотекой и первая версия (v0.1 beta) была выпущена в конце января 2010.

На текущий момент в проекте задействовано более 30 активных участников и имеется финансовая поддержка от INRIA, Google, Tinyclues и Python Software Foundation.

Что такое scikit-learn?

Библиотека scikit-learn предоставляет реализацию целого ряда алгоритмов для обучения с учителем (Supervised Learning) и обучения без учителя (Unsupervised Learning) через интерфейс для языка программирования Python. Данная библиотека распространяется под лицензией "Simplified BSD License" и имеет дистрибутивы для множества различных версий Linux, поощрая тем самым академическое и коммерческое использование scikit-learn.

Scikit-learn построена поверх SciPy (Scientific Python), который должен быть установлен перед использованием scikit-learn. Данный стек включает в себя:

  • NumPy: расширение языка Python, добавляющее поддержку больших многомерных массивов и матриц, вместе с большой библиотекой высокоуровневых математических функций для операций с этими массивами
  • SciPy: открытая библиотека высококачественных научных инструментов для языка программирования Python
  • Matplotlib: библиотека на языке программирования Python для визуализации данных двумерной (2D) графикой (3D графика также поддерживается)
  • IPython: интерактивная оболочка для языка программирования Python, которая предоставляет расширенную интроспекцию, дополнительный командный синтаксис, подсветку кода и автоматическое дополнение
  • Sympy: библиотека для символьных вычислений
  • Pandas: различные структуры данных и анализ

Дополнения и модули SciPy условно именуются SciKits. Именно поэтому модуль, предоставляющий алгоритмы обучения, называется scikit-learn.

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

Несмотря на то что весь интерфейс библиотеки представлен на Python, но использование библиотек, написанных на C во внутренней реализации некоторых частей scikit-learn, позволяет значительно повысить скорость работы, например, использование NumPy для работы с массивами и для операций с матрицами, использование LAPACK и LibSVM и аккуратное использование Cython.

Возможности scikit-learn

Библиотека scikit-learn ориентирована в первую очередь на моделирование данных, а не на загрузку, манипуляцию и обобщение данных. Для таких целей, как раз-таки, лучше использовать NumPy и Pandas.

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

  • Кластеризация (Clustering): для группировки неразмеченных данных, например, метод k-средних (k-means)
  • Перекрестная проверка (Cross Validation): для оценки эффективности работы модели на независимых данных
  • Наборы данных (Datasets): для тестовых наборов данных и для генерации наборов данных с определенными свойствами для исследования поведенческих свойств модели
  • Сокращение размерности (Dimensionality Reduction): для уменьшения количества атрибутов для визуализации и отбора признаков (Feature Selection), например, метод главных компонент (Principal Component Analysis)
  • Алгоритмические композиции (Ensemble Methods): для комбинирования предсказаний нескольких моделей
  • Извлечение признаков (Feature Extraction): определение атрибутов в изображениях и текстовых данных
  • Отбор признаков (Feature Selection): для выявления значимых атрибутов на основе которых будет построена модель
  • Оптимизация параметров алгоритма (Parameter Tuning): для получения максимально эффективной отдачи от модели
  • Множественное обучение (Manifold Learning): для нелинейного сокращения размерности данных
  • Алгоритмы обучения с учителем (Supervised Models): огромный набор методов не ограничивается обобщенными линейными моделями (Generalized Linear Models), дискриминантным анализом (Discriminate Analysis), наивным байесовским классификатором (Naive Bayes), нейронными сетями (Neural Networks), методом опорных векторов (Support Vector Machines) и деревьями принятия решений (Decision Trees).

Пример: Деревья регрессии и классификации

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

В данном примере мы используем достаточно популярный алгоритм на основе деревьев принятия решений под названием Classification and Regression Tress (CART) и применяем его к набору данных Iris. Данный набор данных используется для различных примеров и поставляется вместе с библиотекой. Классификатор проходит процесс настройки и выполняется процесс предсказания. Все это происходит на тренировочном наборе данных. И в самом конце мы выводим на экран оценку качества работы нашей модели и матрицу неточностей (Confusion Matrix).

Кто использует scikit-learn

Страница отзывов scikit-learn содержит отзывы Inria, Mendeley, wise.io, Evernote, Telecom ParisTech и AWeber в качестве пользователей библиотеки. И, в общем-то, если посмотреть на этот список компаний, которые рассказали об использовании scikit-learn, то вполне можно предположить, что количество компаний, которые используют scikit-learn в своей работе, вероятнее всего, еще больше.

При разработке библиотеки просматривается хорошее управление релизами. Важным фактором также является то, что код библиотеки имеет высокий процент покрытия тестами. Scikit-learn вполне подходит как для тестовых проектов, так и для продакшн-систем.

Дополнительные ресурсы

Хорошей отправной точкой для продолжения своего знакомства с scikit-learn будет домашняя страница библиотеки, которая содержит документацию и ссылки на дополнительные ресурсы. При желании можно получить доступ к коду в репозитарии на github, а также доступ к релизам на странице Sourceforge.

Документация

Хорошим стартом использования scikit-learn на практике будет страница Quick Start Tutorial и просмотр примеров кода по интересующим вас алгоритмам обучения в руководстве пользователя. Ну и конечно же API Reference будет отличным подспорьем при выполнении практических задач.

Публикации

Дополнительную информацию о том, как зарождался данный проект и о его концепциях можно найти в данных публикациях:

Книги

Хорошей книгой по данной тематике будет “Building Machine Learning Systems with Python”, она написана хорошим языком и содержит интересные примеры.


Источники:

3 comments:

  1. Очень полезная статья, спасибо!

    ReplyDelete
  2. Огромнейшее спасибо за статью!

    ReplyDelete
  3. Здравствуйте. Какой максимальный объем может быть обработан при помощи данной библиотеки?

    ReplyDelete