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ć.
źródło
Odpowiedzi:
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ł.
źródło
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.
źródło
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'))
źródło