Компьютерное зрение. Машинное обучение без нейронных сетей (scikit-learn)

В качестве простейшей иллюстрации рассмотрим классификацию датасета MNIST двумя подходами, и. заодно, познакомимся с двумя инструментами.

Датасет MNIST представляет собой набор из 70000 изображений рукописных цифр от 0 до 9, который делится на 60000 обучающих изображений и 10000 тестовых. Подробное его описание и он сам доступены по адресу https://www.openml.org/d/554.

Цифры были нормализованы по размеру и центрированы на изображении фиксированного размера. Исходные черно-белые изображения из NIST были нормализованы по размеру, чтобы поместиться в поле размером 20×20 пикселей при сохранении их соотношения сторон. После нормализации изображения сглажены, вследствие чего содержат уровни серого. Полученные изображения центрированы в поле 28×28 путем вычисления центра масс пикселей и перемещения изображения таким образом, чтобы расположить эту точку в центре.

Когда-то этот датасет был одним из соревновательных датасетов для научных исследований в области классификации изображений, однако, на данный момент современными средствами и методами точность классификации приблизилась к 100%, а датасет получил роль учебного и является хорошей базой для первых шагов в машинном обучении.

Одним из наиболее известных фреймворков для машинного обучения с использованием классических методов является scikit-learn.

Загрузка датасета

Так как решение любой задачи машинного обучения начинается с датасета (в случае с кластеризацией его размечать нет необходимости, так как это обучение без учителя).
Scikit-learn содержит несколько датасетов, однако, выбранного нами, mnist в их числе нет, поэтому воспользуемся другим его инструментом — загрузчиком из репозитория openml.

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

В 3-й строке производится разделение датасетана обучающую часть размером 60000 элементов и тестовую размером 10000 элементов.

в 4 и 5 строках из-за особенностей представления лейблов в датасете (они предствлены текстовым значением) производим преобразование к целочисленному типу.

Для проверки получим изображения нескольких цифр, используемых для обучения:

В 6й строке для вывода изображение производится преобразование вектора значений в массив 28×28. Подобные преобразования (в обе строны) достаточно часто встречаются при работе с датасетами.

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

Обучение классификатора

В качестве примера воспользуемся методом опорных векторов. Не будем вдаваться в подробности метода, т.к. это заслуживает отдельной статьи, однако если кратко, то метод опорных векторов пытается найти такую функцию которая разделит данные на классы, в том числе с использование отражения данных в пространство с более высокой размерностью.

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

Подробности о классификаторе SVC в составе scikit-learn в мануале. Из-за того, что рассматриваемый датасет слишком велик для метода SVC, используем его модификацию с помощью метода стохастического градиентного спуска SGDClassifier, который по умолчанию использует метод опорных векторов.

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

Когда процесс обучения закончится (а в некоторых случаях он может быть достаточно длительным) выполним визуализацию и проверку на тестовых данных. Для этого воспользуемся confusion matrix — которые являются одним из мощнейших инструментов визуализации и анализа качества многоклассовых классификаторов.

Визуализация результатов обучения

Используемая библиотека не содержит штатных методов грфического вывода confusion matrix, однако воспользуемся реализацией из примера

Далее для удобства созданим вектора ожидаемых и предсказанных значений. Для получения предсказания классификатор нужно возпользоваться методом predict объекта обученного классификатора.

Теперь, после того, как получены ожидаемые и предсказанные значения, построим confusion matrix.

Несмотря на то, что для идеального классификатора эта матрица является диагональной, в нашем случае наблюдаются выбросы ложных срабатываний, что говорит о «не идеальности» классификатора.

На основе этого примера, должно быть понятно, как использовать классические методы из библиотеки. Вы можете попробовать обучить классификатор самостоятельно, а также попробовать поработать с другими датасетами.

Colaboratory Jupiter Notebook

Компьютерное зрение. Машинное обучение без нейронных сетей (scikit-learn): 2 комментария

  1. Уведомление: Компьютерное зрение. Введение | Digiratory

  2. Уведомление: Компьютерное зрение. Машиное обучение с использовнием нейронных сетей (Keras) | Digiratory

Добавить комментарий