Порядковая классификация нейронной сети по возрасту

Я создал простую нейронную сеть (Python, Theano) для оценки возраста людей на основе их истории расходов в различных магазинах. К сожалению, это не совсем точно.

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

Я рассмотрел возможность изменения выходной классификации на среднее значение взвешенной вероятности для каждого возраста.

Например, данные вероятности возраста: (Возраст 10: 20%, Возраст 20: 20%, Возраст 30: 60%)

Rather than output: Age 30 (Highest probability)
Weighted Average: Age 24 (10*0.2+20*0.2+30*0.6 weighted average)

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


person A. Dev    schedule 14.07.2016    source источник
comment
Вы можете ознакомиться с этим документом. Он описывает способ настройки порядковой регрессии с сетями.   -  person gobrewers14    schedule 14.07.2016
comment
Эта ссылка, к сожалению, не работает, я не уверен, имеет ли она какое-то отношение к привилегиям университетского доступа. Вместо этого у вас есть название?   -  person A. Dev    schedule 14.07.2016
comment
@ gobrewers14 - Ссылка не работает. Можете ли вы опубликовать заголовок или другую ссылку, чтобы найти его   -  person MiloMinderbinder    schedule 02.08.2018
comment
@MiloMinderbinder обновленная ссылка   -  person gobrewers14    schedule 03.08.2018
comment
Я добавлю название и авторов на случай, если в будущем ссылка сломается: Подход нейронной сети к порядковой регрессии Цзяньлинь Ченг, Чжэн Ван и Джанлука Полластри   -  person Salvador Medina    schedule 27.11.2018


Ответы (1)


Эта проблема возникла в предыдущем Конкурс Kaggle (эта ветка ссылается на статью, которую я упомянул в комментариях).

Идея состоит в том, что, скажем, у вас было 5 возрастных групп, где 0 ‹1‹ 2 ‹3‹ 4, вместо их быстрого кодирования и использования целевой функции softmax вы можете закодировать их в классы K-1 и использовать сигмоид задача. Итак, например, ваши кодировки будут

[0] -> [0, 0, 0, 0]
[1] -> [1, 0, 0, 0]
[2] -> [1, 1, 0, 0]  
[3] -> [1, 1, 1, 0]
[4] -> [1, 1, 1, 1]

Тогда сеть узнает о порядках. Надеюсь это поможет.

person gobrewers14    schedule 14.07.2016
comment
Будет ли плохой идеей иметь единственный выходной нейрон и принимать каждый класс равным 0,2 интервала? - person jinawee; 17.07.2019
comment
@jinawee Да, тоже не работает. Я использовал похожие типы сетей для множества различных проблем, и метод, который вы описываете, всегда хуже, чем упорядоченное кодирование, описанное gobrewers14. Не знаю, могу ли я сказать, что это плохая идея, но определенно менее хорошая идея. Любой, кто это читает, на 100% согласен с этим ответом - person Alex I; 08.06.2020