У меня есть набор данных, содержащий 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 не может обрабатывать значения с плавающей точкой. Я могу ошибаться по этому поводу, хотя.
источник
Ответы:
То, что вы описываете, представляет собой нормальную многомерную линейную регрессию. Проблема такого типа обычно решается с помощью сети прямой связи, либо MLP, либо любой другой архитектуры, которая соответствует характеру проблемы.
Любой нейронный фреймворк способен сделать что-то подобное.
Ключ к этому - помнить, что последний слой должен иметь линейную активацию (т.е. вообще не активировать).
Согласно вашим требованиям, форма входного слоя будет вектором (34,) и выходным (8,).
Обновление : обычная функция потерь, используемая для проблем регрессии, представляет собой среднеквадратическую ошибку (MSE). Вот пример многомерной регрессии с использованием Keras ; сеть не MLP, но это должно быть хорошо, чтобы проиллюстрировать идею.
источник
Вы можете реализовать это очень просто в Python.
Ваш X будет коллекцией обучающих координат x, y, z.
Ваш Y будет набором тестируемых координат x, y, z.
источник
Это намного проще, чем вы думаете - вы можете просто установить свой выходной слой как вектор вместо одного скаляра. Конечно, здесь нет никакого волшебства, и я советую вам подготовить ваши данные (выполните пакетную нормализацию, чтобы все выходные значения были в диапазоне от 0 до 1).
Если вы используете Keras, способ сделать это, добавив плотный слой в качестве конечного выходного слоя:
model.add(Dense(8, activation='linear'))
источник