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


21

У мене є набір даних, що містить 34 колонки введення та 8 вихідних стовпців.

Один із способів вирішити проблему - взяти 34 входи та побудувати індивідуальну модель регресії для кожного вихідного стовпчика.

Мені цікаво, чи можна вирішити цю проблему за допомогою лише однієї моделі, особливо за допомогою нейронної мережі.

Я використовував багатошаровий перцептор, але для цього потрібні кілька моделей, як і лінійна регресія. Чи може послідовність до послідовності бути життєздатним варіантом?

Я використовую TensorFlow. У мене є код, але я думаю, що важливіше зрозуміти, що мені не вистачає з точки зору теорії багатошарового перцептрона.

Я розумію, що в MLP, якщо у вас є один вихідний вузол, він забезпечить один вихід. Якщо у вас є 10 вихідних вузлів, то це багатокласна проблема. Ви вибираєте клас з найбільшою ймовірністю з 10 виходів. Але в моєму випадку, безумовно, буде 8 виходів для одного вводу.

Скажімо, для набору входів ви отримаєте 3D-координату чогось (X, Y, Z). Мовляв, Inputs = {1,10,5,7} Вихід = {1,2,1}. Отже, для одного і того ж входу {1,10,5,7} мені потрібно зробити моделі для значення X значення Y та Z. Одне рішення - мати 3 різні моделі за допомогою MLP. Але я хотів би побачити, чи можу я мати одну модель. Тому я подумав про використання seq2seq. Оскільки кодер приймає серію входів, а декодер забезпечує серію виводу. Але здається, що seq2seq в tensorflow не може обробити значення з плаваючою точкою. Я можу помилитися з цього приводу.


Здається, у вас є проблеми з розумінням багатошарової моделі перцептрон NN, а також TensorFlow - ваші твердження про це невірні. Однак не ясно, чому у вас виникло таке непорозуміння, а це означає, що відповідь не може допомогти вам це виправити. Прогнозувати, наприклад, 8 регресійних виходів в одній моделі NN, в більшості NN-фреймів надзвичайно просто, у вашому випадку немає необхідності в послідовностях. Тож я думаю, що може бути важливим переглянути, на чому базується ваш останній абзац, щоб допомогти вам - чи можете ви додати трохи деталей того, що ви бачили чи намагалися, щоб прийти до цих думок?
Ніл Слейтер

Чи вдасться вам дати відповідь, як отримати 8 регресійних виходів за допомогою однієї єдиної моделі NN? Спасибі.
sjishan

Можливо, якщо ви поясните кілька речей, відредагувавши своє запитання: 1) У яких рамках? 2) Який ваш код (або дизайн, якщо у вас немає коду) поки що? 3) Що заважає тобі це робити самостійно? Мені потрібні 1 і 2, щоб відповісти на те, що ви можете використовувати. Мені потрібно 3, щоб зрозуміти, у чому полягає ваша проблема, і пояснити рішення.
Ніл Слейтер

1. Тенсдорфлоу. 2. У мене є код, але я думаю, що важливіше зрозуміти, що мені не вистачає з точки зору теорії багатошарового перцептрону. Я розумію, що в MLP, якщо у вас є один вихідний вузол, він забезпечить один вихід. Якщо у вас є 10 вихідних вузлів, то це багатокласна проблема. Ви вибираєте клас з найбільшою ймовірністю з 10 виходів. Але в моєму випадку, безумовно, буде 8 виходів для одного входу. Дозвольте мені показати інший приклад. Скажімо, для набору входів ви отримаєте тривимірну координату чогось (X, Y, Z). Мовляв, Inputs = {1,10,5,7} Вихід = {1,2,1}
sjishan

Отже, для одного і того ж входу {1,10,5,7} мені потрібно зробити моделі для значення X значення Y та Z. Одне рішення - мати 3 різні моделі за допомогою MLP. Але я хотів би побачити, чи можу я мати одну модель. Тому я подумав про використання seq2seq. Оскільки кодер приймає серію входів, а декодер забезпечує серію виводу. Але здається, що seq2seq в tensorflow не може обробити значення з плаваючою точкою. Я можу помилитися з цього приводу.
sjishan

Відповіді:


14

Те, що ви описуєте, - це нормальна багатовимірна лінійна регресія. Цей тип проблеми, як правило, вирішується через мережу передачі даних, або MLP, або будь-яку іншу архітектуру, що відповідає характеру проблеми.

Будь-яка структура нейронної мережі здатна зробити щось подібне.

Ключовим для цього є пам’ятати, що останній шар повинен мати лінійні активації (тобто взагалі ніякої активації).

Відповідно до ваших вимог, форма вхідного шару буде вектор (34,) та вихід (8,).

Оновлення : звичайна функція втрат, яка використовується для проблем регресії, - середня помилка в квадраті (MSE). Ось приклад багатовимірної регресії за допомогою Кераса ; мережа не є MLP, але для ілюстрації ідеї повинно бути гаразд.


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'))

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.