- •Об авторе
- •О научном редакторе
- •От издательства
- •Введение
- •Использование Python для data science
- •Для кого эта книга?
- •О чем эта книга?
- •Глава 1. Базовые знания о данных
- •Категории данных
- •Неструктурированные данные
- •Структурированные данные
- •Слабоструктурированные данные
- •Данные временных рядов
- •Источники данных
- •Веб-страницы
- •Базы данных
- •Файлы
- •Получение
- •Очистка
- •Преобразование
- •Анализ
- •Хранение
- •Питонический стиль
- •Выводы
- •Глава 2. Структуры данных Python
- •Списки
- •Создание списка
- •Использование общих методов списков
- •Использование срезов
- •Использование списка в качестве очереди
- •Использование списка в качестве стека
- •Использование списков и стеков для обработки естественного языка
- •Расширение функциональности с помощью списковых включений
- •Кортежи
- •Список кортежей
- •Неизменяемость
- •Словари
- •Список словарей
- •Добавление элементов в словарь с помощью setdefault()
- •Преобразование JSON в словарь
- •Множества
- •Удаление дубликатов из последовательности
- •Общие операции с множеством
- •Упражнение № 1: продвинутый анализ тегов фотографий
- •Выводы
- •NumPy
- •Установка NumPy
- •Создание массива NumPy
- •Выполнение поэлементных операций
- •Использование статистических функций NumPy
- •Упражнение № 2: использование статистических функций numpy
- •pandas
- •Установка pandas
- •pandas Series
- •Упражнение № 3: объединение трех серий
- •pandas DataFrame
- •Упражнение № 4: использование разных типов join
- •scikit-learn
- •Установка scikit-learn
- •Получение набора образцов
- •Преобразование загруженного датасета в pandas DataFrame
- •Разделение набора данных на обучающий и тестовый
- •Преобразование текста в числовые векторы признаков
- •Обучение и оценка модели
- •Создание прогнозов на новых данных
- •Выводы
- •Глава 4. Доступ к данным из файлов и API
- •Импортирование данных с помощью функции open()
- •Текстовые файлы
- •Файлы с табличными данными
- •Упражнение № 5: открытие json-файлов
- •Двоичные файлы
- •Экспортирование данных в файл
- •Доступ к удаленным файлам и API
- •Как работают HTTP-запросы
- •Библиотека urllib3
- •Библиотека Requests
- •Упражнение № 6: доступ к api с помощью requests
- •Перемещение данных в DataFrame и из него
- •Импортирование вложенных структур JSON
- •Конвертирование DataFrame в JSON
- •Выводы
- •Глава 5. Работа с базами данных
- •Реляционные базы данных
- •Понимание инструкций SQL
- •Начало работы с MySQL
- •Определение структуры базы данных
- •Вставка данных в БД
- •Запрос к базе данных
- •Упражнение № 8: объединение «один-ко-многим»
- •Использование инструментов аналитики баз данных
- •Базы данных NoSQL
- •Документоориентированные базы данных
- •Упражнение № 9: вставка и запрос нескольких документов
- •Выводы
- •Глава 6. Агрегирование данных
- •Данные для агрегирования
- •Объединение датафреймов
- •Группировка и агрегирование данных
- •Просмотр конкретных агрегированных показателей по MultiIndex
- •Срез диапазона агрегированных значений
- •Срезы на разных уровнях агрегирования
- •Добавление общего итога
- •Добавление промежуточных итогов
- •Выбор всех строк в группе
- •Выводы
- •Глава 7. Объединение датасетов
- •Объединение встроенных структур данных
- •Объединение списков и кортежей с помощью оператора +
- •Объединение словарей с помощью оператора **
- •Объединение строк из двух структур
- •Реализация join-объединений списков
- •Конкатенация массивов NumPy
- •Объединение структур данных pandas
- •Конкатенация датафреймов
- •Удаление столбцов/строк из датафрейма
- •Join-объединение двух датафреймов
- •Выводы
- •Глава 8. Визуализация
- •Распространенные способы визуализации
- •Линейные диаграммы
- •Столбчатые диаграммы
- •Круговые диаграммы
- •Гистограммы
- •Построение графиков с помощью Matplotlib
- •Установка Matplotlib
- •Использование matplotlib.pyplot
- •Работа с объектами Figure и Axes
- •Создание гистограммы с помощью subplots()
- •Совместимость Matplotlib с другими библиотеками
- •Построение графиков для данных pandas
- •Отображение данных геолокации с помощью Cartopy
- •Выводы
- •Глава 9. Анализ данных о местоположении
- •Получение данных о местоположении
- •Преобразование стандартного вида адреса в геокоординаты
- •Получение геокоординат движущегося объекта
- •Анализ пространственных данных с помощью geopy и Shapely
- •Поиск ближайшего объекта
- •Поиск объектов в определенной области
- •Объединение двух подходов
- •Упражнение № 15: совершенствование алгоритма подбора машины
- •Получение непространственных характеристик
- •Объединение датасетов с пространственными и непространственными данными
- •Выводы
- •Глава 10. Анализ данных временных рядов
- •Регулярные и нерегулярные временные ряды
- •Общие методы анализа временных рядов
- •Вычисление процентных изменений
- •Вычисление скользящего окна
- •Вычисление процентного изменения скользящего среднего
- •Многомерные временные ряды
- •Обработка многомерных временных рядов
- •Анализ зависимости между переменными
- •Выводы
- •Глава 11. Получение инсайтов из данных
- •Ассоциативные правила
- •Поддержка
- •Доверие
- •Лифт
- •Алгоритм Apriori
- •Создание датасета с транзакциями
- •Определение часто встречающихся наборов
- •Генерирование ассоциативных правил
- •Визуализация ассоциативных правил
- •Получение полезных инсайтов из ассоциативных правил
- •Генерирование рекомендаций
- •Планирование скидок на основе ассоциативных правил
- •Выводы
- •Глава 12. Машинное обучение для анализа данных
- •Почему машинное обучение?
- •Типы машинного обучения
- •Обучение с учителем
- •Обучение без учителя
- •Как работает машинное обучение
- •Данные для обучения
- •Статистическая модель
- •Неизвестные данные
- •Пример анализа тональности: классификация отзывов о товарах
- •Получение отзывов о товарах
- •Очистка данных
- •Разделение и преобразование данных
- •Обучение модели
- •Оценка модели
- •Упражнение № 19: расширение набора примеров
- •Прогнозирование тенденций фондового рынка
- •Получение данных
- •Извлечение признаков из непрерывных данных
- •Генерирование выходной переменной
- •Обучение и оценка модели
- •Выводы
250 Глава 12. Машинное обучение для анализа данных
с учителем — классификация, когда модель присваивает набору входных значений одну из меток классов конечного множества. Определение положительных и отрицательных отзывов о продукте, подобно другим приложениям для анализа тональности, идентифицирующих фрагменты текста как позитивные или негативные, служат примерами классификации. Мы рассмотрим пример анализа тональности позже в этой главе.
Обучение без учителя
Обучение без учителя — это метод машинного обучения, в котором отсутствует этап обучения. Такие приложения получают входные данные без соответствующих им выходных значений, на которых можно обучаться. В этом смысле модели МО без учителя должны работать самостоятельно, обнаруживая скрытые закономерности во входных данных.
Отличным примером обучения без учителя является анализ ассоциативных правил (association analysis), когда приложение на базе МО определяет элементы в наборе, которые имеют сходство друг с другом. В главе 11 мы провели такой анализ на наборе данных о транзакциях, выявив товары, которые обычно приобретают вместе. Мы использовали алгоритм Apriori, которому не нужны выходные данные для обучения; вместо этого он принимает все данные о транз акциях в качестве входных значений и ищет в них часто встречающиеся наборы товаров, таким образом представляя собой обучение без учителя.
Как работает машинное обучение
Типичный пайплайн МО состоит из трех основных компонентов:
данные для обучения; статистическая модель, применяемая к данным;
новые, неизвестные данные для обработки.
В следующих разделах более подробно рассматривается каждый из этих компонентов.
Данные для обучения
Машинное обучение исходит из того, что компьютерные системы могут обу чаться, а для обучения любому алгоритму МО требуются данные. Как мы уже обсуждали, природа этих данных варьируется в зависимости от того, с какой моделью мы имеем дело: с учителем или без учителя. В случае машинного
Как работает машинное обучение 251
обучения с учителем данные принимают форму пар входных и выходных значений, которые обучают модель для последующего прогнозирования выходных данных на основе новых входных. А при обучении без учителя модель получает только входные данные и проверяет их на наличие закономерностей, на основе которых можно сформировать выходные значения.
Хотя для всех приложений на основе МО требуются данные, формат этих данных зависит от алгоритма. Множество алгоритмов обучается на основе датасета, данные в котором организованы в виде таблицы, где строки представляют собой экземпляры, например отдельные объекты или определенные моменты времени, а столбцы — признаки этих экземпляров. Классическим примером является датасет Iris1. Он включает 150 строк, каждая из которых содержит наблюдения об отдельном экземпляре цветка ириса. Вот так выглядят первые четыре строки датасета:
sepal length |
sepal width |
petal length |
petal width |
species |
5.1 |
3.5 |
1.4 |
0.2 |
Iris-setosa |
4.9 |
3.0 |
1.4 |
0.2 |
Iris-setosa |
4.7 |
3.2 |
1.3 |
0.2 |
Iris-setosa |
4.6 |
3.1 |
1.5 |
0.2 |
Iris-setosa |
|
|
|
|
|
Первые четыре столбца представляют различные свойства, или признаки, экземпляров. Пятый столбец содержит метку для каждого экземпляра: точное видовое название ириса. Обучая модель классификации на этом датасете, мы бы использовали значения в первых четырех столбцах в качестве независимых переменных, или входных данных, а пятый столбец был бы зависимой переменной, или выходным значением. После такого обучения в идеале модель должна уметь классифицировать видовую принадлежность новых экземпляров ирисов.
Некоторые алгоритмы обучаются на нетабличных данных. Например, алгоритм Apriori, используемый для анализа ассоциативных правил, который мы обсуждали в предыдущей главе, принимает в качестве входных данных набор транзакций (или корзин) различных размеров. Вот простой пример такого набора транзакций:
(butter, cheese)
(cheese, pasta, bread, milk) (milk, cheese, eggs, bread, butter) (bread, cheese, butter)
1 https://archive.ics.uci.edu/ml/datasets/Iris
252 Глава 12. Машинное обучение для анализа данных
Помимо вопроса о том, как структурированы данные машинного обучения, существует проблема зависимости типа используемых данных от алгоритма. Как видно из предыдущих примеров, некоторые алгоритмы МО работают с числовыми или текстовыми данными. Однако существуют и алгоритмы, предназначенные для работы с фото-, видео- и аудиоданными.
Статистическая модель
Какой бы формат данных ни требовался для алгоритма МО, входные данные необходимо привести к виду, пригодному для анализа и получения выходных данных. Именно здесь в игру вступает статистическая модель: статистика используется для создания представления данных, чтобы алгоритм мог выявлять взаимосвязи между переменными, находить инсайты, делать прогнозы новых данных, генерировать рекомендации и т. д. Статистические модели лежат в основе любого алгоритма МО.
Например, алгоритм Apriori использует метрику поддержки в качестве статистической модели для поиска часто встречающихся наборов элементов (как упоминалось в главе 11, поддержка — это процент транзакций, включающих некоторый набор товаров или любых других элементов). В частности, алгоритм определяет каждый возможный набор элементов и вычисляет соответствующую метрику поддержки, а затем выбирает наборы с высоким показателем поддержки. Вот простой пример, иллюстрирующий, как работает алгоритм:
Itemset |
Support |
-------------- |
------- |
butter, cheese |
0.75 |
bread, cheese |
0.75 |
milk, bread |
0.50 |
bread, butter |
0.50 |
|
|
В данном примере показаны наборы, состоящие только из двух товаров. Фактически после вычисления метрики поддержки для каждого возможного набора из двух товаров алгоритм Apriori переходит к анализу наборов из трех позиций, затем из четырех и т. д. После этого алгоритм использует значения поддержки всех наборов товаров (любого размера), чтобы сформировать список часто встречающихся наборов.
Неизвестные данные
В машинном обучении с учителем после обучения модели на имеющихся данных можно применить ее к новым, неизвестным данным. Однако перед этим,