Sieć neuronowa dla regresji wielu wyjść

21

Mam zestaw danych zawierający 34 kolumny wejściowe i 8 kolumn wyjściowych.

Jednym ze sposobów rozwiązania problemu jest pobranie 34 danych wejściowych i zbudowanie indywidualnego modelu regresji dla każdej kolumny wyjściowej.

Zastanawiam się, czy ten problem można rozwiązać za pomocą tylko jednego modelu, szczególnie za pomocą sieci neuronowej.

Użyłem wielowarstwowego perceptronu, ale to wymaga wielu modeli, podobnie jak regresja liniowa. Czy Sekwencja do Sekwencji może być realną opcją?

Używam TensorFlow. Mam kod, ale myślę, że ważniejsze jest zrozumienie tego, czego mi brakuje w kategoriach wielowarstwowej teorii perceptronów.

Rozumiem, że w MLP, jeśli masz jeden węzeł wyjściowy, zapewni on jedno wyjście. Jeśli masz 10 węzłów wyjściowych, jest to problem wielu klas. Wybierasz klasę o najwyższym prawdopodobieństwie spośród 10 wyników. Ale w moim przypadku jest pewne, że będzie 8 wyjść dla tego samego wejścia.

Powiedzmy, że dla zestawu danych wejściowych otrzymasz współrzędną 3D czegoś (X, Y, Z). Na przykład Dane wejściowe = {1,10,5,7} Dane wyjściowe = {1,2,1}. Więc dla tego samego wejścia {1,10,5,7} muszę zrobić modele dla wartości X wartości Y i Z. Jednym rozwiązaniem jest posiadanie 3 różnych modeli przy użyciu MLP. Chciałbym jednak sprawdzić, czy mogę mieć jeden model. Pomyślałem więc o użyciu seq2seq. Ponieważ koder pobiera szereg danych wejściowych, a dekoder zapewnia szereg danych wyjściowych. Ale wygląda na to, że seq2seq w tensorflow nie obsługuje wartości zmiennoprzecinkowych. Mogę się jednak mylić.

sjishan
źródło
Wydaje się, że masz pewne problemy ze zrozumieniem wielowarstwowego modelu perceptronu NN, a także TensorFlow - twoje stwierdzenia na ich temat są niepoprawne. Jednak nie jest jasne, dlaczego masz takie nieporozumienie, co oznacza, że ​​odpowiedź nie może pomóc w rozwiązaniu tego problemu. Przewidywanie np. 8 wyników regresji w jednym modelu NN jest banalnie proste w większości frameworków NN, w twoim przypadku nie potrzeba sekwencji. Myślę więc, że może być ważne, aby przyjrzeć się temu, na czym opiera się twój ostatni akapit, aby ci pomóc - czy możesz dodać jakieś szczegóły tego, co widziałeś lub próbowałeś, aby dojść do tych myśli?
Neil Slater,
Czy byłbyś w stanie udzielić odpowiedzi, jak uzyskać 8 wyników regresji przy użyciu jednego modelu NN? Dzięki.
sjishan
Prawdopodobnie, jeśli wyjaśnisz kilka rzeczy, edytując swoje pytanie: 1) W jakich ramach? 2) Jaki jest twój kod (lub projekt, jeśli nie masz kodu) do tej pory? 3) Co powstrzymuje cię przed zrobieniem tego samemu? Potrzebuję 1 i 2, aby odpowiedzieć na coś, czego możesz użyć. Potrzebuję 3, aby zrozumieć, na czym polega twój problem i wyjaśnić rozwiązanie.
Neil Slater,
1. Przepływ Tensor. 2. Mam kod, ale myślę, że ważniejsze jest zrozumienie tego, czego mi brakuje w kontekście teorii perceptronów wielowarstwowych. Rozumiem, że w MLP, jeśli masz jeden węzeł wyjściowy, zapewni on jedno wyjście. Jeśli masz 10 węzłów wyjściowych, jest to problem wielu klas. Wybierasz klasę o najwyższym prawdopodobieństwie spośród 10 wyników. Ale w moim przypadku jest pewne, że będzie 8 wyjść dla tego samego wejścia. Pokażę inny przykład, powiedzmy, dla zestawu danych wejściowych otrzymasz współrzędną 3D czegoś (X, Y, Z). Like, Inputs = {1,10,5,7} Output = {1,2,1}
sjishan
Więc dla tego samego wejścia {1,10,5,7} muszę stworzyć modele dla wartości X wartości Y i Z. Jednym rozwiązaniem jest posiadanie 3 różnych modeli przy użyciu MLP. Chciałbym jednak sprawdzić, czy mogę mieć jeden model. Pomyślałem więc o użyciu seq2seq. Ponieważ koder pobiera szereg danych wejściowych, a dekoder zapewnia szereg danych wyjściowych. Ale wygląda na to, że seq2seq w tensorflow nie obsługuje wartości zmiennoprzecinkowych. Mogę się jednak mylić.
sjishan

Odpowiedzi:

14

To, co opisujesz, to normalna wielowymiarowa regresja liniowa. Ten typ problemu jest zwykle rozwiązywany za pomocą sieci sprzężenia zwrotnego, MLP lub dowolnej innej architektury, która pasuje do charakteru problemu.

Każda struktura sieci neuronowej jest w stanie zrobić coś takiego.

Kluczem do tego jest zapamiętanie, że ostatnia warstwa powinna mieć aktywacje liniowe (tj. W ogóle bez aktywacji).

Zgodnie z twoimi wymaganiami, kształtem warstwy wejściowej byłby wektor (34) i wynik (8,).

Aktualizacja : zwykłą funkcją straty stosowaną w przypadku problemów z regresją jest błąd średniej kwadratowej (MSE). Oto przykład regresji wielowymiarowej przy użyciu Keras ; sieć nie jest MLP, ale należy zilustrować ten pomysł.

ncasas
źródło
1
Prawdopodobnie warto dodać wiersz o zwykłej funkcji kosztu regresji (średni błąd kwadratowy) i wskazać przykład regresji TensorFlow - chociaż właśnie spędziłem 10 minut na szukaniu jednej z nich i nic nie widziałem. . . (przykłady pomijają regresję liniową do klasyfikatorów MNIST, ale brak podstawowych modeli regresji MLP).
Neil Slater
4

Możesz to zaimplementować bardzo prosto w Pythonie.
Twoje X będzie zbiorem współrzędnych treningowych x, y, z.
Twoje Y będzie zbiorem testowania współrzędnych 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')
John Quanasama
źródło
0

Jest to o wiele łatwiejsze niż myślisz - możesz po prostu ustawić warstwę wyjściową jako wektor zamiast pojedynczego skalara. Oczywiście nie ma tu żadnej magii i radzę przygotować dane (przeprowadzić normalizację wsadową, aby wszystkie dane wyjściowe miały wartości od 0 do 1).

Jeśli używasz Keras, sposobem na to jest dodanie gęstej warstwy jako końcowej warstwy wyjściowej: model.add(Dense(8, activation='linear'))

Nissim
źródło