Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
Aurelien Geron
Орельен Жерон
2018
ББК 32.973.26-018.2.75
Ж61
УДК 681.3.07
Компьютерное издательство "Диалектика"
Зав. редакцией С.Н. Тригуб
Перевод с английского и редакция Ю.Н. Артеменко
По общим вопросам обращайтесь в издательство "Диалектика"
по адресу: info@dialektika.com, http://www.dialektika.com
Жерон, Орельен.
Жбl П рикладное машинное обучение с помощью Scikit-Learn и TensorFlow:
концепции, инструменты и техники для создания интеллектуальных систем.
Пер. с англ. - СпБ.: ООО "Альфа-книга': 2018. - 688 с.: ил. - Парал. тит. англ.
Authorized Russian translation of the English edition of Hands-On Machine Leaming with Scikit-Learn and
TensorF/ow (ISBN 978-1-491-96229-9) © 2017 Aurelien Geron. All rights reserved.
Тhis translation is published and sold Ьу permission of O'Reilly Media, lпс" wh.ich owns or controls all rights
to puЬ!ish and sell the same.
All rights reserved. No part of this work may Ье reproduced or transmitted in any form or Ьу any means,
electronic or mechanical, including photocopying, recording, or Ьу any information storage or retrieval system,
without the prior written permission of the copyright owner and the PuЬ!isher.
Научно-популярное издание
Орельен Жерон
Прикладное машинное обучение с помощью
Scikit-Learn и TensorFlow:
концепции, инструменты и техники для создания
интеллектуальных систем
ООО ''Альфа-книга'; 195027, Санкт-Петербург, Магнитогорская ул" д. 30, лит А, пом. 848
ISBN 978-5-9500296-2-2 (рус.) ©Компьютерное издательство "Диалектика·: 2018,
перевод, оформление, макетирование
Об авторе 15
Благодарности 15
Предисловие 17
Цунами машинного обучения 17
Машинное обучение в ваших проектах 18
Цель и подход 18
Предварительные требования 19
Дорожная карта 20
Другие ресурсы 21
Типографские соглашения, используемые в книге 22
Использование примеров кода 23
Ждем ваших отзывов! 24
Часть 1. Основы машинногообучения 25
Глава 1 Введение в машинное обучение
. 27
Что такое машинное обучение? 28
Для чего используют машинное обучение? 29
Типы систем машинного обучения 32
Обучение с учителем и без учителя 33
Пакетное и динамическое обучение 40
Обучение на основе образцов или на основе моделей 43
Основные проблемы машинного обучения 50
Недостаточный размер обучающих данных 50
Нерепрезентативные обучающие данные 52
Данные плохого качества 54
Несущественные признаки 54
Переобучение обучающих данных 55
Недообучение обучающих данных 57
Шаг назад 58
Испытание и проверка 59
Упражнения 61
Глава 2. Полный проект машинного обучения 63
Работа с реальными данными 63
Выяснение общей картины 65
Постановка задачи 65
Выбор критерия качества работы 68
Проверка допущений 71
б Содержание
Получение данных 71
Создание рабочей области 71
Загрузка данных 75
Беглый взгляд на структуру данных 77
Создание испытательного набора 81
Обнаружение и визуализация данных для понимания их сущности 87
Визуализация географических данных 87
Поиск связей 90
Экспериментирование с комбинациями атрибутов 93
Подготовка данных для алгоритмов машинного обучения 94
Очистка данных 95
Обработка текстовых и категориальных атрибутов 98
Специальные трансформаторы 102
Масштабирование признаков 103
Конвейеры трансформации 104
Выбор и обучение модели 106
Обучение и оценка с помощью обучающего набора 107
Более подходящая оценка с использованием перекрестной проверки 108
Точная настройка модели 111
Решетчатый поиск 111
Рандомизированный поиск 114
Ансамблевые методы 115
Анализ лучших моделей и их ошибок 115
Оценка системы с помощью испытательного набора 116
Запуск, наблюдение и сопровождение системы 117
Пробуйте! 118
Упражнения 118
Глава 3. Классификация 121
MNIST 121
. Обучение двоичного классификатора 124
Показатели производительности 125
Измерение правильности с использованием перекрестной проверки 125
Матрица неточностей 127
Точность и полнота 129
Соотношение точность/полнота 131
Кривая ROC 135
Многоклассовая классификация 139
Анализ ошибок 142
Многозначная классификация 146
Многовыходовая классификация 148
Упражнения 150
Содержание 7
Глава 4. Обучение моделей 153
Линейная регрессия 154
Нормальное уравнение 156
Вычислительная сложность 159
Градиентный спуск 160
Пакетный градиентный спуск 163
Стохастический градиентный спуск 167
Мини-пакетный градиентный спуск 170
Полиномиальная регрессия 172
Кривые обучения 174
Регуляризированные линейные модели 179
Гребневая регрессия 179
Лассо-регрессия 182
Эластичная сеть 184
Раннее прекращение 185
Логистическая регрессия 187
Оценивание вероятностей 187
Обучение и функция издержек 189
Границы решений 190
Многопеременная логистическая регрессия 193
Упражнения 197
Глава 5. Методы опорных векторов 199
Линейная классификация SVM 199
Классификация с мягким зазором 200
Нелинейная классификация SVM 203
Полиномиальное ядро 204
Добавление признаков близости 206
Гауссово ядро RВF 207
Вычислительная сложность 209
Регрессия SVM 210
Внутренняя кухня 212
Функция решения и прогнозы 212
Цель обучения 213
Квадратичное программирование 215
Двойственная задача 216
Параметрически редуцированные методы SVM 217
Динамические методы SVM 220
Упражнения 222
Глава 6. Деревья принятия решений 223
Обучение и визуализация дерева принятия решений 223
Вырабатывание прогнозов 225
8 Содержание
Оценивание вероятностей классов 227
Алгоритм обученияCA RT 228
Вычислительная сложность 229
Загрязненность Джини или энтропия? 230
Гиперпараметры регуляризации 230
Регрессия 232
Неустойчивость 235
Упражнения 236
Содержание 9
Часть 11. Нейронные сети и глубокое обучение 291
Глава 9. Подготовка к работе с TensorFlow 293
Установка 297
Создание первого графа и его прогон в сеансе 297
Управление графами 299
Жизненный цикл значения узла 300
Линейная регрессия с помощью TensorFlow 301
Реализация градиентного спуска 302
Расчет градиентов вручную 303
Использованиеautodiff 304
Использование оптимизатора 306
Передача данных алгоритму обучения 306
Сохранение и восстановление моделей 308
Визуализация графа и кривых обучения с использованием TensorBoard 309
Пространства имен 313
Iv1одульность 314
Совместное использование переменных 316
Упражнения 320
10 Содержание
Повторное использование заранее обученных слоев 366
Повторное использование модели TensorFlow 366
Повторное использование моделей из других фреймворков 370
Замораживание низкоуровневых слоев 371
Кеширование замороженных слоев 372
Подстройка, отбрасывание или замена слоев верхних уровней 373
Зоопарки моделей 373
Предварительное обучение без учителя 374
Предварительное обучение на вспомогательной задаче 375
Более быстрые оптимизаторы 376
Моментная оптимизация 377
Ускоренный градиент Нестерова 378
AdaGrad 380
RМSProp 382
ОптимизацияAdarn 382
Планирование скорости обучения 385
Избегание переобучения посредством регуляризации 388
Раннее прекращение 388
Регуляризация f1 и f2 389
Отключение 390
Регуляризация на основе mах-нормы 393
Дополнение данных 395
Практические рекомендации 397
Упражнения 398
Содержание 11
Распараллеливание нейронных сетей в кластере TensorFlow 438
Одна нейронная сеть на устройство 439
Репликация внутри графа или между графами 440
Параллелизм модели 443
Параллелизм данных 445
Упражнения 451
Глава 13. Сверточные нейронные сети 453
Строение зрительной коры головного мозга 454
Сверточный слой 456
Фильтры 458
Наложение множества карт признаков 459
Реализация с помощью TensorFlow 462
Требования к памяти 464
Объединяющий слой 466
Архитектуры сверточных нейронных сетей 467
LeNet-5 469
AlexNet 470
GoogLeNet 472
ResNet 476
Упражнения 482
Глава 14. Рекуррентные нейронные сети 485
Рекуррентные нейроны 486
Ячейки памяти 489
Входные и выходные последовательности 489
Базовые рекуррентные нейронные сети в TensorFlow 491
Статическое развертывание во времени 492
Динамическое развертывание во времени 495
Обработка входных последовательностей переменной длины 495
Обработка выходных последовательностей переменной длины 497
Обучение рекуррентных нейронных сетей 497
Обучение классификатора последовательностей 498
Обучение для прогнозирования временных рядов 500
Креативная рекуррентная нейронная сеть 505
Глубокие рекуррентные нейронные сети 506
Распределение глубокой рекуррентной нейронной сети между
множеством графических процессоров 507
Применение отключения 508
Трудность обучения в течение многих временных шагов 510
ЯчейкаL SТМ 511
Смотровые связи 514
ЯчейкаG RU 514
12 Содержание
Обработка естественного языка 516
Векторные представления слов 516
Сеть " кодировщик-декодировщик" для машинного перевода 519
Упражнения 523
Глава 15. Автокодировщики 525
Эффективные представления данных 526
Выполнение анализа главных компонентов с помощью понижающего
линейного автокодировщика 528
Многослойные автокодировщики 529
Реализация с помощью TensorFlow 530
Связывание весов 532
Обучение по одному автокодировщику за раз 533
Визуализация реконструкций 536
Визуализация признаков 537
Предварительное обучение без учителя с использованием многослойных
автокодировщиков 538
Шумоподавляющие автокодировщики 540
Реализация с помощью TensorFlow 541
Разреженные автокодировщики 543
Реализация с помощью TensorFlow 544
Вариационные автокодировщики 545
Генерирование цифр 549
Другие автокодировщики 550
Упражнения 552
Содержание 13
Глава 3. Классификация 599
Глава 4. Обучение моделей 599
Глава 5. Методы опорных векторов 602
Глава 6. Деревья принятия решений 604
Глава 7. Ансамблевое обучение и случайные леса 605
Глава 8. Понижение размерности 607
Глава 9. Подготовка к работе с TensorFlow 610
Глава 10. Введение в искусственные нейронные сети 613
Глава 11. Обучение глубоких нейронных сетей 616
Глава 12. Использование TensorFlow для распределения вычислений
между устройствами и серверами 618
Глава 13. Сверточные нейронные сети 621
Глава 14. Рекуррентные нейронные сети 624
Глава 15. Автокодировщики 626
Глава 16. Обучение с подкреплением 629
14 Содержани е
Об авторе
Орельеи Жерои - консультант по машинному обучению. Бывший работ
ник компании Google, он руководил командой классификации видеороликов
YouTube с 2013 по 2016 год. С 2002 по 2012 год он также-был основателем и
руководителем технического отдела в компании Wifirst, ведущего поставщи
ка услуг беспроводного доступа к Интернету во Франции, а в 2001 году -
основателем и руководителем технического отдела в фирме Polyconseil, кото
рая сейчас управляет сервисом совместного пользования электромобилями
Autolib'.
Благодарности
Я хотел бы поблагодарить своих коллег из Google, особенно команду
классификации видеороликов YouTube, за то, что они научили меня настоль
ко многому в области машинного обучения. Без них я никогда бы не начал
такой проект. Выражаю специальную благодарность своим персональным
гуру по машинному обучению: Клемену Курбе, Жюльену Дюбуа, Матиасу
Кенде, Дэниелу Китачевски, Джеймсу Пэку, Александеру Паку, Аношу Раджу,
Витору Сессаку, Виктору Томчаку, Ингрид фон Глен, Ричу Уошингтону и
всем из YouTube Paris.
Я чрезвычайно признателен всем замечательным людям, находящим вре
мя в своей занятой жизни для критического анализа моей книги до мель
чайших деталей. Спасибо Питу Уордену за ответы на все мои вопросы по
TensorFlow, рецензирование части 11, предоставление многих интересных
идей и, конечно же, за участие в основной команде TensorFlow. Вы непре
менно должны заглянуть в его блог (https : / /petewarden . com/)! Большое
спасибо Лукасу Бивальду за его очень серьезный пересмотр части 11: он
приложил все старания, проверил весь код (и выявил несколько ошибок),
дал множество замечательных советов, а его энтузиазм был заразительным.
Вы просто обязаны посетить его блог (https : / / lukasЬiewa l d . сот!) и
взглянуть на его классных роботов (https : / /goo . gl /Eu5u2 8)! Благодарю
Джастина Фрэнсиса за то, что он также очень тщательно проанализировал
часть 11, отловил ошибки и предоставил прекрасные идеи, в частности по
главе 16. Следите за его записями, посвященными TensorFlow (https : / /
goo . gl / 2 8ve 8z)!
15
Огромное спасибо Дэвиду Анджиевски, который пересмотрел часть 1 и
дал невероятно полезный отзыв, указав на непонятные разделы и предло
жив способы их улучшения. Зайдите на его веб-сайт (ht tp : / / www . davi d
andrze j ews k i . com/ )! Благодарю Грегуара Мениля, который проанали
зировал часть 11 и внес очень интересную практическую рекомендацию по
обучению нейронных сетей. Также спасибо Эдди Хонгу, Салиму Семауну,
Кариму Матра, Ингрид фон Глен, Иэну Смезу и Венсану Гильбо за рецензи
рование части 1 и множество полезных советов. И я благодарен своему тестю
Мишелю Тесье, бывшему учителю математики, а теперь замечательному пе
реводчику произведений Антона Чехова, за то, что он помог уладить дело с
некоторыми математическими выкладками в книге, и проанализировал тет
радь Jupyter по линейной алгебре.
Разумеется, гигантское спасибо моему дорогому брату Сильвену, который
пересматривал каждую главу, проверял каждую строчку кода, давал отзывы
буквально на каждый раздел и поддерживал меня от первой строки до пос
ледней. Люблю тебя, братишка!
Благодарю фантастических сотрудников издательства O'Reilly, в особен
ности Николь Таш, обеспечивавшую проницательные отзывы, всегда радос
тную, ободряющую и любезную. Спасибо также Мари Боrуро, Бену Лорика,
Майку Лукидесу и Лорель Рюма за то, что они верили в проект и помога
ли мне определить его рамки. Благодарю Мета Хакера и всех из команды
Atlas за ответы на мои технические вопросы по форматированию, AsciiDoc
и LaTeX, а также Рэйчел Монаган, Ника Адамса и всех из производственной
команды за окончательную проверку и сотни поправок.
И последнее, но не менее важное: я бесконечно признателен моей лю
бимой жене Эмманюэль и трем замечательным детям, Александру, Реми и
Габриель, за то, что они поддерживали меня в интенсивной работе над этой
книгой, задавали много вопросов (кто сказал, что вы не сумеете обучить
нейронным сетям семилетку?) и даже приносили мне печенье и кофе. О чем
еще можно было мечтать?
1б Благода р ности
П р ед исn ов ие
Предисловие 17
Машинное обучение в ваши х проекта х
Итак, естественно вы потрясены машинным обучением и желали бы при
соединиться к компании!
Возможно, вы хотите дать своему домашнему роботу собственный мозг?
Добиться, чтобы он распознавал лица? Научить его ходить?
А может быть у вашей компании имеется масса данных (журналы пользо
вателей, финансовые данные, производственные данные, данные машинных
датчиков, статистические данные от линии оперативной поддержки, отчеты
по персоналу и т.д.) и, скорее всего, вы сумели бы найти там несколько скры
тых жемчужин, просто зная, где искать. Ниже перечислены примеры того,
что можно было бы делать:
• сегментировать заказчиков и установить лучшую маркетинговую стра
похожие клиенты;
• определять, какие транзакции, возможно, являются мошенническими;
UseCase s).
Ц ель и ПОДХОД
В книге предполагается, что вы почти ничего не знаете о машинном обуче
нии. Ее цель - предоставить вам концепции, идеи и инструменты, которые
необходимы для фактической реализации программ, способных обучаться
на основе данных.
Мы рассмотрим многочисленные приемы, начиная с простейших и самых
часто используемых (таких как линейная регрессия) и заканчивая рядом ме
тодов глубокого обучения, которые регулярно побеждают в состязаниях.
Вместо того чтобы реализовывать собственную миниатюрную версию
каждого алгоритма, мы будем применять реальные фреймворки Python про
изводственного уровня.
18 Пред исловие
• Библиотека Scikit-Learn (http : / / s ciki t-learn . org/) очень проста
в использовании, при этом она эффективно реализует многие алгорит
мы машинного обучения, что делает ее великолепной отправной точкой
для изучения машинного обучения.
• TensorFlow (http : / / tensorflow . org/) является более сложной биб
лиотекой для распределенных численных расчетов с применением гра
фов потоков данных. Это позволяет эффективно обучать и запускать
очень большие нейронные сети, потенциально распределяя вычис
ления между тысячами серверов с множеством графических процес
соров. Библиотека TensorFlow была создана в Google и поддерживает
много крупномасштабных приложений машинного обучения. В ноябре
2015 года она стала продуктом с открытым кодом.
П редварительные требования
В книге предполагается, что вы обладаете некоторым опытом програм
мирования на Python и знакомы с главными библиотеками Python для науч
ных расчетов, в частности NumPy (http : / /numpy . org/), Pandas (http : / /
pandas . pydata . org/) и Matplotlib (http : / /matplotlib . org/).
К тому же, если вас интересует, что происходит внутри, тогда вы должны
также понимать математику на уровне колледжа (исчисление, линейную ал
гебру, теорию вероятностей и статистику).
Если вы пока еще не знаете язык Python, то веб-сайт h t t p : / /
learnpython . o rg / станет прекрасным местом, чтобы приступить к его
изучению. Также неплохим ресурсом будет официальное руководство на
python.org (https : / /docs . python . org/ 3 / tutori a l /).
Если вы никогда не работали с Jupyter, то в главе 2 будет описан процесс
его установки и основы: это замечательный инструмент, который полезно
иметь в своем арсенале.
Предисловие 19
Если вы не знакомы с библиотеками Python для научных расчетов, то пре
доставленные тетради Jupyter включают несколько подходящих руководств.
Доступно также краткое математическое руководство по линейной алгебре.
крестной проверки.
• Главные проблемы машинного обучения, в частности недообучение и
тием размерности".
• Наиболее распространенные алгоритмы обучения: линейная и полино
20 Предисловие
• Приемы обучения глубоких нейронных сетей.
• Масштабирование нейронных сетей для гигантских наборов данных.
• Обучение с подкреплением.
Первая часть основана главным образом на использовании Scikit-Learn, в
то время как вторая - на применении TensorFlow.
Не спешите с погружением: несмотря на то, что глубокое обу
чение, без всякого сомнения, является одной из самых захва
тывающих областей в машинном обучении, вы должны сначала
овладеть основами. Кроме того, большинство задач могут до-
вольно хорошо решаться с использованием простых приемов,
таких как случайные леса и ансамблевые методы (обсуждаются
в части 1). Глубокое обучение лучше всего подходит для реше
ния сложных задач, подобных распознаванию изображений,
распознаванию речи или обработке естественного языка, при
условии, что имеется достаточный объем данных, вычисли
тельная мощность и терпение.
Д руr ие ресурсы
Для освоения машинного обучения доступно много ресурсов. Учебные
курсы по машинному обучению Эндрю Ына на Coursera (h t t p s : / / www .
c o u r s e r a . o r g / l e a r n /mac h i n e - le a r n i ng / ) и учебные курсы по ней
ронным сетям и глубокому обучению Джеффри Хинтона (h t t р s : / / www .
c o u r s e r a . org/ c o u r s e / ne u r a l n e t s) изумительны, хотя требуют значи
тельных затрат времени (вероятно, нескольких месяцев).
Кроме того, существует много интересных неб-сайтов о машинном обу
чении, в числе которых, конечно же, веб-сайт с выдающимся руководс
твом пользователя Scikit-Learn (h t tp : / / s c i ki t - l e a r n . o r g / s t aЬ l e /
u s e r _gu i de . h t m l ) . Вам также может понравиться веб-сайт Dataquest
(h t t p s : / / www . da t a que s t . i o / ) , предлагающий очень полезные интер
активные руководства, и блоги по машинному обучению вроде перечислен
ных на веб-сайте Quora (h t t p : / / goo . g l / GwtU ЗA). Наконец, веб-сайт по
глубокому обучению (http : / / deep l e a rn_i ng . net / ) содержит хороший
список ресурсов для дальнейшего изучения.
Предисловие 21
Разумеется, доступны многие другие вводные книги по машинному обу
чению, включая перечисленные ниже.
• Джоэл Грус, Data Science froт Scratch (http : / / s hop . o r e i l l y . с от/
22 Преди слови е
Курсив
Используется для новых терминов.
Моноширинный
Применяется для URL, адресов электронной почты, имен и расшире
ний файлов, листингов программ, а также внутри аозацев для ссылки
на программные элементы наподобие имен переменных и функций, баз
данных, типов данных, переменных среды и ключевых слов.
Моноширинный полужирный
Используется для представления команд или другого текста, который
должен набираться пользователем буквально.
Моноширинный курсив
Применяется для текста, который должен быть заменен значениями,
предоставленными пользователем, или значениями, определенными
контекстом.
Предисловие 23
написание программы, в которой задействовано несколько фрагментов кода
из этой книги, разрешения не требует.
Для продажи или распространения компакт-диска с примерами из книг
O'Reilly разрешение обязательно. Ответ на вопрос путем цитирования дан
ной книги и ссылки на пример кода разрешения не требует. Для встраива
ния значительного объема примеров кода, рассмотренных в этой книге, в
документацию по вашему продукту разрешение обязательно.
Мы высоко ценим указание авторства, хотя и не требуем этого. Устано
вление авторства обычно включает название книги, фамилию и имя ав
тора, издательство и номер ISBN. Например: "Hands-On Machine Learning
with Scikit-Learn and TensorFlow Ьу Aurelien Geron (O'Reilly). Copyright 20 1 7
Aurelien Geron, 978- 1-491-96229-9':
Если вам кажется, что способ использования вами примеров кода выходит
за законные рамки или упомянутые выше разрешения, тогда свяжитесь с нами
по следующему адресу электронной почты: pe rтi s s ions@oreilly . сот.
24 Предисловие
ЧАСТ Ь 1
Основы машинноrо
обучения
ГЛАВА 1
В в едение в м а ш и нн о е
о бу ч ение
27
В настоящей главе вводится много фундаментальных концепций (и жар
гона), которые каждый специалист по работе с данными должен знать на
изусть. Это будет высокоуровневый обзор (единственная глава, не изобилу
ющая кодом); материал довольно прост, но до того как переходить к чтению
остальных глав книги, вы должны удостовериться в том, что вам здесь все
совершенно ясно. Итак, запаситесь кофе и поехали!
Если вы уже знаете все основы машинного обучения, тогда мо
жете перейти прямо к главе 2. Если такой уверенности нет, то
прежде чем двигаться дальше, попробуйте дать ответы на воп
росы в конце главы.
Запуск!
Анализ
ошибок
Запуск!
Изучение Обучение
алгоритма
мо
задачи
Анализ
ошибок
Кроме того, если спамеры обнаружат, что все их сообщения, которые со
держат, к примеру, "4U': блокируются, тогда они могут взамен писать "For U':
Фильтр спама, построенный с использованием приемов традиционного про
граммирования, понадобится обновить, чтобы он маркировал сообщения с
"For U". Если спамеры продолжат обходить ваш фильтр спама, то вам при
дется постоянно писать новые правила.
Напротив, фильтр спама, основанный на приемах МО, автоматически за
метит, что фраза "For U" стала необычно часто встречаться в сообщениях,
маркированных пользователями как спам, и начнет маркировать их без вме
шательства с вашей стороны (рис. 1.3).
Еще одна область, где МО показывает блестящие результаты, охватывает
задачи, которые либо слишком сложно решать с помощью традиционных под
ходов, либо для их решения нет известных алгоритмов. Например, возьмем
распознавание речи: предположим, что вы хотите начать с простого и написать
программу, способную различать слова "один" и "два': Вы можете обратить
внимание, что слово "два" начинается с высокого звука ("Д"), а потому жест
ко закодировать алгоритм, который измеряет интенсивность высокого звука и
применяет это для проведения различий между упомянутыми словами.
Данные
данным;
• получения сведений о сложных задачах и крупных объемах данных.
.-.•lf." t-•
• • • Проверка
•много• данных решения
ное обучение);
• работают ли они, просто сравнивая новые точки данных с известны
�
е
т
М
Образец
Нов ы й образец
dQ о
oo ооСЬ0
000 0 00 оо о
о о СЬеО о О
cfXJ
О О ОО
О О Значен ие?
Признак 1
Нов ый образец
Рис. 1.6. Регрессия
2 Некоторые архитектуры нейронных сетей могут быть без учителя, такие как автоко
дировщики (autoencoder) и ограниченные машины Больцмана (restricted Boltzmann
machine). Они также могут быть частичными, как в глубоких сетях доверия (deep
belief network) и предварительном обучении без учителя.
Обучающий н або р
'
1
1
1
1
Признак 1
Аномал ия � ее 8
·.
··
.
А "· 8
8е ·· • еНормальный
8 •;;.J
. .• -
••·;r. .•
. ". • , :
• • • •
•
8• 8• •Обучающие образцы
Признак 1
Признак 2
• • • • •
• • •
• • •
•
• • •
• о • •
•
•
•
• • • • • •
• •
• •
• • • • • • •
• • •
• • •
• • • • • • •
• • •
• • •
• • • • • • •
,...__ Кл асс ? • •
•
• к • • •
• • •
• • •
• •• • О• • • о . • • • •
• • • • • •
•
•
• • •
О
•
Пр и знак 1
О Действие!
А Получение награды
V или штрафа
А Обновление политики
V (шаг обучения )
о По вторение до тех пор ,
пока не будет найдена
оптимальная политика
Рис. 1 . 12. Обучение с подкреплением
Запуск!
Обучение
ал горитма
мо
•
...
•
. � ." t-
• •
Анал из
ошибок
,6 ,6 о
,6 ,6 о
,6 о
,6 ,6 о о
о
о
Обучающие образцы
,6 ,6 D
D
oD
о о о
о
П р из н ак 1
Рис. 1 . 1 5. Обучение на основе образцов
D D D
D
Признак 1
Рис. 1 . 1 6. Обучение на основе моделей
�
1')
8
•• ••
"
r1
• . .
.а
t .
\ i f
6
о
:с
:с
8. 4 \ . ·. .
. .
.
о .
.
Австралия
111
... Фр анция
� 2
111 Ве нгр и я
о
� о �-
-�---'---�
о 1 0000 20000 30000 40000 5 0000 60000
ВВ П на душу населения
Рис. 1 . 1 7. Уловили здесь тенденцию?
удовлетворенность_жизнью = 80 + 81 х ВВП_на_душу_населения
Модель имеет два параметра модели, 80 и 81 5• Подстраивая эти парамет
ры, вы можете заставить свою модель представлять любую линейную функ
цию, как видно на рис. 1 . 18.
Оо 8
10
о
.а
:с
-5 х �
=-
1')
s 8
01 10
!1Е
-
.а
1-
u б
о
:с
:с
ф
а. 4
о
111
1- Оо = О
ф
2 01 = 2 х 10 5
:а
о
� о
о 10000 20000 30000 40000 50000 60000
В ВП на душу населения
Рис. 1 . 1 8. Несколько возможных линейных моделей
10
2
.11
:z:
1'1
:s:
8
ЭЕ
.11
6
...
u
о
:z:
:z:
ф
С1,. 4
Во 4 . 85
о
ID -
...
С11
01 4. 91 х 10 5
с:
ID 2 -
�
о
о 10000 20000 30000 40000 50000 60000
# Загрузить данные
oecd_Ы i = pd . read_ csv ( " oecd_Ы i_2 0 1 5 . csv" , thousands= ' , ' )
gdp_per_capita = pd . read_csv ( " gdp_per_capita . csv" , thousands= ' , ' ,
de limiter= ' \t ' , encoding= ' latinl ' , na_values=" n / a " )
# Подготовить данные
country_stats = prepare_country_stats ( oecd_Ы i , gdp_per_capita )
Х = np . c_ [ country_stats [ " GDP per capita " ] ]
у = np . c_ [ country_stats [ " L i fe s a t i s faction" ] ]
# Визуализирова ть данные
country_stats . plot ( kind= ' scatter ' , x= " GDP per capita" ,
y= ' Li fe satis faction ' )
plt . show ( )
# Обучить модель
mode l . fit ( Х , у )
Если все прошло нормально, тогда ваша модель будет вырабатывать хоро
шие прогнозы. Если же нет, то может потребоваться учесть больше атрибу
тов (уровень занятости, здоровье, загрязнение воздуха и т.д.), получить обу
чающие данные большего объема или качества либо выбрать более мощную
модель (скажем, полиномиальную регрессионную модель (polynomial regression
model)).
Подведем итог вышесказанному:
• вы исследовали данные;
• вы выбрали модель;
0 . 95
>S
s
:i::
0 . 90
"
...
:i
с:
u
s 0 . 85
.а
...
u
о
:i::
:r
r= 0 . 80
� Основанный н а памяти
0 . 75 � Отсеивание
-ь-- П ерс епт рон
-i:t- Н аивный байесовский
о . 70 +-----..----т--.-
0.1 10 100 1000
�. · �
- · · · �
· · · 7
;
. " . -7- - ,
t·�
· �
··
.. ,.
� :
�
"У
� �
. -.�
· .
Бразилия Мексика Чили Чешская Республика
�
�
Y
! : LY:. . ·
4
.
�
...
а.
о
Норвегия Швейцария Люксембург
ID
t
:а
2
о
� о о����
20000 40000 60000 80000 100000 ���-'-��--'���-'-���-'--�--'
ВВ П на душу на с ел ени я
Рис. 1.21. Более репрезентативный обучающий образец
Обучение линейной модели на новых данных дает сплошную линию, в то
время как старая модель изображена с помощью точечной линии. Как види
те, добавление нескольких отсутствующих ранее стран не только значитель
но изменяет модель, но также проясняет, что такая простая линейная модель
вероятно никогда не будет работать хорошо. Выглядит так, что люди в очень
богатых странах не счастливее людей в умеренно богатых странах (факти
чески они выглядят несчастливыми), и наоборот, люди в некоторых бедных
странах кажутся счастливее, чем люди во многих богатых странах.
За счет использования нерепрезентативного обучающего набора мы обу
чили модель, которая вряд ли будет вырабатывать точные прогнозы, особен
но для очень бедных и очень богатых стран.
Крайне важно применять обучающий набор, репрезентативный для приме
ров, на которые вы хотите обобщить. Достичь такой цели часто труднее, чем
может показаться: если образец слишком мал, то вы получите шум выборки
(sampling noise), т.е. нерепрезентативные данные как исход шанса, но даже
очень крупные образцы могут быть нерепрезентативными в случае дефектно
го метода выборки. Это называется смещением выборки (sampling Ьias).
�
.а
...
(,1 б
о
:z:
4
:z:
ф
С1.
о
2
111
...
ф
:а
о о
� о 20000 40000 60000 80000 100000
ВВ П на душу населения
&.
ется просто результатом шума в данных.
Переобучение происходит, когда модель слишком сложна отно
сительно объема и зашумленности обучающих данных. Ниже
перечислены возможные решения.
• Упростить модель, выбрав вариант с меньшим числом парамет
ров (например, линейную модель вместо полиномиальной моде
ли высокого порядка), сократив количество атрибутов в обуча
ющих данных или ограничив модель.
• Накопить больше обучающих данных.
• Понизить шум в обучающих данных (например, исправить
ошибки данных и устранить выбросы).
!i!
10
- -
-
....
...
... . .. .
.
.а
.
..а
." . .•
:z: .
-
1'1 ... ...
. .
:s:
� - •• _" . . -- .
8
.
··
1
·· ·
- - -- •
• . .• • •
.а
б 1:.-
... . . " - -
.
.
u
_ _
о
:z:
:z: " ·"" . ,
CL
ф
о
4
111
- - Линейная модель, обучавшаяся на всех данных
...
ф
�
2 Линейная модель, обучавшаяся на неполных данных
Реrуляризированная линейная модель,
о - обучавшаяся на неполных данных
о
� о 20000 40000 60000 80000 100000
ВВП на дуwу населения
рование признаков).
• Уменьшение ограничений на модели (например, снижение величины
гиперпараметра регуляризации).
Шаг назад
К настоящему времени вы уже много чего знаете о машинном обучении.
Тем не менее, мы прошлись по такому количеству концепций, что вы може
те испытывать легкую растерянность, поэтому давайте сделаем шаг назад и
посмотрим на общую картину.
• Под машинным обучением понимается обеспечение лучшей обработки
-
20% данных для испытания.
Упраж нения
В этой главе рассматривались некоторые из самых важных концепций ма
шинного обучения. В последующих главах мы будем погружаться более глу
боко и писать больше кода, но прежде чем переходить к ним, удостоверьтесь
в том, что способны дать ответы на перечисленные ниже вопросы.
1. Как бы вы определили машинное обучение?
2. Можете ли вы назвать четыре типа задач, где МО показывает блестя-
щие результаты?
3. Что такое помеченный обучающий набор?
4. Каковы две наиболее распространенных задачи обучения с учителем?
5. Можете ли вы назвать четыре распространенных задачи обучения без
учителя?
6. Какой тип алгоритма МО вы бы использовали, чтобы сделать возмож
ным прохождение роботом по разнообразным неизведанным террито
риям?
7. Какой тип алгоритма вы бы применяли для сегментирования своих за
казчиков в несколько групп?
8. Как бы вы представили задачу выявления спама - как задачу обуче
ния с учителем или как задачу обучения без учителя?
П ол н ы й п ро ект м а ш и нн о го о бу ч ен и я
2. Получение данных.
3. Обнаружение и визуализация данных для понимания их сущности.
4. Подготовка данных для алгоритмов машинного обучения.
5. Выбор модели и ее обучение.
6. Точная настройка модели.
7. Представление своего решения.
данных:
о список наборов данных для машинного обучения в англоязыч
ной Википедии (https : / / en . wi kipedia . org /wi ki/List _ of _
datasets_for_machine_learning_research)
о вопрос в Quora.com (https : / /www . quora . com/Where-can- I
find - large - datasets -open-to- the-puЫic)
о сабреддит Datasets (https : / /www . reddit . com/ r/datasets/)
Для настоящей главы мы выбрали набор данных California Housing Prices
(Цены на жилье в Калифорнии) из хранилища StatLib2 (рис. 2.1).
42 г;r-;- ;---�
. -::•• ·-" \;-
. •. :--
.--;- ---:-:-------.=====�
• :
. • •. . j
$500k
..
•
. . •
Население .
. :":. •'· .� ..� - ·. :
$452k
·.
40 $40Зk
"'
::Е
�
$355k
38
$30бk �
u
о
�
s
S258k
::Е
s
о
"
3 u
"'
36 "'
$209k
=
SlбOk �
Q.
(J
$112k
34
" $6Зk
Долгота
2 Первоначально этот набор данных появился в статье Р. Келли Пейса и Рональда Барри
"Sparse Spatial Autoregressions" ("Разреженные пространственные автореrрессии"), опубли
кованной в журнале Statistics & ProbaЬility Letters, том 33, выпуск 3 (1997 год): стр. 291-297.
Конвейеры
Последовательность компонентов обработки данных называется
конвейером. Конвейеры очень распространены в системах МО, т.к. в
них существует большой объем данных для манипулирования и много
трансформаций данных для применения.
Компоненты обычно выполняются асинхронно. Каждый компонент за
хватывает массу данных, обрабатывает их и выдает результат в другое
хранилище данных, после чего некоторое время спустя следующий ком
понент в конвейере захватывает эти данные и выдает собственный вывод
и т.д. Каждый компонент довольно самодостаточен: в качестве интерфей
са между компонентами выступает хранилище данных. В итоге понять
систему достаточно просто (с помощью графа потока данных), и разные
команды разработчиков могут сосредоточиться на разных компонентах.
Более того, если компонент выходит из строя, то нижерасположенные
компоненты часто способны продолжить нормальное функционирова
ние (во всяком случае, какое-то время), используя вывод из неисправного
компонента. Такой подход делает архитектуру действительно надежной.
С другой стороны, неисправный компонент в течение некоторого времени
может оставаться незамеченным, если не реализовано надлежащее наблю
дение. Данные устаревают, и общая производительность системы падает.
Обозна ч ения
Уравнение 2.1 вводит несколько очень распространенных обозначений
МО, которые мы будем применять повсюду в книге.
• т - количество образцов в наборе данных, на которых измеряется
ошибка RМSE.
о Например, если вы оцениваете ошибку RМSE на проверочном на
боре из 2 ООО округов, то т = 2000.
• xUJ - вектор всех значений признаков (исключая метку) i-го образ
Х=
(х(1999)(
(х(2ООО)(
• h функция прогнозирования системы, также называемая гипотезой
-
использованием гипотезы h.
Мы применяем строчные курсивные буквы для обозначения скалярных
значений (таких как т или ут) и имен функций (наподобие h), строчные
полужирные буквы для векторов (вроде x<iJ) и прописные полужирные
буквы для матриц (таких как Х).
Получение данных
Пришло время засучить рукава. Без колебаний доставайте свой ноутбук и
займитесь проработкой приведенных далее примеров кода в тетради Jupyter
(notebook; также встречается вариант "записная книжка" - примеч. пер.).
Все тетради Jupyter доступны для загрузки по адресу https : / /github .
сот/ ageron/handson-ml.
5 Рекомендуется использовать последнюю версию Python 3. Версия Python 2.7+ также бу
дет хорошо работать, но она устарела. Если вы применяете Python 2, то должны доба
вить в начало своего кода from future import ( division, print function, _
unicode li terals ) .
_
6 Шаги установки будут показаны с применением pip в оболочке bash системы Linux или
macOS. Вам может понадобиться адаптировать приведенные команды к своей системе.
В случае Windows рекомендуется взамен установить дистрибутив Anaconda.
7 Для запуска данной команды могут потребоваться права администратора; если это
так, тогда снабдите ее префиксом sudo.
_, J U pyte r Logout
Upload New • Z
Text File
D епv
Folder
Term1nal
2
Octave
Python 2
� Руthоп з
E:J CellТoolЬar iE
2- 3
In [ l ] �
•print •нello world l "
Hello world l
1 In [ ] :
З агрузка данных
В типовых средах ваши данные будут доступными в реляционной базе
данных (или в каком-то другом общем хранилище данных) и разнесенны
ми по множеству таблиц/документов/файлов. Для обращения к ним вам
сначала понадобится получить учетные данные и авторизацию доступа 9,
а также ознакомиться со схемой данных. Однако в рассматриваемом проек
те ситуация гораздо проще: вы лишь загрузите единственный сжатый файл
hous ing . tgz, внутри которого содержится файл в формате разделенных
запятыми значений (comma-separated value - CSV) по имени hous ing . csv
со всеми данными.
10 В реальном проекте вы сохранили бы этот код в файле Python, но пока его можно
просто ввести в тетради Jupyter.
In [ 5 ] : housing � load_housing_data ( )
housing. head ( )
Out [ S ] :
longitude latitude housing_ median_age total_rooms total_bedrooms populatio1
In [ 6 ] : housing . info
In [ 8 ] : housing . descriЬe ( )
Out( 8 ] :
longitude lвtltude houslng_median_age total_rooms totвl_bedrc
- �--·=·�-=�-�
* t e s t_ratio )
t e s t_indi ces shu f f l ed_indices [ : t e s t_set_s i ze ]
t rain_indi ces = shu f fled_indice s [ tes t_set_s i z e : ]
=
разом:
>>> t r a i n s e t , t e s t_set = s p l i t_train_te s t ( hous ing , 0 . 2)
>>> print ( l e n ( t ra i n_s e t ) , " tra in +" , len ( t e s t_set ) , "test " )
1 65 1 2 t r a i n + 4 1 2 8 t e s t
12 Вы часто будете видеть, как люди устанавливают 42 в качестве начального значения. Это чис
ло не обладает никакими особыми свойствами помимо того, что служит ответом на "главный
вопрос жизни, вселенной и всего такого" (https : / / ru . wi kipedia . org/wi ki / Oтвeт_
на_главный_вопрос_жизни , _вселенной_и_всего_такого примеч. пер.).
-