Занятие № 2. Классификация и регрессия

Две классические задачи машинного обучения - классификация и регрессия.

Классификация - это предсказание категории или класса к которому принадлежит объект на основе набора его характеристик.

Примеры задач: спам-фильтр, классификация изображений, анализ настроения.

Регрессия - это предсказание непрерывного числового значения на основе входных данных.

Примеры задач: прогнозирование температуры, цен на жильё.

Задание № 1. Рукописный ввод

Почтовое отделение хочет внедрить автоматическую систему сортировки писем. Для этого нужно обучить модель машинного обучения распознавать рукописную запись цифр. Цифры записываются в следующем виде:

Научим модель распознавать цифры 1, 2 и 3.

Откройте сайт Scratch в новой вкладке. Нажмите кнопку Начать, чтобы приступить к созданию проекта.

Нажмите кнопку Попробовать сейчас. Вы перейдёте к странице со списком проектов. Нажмите кнопку Добавить новый проект. В поле Название проекта запишите “Почта”. В списке Тип проекта выберите Распознавание изображения. В списке Хранение выберите вариант В веб браузере. Нажмите кнопку Создать. В списке должен появиться новый проект:

Кликните по вновь созданному проекту, чтобы приступить к его реализации.

Работа над проектом состоит из трёх этапов:

  1. Определиться с количеством и названием классов (меток) и собрать обучающую выборку - набор данных для каждого типа классифицируемых объектов.
  2. Обучить модель на обучающей выборке и проверить модель на тестовой выборке данных.
  3. Использовать обученную модель для разработки приложения.

На основе образцов изображений из каждого класса, модель научится распознавать класс незнакомого изображения:

После того, как на вход обученной модели попадает неизвестный рисунок, на её выходах будет вероятность принадлежности изображения к тому или иному классу:

Сбор обучающей выборки

Нажмите кнопку Обучить. Нажмите кнопку Добавить новую метку, дайте ей имя odin и нажмите кнопку Добавить. Аналогично создайте ещё две метки с именами dva и tri.

Созданные метки можно воспринимать как контейнеры для хранения данных определённого класса. Например в контейнере метки odin мы разместит изображения написанной от руки единицы.

Нажмите кнопку Нарисовать в метке odin. Откроется холст для рисования. Нарисуйте единицу по образцу в начале задания и нажмите кнопку Добавить.

Теперь в контейнере будет один образец для обучения:

Добавьте ещё 4 образца написания единицы.

Самостоятельно наполните метки dva и tri образцами написания цифр 2 и 3 соответственно:

Образцы для обучения добавлены. Теперь нужно обучить модель на основе этих данных.

Обучение модели и тестирование

Нажмите ссылку Назад к проекту. Нажмите кнопку Узнать & Проверить. Нажмите кнопку Обучить новую модель машинного обучения. Дождитесь, пока статус модели изменится на Available (Доступна):

Проверим качество обучения модели.

Нажмите кнопку Проверить рисунком. На появившемся холсте нарисуйте единицу и нажмите кнопку Тест. Ниже появится название метки и то, с какой вероятностью, тестовый рисунок к ней относится:

Попробуйте нарисовать единицу не в центре холста или повёрнутой. Сравните процент точности классификации в этих случаях.

Проверьте точность классификации по всем трём меткам.

Разработка приложения

Перейдите по ссылке Назад к проекту. Нажмите кнопку Создать. Выберите Scratch 3. Нажмите кнопку Открыть в Scratch 3.

В новой вкладке откроется среда программирования с новой категорией блоков под именем Почта. В этой категории собраны блоки с помощью которых мы будем взаимодействовать с обученной на предыдущем этапе моделью.

Удалите стандартный спрайт и добавьте спрайт Pencil (1). Установите размер спрайта равным 60% (2).

Перейдите во вкладку Костюмы. С помощью инструмента Выбрать обведите рисунок карандаша и передвиньте его так, чтобы совместить центр спрайта с грифелем карандаша:

Добавьте расширение Перо. Составьте для спрайта следующие скрипты:

Нажмите на чтобы запустить скрипт рисования. Зажмите левую кнопку мыши, чтобы начать рисование на сцене. Нажав ↓Down можно очистить сцену.

Создайте три переменные:

  • метка - хранение названия распознанной метки;
  • точность - процент уверенности модели в правильности классификации рисунка;
  • сообщение - текст, выводимый в конце скрипта.

Добавьте следующий скрипт, который по нажатию на Space начнёт процесс классификации рисунка на сцене:

После нажатия Space спрайт прячется и блок save screenshot to costume (1) добавит в спрайт костюм с текущим изображением сцены, включающим рисунок от руки. С помощью блока costume image (2) мы передаёт изображение текущего костюма в обученную ранее модель. Точность распознавания сохраняем в переменной. Распознанную метку будем сохранять только если процент точности превышает 80% (3). Сравниваем распознанную метку с одной из описанных в процессе обучения (4). Снова показываем спрайт и меняем костюм на изображение карандаша (5).

Протестируйте распознавание цифр, которые вы нарисуете.

Задание № 2. Студенческая успеваемость

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

В этой задаче модель машинного обучения будет использоваться для регрессии - предсказания непрерывного значения по ряду характеристик. Обучение будем проводить на данных из csv-файла, содержащих 1000 строк со следующими столбцами:

Таблица 1: Список свойств
Свойство Описание
ch_uch Время в часах, затраченное на подготовку к тесту.
pred_oc Оценка за предыдущий тест.
facult Присутствие на дополнительных консультация (1- да, 0 - нет).
son Количество часов сна перед тестом.
test Количество пробных попыток пройти тест.
nov_oc Итоговая отметка.

В столбце nov_oc хранится значение, которое модель будет предсказывать по незнакомому набору входных данных.

Для решения задачи регрессии на вход модели машинного обучения передается набор данных - свойства и ожидаемый для них результат:

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

Скачайте файл student.csv и сохраните его на рабочем диске. Для этого нажмите по ссылке правой кнопкой мыши и выберите Сохранить ссылку как…

Создадим новый проект.

Перейдите по ссылке, чтобы открыть список проектов. Нажмите кнопку Добавить новый проект. В поле Название проекта напишите Успеваемость, в списке Тип проекта выберите прогнозирование чисел, в списке Хранение выберите В веб браузере. Нажмите кнопку Создать.

Кликните по вновь созданному проекту, чтобы перейти к его настройке.

Первый этап - обучить модель на данных из файла student.csv.

Нажмите кнопку Обучить. На открывшейся странице нажмите кнопку Add column (Добавить столбец). В появившемся окне впишите имя первой характеристики - ch_uch и нажмите кнопку Добавить. Колонка с этим именем появится в таблице.

Самостоятельно добавьте все остальные характеристики (см. ). После этого страница должна выглядеть следующим образом:

Поставьте галочку напротив свойства nov_oc, чтобы указать, что это колонка с результатом, который нужно предсказать:

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

Нажмите кнопку Upload CSV (Загрузить CSV-файл). В появившемся файловом диалоге выберите файл student.csv. После обработки таблица должна заполнится данными из файла:

Всего из файла должна загрузиться 1000 строк.

Нажмите ссылку Назад к проекту.

Следующий шаг - обучить модель машинного обучения на загруженных из файла данных.

Нажмите кнопку Узнать & Проверить. Нажмите кнопку Обучить новую модель машинного обучения. Дождитесь, пока статус модели изменится на Available (Доступна).

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

Введите в форму тестовые данные как на изображении:

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

Переходим к созданию Scratch-проекта, который будет использовать обученную модель.

Нажмите кнопку Создать. Затем нажмите кнопку Scratch 3. Нажмите кнопку Открыть в Scratch 3. В новой вкладке откроется среда разработки Scratch с новой категорией блоков image-20250414172710359.

Для прогнозирования возможной оценки за тест будем использовать блок predict (предсказать) из категории блоков student:

Создайте следующие переменные:

Составьте следующий скрипт:

К этому скрипту добавьте вызов блока predict. Результат прогноза сохраните в переменной результат:

Добавьте к скрипту вывод ответа:

Проверьте работу скрипта на следующих тестовых данных:

В результате прогнозирования получается значение .

✍️ Сделайте самостоятельно

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