다중 출력 회귀 분석을위한 신경망


21

34 개의 입력 열과 8 개의 출력 열이 포함 된 데이터 세트가 있습니다.

문제를 해결하는 한 가지 방법은 34 개의 입력을 가져 와서 각 출력 열에 대해 개별 회귀 모델을 작성하는 것입니다.

이 문제를 신경망을 사용하는 하나의 모델로만 해결할 수 있는지 궁금합니다.

Multilayer Perceptron을 사용했지만 선형 회귀와 같은 여러 모델이 필요합니다. Sequence to Sequence가 실행 가능한 옵션 일 수 있습니까?

TensorFlow를 사용하고 있습니다. 코드가 있지만 다층 퍼셉트론 이론에서 누락 된 것을 이해하는 것이 더 중요하다고 생각합니다.

MLP에서 하나의 출력 노드가 있으면 하나의 출력을 제공한다는 것을 이해합니다. 출력 노드가 10 개인 경우 멀티 클래스 문제입니다. 10 개의 출력 중 확률이 가장 높은 클래스를 선택합니다. 그러나 제 경우에는 동일한 입력에 대해 8 개의 출력이있을 것입니다.

입력 세트에 대해 무언가 (X, Y, Z)의 3D 좌표를 얻을 수 있습니다. 마찬가지로 입력 = {1,10,5,7} 출력 = {1,2,1}입니다. 따라서 동일한 입력 {1,10,5,7}에 대해 X 값 Y 값 및 Z에 대한 모델을 만들어야합니다. 한 가지 솔루션은 MLP를 사용하여 3 가지 모델을 갖는 것입니다. 그러나 하나의 모델을 가질 수 있는지 알고 싶습니다. 그래서 seq2seq 사용에 대해 생각했습니다. 인코더는 일련의 입력을 받고 디코더는 일련의 출력을 제공하기 때문입니다. 그러나 tensorflow의 seq2seq가 부동 소수점 값을 처리 할 수없는 것 같습니다. 그래도 나는 틀릴 수 있습니다.


다층 퍼셉트론 NN 모델과 TensorFlow를 이해하는 데 문제가있는 것 같습니다. 그러나 왜 당신이 그 오해를 가지고 있는지는 확실하지 않습니다. 단일 NN 모델에서 예를 들어 8 개의 회귀 출력을 예측하는 것은 대부분의 NN 프레임 워크에서 아주 쉽습니다. 그래서 나는 당신을 돕기 위해 마지막 단락의 기초를 보는 것이 중요하다고 생각합니다. 당신이 그 생각에 도달하기 위해 보거나 시도한 것에 대한 세부 사항을 추가 할 수 있습니까?
Neil Slater

하나의 단일 NN 모델을 사용하여 8 개의 회귀 출력을 얻는 방법에 대한 답변을 제공 할 수 있습니까? 감사.
sjishan

아마도 질문을 편집하여 몇 가지 사항을 설명하면 아마도 1) 어떤 프레임 워크에서? 2) 지금까지 코드 (또는 코드가없는 경우 디자인)는 무엇입니까? 3)이 일을 스스로 방해하는 것은 무엇입니까? 사용할 수있는 것으로 답장을 보내려면 1과 2가 필요합니다. 문제가 무엇인지 이해하고 해결책을 설명하려면 3이 필요합니다.
Neil Slater

1. 텐서 플로우. 2. 나는 코드를 가지고 있지만 다층 퍼셉트론 이론의 관점에서 내가 잃어버린 것을 이해하는 것이 더 중요하다고 생각합니다. MLP에서 하나의 출력 노드가 있으면 하나의 출력을 제공한다는 것을 이해합니다. 출력 노드가 10 개인 경우 멀티 클래스 문제입니다. 10 개의 출력 중 확률이 가장 높은 클래스를 선택합니다. 그러나 제 경우에는 동일한 입력에 대해 8 개의 출력이있을 것입니다. 다른 예제를 보여 드리겠습니다. 입력 세트의 경우 무언가 (X, Y, Z)의 3D 좌표를 얻을 수 있습니다. 마찬가지로, 입력 = {1,10,5,7} 출력 = {1,2,1}
sjishan

따라서 동일한 입력 {1,10,5,7}에 대해 X 값 Y 값 및 Z에 대한 모델을 만들어야합니다. 한 가지 솔루션은 MLP를 사용하여 3 가지 모델을 갖는 것입니다. 그러나 하나의 모델을 가질 수 있는지 알고 싶습니다. 그래서 seq2seq 사용에 대해 생각했습니다. 인코더는 일련의 입력을 받고 디코더는 일련의 출력을 제공하기 때문입니다. 그러나 tensorflow의 seq2seq가 부동 소수점 값을 처리 할 수없는 것 같습니다. 그래도 나는 틀릴 수 있습니다.
sjishan

답변:


14

당신이 묘사하는 것은 정상적인 다차원 선형 회귀입니다. 이러한 유형의 문제는 일반적으로 피드 포워드 네트워크 (MLP 또는 문제의 성격에 맞는 다른 아키텍처)로 해결됩니다.

모든 신경망 프레임 워크는 이와 같은 작업을 수행 할 수 있습니다.

그렇게하는 열쇠는 마지막 레이어에 선형 활성화 (즉, 활성화가 전혀 없음)가 있어야한다는 것을 기억하는 것입니다.

요구 사항에 따라 입력 레이어의 모양은 벡터 (34) 및 출력 (8,)입니다.

업데이트 : 회귀 문제에 사용되는 일반적인 손실 함수는 평균 제곱 오차 (MSE)입니다. 다음Keras를 사용한 다차원 회귀의 예입니다 . 네트워크는 MLP가 아니지만 아이디어를 설명하려면 괜찮을 것입니다.


1
아마도 회귀에 대한 일반적인 비용 함수 (평균 제곱 오류)에 대한 줄을 추가하고 TensorFlow 회귀 예제를 가리킬 것입니다. 지금 10 분을 보았지만 아무것도 보지 못했습니다. . . (예는 선형 회귀에서 MNIST 분류 자로 건너 뛰지 만 기본 MLP 회귀 모델은 생략합니다).
Neil Slater

3

이것을 파이썬에서 매우 간단하게 구현할 수 있습니다.
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'))

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.