훈련 전에 입력값과 목표값이 항상 지정된 범위에 속하도록 스케일링하는 것이 유용한 경우가 많습니다. 함수 mapminmax는 입력값과 목표값이 [–1,1] 범위에 속하도록 스케일링합니다. 다음 코드는 이 함수를 사용하는 방법을 보여줍니다.
[pn,ps] = mapminmax(p);
[tn,ts] = mapminmax(t);
net = train(net,pn,tn);
신경망의 원래 입력값과 목표값은 행렬 p와 t에 있습니다. 반환되는 정규화된 입력값과 목표값 pn과 tn은 모두 [–1,1] 구간에 속합니다. 구조체 ps와 ts에는 설정값이 들어 있습니다. 이 경우에는 원래 입력값과 목표값의 최솟값과 최댓값이 됩니다. 신경망을 훈련시킨 후, 향후 신경망에 적용할 입력값은 ps 설정을 사용해 변환해야 합니다. 설정은 신경망 가중치와 편향처럼 실질적으로 신경망의 일부가 됩니다.
목표값을 스케일링하는 데 mapminmax가 사용된 경우, 신경망의 출력값은 [–1,1] 범위에 속하는 출력값을 생성하도록 훈련됩니다. 이러한 출력값을 원래 목표값에 사용된 것과 동일한 단위로 다시 변환하려면 설정 ts를 사용하십시오. 다음 코드는 이전 코드에서 훈련된 신경망을 시뮬레이션한 다음 신경망 출력값을 원래 단위로 다시 변환합니다.
an = sim(net,pn);
a = mapminmax('reverse',an,ts);
신경망 출력값 an은 정규화된 목표값 tn에 대응됩니다. 정규화되지 않은 신경망 출력값 a의 단위는 원래 목표값 t의 단위와 같습니다.
훈련 세트 데이터를 전처리하는 데 mapminmax가 사용된 경우, 훈련된 신경망에서 새로운 입력값을 사용할 때마다 새로운 입력값을 설정 ps에 저장된 훈련 세트에 대해 계산된 최솟값과 최댓값을 사용하여 전처리해야 합니다. 다음 코드는 이미 훈련된 신경망에 새로운 입력값 세트를 적용합니다.
pnewn = mapminmax('apply',pnew,ps);
anewn = sim(net,pnewn);
anew = mapminmax('reverse',anewn,ts);
feedforwardnet을 비롯한 대부분의 신경망에서 이러한 단계가 자동으로 수행되므로 사용자는 sim 명령을 사용하기만 하면 됩니다.