При современном ритме жизни у малого процента населения есть время для соблюдения правильного режима питания, вследствие чего организм получает избыток вредных веществ и недостаток необходимых, что негативно влияет на здоровье. Существует немало средств, позволяющих следить за показателями здоровья и одного из основных его факторов – питания, и одним из лучших методов для данной задачи является, на мой взгляд, методы машинного обучения.
Машинное обучение — класс методов искусственного интеллекта, характерной чертой которых является не прямое решение задачи, а обучение модели и получение решений для вводимых условий в процессе применения решений множества сходных задач [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 с.: ил.