X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fnnet-0.1.13%2Fprestd.m;fp=octave_packages%2Fnnet-0.1.13%2Fprestd.m;h=325bd87909064bd942ee969bcd4402e9c350c745;hp=0000000000000000000000000000000000000000;hb=f5f7a74bd8a4900f0b797da6783be80e11a68d86;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/nnet-0.1.13/prestd.m b/octave_packages/nnet-0.1.13/prestd.m new file mode 100644 index 0000000..325bd87 --- /dev/null +++ b/octave_packages/nnet-0.1.13/prestd.m @@ -0,0 +1,100 @@ +## Copyright (C) 2005 Michel D. Schmid +## +## +## This program is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; see the file COPYING. If not, see +## . + +## -*- texinfo -*- +## @deftypefn {Function File} {}[@var{pn},@var{meanp},@var{stdp},@var{tn},@var{meant},@var{stdt}] =prestd(@var{p},@var{t}) +## @code{prestd} preprocesses the data so that the mean is 0 and the standard deviation is 1. +## @end deftypefn + +## @seealso{trastd} + +## Author: Michel D. Schmid + +function [pn,meanp,stdp,tn,meant,stdt] = prestd(Pp,Tt) + + ## inital description + ## prestd(p,t) + ## * p are the general descriptions for the inputs of + ## neural networks + ## * t is written for "targets" and these are the outputs + ## of a neural network + + ## some more detailed description: + ## for more informations about this + ## formula programmed in this file, see: + ## 1. http://en.wikipedia.org/wiki/Standard_score + ## 2. http://www.statsoft.com/textbook/stathome.html + ## choose "statistical glossary", choose "standardization" + + ## check range of input arguments + error(nargchk(1,2,nargin)) + + ## do first inputs + meanp = mean(Pp')'; + stdp = std(Pp')'; + [nRows,nColumns]=size(Pp); + rowOnes = ones(1,nColumns); + + ## now set all standard deviations which are zero to 1 + [nRowsII, nColumnsII] = size(stdp); + rowZeros = zeros(nRowsII,1); # returning a row containing only zeros + findZeros = find(stdp==0); # returning a vector containing index where zeros are + rowZeros(findZeros)=1; # + nequal = !rowZeros; + if (sum(rowZeros) != 0) + warning("Some standard deviations are zero. Those inputs won't be transformed."); + meanpZero = meanp.*nequal; + stdpZero = stdp.*nequal + 1*rowZeros; + else + meanpZero = meanp; + stdpZero = stdp; + endif + + ## calculate the standardized inputs + pn = (Pp-meanpZero*rowOnes)./(stdpZero*rowOnes); + + ## do also targets + if ( nargin==2 ) + meant = mean(Tt')'; + stdt = std(Tt')'; + + ## now set all standard deviations which are zero to 1 + [nRowsIII, nColumnsIII] = size(stdt); + rowZeros = zeros(nRowsIII,1); + findZeros = find(stdt==0); + rowZeros(findZeros)=1; + nequal = !rowZeros; + if (sum(rowZeros) != 0) + warning("Some standard deviations are zero. Those targets won't be transformed."); + meantZero = meant.*nequal; + stdtZero = stdt.*nequal + 1*rowZeros; + else + meantZero = meant; + stdtZero = stdt; + endif + + ## calculate the standardized targets + tn = (Tt-meantZero*rowOnes)./(stdtZero*rowOnes); + endif +endfunction + + +%!shared Pp, Tt, pn +%! Pp = [1 2 3 4; -1 3 2 -1]; +%! Tt = [3 4 5 6]; +%! [pn,meanp,stdp] = prestd(Pp); +%!assert(pn,[-1.16190 -0.38730 0.38730 1.16190; -0.84887 1.09141 0.60634 -0.84887],0.00001); \ No newline at end of file