Home > Codi > Cross4.m

Cross4

PURPOSE ^

Funció per fer un cross validation. Aquesta funció trevalla sobre

SYNOPSIS ^

function [mcbr te] = Cross4( in, divs, vk,dc,method,net,W,est,FM,Metode,limits,conts,classes,parami,~)

DESCRIPTION ^

 Funció per fer un cross validation. Aquesta funció trevalla sobre
 objectes de tipus DATA i utilitza PCA i CBR de la llibreria exitPCA. Un
 cop realitzat el procediment es mostraran els resultats mitjançant les
 funcións Plot_Confusion_Matrix (Per mostrar les matrius de confusió) i
 plot_Bars (Per mostrar el % de classificació de cada partició).

 Parametres d'entrada:

       in - Un objecte DATA. Aquest objecte és el que ha de contenir les
            dades sobre les quals aplicarem el cross validation. És molt
            important que aquest objecte dades tingui inicialitzats tots
            els camps, especialment la matriu de dades i les corresponents
            classes. Les fases només seran necessaries si s'escullen
            distancies que les utilitzen. Els noms dels lots, si en tenim,
            s'utilitzeran per identificar els lots que fallen a les
            matrius de confusió.

       divs - Double que indica el nombre de divisions que es bolen
              utilitzar en el cross validation. Seguirem el proces descrit
              pel k-fold Cross-Validation, i divs ens indica la k que
              utilitzarem.


       vk - (Configuració CBR) Veins que es vol agafar a cada nivell.
       dc - (Configuració CBR)
       method - (Configuració CBR)
       net - (Configuració CBR)

       W - (configuració PCA) Double que indica el métode de desdoblament
           que utilitzarem (0= BW 1 = VW). Cross validation utilitza CBR i
           aquest no és compatible amb Variable Wise!!

       est - (configuració PCA) Double que indica el métode
             d'Estandardització que utilitzadem.
             Els valors possibles són:
                   1 - Auto Scaling 
                   2 - Group Scaling 
                   3 - Continous Scaling 
                   4 - Block Scaling 


       FM - (configuració PCA) Double per indicar si s’ha de treure la
            forma mitja (x =True) o no (x = False) durant el procés
            d’estandardització.  

       Metode - (configuració PCA) Double que indica el procediment a usar
                per determinar el nombre de components principals.
                Els possibles valors són:
                       0 - Manual
                       1 - Kaiser
                       2 - Manual/Visual pel colze
                       3 - Auto/Visual pel colze(proves)
                       4 - Manual/Visual pel % d`explicacio de les dades
                       5 - VRE


       limits - (configuració PCA) Double per indicar el metode que
                utilitzarem per calcular els  limits.
                Els possibles valors son:
                       1=analitic
                       0= 3 sigma

       conts - (configuració PCA) Double per indicar el metode de calcul
               de les contribucións. 
               Els possibles valors són:
                       0 = descartar negatius
                       1 = negatius i positius



       classes - Llista de doubles que indiquen les classes que bolem
                 utilitxar per fer el model.
                 Exemple:
                   Tenim un problema amb 4 classes 1,2,3 i 4. I volem que
                   els models es crein nómes utilitzant les classes 1 i3
                   per tant haurem d'indicar a [1 3], si bolem que
                   s'utilitzi nomes la classe 2 podem indicar-ho  [2] o
                   simplement 2. Si volem totes les classes podem
                   indicar-ho  [1 2 3 4] o bé utilitzant :

       parami - Indica els parametres extres per a les distancies de CBR
                que ho necessitin.

       ~ - No utilitzat, per mantenir compatibilitat amb versions
           anteriors on aquest parametre indicava si es mostrarien les
           matrius de confusió i barres amb % de classificació o no.

Parametres de sortida:

   mcbr - Cell aray que conte els k cbr que s'han muntat durant el proces
          de k-fold cross validation.

   te - List de Objectes DATA que contenen els Casos que s'han utilitzat
        per testejar els k diferents objectes CBR (retornats a mcbr)
        creats durant el procés de k-fold cross validation.

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [mcbr te] = Cross4( in, divs, vk,dc,method,net,W,est,FM,Metode,limits,conts,classes,parami,~)
0002 % Funció per fer un cross validation. Aquesta funció trevalla sobre
0003 % objectes de tipus DATA i utilitza PCA i CBR de la llibreria exitPCA. Un
0004 % cop realitzat el procediment es mostraran els resultats mitjançant les
0005 % funcións Plot_Confusion_Matrix (Per mostrar les matrius de confusió) i
0006 % plot_Bars (Per mostrar el % de classificació de cada partició).
0007 %
0008 % Parametres d'entrada:
0009 %
0010 %       in - Un objecte DATA. Aquest objecte és el que ha de contenir les
0011 %            dades sobre les quals aplicarem el cross validation. És molt
0012 %            important que aquest objecte dades tingui inicialitzats tots
0013 %            els camps, especialment la matriu de dades i les corresponents
0014 %            classes. Les fases només seran necessaries si s'escullen
0015 %            distancies que les utilitzen. Els noms dels lots, si en tenim,
0016 %            s'utilitzeran per identificar els lots que fallen a les
0017 %            matrius de confusió.
0018 %
0019 %       divs - Double que indica el nombre de divisions que es bolen
0020 %              utilitzar en el cross validation. Seguirem el proces descrit
0021 %              pel k-fold Cross-Validation, i divs ens indica la k que
0022 %              utilitzarem.
0023 %
0024 %
0025 %       vk - (Configuració CBR) Veins que es vol agafar a cada nivell.
0026 %       dc - (Configuració CBR)
0027 %       method - (Configuració CBR)
0028 %       net - (Configuració CBR)
0029 %
0030 %       W - (configuració PCA) Double que indica el métode de desdoblament
0031 %           que utilitzarem (0= BW 1 = VW). Cross validation utilitza CBR i
0032 %           aquest no és compatible amb Variable Wise!!
0033 %
0034 %       est - (configuració PCA) Double que indica el métode
0035 %             d'Estandardització que utilitzadem.
0036 %             Els valors possibles són:
0037 %                   1 - Auto Scaling
0038 %                   2 - Group Scaling
0039 %                   3 - Continous Scaling
0040 %                   4 - Block Scaling
0041 %
0042 %
0043 %       FM - (configuració PCA) Double per indicar si s’ha de treure la
0044 %            forma mitja (x =True) o no (x = False) durant el procés
0045 %            d’estandardització.
0046 %
0047 %       Metode - (configuració PCA) Double que indica el procediment a usar
0048 %                per determinar el nombre de components principals.
0049 %                Els possibles valors són:
0050 %                       0 - Manual
0051 %                       1 - Kaiser
0052 %                       2 - Manual/Visual pel colze
0053 %                       3 - Auto/Visual pel colze(proves)
0054 %                       4 - Manual/Visual pel % d`explicacio de les dades
0055 %                       5 - VRE
0056 %
0057 %
0058 %       limits - (configuració PCA) Double per indicar el metode que
0059 %                utilitzarem per calcular els  limits.
0060 %                Els possibles valors son:
0061 %                       1=analitic
0062 %                       0= 3 sigma
0063 %
0064 %       conts - (configuració PCA) Double per indicar el metode de calcul
0065 %               de les contribucións.
0066 %               Els possibles valors són:
0067 %                       0 = descartar negatius
0068 %                       1 = negatius i positius
0069 %
0070 %
0071 %
0072 %       classes - Llista de doubles que indiquen les classes que bolem
0073 %                 utilitxar per fer el model.
0074 %                 Exemple:
0075 %                   Tenim un problema amb 4 classes 1,2,3 i 4. I volem que
0076 %                   els models es crein nómes utilitzant les classes 1 i3
0077 %                   per tant haurem d'indicar a [1 3], si bolem que
0078 %                   s'utilitzi nomes la classe 2 podem indicar-ho  [2] o
0079 %                   simplement 2. Si volem totes les classes podem
0080 %                   indicar-ho  [1 2 3 4] o bé utilitzant :
0081 %
0082 %       parami - Indica els parametres extres per a les distancies de CBR
0083 %                que ho necessitin.
0084 %
0085 %       ~ - No utilitzat, per mantenir compatibilitat amb versions
0086 %           anteriors on aquest parametre indicava si es mostrarien les
0087 %           matrius de confusió i barres amb % de classificació o no.
0088 %
0089 %Parametres de sortida:
0090 %
0091 %   mcbr - Cell aray que conte els k cbr que s'han muntat durant el proces
0092 %          de k-fold cross validation.
0093 %
0094 %   te - List de Objectes DATA que contenen els Casos que s'han utilitzat
0095 %        per testejar els k diferents objectes CBR (retornats a mcbr)
0096 %        creats durant el procés de k-fold cross validation.
0097 %
0098 
0099 %Aquesta funció pot trigar vastant a executar-se per tant crearem una barra
0100 %de progres perque l'usuari tingui constancia del temps que falta.
0101 progressbar(0);
0102 
0103 %Calculem el nombre de lots que tenim per fer les particions de les dades
0104 nlots=in.getBatchCount();
0105 
0106 %desordenem tots els casos aleatoriament (si no ho fem sempre tindrem els mateixos casos als models!)
0107 in.shuffle;%comentar per no desordenar aleatoriament
0108 
0109 % No ens interessa que puguin quedar particions amb numeros de classe
0110 % descompensats per tant ordenarem 'in' per que quedin les classes ordenades!!
0111 a=in.getClass();
0112 [~,a]=sort(a);
0113 in.shuffle(a);
0114 %ara les particions tindran la mateixa proporcio de numero de lots de cada classe que l'objecte dades k ens passen!
0115 %ATENCIO! 'in' esta ordenat per classes -> les particions tambe -> DROP4 i
0116 %els altres metodes sencitius a l'ordre
0117 
0118 %construim un index que ens indicara a quina divisió pertany cada lot
0119 indexs = repmat(1:divs, 1 , floor(nlots/length(1:divs)));
0120 indexs = [indexs 1:mod(nlots,length(1:divs))];
0121 
0122 %conseguim el numero maxim de classes
0123 maxclasses = max(in.getClass);
0124 treuoutliers=[];
0125 Numero =[];
0126 for i = divs:-1:1 %per cada divisió
0127     progressbar((divs-i+1)/(divs+1));
0128     %construim la base de casos
0129     C_B = in.copy();%fem una copia
0130     C_B.deleteBatch(indexs == i); %treiem els que farem servir de dades
0131     
0132     %construim el Model amb tots els de la classe indicades
0133     model=C_B.copy();
0134     for t=1:length(classes)
0135         if(t==1)
0136             %el primer cop hem de recuperar les classes
0137             inde =model.getClass ~= classes(t);
0138         else
0139             %la resta nomes cal fer una and
0140             inde = and(inde,  (model.getClass ~= classes(t)));
0141         end
0142     end
0143     model.deleteBatch(inde);%treiem tots els lots que no formen part del model
0144     model = PCA(model);%creo el model
0145     
0146     %configurem el PCA
0147     model.setUnfoldingMethod(W); %CBR no Variable Wise!!
0148     model.setNormalizationMethod(est);
0149     model.setTrajectoryRemoval(FM);
0150     model.setPCSelectionMethod(Metode);
0151     model.setLimitMethod(limits);
0152     model.setContributionMethod(conts);
0153     
0154     %fem que nomes demani 1 sol cop el numero de components principals a
0155     %utilitzar assumirem que es sempre el mateix!!
0156     if (Metode == 0) %metode manual!
0157         if isempty(Numero)
0158             Numero = model.getNum();
0159         else
0160             model.setNum(Numero);
0161         end
0162     end
0163     
0164     %construim les dades de test
0165     test=in.copy();
0166     test.deleteBatch(indexs ~= i);
0167     te(i)=test.copy();
0168     
0169     %no ens interesa tenir la C_B ordenada per classes!! -> Drop4 IB.. Fallarien
0170     C_B.shuffle();
0171     
0172     outs = model.getOutLiers();
0173     
0174     while(sum(outs) > 0)
0175         if isempty(treuoutliers)
0176             treuoutliers = questdlg('There are outliers do you want to remove them?','Attention!','YES','NO','YES');
0177         end
0178         switch treuoutliers
0179             case ''
0180                 %no han contestat fem que contestin!
0181                 outs = 1;
0182                 treuoutliers =[];
0183             case 'YES'
0184                 %treiem els outliers
0185                 model.deleteBatch(outs);
0186                 outs=model.getOutLiers();
0187             case 'NO'
0188                 %sortim sense treure outliers
0189                 treuoutliers ='NO';
0190                 break
0191                 
0192         end
0193         
0194     end
0195     %construim el CBR pertinent
0196     MY_CBR = CBR(model,C_B,'NO');
0197     
0198     switch net
0199         case 1
0200             MY_CBR.IB2(vk,dc,method,parami);
0201         case 2
0202             MY_CBR.IB3(vk,dc,method,parami);
0203         case 3
0204             MY_CBR.DROP4(vk,dc,method,parami);
0205         case 4
0206             MY_CBR.IBUdG(min(vk),0,vk,dc,method,parami);%valor per defecte de veins i descartats
0207         otherwise
0208             %S'ha escollit no netejar!
0209     end
0210     
0211     MY_CBR.retrieve(test ,vk,dc,parami);
0212     
0213     classpredit=MY_CBR.reuse(method);
0214     [M{i},fallen]=MY_CBR.revise();
0215     
0216     %MY_CBR.retain(fallen);
0217     
0218     %Guardem les dades les dades pels plots i sortides
0219     mcbr{i} = MY_CBR;
0220     f{i}= fallen;
0221     classp{i} = classpredit;
0222     classreal{i} = test.getClass;
0223 end
0224 Plot_Confusion_Matrix(classp,classreal,maxclasses,te,M)
0225 plot_Bars(f);
0226 %Resultats promig
0227 progressbar(1);
0228 end

Generated on Wed 12-Sep-2012 13:03:54 by m2html © 2005