Математические алгоритмы для программистов. 3D-графика, машинное обучение и моделирование на Python

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Неважно, чем вы занимаетесь — большими данными, машинным обучением, компьютерной графикой или криптографией, — без математики вам не обойтись! Везде сейчас требуются базовые знания и понимание алгоритмов. Практические примеры позволят легко разобраться с самыми необходимыми математическими понятиями. 300 упражнений и мини-проектов откроют вам новые возможности в освоении интересных и популярных IT-профессий. Вы познакомитесь с базовыми библиотеками Python, используемыми при разработке реальных приложений, и вспомните давно забытые основы линейной алгебры и матана.

Author(s): Пол Орланд
Series: Библиотека программиста
Edition: 1
Publisher: Питер
Year: 2023

Language: Russian
Commentary: Publisher's PDF
Pages: 752
City: СПб.
Tags: Machine Learning; Neural Networks; Regression; Programming; Python; Classification; Gradient Descent; Logistic Regression; Graphics; Linear Algebra; Mathematics; Linear Models; Calculus; Elementary Mathematics; Physics; Symbolic Computations; Geometry; Elementary; 2D Graphics; 3D Graphics; Simulations

Предисловие
Как создавалась эта книга
Охватываемые математические идеи
Благодарности
Об этой книге
Кому адресована эта книга
Структура издания
О примерах кода
От издательства
Об авторе
Иллюстрация на обложке
Глава 1. Математика в программном коде
1.1. Решение финансовых задач с помощью математики и программного обеспечения
1.1.1. Прогнозирование движения финансового рынка
1.1.2. Поиск выгодной сделки
1.1.3. Трехмерная графика и анимация
1.1.4. Моделирование физического мира
1.2. Как не надо учить математику
1.2.1. Джейн решила подучить математику
1.2.2. Кропотливое изучение учебников по математике
1.3. Использование натренированного левого полушария
1.3.1. Использование формального языка
1.3.2. Создайте свой калькулятор
1.3.3. Создание абстракций с помощью функций
Краткие итоги главы
Часть I. Векторы и графика
Глава 2. Рисование с помощью двухмерных векторов
2.1. Изображение двухмерных векторов
2.1.1. Представление двухмерных векторов
2.1.2. Рисование двухмерных изображений на Python
2.1.3. Упражнения
2.2. Арифметика двухмерных векторов
2.2.1. Компоненты вектора и его длина
2.2.2. Умножение вектора на число
2.2.3. Вычитание, смещение и расстояние
2.2.4. Упражнения
2.3. Углы и тригонометрия на плоскости
2.3.1. От углов к компонентам
2.3.2. Радианы и тригонометрия в Python
2.3.3. От компонентов к углам
2.3.4. Упражнения
2.4. Преобразование коллекций векторов
2.4.1. Комбинирование векторных преобразований
2.4.2. Упражнения
2.5. Рисование с помощью Matplotlib
Краткие итоги главы
Глава 3. Выход в трехмерный мир
3.1. Отображение векторов в трехмерном пространстве
3.1.1. Представление трехмерных векторов с помощью координат
3.1.2. Рисование трехмерных изображений с помощью Python
3.1.3. Упражнения
3.2. Арифметика трехмерных векторов
3.2.1. Сложение трехмерных векторов
3.2.2. Умножение трехмерных векторов на скаляр
3.2.3. Вычитание трехмерных векторов
3.2.4. Вычисление длин и расстояний
3.2.5. Вычисление углов и направлений
3.2.6. Упражнения
3.3. Скалярное произведение векторов: мера сонаправленности векторов
3.3.1. Изображение скалярного произведения
3.3.2. Вычисление скалярного произведения
3.3.3. Примеры скалярных произведений
3.3.4. Измерение углов с помощью скалярного произведения
3.3.5. Упражнения
3.4. Векторное произведение: мера ориентированной площади
3.4.1. Ориентация в трехмерном пространстве
3.4.2. Определение направления с помощью векторного произведения
3.4.3. Определение длины векторного произведения
3.4.4. Вычисление векторного произведения трехмерных векторов
3.4.5. Упражнения
3.5. Отображение трехмерного объекта на двухмерной плоскости
3.5.1. Определение трехмерного объекта с помощью векторов
3.5.2. Проецирование на двухмерную плоскость
3.5.3. Ориентация лицевой стороны и затенение
3.5.4. Упражнения
Краткие итоги главы
Глава 4. Преобразование векторов и графики
4.1. Преобразование трехмерных объектов
4.1.1. Рисование преобразованного объекта
4.1.2. Комбинирование векторных преобразований
4.1.3. Поворот объекта вокруг оси
4.1.4. Изобретение своих геометрических преобразований
4.1.5. Упражнения
4.2. Линейные преобразования
4.2.1. Сохраняющая векторная арифметика
4.2.2. Изображение линейных преобразований
4.2.3. Полезные свойства линейных преобразований
4.2.4. Вычисление результатов линейных преобразований
4.2.5. Упражнения
Краткие итоги главы
Глава 5. Вычисление преобразований с помощью матриц
5.1. Представление линейных преобразований в виде матриц
5.1.1. Запись векторов и линейных преобразований в виде матриц
5.1.2. Умножение матрицы на вектор
5.1.3. Объединение линейных преобразований путем умножения матриц
5.1.4. Реализация умножения матриц
5.1.5. Анимация в трехмерном пространстве с помощью матричных преобразований
5.1.6. Упражнения
5.2. Интерпретация матриц разной формы
5.2.1. Векторы-столбцы как матрицы
5.2.2. Какие пары матриц можно перемножить?
5.2.3. Квадратные и прямоугольные матрицы как векторные функции
5.2.4. Проекция как линейное отображение трехмерного объекта на двухмерную плоскость
5.2.5. Составление линейных отображений
5.2.6. Упражнения
5.3. Параллельный перенос векторов с помощью матриц
5.3.1. Придание линейности параллельному переносу
5.3.2. Поиск трехмерной матрицы для двухмерного параллельного переноса
5.3.3. Комбинирование параллельного переноса с другими линейными преобразованиями
5.3.4. Параллельный перенос трехмерных объектов в четырехмерном мире
5.3.5. Упражнения
Краткие итоги главы
Глава 6. Обобщение до высших размерностей
6.1. Обобщение определения векторов
6.1.1. Создание класса векторов с двумя координатами
6.1.2. Усовершенствование класса Vec2
6.1.3. Повторение процесса для трехмерных векторов
6.1.4. Конструирование базового класса векторов
6.1.5. Определение векторных пространств
6.1.6. Модульное тестирование классов векторных пространств
6.1.7. Упражнения
6.2. Исследование различных векторных пространств
6.2.1. Перечисление всех пространств координатных векторов
6.2.2. Идентификация векторных пространств в дикой природе
6.2.3. Интерпретация функций как векторов
6.2.4. Интерпретация матриц как векторов
6.2.5. Обработка изображений с помощью векторных операций
6.2.6. Упражнения
6.3. Поиск меньших векторных пространств
6.3.1. Идентификация подпространств
6.3.2. Начнем с единственного вектора
6.3.3. Охват большего пространства
6.3.4. Определение размерности
6.3.5. Определение подпространств векторного пространства функций
6.3.6. Подпространства изображений
6.3.7. Упражнения
Краткие итоги главы
Глава 7. Решение систем линейных уравнений
7.1. Разработка аркадной игры
7.1.1. Моделирование игры
7.1.2. Отображение игрового поля
7.1.3. Стрельба из лазерной пушки
7.1.4. Упражнения
7.2. Определение точек пересечения линий
7.2.1. Выбор правильной формулы прямой
7.2.2. Поиск стандартной формы уравнения прямой
7.2.3. Линейные уравнения в матричной записи
7.2.4. Решение линейных уравнений с помощью NumPy
7.2.5. Определение факта попадания в астероид
7.2.6. Определение систем без решения
7.2.7. Упражнения
7.3. Обобщение линейных уравнений на большее число измерений
7.3.1. Представление плоскостей в трех измерениях
7.3.2. Решение систем трех линейных уравнений
7.3.3. Алгебраическое изучение гиперплоскостей
7.3.4. Подсчет числа измерений, уравнений и решений
7.3.5. Упражнения
7.4. Изменение базиса путем решения линейных уравнений
7.4.1. Решение трехмерного примера
7.4.2. Упражнения
Краткие итоги главы
Часть II. Исчисление и моделирование физического мира
Глава 8. Скорость изменения
8.1. Вычисление среднего расхода по объему
8.1.1. Реализация функции average_flow_rate
8.1.2. Изображение среднего расхода секущей прямой
8.1.3. Отрицательные скорости изменения
8.1.4. Упражнения
8.2. График зависимости средней скорости от времени
8.2.1. Определение среднего расхода в разные промежутки времени
8.2.2. График интервальных расходов
8.2.3. Упражнения
8.3. Аппроксимация значений мгновенного расхода
8.3.1. Определение наклона секущих прямых на коротких интервалах
8.3.2. Построение функции мгновенного расхода
8.3.3. Каррирование и построение графика функции мгновенного расхода
8.3.4. Упражнения
8.4. Аппроксимация изменения объема
8.4.1. Вычисление изменения объема за короткий промежуток времени
8.4.2. Разбиение временного отрезка на мелкие интервалы
8.4.3. Изображение изменения объема на графике расхода
8.4.4. Упражнения
8.5. График изменения объема с течением времени
8.5.1. Вычисление объема в заданный момент времени
8.5.2. Представление сумм Римана для функции объема
8.5.3. Улучшение аппроксимации
8.5.4. Определенные и неопределенные интегралы
Краткие итоги главы
Глава 9. Моделирование перемещающихся объектов
9.1. Имитация движения с постоянной скоростью
9.1.1. Добавление в астероиды информации о скоростях
9.1.2. Добавление поддержки перемещения астероидов в игровой движок
9.1.3. Удержание астероидов в пределах экрана
9.1.4. Упражнения
9.2. Моделирование ускорения
9.2.1. Ускоренное движение космического корабля
9.3. Более глубокое погружение в метод Эйлера
9.3.1. Вычисления методом Эйлера вручную
9.3.2. Реализация алгоритма на Python
9.4. Применение метода Эйлера с уменьшенным временным шагом
9.4.1. Упражнения
Краткие итоги главы
Глава 10. Работа с символическими выражениями
10.1. Поиск точной производной с помощью системы компьютерной алгебры
10.1.1. Выполнение символических операций на Python
10.2. Моделирование алгебраических выражений
10.2.1. Разбиение выражения на части
10.2.2. Конструирование дерева выражения
10.2.3. Представление дерева выражений на Python
10.2.4. Упражнения
10.3. Практическое применение символических выражений
10.3.1. Поиск всех переменных в выражении
10.3.2. Вычисление выражения
10.3.3. Разложение выражения
10.3.4. Упражнения
10.4. Поиск производной функции
10.4.1. Производные степеней
10.4.2. Производные преобразованных функций
10.4.3. Производные некоторых специальных функций
10.4.4. Производные произведений и сложных функций
10.4.5. Упражнения
10.5. Автоматическое взятия производной
10.5.1. Реализация метода вычисления производной для выражений
10.5.2. Реализация правила произведения и цепного правила
10.5.3. Реализация степенного правила
10.5.4. Упражнения
10.6. Символическое интегрирование функций
10.6.1. Интегралы как первообразные
10.6.2. Введение в библиотеку SymPy
10.6.3. Упражнения
Краткие итоги главы
Глава 11. Моделирование силовых полей
11.1. Моделирование гравитации с помощью векторного поля
11.1.1. Моделирование гравитации с помощью функции потенциальной энергии
11.2. Моделирование гравитационных полей
11.2.1. Определение векторного поля
11.2.2. Определение простого силового поля
11.3. Добавление гравитации в игру с астероидами
11.3.1. Реализация воздействия гравитации на игровые объекты
11.3.2. Упражнения
11.4. Потенциальная энергия
11.4.1. Определение скалярного поля потенциальной энергии
11.4.2. Представление скалярного поля в виде тепловой карты
11.4.3. Представление скалярного поля в виде карты рельефа
11.5. Связь энергии и сил с градиентом
11.5.1. Измерение крутизны с помощью поперечных сечений
11.5.2. Расчет частных производных
11.5.3. Определение крутизны графика с использованием градиента
11.5.4. Расчет силовых полей на основе потенциальной энергии с градиентом
11.5.5. Упражнения
Краткие итоги главы
Глава 12. Оптимизация физической системы
12.1. Тестирование модели ядра
12.1.1. Моделирование с помощью метода Эйлера
12.1.2. Измерение характеристик траектории
12.1.3. Исследование различных углов выстрела
12.1.4. Упражнения
12.2. Вычисление оптимальной дальности
12.2.1. Определение дальности в зависимости от угла выстрела
12.2.2. Решение для вычисления максимальной дальности
12.2.3. Идентификация максимумов и минимумов
12.2.4. Упражнения
12.3. Усовершенствование модели
12.3.1. Добавление еще одного измерения
12.3.2. Моделирование рельефа местности вокруг пушки
12.3.3 Решение для вычисления дальности стрельбы в трехмерном пространстве
12.3.4. Упражнения
12.4. Оптимизация дальности с помощью градиентного восхождения
12.4.1. График зависимости дальности от параметров стрельбы
12.4.2. Градиент функции дальности
12.4.3. Поиск направления подъема в гору с помощью градиента
12.4.4. Реализация градиентного восхождения
12.4.5. Упражнения
Краткие итоги главы
Глава 13. Анализ звуковых волн с использованием рядов Фурье
13.1. Объединение звуковых волн и их разложение
13.2. Воспроизведение звуковых волн в Python
13.2.1. Воспроизведение первого звука
13.2.2. Воспроизведение музыкальной ноты
13.2.3. Упражнения
13.3. Преобразование синусоидальной волны в звук
13.3.1. Создание звука на основе синусоидальных функций
13.3.2. Изменение частоты синусоиды
13.3.3. Выборка и воспроизведение звуковой волны
13.3.4. Упражнения
13.4. Объединение звуковых волн
13.4.1. Сложение выборок звуковых волн для получения аккорда
13.4.2. Изображение графика суммы двух звуковых волн
13.4.3. Построение линейной комбинации синусоид
13.4.4. Построение знакомых функций с помощью синусоид
13.4.5. Упражнения
13.5. Разложение звуковой волны в ряд Фурье
13.5.1. Поиск компонент вектора с помощью внутреннего произведения
13.5.2. Определение внутреннего произведения периодических функций
13.5.3. Определение функции для поиска коэффициентов Фурье
13.5.4. Поиск коэффициентов Фурье для прямоугольной волны
13.5.5. Коэффициенты Фурье для других волнообразных функций
13.5.6. Упражнения
Краткие итоги главы
Часть III. Машинное обучение
Глава 14. Подгонка функций под данные
14.1. Измерение качества соответствия функции
14.1.1. Измерение отклонения функции
14.1.2. Суммирование квадратов ошибок
14.1.3. Вычисление потерь для функций цены автомобиля
14.1.4. Упражнения
14.2. Исследование пространств функций
14.2.1. График функции потерь для прямых, проходящих через начало координат
14.2.2. Пространство всех линейных функций
14.2.3. Упражнения
14.3. Поиск прямой наилучшего соответствия с помощью градиентного спуска
14.3.1. Изменение масштаба данных
14.3.2. Поиск и построение линии наилучшего соответствия
14.3.3. Упражнения
14.4. Подбор нелинейной функции
14.4.1. Особенности поведения экспоненциальных функций
14.4.2. Нахождение экспоненциальной функции наилучшего соответствия
14.4.3. Упражнения
Краткие итоги главы
Глава 15. Классификация данных и логистическая регрессия
15.1. Оценка функции классификации на реальных данных
15.1.1. Загрузка данных об автомобилях
15.1.2. Оценка функции классификации
15.1.3. Упражнения
15.2. Изображение границ решения
15.2.1. Изображение пространства автомобилей
15.2.2. Определение лучшей границы решения
15.2.3. Реализация функции классификации
15.2.4. Упражнение
15.3. Классификация как задача регрессии
15.3.1. Масштабирование исходных данных об автомобилях
15.3.2. Оценка похожести автомобиля на BMW
15.3.3. Знакомство с сигмоидной функцией
15.3.4. Комбинирование сигмоидной функции с другими функциями
15.3.5. Упражнения
15.4. Исследование пространства возможных логистических функций
15.4.1. Параметризация логистических функций
15.4.2. Оценка качества соответствия логистической функции
15.4.3. Тестирование разных логистических функций
15.4.4. Упражнения
15.5. Поиск лучшей логистической функции
15.5.1. Градиентный спуск в трех измерениях
15.5.2. Использование градиентного спуска для поиска наилучшего соответствия
15.5.3. Оценка лучшего логистического классификатора
15.5.4. Упражнения
Краткие итоги главы
Глава 16. Обучение нейронных сетей
16.1. Классификация данных с помощью нейронных сетей
16.2. Классификация изображений рукописных цифр
16.2.1. Построение 64-мерных векторов изображения
16.2.2. Построение случайного классификатора цифр
16.2.3. Оценка характеристик классификатора цифр
16.2.4. Упражнения
16.3. Проектирование нейронной сети
16.3.1. Организация нейронов и связей между ними
16.3.2. Поток данных через нейронную сеть
16.3.3. Вычисление активаций
16.3.4. Вычисление активаций в матричной записи
16.3.5. Упражнения
16.4. Создание нейронной сети на Python
16.4.1. Реализация класса MLP на Python
16.4.2. Вычисления в MLP
16.4.3. Проверка качества классификации моделью MLP
16.4.4. Упражнения
16.5. Обучение нейронной сети с помощью градиентного спуска
16.5.1. Обучение как задача минимизации
16.5.2. Вычисление градиентов с обратным распространением
16.5.3. Автоматическое обучение с помощью scikit-learn
16.5.4. Упражнения
16.6. Расчет градиентов в ходе обратного распространения
16.6.1. Вычисление потерь в терминах весов последнего слоя
16.6.2. Вычисление частных производных для весов последнего слоя с помощью цепного правила
16.6.3. Упражнения
Краткие итоги главы
Приложение A. Подготовка к работе с Python
A.1. Проверка наличия Python в системе
A.2. Загрузка и установка Anaconda
A.3. Применение Python в интерактивном режиме
A.3.1. Создание и запуск файла сценария на Python
A.3.2. Использование блокнотов Jupyter
Приложение Б. Советы и рекомендации по работе с Python
Б.1. Числа и математика в Python
Б.1.1. Модуль math
Б.1.2. Случайные числа
Б.2. Коллекции данных в Python
Б.2.1. Списки
Б.2.2. Другие итерируемые объекты
Б.2.3. Функции-генераторы
Б.2.4. Кортежи
Б.2.5. Множества
Б.2.6. Массивы NumPy
Б.2.7. Словари
Б.2.8. Полезные функции для работы с коллекциями
Б.3. Работа с функциями
Б.3.1. Передача функциям нескольких входных данных
Б.3.2. Именованные аргументы
Б.3.3. Функции как данные
Б.3.4. Лямбда-выражения: анонимные функции
Б.3.5. Применение функций к массивам NumPy
Б.4. Данные с плавающей точкой и Matplotlib
Б.4.1. Создание диаграммы рассеяния
Б.4.2. Создание линейной диаграммы
Б.4.3. Дополнительные настройки диаграмм
Б.5. Объектно-ориентированное программирование на Python
Б.5.1. Определение классов
Б.5.2. Определение методов
Б.5.3. Специальные методы
Б.5.4. Перегрузка операторов
Б.5.5. Методы класса
Б.5.6. Наследование и абстрактные классы
Приложение В.Загрузка и отображение трехмерных моделей с помощью OpenGL и PyGame
В.1. Воссоздание октаэдра из главы 3
В.2. Изменение точки зрения
В.3. Загрузка и отображение чайника из Юты
В.4. Упражнения