- •Об авторе
- •О научных редакторах
- •Благодарности
- •От издательства
- •Введение
- •Для кого эта книга?
- •Почему Python?
- •План книги
- •Версия Python, платформа и IDE
- •Установка Python
- •Запуск Python
- •Использование виртуальной среды
- •Вперед!
- •Глава 1. Спасение моряков с помощью теоремы Байеса
- •Теорема Байеса
- •Проект #1. Поиск и спасение
- •Стратегия
- •Установка библиотек Python
- •Код для теоремы Байеса
- •Время сыграть
- •Итоги
- •Дополнительная литература
- •Усложняем проект. Более грамотный поиск
- •Усложняем проект. Поиск лучшей стратегии с помощью MCS
- •Усложняем проект. Вычисление вероятности обнаружения
- •Глава 2. Установление авторства с помощью стилометрии
- •Проект #2: «Собака Баскервилей», «Война миров» и «Затерянный мир»
- •Стратегия
- •Установка NLTK
- •Корпусы текстов
- •Код стилометрии
- •Итоги
- •Дополнительная литература
- •Практический проект: охота на собаку Баскервилей с помощью распределения
- •Практический проект: тепловая карта пунктуации
- •Усложняем проект: фиксирование частотности
- •Глава 3. Суммаризация текста с помощью обработки естественного языка
- •Стратегия
- •Веб-скрапинг
- •Код для «У меня есть мечта»
- •Установка gensim
- •Код для суммаризации речи «Заправляйте свою кровать»
- •Проект #5. Суммаризация речи с помощью облака слов
- •Модули Word Cloud и PIL
- •Код для создания облака слов
- •Итоги
- •Дополнительная литература
- •Усложняем проект: ночные игры
- •Усложняем проект: суммаризация суммаризаций
- •Глава 4. Отправка суперсекретных сообщений с помощью книжного шифра
- •Одноразовый блокнот
- •Шифр «Ребекка»
- •Проект #6. Цифровой ключ к «Ребекке»
- •Стратегия
- •Код для шифрования
- •Отправка сообщений
- •Итоги
- •Дополнительная литература
- •Глава 5. Поиск Плутона
- •Проект #7. Воссоздание блинк-компаратора
- •Стратегия
- •Данные
- •Код блинк-компаратора
- •Использование блинк-компаратора
- •Проект #8. Обнаружение астрономических транзиентов путем дифференцирования изображений
- •Стратегия
- •Код для детектора транзиентов
- •Использование детектора транзиентов
- •Итоги
- •Дополнительная литература
- •Практический проект: представление орбитальной траектории
- •Практический проект: найди отличия
- •Усложняем проект: сосчитаем звезды
- •Глава 6. Победа в лунной гонке с помощью «Аполлона-8»
- •Цель миссии «Аполлон-8»
- •Траектория свободного возврата
- •Задача трех тел
- •Проект #9. На Луну с «Аполлоном-8»!
- •Использование модуля turtle
- •Стратегия
- •Код программы для расчета свободного возврата «Аполлона-8»
- •Выполнение симуляции
- •Итоги
- •Дополнительная литература
- •Практический проект: симуляция шаблона поисков
- •Практический проект: запусти меня!
- •Практический проект: останови меня!
- •Усложняем проект: симуляция в истинном масштабе
- •Усложняем проект: реальный «Аполлон-8»
- •Глава 7. Выбор мест высадки на Марсе
- •Посадка на Марс
- •Карта MOLA
- •Проект #10. Выбор посадочных мест на Марсе
- •Стратегия
- •Код для выбора мест посадки
- •Результаты
- •Итоги
- •Дополнительная литература
- •Практический проект: убедимся, что рисунки становятся частью изображения
- •Практический проект: визуализация профиля высот
- •Практический проект: отображение в 3D
- •Практический проект: совмещение карт
- •Усложняем проект: три в одном
- •Усложняем проект: перенос прямоугольников
- •Глава 8. Обнаружение далеких экзопланет
- •Транзитная фотометрия
- •Проект #11. Симуляция транзита экзопланеты
- •Стратегия
- •Код для транзита
- •Эксперименты с транзитной фотометрией
- •Проект #12. Получение изображений экзопланет
- •Стратегия
- •Код для пикселизатора
- •Итоги
- •Дополнительная литература
- •Практический проект: обнаружение инопланетных мегаструктур
- •Практический проект: обнаружение транзита астероидов
- •Практический проект: добавление эффекта потемнения к краю
- •Практический проект: обнаружение пятен на звездах
- •Практический проект: обнаружение инопланетной армады
- •Практический проект: обнаружение планеты с луной
- •Практический проект: измерение продолжительности экзопланетного дня
- •Усложняем проект: генерация динамической кривой блеска
- •Глава 9. Как различить своих и чужих
- •Обнаружение лиц на фотографиях
- •Проект #13. Программирование робота-часового
- •Стратегия
- •Результаты
- •Обнаружение лиц в видеопотоке
- •Итоги
- •Дополнительная литература
- •Практический проект: размытие лиц
- •Усложняем проект: обнаружение кошачьих мордочек
- •Глава 10. Ограничение доступа по принципу распознавания лиц
- •Распознавание лиц с помощью LBPH
- •Схема распознавания лиц
- •Извлечение гистограмм локальных бинарных шаблонов
- •Проект #14. Ограничение доступа к инопланетному артефакту
- •Стратегия
- •Поддержка модулей и файлов
- •Код для захвата видео
- •Код для обучения алгоритма распознавания лиц
- •Код для прогнозирования лиц
- •Результаты
- •Итоги
- •Дополнительная литература
- •Усложняем проект: добавление пароля и видеозахвата
- •Усложняем проект: похожие лица и близнецы
- •Усложняем проект: машина времени
- •Глава 11. Создание интерактивной карты побега от зомби
- •Проект #15. Визуализация плотности населения с помощью хороплетной карты
- •Стратегия
- •Библиотека анализа данных
- •Библиотеки bokeh и holoviews
- •Установка pandas, bokeh и holoviews
- •Работа с данными по уровню безработицы и плотности населения в округах и штатах
- •Разбираем код holoviews
- •Код для отрисовки хороплетной карты
- •Планирование маршрута
- •Итоги
- •Дополнительная литература
- •Усложняем проект: отображение на карте изменения численности населения США
- •Глава 12. Находимся ли мы в компьютерной симуляции?
- •Проект #16. Жизнь, Вселенная и пруд черепахи Йертл
- •Код симуляции пруда
- •Следствия симуляции пруда
- •Измерение затрат на пересечение строк или столбцов сетки
- •Результаты
- •Стратегия
- •Итоги
- •Дополнительная литература
- •Дополнение
- •Усложняем проект: поиск безопасного места в космосе
- •Усложняем проект: а вот и Солнце
- •Усложняем проект: взгляд глазами собаки
- •Усложняем проект: кастомизированный поиск слов
- •Усложняем проект: что за сложную паутину мы плетем
- •Усложняем проект: идем вещать с горы
- •Решения для практических проектов
- •Глава 2. Определение авторства с помощью стилометрии
- •Охота на собаку Баскервилей с помощью распределения
- •Тепловая карта пунктуации
- •Глава 4. Отправка суперсекретных сообщений с помощью книжного шифра
- •Составление графика символов
- •Отправка секретов шифром времен Второй мировой войны
- •Глава 5. Поиск Плутона
- •Представление орбитальной траектории
- •Глава 6. Победа в лунной гонке с помощью «Аполлона-8»
- •Симуляция шаблона поисков
- •Заведи меня!
- •Останови меня!
- •Глава 7. Выбор мест высадки на Марсе
- •Убеждаемся, что рисунки становятся частью изображения
- •Визуализация профиля высоты
- •Отображение в 3D
- •Совмещение карт
- •Глава 8. Обнаружение далеких экзопланет
- •Обнаружение инопланетных мегаструктур
- •Обнаружение транзита астероидов
- •Добавление эффекта потемнения к краю
- •Обнаружение инопланетной армады
- •Обнаружение планеты с луной
- •Измерение продолжительности экзопланетного дня
- •Глава 9. Как различить своих и чужих
- •Размытие лиц
- •Глава 10. Ограничение доступа по принципу распознавания лиц
- •Усложняем проект: добавление пароля и видеозахвата
1
Спасение моряков с помощью теоремы Байеса
Где-то в 1740 году британский пресвитерианский
священник Томас Байес решил математически до-
казать существование Бога. Его гениальное решение,
ныне известное как теорема Байеса (она же формула
Байеса), сейчас считается одной из наиболее успешных статистических концепций всех времен. Однако на протяжении 200 лет ее по большей части игнорировали, потому что
сложные математические вычисления было очень трудно производить вручную. Для того чтобы в полной мере оценить потенциал теоремы Байеса, потребовалось изобрести компьютер. Теперь благодаря нашим быстрым процессорам она стала ключевым элементом в науке о данных и в сфере машинного обучения.
Поскольку правило Байеса дает математически верный способ учитывать новые данные и пересчитывать оценку вероятности события, оно применяется практически во всех областях деятельности человека, начиная со взлома кодов и прогноза, кто победит на президентских выборах, и заканчивая расчетом того, как увеличится число инфарктов при повышении холестерина. Перечень областей, в которых применяется теорема Байеса, с легкостью займет целую главу книги. Но так как для нас важнее всего спасение жизни людей, мы рассмотрим, как использовать эту теорему для помощи потерявшимся морякам.
В этой главе мы создадим игру-симуляцию поисково-спасательной операции. Игроки, действующие от лица спасателей береговой охраны, будут использовать
26 Глава 1. Спасение моряков с помощью теоремы Байеса
теорему Байеса, чтобы принять решения, которые позволят как можно быстрее обнаружить моряков. Мы начнем с известных инструментов из области data science и компьютерного зрения — библиотеки Open Source Computer Vision Library (OpenCV) и NumPy.
Теорема Байеса
Теорема Байеса помогает исследователям определить вероятность какого-либо события при условии, что произошло другое взаимосвязанное с ним событие. Как сказал великий французский математик Лаплас: «Вероятность причины с учетом события пропорциональна вероятности события с учетом его причины». Базовая формула такова:
Здесь A — это гипотеза, а В — это данные. P(A/B) означает вероятность А с учетом В. Предположим, нам известно, что конкретный тест на некий вид рака не всегда точен и может давать ложноположительные результаты, которые указывают, что рак у пациента есть, хотя на самом деле его нет.
Выражение Байеса в таком случае выглядит так:
Начальная вероятность будет основана на клинических исследованиях. Например, 800 из 1000 человек, болеющих раком, могут получить положительный результат, а 100 из 1000 — ошибочный. На основе показателей заболеваемости общая вероятность наличия у конкретного человека рака может составлять всего 50 из 10 000. Итак, если общая вероятность наличия рака мала, а общая вероятность получения положительного теста относительно высока, то вероятность наличия рака при положительном тесте снижается. Если в исследованиях зафиксирована частота ошибочных результатов тестирования, то правило Байеса может скорректировать оценку измерений.
Теперь, когда принцип применения теоремы ясен, взгляните на рис. 1.1, где показаны различные варианты, следующие из теоремы Байеса, на примере заболевания раком.
Теорема Байеса 27
У а
В а |
||
|
|
|
( а |
||
а ) |
А а |
|
А а |
|
|
|
О а |
|
О а |
|
• а • |
( а а |
|
( а а |
) |
|
а |
|
|
а) |
Ча ( а а ) а
О •а
а ( -
а)
Рис. 1.1. Теорема Байеса: определение терминов на примере заболевания раком
Рассмотрим следующий пример: женщина потеряла где-то дома свои очки для чтения. Она помнит, что последний раз была в них, когда находилась в рабочем кабинете, поэтому первым делом идет искать в кабинет. Очки ей найти не удается, но она видит чайную чашку и вспоминает, что ходила на кухню. В этот момент ей надо сделать выбор: более тщательно обыскать кабинет или же пойти поискать на кухню. Она решает отправиться на кухню. Таким образом, она, сама не зная того, приняла байесовское решение.
В кабинет она отправилась, так как считала, что вероятность обнаружения очков там наиболее высока. На языке Байеса эта начальная вероятность обнаружения очков в кабинете называется априорной. После беглого осмотра кабинета она изменила свое решение на основе двух новых элементов информации: ей не удалось сразу обнаружить очки, но она увидела чашку. Этот фактор называется байесовским выводом — когда по мере появления дополнительных фактов вычисляется новая апостериорная оценка (P(A/B) на рис. 1.1).
Представим, что женщина решила использовать при поиске теорему Байеса. Она определила вероятность нахождения очков в кабинете или на кухне и эффективность своих поисков в этих двух помещениях. Теперь вместо интуитивных ощущений ее решения опираются на математическую модель, которую можно постепенно обновлять, если дальнейшие поиски не дадут результата.
28 Глава 1. Спасение моряков с помощью теоремы Байеса
На рис. 1.2 показаны вероятности поиска очков.
|
На а а / Э а |
|
|
О а |
|||||
|
С а |
|
С а |
|
С а |
|
|
С а |
|
1 % / 0 % |
1 % / 0 % |
5 % |
5 % |
||||||
|
|
|
|
Ва а |
|
|
|
|
Ва а |
|
|
|
|
• а а |
|
|
|
|
• а а |
|
Ка |
1 % / 0 % |
|
Ка |
5 % |
||||
|
|
|
|
|
|
|
|||
85 % / 95 % |
|
|
22 % |
|
|
|
|||
|
|
|
|
К |
|
|
|
|
К |
|
|
|
|
10 % / 0 % |
|
|
|
|
52 % |
|
|
|
|
|
|
|
|
|
|
|
Г а |
|
|
|
Г а |
|
|
|
|
|
1 % / 0 % |
|
С а |
|
5 % |
|
|
С а |
|
|
|
|
1 % / 0 % |
|
|
5 % |
Рис. 1.2. Начальные вероятности того, что очки находятся в каждом помещении, и эффективности поиска (слева) в сравнении с обновленными целевыми вероятностями (справа)
Левая схема показывает начальную ситуацию. Правая — ситуацию после применения правила Байеса. Предположим, что изначально шанс найти очки в кабинете составлял 85 %, а на кухне — 10 %. Другим комнатам присвоена вероятность 1 %, потому что правило Байеса не может обновлять целевые вероятности, равные нулю (к тому же всегда есть небольшой шанс, что женщина оставила очки в одной из этих комнат).
На левой схеме числа после слэша показывают вероятность эффективности поиска (search effectiveness probability, SEP), то есть оценку эффективности осмотра области. Так как женщина обыскала пока только кабинет, это значение для всех остальных комнат равно нулю. После байесовского вывода (обнаружения чашки) женщина может повторно вычислить вероятности на основе результатов поиска (показано справа). Теперь кухня становится наиболее предпочтительным местом для поиска, но при этом также возрастает вероятность и для других комнат.