- •Об авторе
- •Предисловие
- •Для кого эта книга
- •О чем эта книга
- •Что вам потребуется при чтении этой книги
- •Условные обозначения
- •От издательства
- •Глава 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-трудных задач
- •Упрощение задачи
- •Адаптация известного решения аналогичной задачи
- •Вероятностный метод
- •Когда следует использовать алгоритмы
- •Практический пример — события типа «черный лебедь»
- •Резюме
128 |
Глава 5. Графовые алгоритмы |
SNA — благодаря распределенной и взаимосвязанной архитектуре социальных сетей — является одним из наиболее мощных примеров использования теории графов. Другой способ работы с графом — рассматривать его как сеть и при менять алгоритмы, разработанные для сетей. Это целая область‚ называемая
теорией сетевого анализа, и ее мы обсудим далее.
ВВЕДЕНИЕ В ТЕОРИЮ СЕТЕВОГО АНАЛИЗА
Мы знаем, что взаимосвязанные данные могут быть представлены в виде сети. В теории сетевого анализа подробно изучают методологии, разработанные для исследования и анализа таких данных. В этом разделе мы рассмотрим некоторые важные аспекты теории сетевого анализа.
Обратите внимание, что вершина — базовая единица сети. Сеть — это совокуп ность взаимосвязанных вершин (различных исследуемых объектов), а каждая линия соединения отображает отношения между ними. Чтобы решить задачу, нужно количественно оценить полезность и важность вершины в сети. Для этого существует несколько методов.
Рассмотрим ряд важных концепций, используемых в теории сетевого анализа.
Кратчайший путь
Путь представляет собой маршрут между выбранной начальной и конечной вершинами; это набор вершин, p, соединяющих начальную вершину с конечной. Ни одна вершина в p не повторяется.
Длина пути равна количеству входящих в его состав ребер. Из всех вариантов путь с наименьшей длиной называется кратчайшим. Расчет такого пути широ ко используется в алгоритмах теории графов, но не всегда прост для вычисления. Существуют различные алгоритмы поиска кратчайшего пути между начальным и конечным узлами. Один из самых популярных — алгоритм Дейкстры, опу бликованный в конце 1950-х годов. Его можно использовать в системе глобального позиционирования, GPS (Global Positioning System), для расчета минималь ного расстояния между источником и пунктом назначения. Алгоритм Дейкстры также применяется в алгоритмах сетевой маршрутизации.
Между Google и Apple не прекращается битва за разработку наи лучшего алгоритма поиска кратчайшего расстояния в картах Google и Apple Maps. Задача состоит в том, чтобы сделать алгоритм настолько быстрым, чтобы кратчайший путь вычислялся за считанные секунды.
Введение в теорию сетевого анализа |
129 |
Позже в этой главе мы обсудим алгоритм поиска в ширину, BFS (breadth-first search algorithm), который может быть преобразован в алгоритм Дейкстры. BFS предполагает одинаковые затраты на каждый вариант обхода графа. Для алго ритма Дейкстры затраты могут быть разными, и это необходимо учесть, чтобы превратить BFS в алгоритм Дейкстры.
Алгоритм Дейкстры вычисляет кратчайший путь от одной из вершин. Если мы хотим найти все пары кратчайших путей, нужно использовать алгоритм Флойда — Уоршелла (Floyd-Warshall algorithm).
Создание окрестностей
Поиск стратегий для создания окрестностей вокруг выбранных вершин имеет решающее значение для графовых алгоритмов. Методологии создания окрест ностей основаны на выборе прямых связей с интересующей вершиной. Одной из таких методологий является стратегия k-го порядка, которая выбирает вер шины, находящиеся на расстоянии k переходов от интересующей вершины.
Давайте рассмотрим различные критерии создания окрестностей.
Треугольники (triangles)
В теории графов поиск вершин, которые тесно связаны друг с другом, крайне важен для анализа. Один из методов состоит в том, чтобы попытаться иденти фицировать в сети треугольники, представляющие собой подграф, состоящий из трех непосредственно соединенных между собой вершин.
Давайте обсудим практический пример: выявление мошенничества (он будет подробнее рассмотрен в конце этой главы). Если эго-сеть узла m состоит из трех вершин, включая вершину m, то эта эго-сеть является треугольником. Вершина m будет эго, а две связанные вершины будут альтерами, скажем, вершина A и вершина B. Если оба альтера являются известными мошенниками, то мы мо жем с уверенностью объявить вершину m мошенником. Если только один из альтеров замешан в мошенничестве, мы не сможем представить убедительные доказательства, но нам следует продолжить поиски.
Плотность (density)
Начнем с определения полносвязной сети. Полносвязной сетью (fully connected network) мы называем граф, где каждая вершина напрямую связана с каждой другой вершиной.
130 |
Глава 5. Графовые алгоритмы |
Если у нас имеется полносвязная сеть N, то количество ребер в сети может быть представлено следующим образом:
Здесь в дело вступает плотность (density). Плотность измеряет отношение на
блюдаемых ребер к максимальному количеству ребер, если EdgesObserved — это количество ребер, которые мы хотим рассмотреть. Ее можно сформулировать
так:
Обратите внимание, что для треугольника плотность сети равна 1 и она пред ставляет собой максимально возможную связную сеть.
Показатели центральности
Существуют различные показатели центральности (сentrality measures) кон кретной вершины в графе или подграфе. С их помощью можно, например, ко личественно оценивать важность человека в социальной сети или важность здания для города.
В анализе графов широко используются следующие показатели центральности:
zz cтепень (degree);
zz посредничество (betweenness); zz близость (closeness); zzвлиятельность (Eigenvector).
Давайте разберем их подробно.
Степень
Количество ребер, соединенных с определенной вершиной, называется ее степенью (degree). Степень может указывать на то, насколько хорошо подключена конкретная вершина и какова ее способность быстро распространять сообщение по сети.
Введение в теорию сетевого анализа |
131 |
Давайте рассмотрим aGraph = ( , ), где представляет собой набор вершин‚ а — набор ребер. Напомним, что aGraph содержит | | вершин и | | ребер. Если мы разделим степень узла на (| | –1), то получим степень центральности (degree centrality):
Разберем конкретный пример. Взгляните на следующий граф (рис. 5.9).
Рис. 5.9
На этом графе вершина C имеет степень 4. Ее степень центральности может быть рассчитана следующим образом:
Посредничество
Посредничество, или промежуточность (betweenness),— это показатель цент ральности в графе. В контексте социальных сетей она позволяет количественно оценить вероятность того, что человек является частью взаимодействия в под группе. Для компьютерной сети посредничество количественно определяет негативное влияние отказа ребра на связь между вершинами графа.