- •Об авторе
- •Предисловие
- •Для кого эта книга
- •О чем эта книга
- •Что вам потребуется при чтении этой книги
- •Условные обозначения
- •От издательства
- •Глава 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-трудных задач
- •Упрощение задачи
- •Адаптация известного решения аналогичной задачи
- •Вероятностный метод
- •Когда следует использовать алгоритмы
- •Практический пример — события типа «черный лебедь»
- •Резюме
144 |
Глава 5. Графовые алгоритмы |
Простой анализ мошенничества
Простая техника анализа мошенничества основана на предположении, что на поведение человека влияют люди, с которыми он связан. Две вершины в сети
сбольшей вероятностью будут вести себя одинаково, если они связаны друг
сдругом.
Основываясь на этом предположении, разработаем простую методику. Нам нужно определить вероятность того, что узел a является F. Представим эту ве роятность как P(F/q) и вычислим ее следующим образом:
Применим это к предыдущему рисунку, где Neighborhoodn представляет собой окрестность вершины n, а w (n, nj) — вес связи между n и nj.
Кроме того, degreeq — это степень узла q. Далее вероятность рассчитывается следующим образом:
Как мы видим, вероятность того, что этот человек замешан в мошенничестве, составляет 67 %. Нам нужно задать порог. Если пороговое значение составляет 30 %, то мы можем с уверенностью пометить данную вершину как F.
Обратите внимание, что этот процесс необходимо повторять для каждой новой вершины в сети.
Теперь рассмотрим продвинутый способ анализа мошенничества.
Анализ мошенничества методом сторожевой башни
Простой метод анализа мошенничества, представленный ранее, имеет два огра ничения:
zz Он не оценивает важности каждой вершины в социальной сети. Отношения с человеком, находящимся в центре сети, означают более высокую степень вовлеченности в мошенничество, нежели отношения с человеком на пери ферии сети.
Практический пример — выявление мошенничества |
145 |
zzКогда мы помечаем кого-то как вовлеченного в известный случай мошенни чества в существующей сети, мы не учитываем тяжесть преступления.
Методология анализа мошенничества по принципу сторожевой башни устра няет эти два ограничения. Прежде всего рассмотрим две концепции.
Оценка негативного воздействия
Если человек причастен к мошенничеству, считается, что с этим человеком связано негативное воздействие (negative outcome). Не каждое негативное воз действие одинаково серьезно или опасно. Человек, который выдает себя за другого, оказывает более серьезное негативное воздействие по сравнению с тем, кто просто пытается использовать просроченную подарочную карту на 20 дол ларов.
Мы будем оценивать негативное воздействие баллами от 1 до 10 следующим образом (табл. 5.1).
Таблица 5.1
Негативное воздействие |
Оценка негативного воздействия |
|
|
Выдача себя за другого |
10 |
|
|
Причастность к краже кредитных карт |
8 |
|
|
Отправка поддельного чека |
7 |
|
|
Судимость |
6 |
|
|
Отсутствие судимости |
0 |
|
|
Наша оценка основывается на ретроспективном анализе случаев мошенничества и их последствий.
Степень подозрения (DOS)
Степень подозрения (degree of suspicion, DOS) количественно определяет веро ятность причастности человека к мошенничеству. Нулевое значение DOS озна чает низкую вероятность совершения преступления человеком, а значение DOS, равное 9, — высокую вероятность.
Анализ исторических данных показывает, что профессиональные мошенники занимают важное положение в собственных социальных сетях. Чтобы учесть этот факт, мы вычислим все четыре показателя центральности для каждой вер
146 |
Глава 5. Графовые алгоритмы |
шины в нашей сети. Затем мы возьмем среднее значение этих вершин. Это и будет показывать важность конкретного человека в сети.
Если человек, связанный с вершиной, замешан в мошенничестве, мы проиллю стрируем негативное воздействие, оценив его с помощью заранее определенных значений из таблицы выше (табл. 5.1). Это делается для того, чтобы тяжесть преступления отражалась в значении каждого отдельного DOS.
Наконец, чтобы получить значение DOS‚ перемножим среднее значение пока зателей центральности и оценку негативного воздействия. Нормализуем DOS, разделив его на максимальное значение DOS в сети.
Давайте рассчитаем DOS для каждой из девяти вершин указанной сети (табл. 5.2).
Таблица 5.2
|
Вер- |
Вер- |
Вер- |
Вер- |
Вер- |
Вер- |
Вер- |
Вер- |
Вер- |
|
ши- |
ши- |
ши- |
ши- |
ши- |
ши- |
ши- |
ши- |
ши- |
|
на 1 |
на 2 |
на 3 |
на 4 |
на 5 |
на 6 |
на 7 |
на 8 |
на 9 |
|
|
|
|
|
|
|
|
|
|
Степень |
0.25 |
0.5 |
0.25 |
0.25 |
0.25 |
0.13 |
0.63 |
0.13 |
0.13 |
центрально |
|
|
|
|
|
|
|
|
|
сти |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Посредниче |
0.25 |
0.47 |
0 |
0 |
0 |
0 |
0.71 |
0 |
0 |
ство |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Близость |
0.5 |
0.61 |
0.53 |
0.47 |
0.47 |
0.34 |
0.72 |
0.4 |
0.4 |
|
|
|
|
|
|
|
|
|
|
Влиятель |
0.24 |
0.45 |
0.36 |
0.32 |
0.32 |
0.08 |
0.59 |
0.16 |
0.16 |
ность |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Среднее |
0.31 |
0.51 |
0.29 |
0.26 |
0.26 |
0.14 |
0.66 |
0.17 |
0.17 |
значение |
|
|
|
|
|
|
|
|
|
центрально |
|
|
|
|
|
|
|
|
|
сти |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Оценка |
0 |
6 |
0 |
0 |
7 |
8 |
10 |
0 |
0 |
негативного |
|
|
|
|
|
|
|
|
|
воздействия |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DOS |
0 |
3 |
0 |
0 |
1.82 |
1.1 |
6.625 |
0 |
0 |
|
|
|
|
|
|
|
|
|
|
Нормализо |
0 |
0.47 |
0 |
0 |
0.27 |
0.17 |
1 |
0 |
0 |
ванный DOS |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Каждая из вершин и ее нормализованный DOS показаны на рис. 5.20.
Практический пример — выявление мошенничества |
147 |
||||||
|
|
|
|
|
|
|
|
|
DOS=0.17 |
|
? |
|
|
|
|
|
6 F |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 NF |
|
|
|
DOS=0.27 |
|
|
|
|
|
|
5 F |
|
|
|
|
DOS=0 |
|
|
|
|
|
|
|
|
7 F |
4 NF |
|
||
|
|
|
|
|
|
||
|
|
|
3 NF |
DOS=1 DOS=0 |
|
||
|
|
DOS=0 |
|
|
|
|
|
|
|
|
2 F |
DOS=0.47 |
|
||
|
|
|
|
|
|||
|
|
9 NF DOS=0 |
|
8 NF DOS=0 |
|
||
|
|
|
|
|
|
|
|
Рис. 5.20
Для расчета DOS новой добавленной вершины будем использовать следующую формулу:
Используя соответствующие значения, рассчитаем DOS:
Полученное значение указывает на риск мошенничества, связанный с новой вершиной, добавленной в систему. Это означает, что по шкале от 0 до 1 данный человек имеет значение DOS 0.42. Мы можем создать несколько подборок DOS, как показано в табл. 5.3.
Таблица 5.3
Значение DOS |
Классификация риска |
|
|
DOS = 0 |
Никакого риска |
|
|
0 < DOS ≤ 0.10 |
Низкий риск |
|
|
0.10 < DOS ≤ 0.3 |
Умеренный риск |
|
|
DOS > 0.3 |
Высокий риск |
|
|