Нейронная сеть для множественной выходной регрессии


12

У меня есть набор данных, содержащий 34 входных столбца и 8 выходных столбцов. Один из способов решения этой проблемы - взять 34 входа и построить индивидуальную модель регрессии для каждого выходного столбца. Мне интересно, если эта проблема может быть решена с помощью только одной модели, особенно с помощью нейронной сети.

Я использовал многослойный персептрон, но для этого нужно несколько моделей, таких как линейная регрессия. Может ли последовательность к обучению последовательности 1 быть жизнеспособным вариантом? Я пытался использовать TensorFlow, он не может обрабатывать значения с плавающей точкой.

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

  1. Илья Суцкевер, Oriol Vinyals & Quoc V. Le (2014). Последовательность к последовательности обучения с нейронными сетями. Достижения в нейронных системах обработки информации , 27. ( pdf )


1
(Любым потенциальным близким избирателям: это не вопрос программирования. Это было бы не по теме переполнения стека .)
gung - Восстановить Монику

Можете ли вы уточнить здесь «последовательность к последовательности»? Я не знаю, знакомо ли это людям, которые работают с NN, но это не для меня.
gung - Восстановить Монику

Последовательность для моделирования последовательности с использованием RNN. paper.nips.cc/paper/…
sjishan

Вы можете попробовать MultiOutputRegressor (). Это работает для такого типа проблем
Субхам Саркар

Ответы:


7

Нейронная сеть с несколькими исходами имеет вид Если ваш результат имеет размерность , то будет иметь размерность .

Y=γ+V1Γ1+ϵV1=a(γ2+V2Γ2)V2=a(γ3+V3Γ3)VL1=a(γL+XΓL)
[ γ 1 , Γ 1 ] ( p V 1 + 1 ) × 8N×8[γ1,Γ1](pV1+1)×8

Это означает, что вы предполагаете, что каждый результат разделяет ВСЕ параметры в скрытых слоях и имеет только разные параметры для получения самой верхней производной переменной и привязки ее к результату.

Это реалистичное предположение для вашего контекста?


5

Сначала я думал, что комментарий к generic_user был остановкой шоу, но я просто понял, что это не так:

Если я обучу d разных сетей на d разных выходах, то каждая из них будет соответствовать этому измерению, не обращая внимания на другие.

Но если я обучу одну сеть с d выходами и использую все выходы для обратного распространения, то каждый вес в каждом слое в сети будет отрегулирован так, чтобы все d выходов были более точными.

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

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

Возможно, вы сможете добиться большего успеха, чем полностью подключенная сеть, если ваша архитектура будет отражать любые известные отношения в выходных данных, так же как глубокие сети работают лучше, чем мелкие, используя «композиционные» отношения между входами .


Многомерная регрессия предполагает наличие некоторой (неизвестной) ковариационной матрицы, которая связывает эти целевые переменные друг с другом. Предполагаете ли вы, что для захвата этой ковариации достаточно иметь только один плотный слой без необходимости явного включения скрытых слоев?
thecity2

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

0

Вы можете сделать это только с одной нейронной сетью. Но ваша нейронная сеть должна выглядеть так:
Входной слой: 34 узла (по одному на ваш входной столбец)
Выходной слой: 8 узлов (по одному на ваш выходной столбец)

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


какой пакет какой язык поддерживает так ??
Арпит Сисодия

0

Мне было интересно то же самое; вот мои идеи:

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

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

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

Бьюсь об заклад, кто-то думал об этом раньше, но я не имею на это никаких ссылок.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.