Вещи узнали во время работы над проектом машинного обучения.

Меня попросили выступить с докладом о практическом машинном обучении в рамках Tech Caravan, проходившего в Батаане 23–24 сентября 2017 года. Я решил создать программу обнаружения эмоций, такую ​​как Microsoft Emotion API. Он принимает изображение с лицом, угадывает эмоцию на лице и печатает его на консоли. Я смог получить точность ~ 75% с тем, что я построил.

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

Если кто-то делал это раньше, это выполнимо

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

Найдите хорошие функции

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

Все дело в данных

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

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

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

Выберите правильный алгоритм

Существуют шпаргалки, которые помогут вам выбрать нужный алгоритм, например эти:

Если эти алгоритмы не работают, попробуйте добавить к данным больше объема и разнообразия. Кроме того, вы можете попробовать другие алгоритмы, связанные с этим алгоритмом. Например, я изначально использовал случайные леса и AdaBoost в качестве алгоритмов обучения ансамбля, но обнаружил, что экстремально рандомизированные деревья лучше справляются с этой задачей.

Честно говоря, эти алгоритмы не оптимальны для этой задачи, учитывая точность 75%. Я мог бы использовать сверточные нейронные сети, которые лучше подходят для задач, требующих обучения по изображениям. Я не думаю, что у меня было достаточно вычислительной мощности, поэтому я не использовал ее.

Функциональное программирование работает с машинным обучением

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

Слайды и код

Код говорит громче слов.

Если вы хотите узнать, как я это построил, посмотрите мои слайды здесь:

Http://jpa-emotion-detection-slides.surge.sh/#slide=1

и вы можете посмотреть код здесь:



Если вам понравилась эта история, нажимайте кнопку хлопка сколько угодно!
Если у вас есть какие-либо комментарии, напишите их ниже!
Большое спасибо!