Как настроить нейронную сеть для вывода порядковых данных?


20

У меня есть нейронная сеть, настроенная для предсказания чего-то, где выходная переменная является порядковой. Я опишу ниже, используя три возможных выхода A <B <C.

Совершенно очевидно, как использовать нейронную сеть для вывода категориальных данных: выходные данные - это просто максимальное значение последнего (обычно полностью подключенного) слоя, по одному на категорию, а прогнозируемая категория - та, которая имеет наибольшее выходное значение (это по умолчанию во многих популярных моделях). Я использовал ту же настройку для порядковых значений. Однако в этом случае выходы часто не имеют смысла, например, сетевые выходы для A и C высоки, а B низки: это невозможно для порядковых значений.

У меня есть одна идея для этого, которая заключается в том, чтобы рассчитать потери на основе сравнения выходных данных с 1 0 0 для A, 1 1 0 для B и 1 1 1 для C. Точные пороговые значения можно настроить позже, используя другой классификатор (например, байесовский ) но это, кажется, отражает основную идею упорядочения входных данных без указания какой-либо конкретной шкалы интервалов.

Каков стандартный способ решения этой проблемы? Есть ли какие-либо исследования или ссылки, которые описывают плюсы и минусы различных подходов?


1
Я получил много интересных хитов в Google для «порядковой логистической регрессии», например, эта статья
shadowtalker

@ssdecontrol: Интересно. Я попробовал это; результаты были лучше, чем выбор одного выхода с наибольшим значением, но немного хуже, чем другие методы (наивный байесовский и т. д.). Это полезно, но это не помогает обучить сеть, только немного улучшает результаты после факта ... или, по крайней мере, я не вижу, как заставить это помочь обучить сеть.
Алекс I

какое "это" ты пробовал? Единственное, что я
хочу сказать,

Также я не уверен, что понимаю, что вы подразумеваете под «например, сетевые выходы для A и C высоки, но B низок: это неправдоподобно». Вы имеете в виду, что вы предсказываете много As и C, но мало B? Я не понимаю, почему это должно быть неправдоподобным, если у вас нет веской или предметной причины думать так
shadowtalker

Я также не знаю, как вы могли бы получить такой вывод, как "1 1 0". Я думаю, что здесь есть некоторая путаница с терминологией. Вы описываете совокупные порядковые результаты? Как в кумулятивной модели логита?
Shadowtalker

Ответы:


15

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

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

  • класс 1 представлен как [0 0 0 0 ...]

  • класс 2 представлен как [1 0 0 0 ...]

  • класс 3 представлен как [1 1 0 0 ...]

т.е. каждый нейрон предсказывает вероятность . Вы все еще должны использовать сигмоид в качестве функции активации, но я думаю, что это помогает сети понять некоторую преемственность между классами, я не знаю. После этого вы выполняете постобработку ( ) для преобразования двоичного вывода в ваши классы.п(Y^<К)np.sum

Эта стратегия напоминает ансамбль Фрэнка и Холла , и я думаю, что это первая публикация такого рода.


Этот подход кажется гораздо более привлекательным. Важно понимать, что использование предсказанных режимов, чтобы превратить это в проблему классификации, не очень хорошая идея. Прогнозируемые совокупные вероятности могут быть превращены в прогнозируемые индивидуальные вероятности, и поэтому функция полезности для принятия окончательного решения может быть вставлена ​​намного позже, когда утилиты станут известны. См. Fharrell.com/post/classification .
Фрэнк Харрелл

1
@RicardoCruz - Хм, это очень похоже на то, что я предложил: «1 0 0 для A, 1 1 0 для B и 1 1 1 для C». Приятно знать, что работает! Кроме того, вау, это была статья 2007 года, эта идея давно известна
Alex I

Да, я сам был удивлен, когда нашел эту бумагу!
Рикардо Круз,

Примечание. Как указано в «Сетевом подходе Neurel к порядковой регрессии»: «... использование независимых сигмоидальных функций для выходных узлов не гарантирует монотонное отношение (o1> = o2> = ....> = oK), которое не обязательно, но желательно для предсказаний ". Поэтому просто выполнение «np.sum» во время прогнозирования - не лучший метод.
sccrthlt

1
Изменить мой комментарий выше: Выполнение "np.sum" на выходах нейронной сети вводит в заблуждение. Следующая ситуация может возникнуть, когда выходной вектор равен [0 1 0 1 0]. Выполнение суммирования по этому вектору привело бы к предсказанию класса 2, когда на самом деле нейронная сеть не уверена.
sccrthlt
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.