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

21

У меня есть набор данных, содержащий 34 входных столбца и 8 выходных столбцов.

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

Мне интересно, если эта проблема может быть решена с помощью только одной модели, особенно с помощью нейронной сети.

Я использовал многослойный персептрон, но для этого нужно несколько моделей, как и линейная регрессия. Может ли Sequence to Sequence быть жизнеспособным вариантом?

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

Я понимаю, что в MLP, если у вас есть один выходной узел, он будет обеспечивать один выход. Если у вас есть 10 выходных узлов, тогда это проблема мультикласса. Вы выбираете класс с наибольшей вероятностью из 10 выходных. Но в моем случае наверняка будет 8 выходов для одного входа.

Допустим, для набора входных данных вы получите трехмерную координату чего-либо (X, Y, Z). Например, Inputs = {1,10,5,7} Output = {1,2,1}. Таким образом, для одного и того же ввода {1,10,5,7} мне нужно создать модели для значения X, значения Y и Z. Одно из решений состоит в том, чтобы использовать 3 разные модели с использованием MLP. Но я хотел бы посмотреть, смогу ли я иметь одну модель. Поэтому я подумал об использовании seq2seq. Потому что кодер принимает последовательность ввода, а декодер обеспечивает последовательность вывода. Но кажется, что seq2seq в tenorflow не может обрабатывать значения с плавающей точкой. Я могу ошибаться по этому поводу, хотя.

sjishan
источник
Кажется, у вас есть некоторые проблемы с пониманием многослойной модели персептрона NN, а также с TensorFlow - ваши утверждения о них неверны. Тем не менее, не ясно, почему у вас есть это недоразумение, что означает, что ответ не может помочь вам исправить это. Предсказание, например, 8 регрессионных выходов в одной модели NN, тривиально легко в большинстве сред NN, в вашем случае нет необходимости в последовательностях. Поэтому я думаю, что может быть важно взглянуть на то, на чем основан ваш последний абзац, чтобы помочь вам - не могли бы вы добавить некоторые детали того, что вы видели или пробовали, чтобы прийти к этим мыслям?
Нил Слэйтер
Можно ли дать ответ, как получить 8 результатов регрессии, используя одну модель NN? Благодарю.
Сишан
Вероятно, если вы объясните несколько вещей, отредактировав свой вопрос: 1) В каких рамках? 2) Каков ваш код (или дизайн, если у вас нет кода) до сих пор? 3) Что мешает вам сделать это самостоятельно? Мне нужны 1 и 2, чтобы ответить тем, что вы можете использовать. Мне нужно 3, чтобы понять, в чем твоя проблема, и объяснить решение.
Нил Слэйтер
1. Тензорный поток. 2. У меня есть код, но я думаю, что более важно понять, что я упускаю с точки зрения теории многослойного персептрона. Я понимаю, что в MLP, если у вас есть один выходной узел, он будет обеспечивать один выход. Если у вас есть 10 выходных узлов, тогда это проблема мультикласса. Вы выбираете класс с наибольшей вероятностью из 10 выходных. Но в моем случае наверняка будет 8 выходов для одного входа. Позвольте мне показать другой пример, скажем, для набора входных данных вы получите трехмерную координату чего-либо (X, Y, Z). Например, Inputs = {1,10,5,7} Output = {1,2,1}
sjishan
Таким образом, для одного и того же ввода {1,10,5,7} мне нужно создать модели для значения X, значения Y и Z. Одно из решений состоит в том, чтобы использовать 3 разные модели с использованием MLP. Но я хотел бы посмотреть, смогу ли я иметь одну модель. Поэтому я подумал об использовании seq2seq. Потому что кодер принимает последовательность ввода, а декодер обеспечивает последовательность вывода. Но кажется, что seq2seq в tenorflow не может обрабатывать значения с плавающей точкой. Я могу ошибаться по этому поводу, хотя.
Сишан

Ответы:

14

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

Любой нейронный фреймворк способен сделать что-то подобное.

Ключ к этому - помнить, что последний слой должен иметь линейную активацию (т.е. вообще не активировать).

Согласно вашим требованиям, форма входного слоя будет вектором (34,) и выходным (8,).

Обновление : обычная функция потерь, используемая для проблем регрессии, представляет собой среднеквадратическую ошибку (MSE). Вот пример многомерной регрессии с использованием Keras ; сеть не MLP, но это должно быть хорошо, чтобы проиллюстрировать идею.

ncasas
источник
1
Вероятно, стоит добавить строку об обычной функции стоимости для регрессии (среднеквадратическая ошибка) и указать на пример регрессии TensorFlow - хотя я потратил 10 минут на поиск одной и ничего не увидел. , , (примеры пропускаются от линейной регрессии к классификаторам MNIST, но без базовых моделей регрессии MLP).
Нил Слэйтер
4

Вы можете реализовать это очень просто в Python.
Ваш X будет коллекцией обучающих координат x, y, z.
Ваш Y будет набором тестируемых координат x, y, z.

from sklearn import cross_validation                     
from sklearn.neural_network import MLPRegressor   

model = MLPRegressor(solver='lbfgs',alpha=0.001,hidden_layer_sizes=(150,))
cross_validation.cross_val_score(model, X, Y,scoring='mean_squared_error')
Джон Куанасама
источник
0

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

Если вы используете Keras, способ сделать это, добавив плотный слой в качестве конечного выходного слоя: model.add(Dense(8, activation='linear'))

Нисим
источник