Реализация классификатора продуктов питания с помощью метода машинного обучения. - Студенческий научный форум

XI Международная студенческая научная конференция Студенческий научный форум - 2019

Реализация классификатора продуктов питания с помощью метода машинного обучения.

 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

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

Машинное обучение — класс методов искусственного интеллекта, характерной чертой которых является не прямое решение задачи, а обучение модели и получение решений для вводимых условий в процессе применения решений множества сходных задач [1]. При применении данных методов система "обучается" самостоятельному вычислению требуемых выходных функций и применению новых данных к этим функциям с последующим выводом результатов вычислений, что позволяет снизить потребность вмешательства человека в технологические процессы.

Рассмотрим задачу классификации пищевых продуктов питания, используя для этого методы машинного обучения. Имеется набор данных, представляющий собой количество основных параметров на 100г продукта [2].

Таблица 1 - пример входных данных

Продукт

Белки, г

Жиры, г

Углеводы, г

Калории, ккал

Колбаса вареная диетическая

12.10

13.50

0.00

170.00

Колбаса вареная докторская

12.80

22.20

1.50

257.00

Колбаса вареная куриная

15.50

16.20

2.30

223.00

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

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

Для решения данной задачи воспользуемся подвидом нейронной сети – персептроном.

Персептрон, - нейронная сеть прямого распространения сигнала (без обратных связей), в которой входной сигнал преобразуется в выходной, проходя последовательно через один/несколько слоев. Присутствие нескольких скрытых слоев оправдано лишь в случае использования нелинейных функций активации.

Перед управлением входными данными требуется подключить библиотеки для работы с машинным обучением на языке Python, а именно Tensorflow, Scikit-learn, Itertools, Numpy, Pandas и Matplotlib [3].

Сохраняем файл data.xlsx в формате .csv. В результате получили датасет из 542 примеров, которые необходимо классифицировать по классу продукта, к которому он относится.

Импортируем файл data.csv, предоставив ему имя в коде filename, по которому идёт обращение и считывание данных файла [4].

Рисунок 1 – код импорта датасета

Для проверки верного считывания данных из файла выводим список, содержащий признаки и выходные значения для обработки

Рисунок 2 – код вывода данных, считываемых из файла data.csv

В качестве оптимального эмпирическим путем был выбрана архитектура модели, - персептрон с 2 скрытыми сломи по 32 нейрона в каждом - 4 входных и 6 выходных.

Выведем графики попарного отношения входных признаков между собой, что покажет взаимное отношение признаков друг к другу в различных классах. Данный метод может быть полезен при выборке наиболее важных отношений признаков для обнаружения главных признаков и/или их корреляций. В данном случае, наблюдается несколько графиков, где большая часть классов идентична на основе двух признаков (жиры-калории, углеводы-калории), однако поскольку признаки взаимозависимы (калорийность зависит от количества белков, жиров, углеводов) сжатие данных ухудшит показатели точности обучения.

Рисунок 3 - отображение классов в графах при попарной зависимости графиков от признаков

В качестве первого входных параметров на слой поступают данные с предыдущего слоя, которые получают собственный вес функцией активации ReLU (функция “выпрямителя”, образует переход выхода функции в единицу при аргументе =<0) [5], и затем случайно исключаются методом DropOut (с вероятностью, вводимой разработчиком, исключает каждый нейрон на слое, что позволяет избавиться от проблемы переобучения сети), что позволяет избежать проблемы переобучения сети.

Рисунок 4 – код создания модели персептрона

Для обучения и проверки обучаемости изменим представление созданного датасета: используя команду “train_test_split”, разделяем изначальный набор данных на 2 набора — тренировочный (X_train, y_train) и тестовый (X_text, y_text) в соотношении 2/1 [6]. После чего инициируем ранее созданную модель персептрона в качестве обработчика, и используя команду «.fit()», применяем в каждому примеру созданную модель в течение заданного заранее количества итераций (эпох) в процессе выполнения команды.

Рисунок 5 - код обучения нейронной сети и результаты первых итераций

На основе обучающего датасета применим модель классификатора, описанную ранее, и проверим точность предсказаний классов на тренировочном наборе; результат выполнения программы можно увидеть на рисунке [7].

Рисунок 6 – код предсказывания классов тестового набора, вывод точности классификации

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

Рисунок 7 - матрицы отношения предсказанных значений классов к истинным значениям

Данные матрицы показывают, что лучше всего обученная сеть предсказывает 4й класс (фрукты), хуже всего предсказание сказывается на 1м классе (колбасные изделия) из-за схожих показателей входных данных между 1м классом и классом №6 (мясные изделия).

Выводы

В данной статье была проанализирована проблема классификации продуктов питания методами машинного обучения; обозначены основные понятия; описан метод обучения на основе многослойного персептрона. Экспериментальной частью являлось написание программы для получения точности классификации на основе тестового набора данных. Полученная программа показывает 80% точности классификации и позволяет визуализировать данные для удобной работы с ними.

Список литературы и источников

Воронова Л.И., Воронов В.И. Machine Learning: регрессионные методы интеллектуального анализа данных: Учебное пособие / МТУСИ. – М., 2018. – 83с.

Калорийность продуктов [Электронный ресурс]. – Режим доступа: http://www.calorizator.ru/product (дата обращения: 01.12.2018)

Top 20 Python Libraries for Data Science in 2018 [Электронный ресурс]. – Режим доступа: https://www.kdnuggets.com/2018/06/top-20-python-libraries-data-science-2018.html (дата обращения: 29.11.2018)

Python Software Foundation [Электронный ресурс]. – Режим доступа: https://docs.python.org/2/library/csv.html (дата обращения: 29.11.2018)

Курс машинного обучения Andrew Ng Machine Learning [Электронный ресурс]. – Режим доступа: https://www.coursera.org/learn/machinelearning (дата обращения: 01.12.2018)

Доусон М. Программируем на Python. – СПб.: Питер, 2014. – 416 с.

Рашка С. Р28 Python и машинное обучение / пер. с англ. А. В. Логунова. - М.: ДМК Пресс, 2017. - 418 с.: ил.

Просмотров работы: 125