Найти тему
Программист о Data Science

День 14: [Decision Tree #1] Формулируем задачу и собираем DataFrame

Оглавление
И вот перед нами решающие деревья...
И вот перед нами решающие деревья...

Decision Tree - алгоритм с учителем для классификации или регрессии.

Немного терминологии:

Алгоритмы с обучением или "с учителем" прежде чем использовать нужно обучить на размеченных данных. Алгоритмы "без учителя" используются напрямую без необходимости обучения.

Размеченные данные - данные, которые уже включают в себя правильный результат. Их стоит рассматривать как примеры, которые используют обучающиеся алгоритмы для обучения.

Задачи машинного обучения делят по основным типам:
1) Задачи регрессии - задачи поиска взаимосвязи между разными признаками
2) Задачи классификации - задачи приведения объекта к определённой категории по его признакам
3) Задачи кластеризации - задачи группировки объектов по их признакам
И есть ряд более комплексных задач, которые строятся, как правило, на базе выше описанных:
1) Natural Language Processing - задачи анализа и понимания текста
2) Рекомендательные системы - задачи подбора "рекомендаций" для достижения необходимого эффекта

То есть, если у нас есть примеры уже классифицированных данных и нам нужно научиться относить объекты к разным категориям, то мы можем использовать алгоритм решающих деревьев (Decision Tree).

Для дальнейших экспериментов нам понадобится библиотека ML алгоритмов, чтобы не реализовывать их с нуля самому. Одной из самых распространённых я бы выделил scikit-learn (он же sklearn).

Установим sklearn в своё Python окружение:

Перезапуск Jupyter после установки библиотек не требуется
Перезапуск Jupyter после установки библиотек не требуется

В качестве примера возьмём задачу из области NLP задач.

Смотрим данные и формулируем задачу

У меня есть логи домашнего роутера. Обычные текстовые логи вот в таком формате. Сначала судя по всему идёт уровень логов, потом дата, затем название сервиса, которому принадлежит сообщение в логах и само сообщение в произвольном формате.
У меня есть логи домашнего роутера. Обычные текстовые логи вот в таком формате. Сначала судя по всему идёт уровень логов, потом дата, затем название сервиса, которому принадлежит сообщение в логах и само сообщение в произвольном формате.

Я попробую классифицировать сервис по сообщению. То есть на выходе наша модель должна выдавать название сервиса по произвольному сообщению, которое мы ей зададим.

Подготовка данных

В текущем виде данные сложно анализировать. Их нужно привести к структурированному виду pd.DataFrame.

Не забываем импортировать Pandas
Не забываем импортировать Pandas

Проще всего логи парсятся с помощью регулярных выражений. Напишем функцию для разбора наших логов, где каждая строчка из файла будет преобразована в pd.Series - строку pd.DataFrame:

Если паттерн регулярного выражения предполагается использовать часто, то его лучше скомпилировать и далее использовать скомпилированный паттерн.
Если паттерн регулярного выражения предполагается использовать часто, то его лучше скомпилировать и далее использовать скомпилированный паттерн.

Далее применяем функцию на каждую строку файла и строим pd.DataFrame.

Заодно определяю осознанные названия колонок, чтобы было проще работать с данными.
Заодно определяю осознанные названия колонок, чтобы было проще работать с данными.

Теперь можем посмотреть получившийся DataFrame.

-7

В следующей статье мы продолжим подготовку данных, чтобы модель DecisionTree смогла понять, что мы от неё хотим.