[Перевод] Как я писал книгу 'Python Machine Learning'

Здравствуйте, уважаемые хабровчане!

В настоящее время мы всерьез намерены в обозримом порадовать вас серьезной книгой по машинному или глубинному обучению. Среди книг, вызвавших у нас наибольший интерес, особого упоминания заслуживает работа Себастьяна Рашки «Python Machine Learning»

7f63dee40e2a449ca91fe57c11f05e36.jpg

Предлагаем почитать, что сам автор рассказывает об этой книге. Мы позволили себе сократить статью практически вдвое, так как вся ее вторая часть посвящена тонкостям писательского труда и оформления книги, а тематические тонкости и актуальность темы рассмотрены в самом начале. Надеемся, что вам понравится текст, а нам — результаты опроса.

Прошло немало времени, и вот я с удовольствием сообщаю: книга «Python Machine Learning» наконец-то на полках! Разумеется, я мог просто разослать имейлы всем, кто интересовался судьбой этой книги. Другой вариант — просто набрать в Твиттере 140 символов (вернее, 140 минус гиперссылка) и забыть об этом. Но, так или иначе, работа над книгой «Python Machine Learning» продлилась не один месяц, и я бы с радостью посидел в любимой кофейне и вкратце рассказал, как она создавалась.

ISBN-10: 1783555130
ISBN-13: 978–1783555130
Paperback: 454 pages, ebook
Packt Publishing Ltd. (September 24th, 2015)

Меня давно спрашивают об этой книге: о чем она, и как я нашел время (1) написать ее (2) прочитать все интересные статьи, о которых сообщал в Твиттере (3) исследовать нужный материал (4) попутно расслабляться и радоваться жизни. Теоретически, могу ответить на первый вопрос так: думаю, все технические книги пишутся в свободное время. Я решил, что на несколько месяцев могу отвлечься от привычных хобби — программирования и ведения блога — тогда у меня высвободится время для книги.

Пишите только о том, в чем разбираетесь. Тогда у вас появится масса свободного времени.
— Говард Немеров

«Машинное обучение на Python?» — О чем вообще речь?

Все началось с благих намерений: я захотел составить сборник полезных советов для начинающих специалистов по машинному обучению. Да, книгу «Машинное обучение на Python» фолиантом не назовешь, однако проблема заключалась не в недостатке материала. Скорее наоборот: если вы увлечены темой, то можете писать и писать. Ограничить объем книги — вот что было непросто!

Итак, «что же такого интересного в машинном обучении и Python, что ты решил написать об этом книгу, посвятив ей почти все свободное время?» Если вы читали мои посты в соцсетях, но такой вопрос у вас по-прежнему донимает, то мне остается лишь процитировать другого человека:

Сейчас данные льются на нас сплошным потоком. По одной из последних оценок ежедневно генерируется 2,5 квинтиллиона (1018) байт данных. Объемы неимоверные: более 90% информации, которую мы сейчас храним, было сгенерировано в течение прошлого десятилетия. К сожалению, большая часть этой информации такова, что человек не может ею воспользоваться. Либо эти данные не поддаются стандартной аналитической обработке, либо данные слишком обширны, чтобы мы могли их хотя бы осмыслить.
Благодаря машинному обучению, компьютеры могут обрабатывать такие данные, учиться на них и извлекать опорную информацию (actionable data) из-за практически непроницаемых стен «больших данных». В основе работы разнообразных устройств от суперкомпьютеров, обеспечивающих поиск в Google, до смартфонов, помещающихся в кармане, лежат принципы машинного обучения, при помощи которого мы познаем большую часть окружающего мира, зачастую даже не подозревая об этом.
Что же такое «машинное обучение», как оно работает? Как машинное обучение поможет мне заглянуть в неведомое, прокачать мой бизнес или просто узнать, что Интернет-сообщество думает о моем любимом фильме? Все это вы узнаете из книги, вышедшей из-под пера моего хорошего друга и коллеги Себастьяна Рашки
— Др. Рэндал Олсон (из Предисловия)

73fd586c4e324acb9162a2e9ae48b494.png

Допустим, «машинное обучение» сегодня довольно горячая тема, но «почему Python»? Вкратце: потому что он интуитивно понятный, довольно продуктивный и применимый на самых разных уровнях. Говоря «продуктивный», я сразу отвлекаюсь от темы, поэтому — не судите строго — отсылаю вас к моему предыдущему посту Python, Machine Learning, and Language Wars. A Highly Subjective Point of View, в котором рассматривал этот вопрос.

Технологии — мелочь. Главное верить в людей, считать, что, в принципе, люди хорошие и умные и понимать, что если дать им нужные инструменты, то эти люди станут просто творить чудеса.
— Стив Джобс

К чему мы придем с этой книгой?

«А эта книга выделяется на фоне других работ по Python и машинному обучению?»— ведь их уже довольно много. Думаю, да! Когда издатель впервые обратился ко мне с предложением написать такую книгу, я вежливо отказался, так как на эту тему уже было несколько книг. Так вот, отказавшись, я решил некоторые из них почитать. Не скажу, что они лучше или хуже моей, просто я иначе представлял себе книгу по машинному обучению с прикладными примерами на Python.

[…] Что касается компьютерных программ по машинному обучению как таковых, они напоминают проработку научного метода, однако всю работу выполняет не ученый, а компьютер, который, разумеется, гораздо мощнее любого ученого, поэтому работает гораздо быстрее и управляется со значительно более крупными объемами данных
— Педро Домингос (выдержка из интервью с Домингосом, посвященного его новой книге: A Master Algorithm in Machine Learning Could Change Everything)

Есть отличные книги, в которых рассматривается теория машинного обучения. В частности, мне очень нравятся Pattern Recognition and Machine Learning Бишопа и Pattern Classification Дуды, Харта и Сторка. Они классные, правда классные. Думаю, писать что-нибудь в их духе уже не требуется. Однако, пусть эти книги и позиционируются «для начинающих», новичку с ними придется непросто. Хотя я и рекомендую эти книги всем, кто всерьез намеревается заниматься машинным обучением, эта литература скорее представляется мне «дополнительным чтением», нежели первой книгой по машинному обучению. В общем, я считаю, что наряду с изучением теории нужно самому возиться с алгоритмами машинного обучения и реализовывать их — именно так вы сможете с максимальной пользой потратить время на освоение этой дисциплины.

Есть и очень практичные книги, которые читаются скорее как документация (* здесь вставьте scikit-learn, Vowpal Wabbit, caret или любую другую библиотеку/API для машинного обучения). Полагаю, это тоже хорошие книги, но я бы оставил подробное обсуждение библиотек н уровне (онлайновой) документации — таким ресурсом удобно пользоваться в качестве интерактивного справочника и, кроме того, ее легко своевременно обновлять.

Есть правила, по которым пишутся романы. К сожалению, никто их не знает.
— У, Сомерсет Моэм

Работая над книгой, я ставил перед собой три фундаментальные цели: (1) объяснить самые общие концепции (2) дополнить их необходимым математическим аппаратом и (3) привести примеры и объяснить, как их применять.

Общий обзор помогает сложить воедино фрагменты этой мозаики, а математика — понять, что происходит на внутрисистемном уровне и уйти от наиболее распространенных проблем. Учиться однозначно удобнее, если материал сопровождается такими примерами. Наконец, действительно важно «покопаться в теме руками», то есть, написать код, в котором воплощается изученный материал. Да, мы хотим изучить концепции, но в конечном итоге собираемся решать при помощи этих концепций реальные прикладные проблемы.

d5305e7c0b0d47be9d066075c01c3d49.png

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

Что вы найдете и чего не найдете в этой книге

Эта книга не о «data science». В ней ничего не говорится о формулировании гипотез, сборе данных и извлечении выводов по результатам анализа нетипичных или экзотических множеств данных; акцент сделан именно на машинном обучении. Однако, наряду с обсуждением различных алгоритмов такого рода, я считаю, что очень важно рассмотреть и другие аспекты типичного процесса машинного обучения, смоделировать сборочный конвейер, начиная с препроцессинга множеств данных. Мы обсудим такие темы, как работа с недостающими значениями, преобразование категорийных переменных в форматы, применимые при машинном обучении, выбор информативных свойств, сжатие данных с переносом в подпространства с меньшим количеством измерений. В книге есть целая глава об интерпретации моделей, где обсуждается перекрестная валидация с расщеплением выборки, k-блочная перекрестная валидация, вложенная перекрестная валидация, настройка гиперпараметров и другие показатели производительности. Для небольшого закрепления материала я добавил главу о встраивании моделей машинного обучения в веб-приложение, которым можно поделиться со всем миром.

019f0a178ca74f94834695ffade9ed08.png

Это не очередная книга из разряда «смотрите, как работает scikit-learn». Я хочу объяснить, как устроено машинное обучение, рассказать вам все необходимое о проверенных методах и подводных камнях. Затем мы научимся применять эти концепции на практике с использованием NumPy, scikit-learn, Theano и т.д. Разумеется, в этой книге будет изрядное количество «математики и уравнений», на мой взгляд, иначе просто нельзя, если мы не хотим превращать книгу в «черный ящик». Но, надеюсь, следить за нитью повествования будет действительно не сложно, и книга подойдет даже тем читателям, которые не имеют основательной математической подготовки. Во многих разделах этой книги вы найдете примеры со scikit-learn — на мой взгляд, это самая красивая и практичная библиотека для машинного обучения.

Вот краткое оглавление:

  • 01 — Машинное обучение — как заставить компьютеры учиться на основе данных
  • 02 — Тренировка алгоритмов машинного обучения для выполнения классификации
  • 03 — Экскурсия по классификаторам машинного обучения на примере Scikit-Learn
  • 04 — Подготовка хороших тренировочных множеств — препроцессинг данных
  • 05 — Сжатие данных при помощи понижения размерности
  • 06 — Изучаем наилучшие методы интерпретации моделей и оптимизации гиперпараметров
  • 07 — Комбинирование различных моделей для множественного обучения
  • 08 — Машинное обучение при анализе тональности
  • 09 — Встраивание модели машинного обучения в веб-приложение
  • 10 — Прогнозирование непрерывных целевых переменных при помощи регрессионного анализа
  • 11 — Работа с немаркированными данными — Кластерный анализ
  • 12 — Тренировка искусственных нейронных сетей с целью распознавания образов
  • 13 — Распараллеливание тренировки нейронных сетей с применением Theano

Экспресс-ссылки

Репозиторий на GitHub с общей информацией и примерами кода
Библиография и ссылки на дополнительные ресурсы
Ссылки на электронную и бумажную версию в магазинах Amazon.com, Amazon.co.uk, Packt, Apple iBooks
Очень интересные отклики, спасибо!

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

© Habrahabr.ru