- •Об авторе
- •Предисловие
- •Для кого эта книга
- •О чем эта книга
- •Что вам потребуется при чтении этой книги
- •Условные обозначения
- •От издательства
- •Глава 1. Обзор алгоритмов
- •Что такое алгоритм
- •Этапы алгоритма
- •Определение логики алгоритма
- •Псевдокод
- •Использование сниппетов
- •Создание плана выполнения
- •Введение в библиотеки Python
- •Библиотеки Python
- •Реализация Python с помощью Jupyter Notebook
- •Методы разработки алгоритмов
- •Параметры данных
- •Параметры вычислений
- •Анализ производительности
- •Анализ пространственной сложности
- •Анализ временной сложности
- •Оценка эффективности
- •Выбор алгоритма
- •«О-большое»
- •Проверка алгоритма
- •Точные, приближенные и рандомизированные алгоритмы
- •Объяснимость алгоритма
- •Резюме
- •Глава 2. Структуры данных, используемые в алгоритмах
- •Структуры данных в Python
- •Список
- •Кортеж
- •Словарь
- •Множество
- •DataFrame
- •Матрица
- •Абстрактные типы данных
- •Вектор
- •Стек
- •Очередь
- •Базовый принцип использования стеков и очередей
- •Дерево
- •Резюме
- •Глава 3. Алгоритмы сортировки и поиска
- •Алгоритмы сортировки
- •Обмен значений переменных в Python
- •Сортировка пузырьком
- •Сортировка вставками
- •Сортировка слиянием
- •Сортировка Шелла
- •Сортировка выбором
- •Алгоритмы поиска
- •Линейный поиск
- •Бинарный поиск
- •Интерполяционный поиск
- •Практическое применение
- •Резюме
- •Глава 4. Разработка алгоритмов
- •Знакомство с основными концепциями разработки алгоритма
- •Вопрос 1. Даст ли разработанный алгоритм ожидаемый результат?
- •Вопрос 2. Является ли данный алгоритм оптимальным способом получения результата?
- •Вопрос 3. Как алгоритм будет работать с большими наборами данных?
- •Понимание алгоритмических стратегий
- •Стратегия «разделяй и властвуй»
- •Стратегия динамического программирования
- •Жадные алгоритмы
- •Практическое применение — решение задачи коммивояжера
- •Использование стратегии полного перебора
- •Использование жадного алгоритма
- •Алгоритм PageRank
- •Постановка задачи
- •Реализация алгоритма PageRank
- •Знакомство с линейным программированием
- •Практическое применение — планирование производства с помощью линейного программирования
- •Резюме
- •Глава 5. Графовые алгоритмы
- •Представление графов
- •Типы графов
- •Особые типы ребер
- •Эгоцентрические сети
- •Анализ социальных сетей
- •Введение в теорию сетевого анализа
- •Кратчайший путь
- •Создание окрестностей
- •Показатели центральности
- •Вычисление показателей центральности с помощью Python
- •Понятие обхода графа
- •BFS — поиск в ширину
- •DFS — поиск в глубину
- •Практический пример — выявление мошенничества
- •Простой анализ мошенничества
- •Анализ мошенничества методом сторожевой башни
- •Резюме
- •Глава 6. Алгоритмы машинного обучения без учителя
- •Обучение без учителя
- •Обучение без учителя в жизненном цикле майнинга данных
- •Современные тенденции исследований в области обучения без учителя
- •Практические примеры
- •Алгоритмы кластеризации
- •Количественная оценка сходства
- •Иерархическая кластеризация
- •Оценка кластеров
- •Применение кластеризации
- •Снижение размерности
- •Метод главных компонент (PCA)
- •Ограничения PCA
- •Поиск ассоциативных правил
- •Примеры использования
- •Анализ рыночной корзины
- •Ассоциативные правила
- •Оценка качества правила
- •Алгоритмы анализа ассоциаций
- •Практический пример — объединение похожих твитов в кластеры
- •Тематическое моделирование
- •Кластеризация
- •Алгоритмы обнаружения выбросов (аномалий)
- •Использование кластеризации
- •Обнаружение аномалий на основе плотности
- •Метод опорных векторов
- •Резюме
- •Глава 7. Традиционные алгоритмы обучения с учителем
- •Машинное обучение с учителем
- •Терминология машинного обучения с учителем
- •Благоприятные условия
- •Различие между классификаторами и регрессорами
- •Алгоритмы классификации
- •Задача классификации
- •Оценка классификаторов
- •Этапы классификации
- •Алгоритм дерева решений
- •Ансамблевые методы
- •Логистическая регрессия
- •Метод опорных векторов (SVM)
- •Наивный байесовский алгоритм
- •Алгоритмы регрессии
- •Задача регрессии
- •Линейная регрессия
- •Алгоритм дерева регрессии
- •Алгоритм градиентного бустинга для регрессии
- •Среди алгоритмов регрессии победителем становится...
- •Практический пример — как предсказать погоду
- •Резюме
- •Глава 8. Алгоритмы нейронных сетей
- •Введение в ИНС
- •Эволюция ИНС
- •Обучение нейронной сети
- •Анатомия нейронной сети
- •Градиентный спуск
- •Функции активации
- •Инструменты и фреймворки
- •Keras
- •Знакомство с TensorFlow
- •Типы нейронных сетей
- •Перенос обучения
- •Практический пример — использование глубокого обучения для выявления мошенничества
- •Методология
- •Резюме
- •Глава 9. Алгоритмы обработки естественного языка
- •Знакомство с NLP
- •Терминология NLP
- •Библиотека NLTK
- •Мешок слов (BoW)
- •Эмбеддинги слов
- •Окружение слова
- •Свойства эмбеддингов слов
- •Рекуррентные нейросети в NLP
- •Использование NLP для анализа эмоциональной окраски текста
- •Практический пример — анализ тональности в отзывах на фильмы
- •Резюме
- •Глава 10. Рекомендательные системы
- •Введение в рекомендательные системы
- •Типы рекомендательных систем
- •Рекомендательные системы на основе контента
- •Рекомендательные системы на основе коллаборативной фильтрации
- •Гибридные рекомендательные системы
- •Ограничения рекомендательных систем
- •Проблема холодного старта
- •Требования к метаданным
- •Проблема разреженности данных
- •Предвзятость из-за социального влияния
- •Ограниченные данные
- •Области практического применения
- •Практический пример — создание рекомендательной системы
- •Резюме
- •Глава 11. Алгоритмы обработки данных
- •Знакомство с алгоритмами обработки данных
- •Классификация данных
- •Алгоритмы хранения данных
- •Стратегии хранения данных
- •Алгоритмы потоковой передачи данных
- •Применение потоковой передачи
- •Алгоритмы сжатия данных
- •Алгоритмы сжатия без потерь
- •Практический пример — анализ тональности твитов в режиме реального времени
- •Резюме
- •Глава 12. Криптография
- •Введение в криптографию
- •Понимание важности самого слабого звена
- •Основная терминология
- •Требования безопасности
- •Базовое устройство шифров
- •Типы криптографических методов
- •Криптографические хеш-функции
- •Симметричное шифрование
- •Асимметричное шифрование
- •Практический пример — проблемы безопасности при развертывании модели МО
- •Атака посредника (MITM)
- •Избежание маскарадинга
- •Шифрование данных и моделей
- •Резюме
- •Глава 13. Крупномасштабные алгоритмы
- •Введение в крупномасштабные алгоритмы
- •Определение эффективного крупномасштабного алгоритма
- •Терминология
- •Разработка параллельных алгоритмов
- •Закон Амдала
- •Гранулярность задачи
- •Балансировка нагрузки
- •Проблема расположения
- •Запуск параллельной обработки на Python
- •Разработка стратегии мультипроцессорной обработки
- •Введение в CUDA
- •Кластерные вычисления
- •Гибридная стратегия
- •Резюме
- •Глава 14. Практические рекомендации
- •Введение в практические рекомендации
- •Печальная история ИИ-бота в Твиттере
- •Объяснимость алгоритма
- •Алгоритмы машинного обучения и объяснимость
- •Этика и алгоритмы
- •Проблемы обучающихся алгоритмов
- •Понимание этических аспектов
- •Снижение предвзятости в моделях
- •Решение NP-трудных задач
- •Упрощение задачи
- •Адаптация известного решения аналогичной задачи
- •Вероятностный метод
- •Когда следует использовать алгоритмы
- •Практический пример — события типа «черный лебедь»
- •Резюме
220 |
Глава 7. Традиционные алгоритмы обучения с учителем |
||
Таблица 7.4 |
|
|
|
|
|
|
|
Алгоритм |
Доля правильных |
Полнота |
Точность |
|
ответов |
|
|
|
|
|
|
Дерево решений |
0.94 |
0.93 |
0.88 |
|
|
|
|
XGBoost |
0.93 |
0.90 |
0.87 |
|
|
|
|
Случайный лес |
0.93 |
0.90 |
0.87 |
|
|
|
|
Логистическая регрессия |
0.91 |
0.81 |
0.89 |
|
|
|
|
SVM |
0.89 |
0.71 |
0.92 |
|
|
|
|
Наивный байесовский |
0.92 |
0.81 |
0.92 |
|
|
|
|
Можно заметить, что классификатор дерева решений работает лучше всего с точки зрения доли правильных ответов и полноты. Если мы стремимся к точ ности, то между SVM и наивным байесовским классификатором ничья, так что любой из них нам подойдет.
АЛГОРИТМЫ РЕГРЕССИИ
Модель машинного обучения с учителем использует один из алгоритмов ре грессии, если целевая переменная является непрерывной. В этом случае модель МО называется регрессором.
В данном разделе рассмотрены различные алгоритмы, которые можно исполь зовать для обучения регрессионных моделей МО с учителем — или просто ре грессоров. Прежде чем мы перейдем к деталям алгоритмов, давайте сформули руем задачу, которая позволит проверить их производительность, возможности и эффективность.
Задача регрессии
Аналогично подходу, который мы использовали с алгоритмами классификации, сначала сформулируем задачу, общую для всех алгоритмов регрессии. Назовем ее задачей регрессии. Для ее решения мы применим три алгоритма регрессии. Использование общей задачи в качестве проверки различных алгоритмов ре грессии имеет два преимущества.
zz Мы можем подготовить данные один раз и использовать подготовленные данные во всех трех алгоритмах регрессии.
Алгоритмы регрессии |
221 |
zzМы можем осуществить сравнение производительности трех алгоритмов регрессии.
Перейдем к постановке задачи.
Постановка задачи регрессии
В наши дни важно уметь прогнозировать пробег различных транспортных средств (ТС). Эффективное транспортное средство не только не вредит окру жающей среде, но и выгодно экономически. Пробег можно оценить исходя из мощности двигателя и характеристик ТС. Итак, наша задача состоит в том, чтобы обучить модель, способную на основе характеристик ТС предсказывать количество пройденных им миль на галлон (MPG).
Рассмотрим исторический набор данных, который мы будем использовать для обучения регрессоров.
Изучение набора исторических данных
В табл. 7.5 приведены признаки из имеющегося набора исторических данных.
Таблица 7.5
Название |
Тип |
Описание |
|
|
|
NAME (имя) |
Категориаль |
Идентифицирует конкретное транспортное |
|
ный |
средство |
|
|
|
CYLINDERS |
Непрерыв |
Количество цилиндров (от 4 до 8) |
(цилиндры) |
ный |
|
|
|
|
DISPLACEMENT |
Непрерыв |
Объем двигателя в кубических дюймах |
(литраж) |
ный |
|
|
|
|
HORSEPOWER |
Непрерыв |
Мощность двигателя в лошадиных силах |
(лошадиные |
ный |
|
силы) |
|
|
|
|
|
ACCELERATION |
Непрерыв |
Время, необходимое для ускорения от 0 до |
(ускорение) |
ный |
60 миль в час (в секундах) |
|
|
|
Целевой переменной для этой задачи является непрерывная переменная MPG, которая обозначает количество миль на галлон для каждого из ТС.
Спроектируем пайплайн обработки данных для нашей задачи.
222 |
Глава 7. Традиционные алгоритмы обучения с учителем |
Конструирование признаков с использованием пайплайна обработки данных
Приступим к проектированию многоразового пайплайна обработки данных для решения задачи регрессии. Как уже упоминалось, мы подготовим данные один раз, после чего используем их во всех алгоритмах. Выполним следующие шаги:
1. Импортируем набор данных:
dataset = pd.read_csv('auto.csv')
2. Предварительно рассмотрим набор данных:
dataset.head(5)
Вот как будет выглядеть набор данных (рис. 7.25).
Рис. 7.25
3.Далее перейдем к выбору признаков. Опустим столбец NAME, так как это идентификатор, необходимый только для автомобилей. Столбцы, которые используются для идентификации строк в нашем наборе данных, не имеют отношения к обучению модели. Отбросим эту колонку:
dataset=dataset.drop(columns=['NAME'])
4.Теперь преобразуем все входные переменные и заменим все пропущенные значения на нули:
dataset=dataset.drop(columns=['NAME'])
dataset= dataset.apply(pd.to_numeric, errors='coerce') dataset.fillna(0, inplace=True)
Эта операция улучшает качество данных и подготавливает их к использова нию для обучения модели. Перейдем к заключительному шагу:
Алгоритмы регрессии |
223 |
5. Разделим данные на части для контроля и обучения:
from sklearn.model_selection import train_test_split #from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
Это приведет к созданию следующих четырех структур:
zz X_train: структура данных, содержащая признаки обучающих данных; zz X_test: структура данных, содержащая признаки контрольных данных;
zz y_train: вектор, содержащий значения метки в наборе обучающих данных; zzy_test: вектор, содержащий значения метки в наборе контрольных данных.
Теперь испытаем подготовленные данные на трех различных регрессорах, чтобы оценить их производительность.
Линейная регрессия
Из всех методов машинного обучения с учителем алгоритм линейной регрессии является самым доступным для понимания. Сначала мы рассмотрим простую линейную регрессию, а затем расширим концепцию до множественной линейной регрессии.
Простая линейная регрессия
В своей простейшей форме линейная регрессия формулирует взаимосвязь между непрерывной зависимой переменной и непрерывной независимой переменной. Простая линейная регрессия демонстрирует, в какой степени изменения зависимой переменной (показанной на оси y) соотносятся с изменениями независимой пере менной (показанной на оси x). Ее можно представить следующим образом:
Пояснения к формуле:
zz y — зависимая переменная; zz X — независимая переменная;
zz w — наклон (угловой коэффициент), который указывает, насколько прямая поднимается или опускается при каждом изменении X;
zzα — свободный коэффициент, который указывает значение y при X = 0.
224 |
Глава 7. Традиционные алгоритмы обучения с учителем |
Ниже приведены некоторые примеры взаимосвязей между непрерывной за висимой переменной и непрерывной независимой переменной:
zz вес человека и потребление им калорий;
zz цена дома и его площадь в квадратных футах в конкретном районе; zzвлажность воздуха и вероятность дождя.
Для линейной регрессии как входная (независимая) переменная, так и целевая (зависимая) переменная должны быть числовыми. Наилучшая взаимосвязь достигается путем минимизации суммы квадратов вертикальных расстояний от каждой точки до прямой, проведенной через все точки. Предполагается, что связь между переменной-предиктором и целевой переменной является линей ной. Например, чем больше денег вложено в исследования и разработку про дукта, тем выше его продажи.
Давайте рассмотрим конкретный пример. Попробуем сформулировать взаимо связь между маркетинговыми расходами и продажами конкретного продукта. Оказывается, они напрямую связаны друг с другом. Маркетинговые расходы и продажи отражены на двумерном графике и показаны в виде голубых ромби ков. Взаимосвязь лучше всего можно аппроксимировать, проведя прямую линию, как показано ниже (рис. 7.26).
дажи Про
Маркетинговые расходы
Рис. 7.26
Как только линия проведена, мы можем увидеть математическую зависимость между маркетинговыми расходами и продажами.
Алгоритмы регрессии |
225 |
Оценка регрессоров
Линейная регрессия, которую мы построили, является аппроксимацией взаи мосвязи между зависимой и независимой переменными. Даже самая лучшая линия будет иметь некоторое отклонение от фактических значений, как пока зано на рис. 7.27.
Ошибка |
Ошибка |
|
Рис. 7.27
Чтобы количественно оценить эффективность модели линейной регрессии, обычно используется среднеквадратичная ошибка (Root Mean Square Error, RMSE). Это математическое вычисление стандартного отклонения ошибок, допущенных обученной моделью. Для примера в наборе обучающих данных функция loss рассчитывается следующим образом:
Loss (y′(i), y(i)) = 1/2(y′(i)- y(i))2.
Это приводит к функции cost, которая сводит к минимуму потери для всех примеров в обучающем наборе:
Давайте попробуем интерпретировать RMSE. Допустим, для нашей модели, которая предсказывает цену продукта, RMSE составляет 50 долларов. Это озна чает, что около 68,2 % прогнозов будут находиться в пределах 50 долларов от истинного значения (то есть α). Это также означает, что 95 % прогнозов будут находиться в пределах 100 долларов (то есть 2α) от фактического значения.
226 |
Глава 7. Традиционные алгоритмы обучения с учителем |
Наконец, 99,7 % прогнозов окажутся в пределах 150 долларов от фактического значения.
Множественная регрессия
В реальности при анализе чаще всего рассматривается более одной независимой переменной. Множественная регрессия является расширением простой линей ной регрессии. Ключевое отличие заключается в том, что вводятся дополни тельные бета-коэффициенты (β) для дополнительных переменных-предикторов. При обучении модели цель состоит в том, чтобы найти коэффициенты β, кото рые минимизируют ошибки линейного уравнения. Попробуем математически сформулировать взаимосвязь между зависимой переменной и набором неза висимых переменных (признаков).
Аналогично простому линейному уравнению, зависимая переменная y равна сумме свободного члена α и произведения коэффициентов β на значение x для каждого из i признаков:
y = α + β1 x1 + β2 × 2 +...+ βi xi + ε.
Ошибка обозначается как ε и указывает на то, что прогнозы неидеальны.
Коэффициенты βпозволяют каждому признаку отдельно влиять на значение y, поскольку y изменяется на величину βi для каждого единичного увеличения xi. Более того, свободный коэффициент α указывает ожидаемое значение y, когда все независимые переменные равны 0.
Обратите внимание, что все переменные в предыдущем уравнении могут быть представлены набором векторов. В этом случае целевые и предсказанные пере менные становятся векторами со строкой. Коэффициенты регрессии βи ошиб ки ε также являются векторами.
Использование алгоритма линейной регрессии в задаче регрессии
Теперь давайте обучим модель, используя обучающую часть набора данных:
1. Начнем с импорта пакета линейной регрессии:
from sklearn.linear_model import LinearRegression
2.Создадим экземпляр модели линейной регрессии и обучим ее с помощью обучающего набора данных:
Алгоритмы регрессии |
227 |
regressor = LinearRegression() regressor.fit(X_train, y_train)
3. Спрогнозируем результаты, используя контрольную часть набора данных:
y_pred = regressor.predict(X_test)
from sklearn.metrics import mean_squared_error from math import sqrt sqrt(mean_squared_error(y_test, y_pred))
4.Выходные данные, сгенерированные при выполнении этого кода, будут вы глядеть так (рис. 7.28).
Рис. 7.28
Как обсуждалось в предыдущем разделе, RMSE — это стандартное отклонение для ошибок. Оно указывает на то, что 68,2 % прогнозов будут находиться в пределах 4.36 от значения целевой переменной.
Когда используется линейная регрессия?
Линейная регрессия используется для решения многих реальных задач, напри мер:
zz Прогнозирование продаж.
zz Прогнозирование оптимальных цен на продукцию.
zz Количественная оценка причинно-следственной связи между событием и реакцией, например в клинических испытаниях лекарств, технических испытаниях безопасности или маркетинговых исследованиях.
zz Выявление закономерностей, которые могут быть использованы для про гнозирования будущего поведения с учетом известных критериев. Например, для прогнозирования страховых выплат, ущерба от стихийных бедствий, результатов выборов или уровня преступности.
Слабые стороны линейной регрессии
Слабые стороны линейной регрессии заключаются в следующем:
zz Она работает только с числовыми функциями.
zz Категориальные данные должны быть предварительно обработаны.