Ignore:
Timestamp:
05/05/06 07:46:50 (19 years ago)
Author:
tbretz
Message:
*** empty log message ***
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/mranforest/MRanTree.cc

    r7420 r7693  
    3838#include <TRandom.h>
    3939
     40#include "MArrayI.h"
     41#include "MArrayF.h"
     42
    4043#include "MLog.h"
    4144#include "MLogManip.h"
     
    9598}
    9699
    97 void MRanTree::GrowTree(TMatrix *mat, const TArrayF &hadtrue, const TArrayI &idclass,
    98                         TArrayI &datasort, const TArrayI &datarang, TArrayF &tclasspop,
    99                         float &mean, float &square, TArrayI &jinbag, const TArrayF &winbag,
     100void MRanTree::GrowTree(TMatrix *mat, const MArrayF &hadtrue, const MArrayI &idclass,
     101                        MArrayI &datasort, const MArrayI &datarang, MArrayF &tclasspop,
     102                        const Float_t &mean, const Float_t &square, const MArrayI &jinbag, const MArrayF &winbag,
    100103                        const int nclass)
    101104{
     
    110113    for (Int_t n=0;n<numdata;n++) if(jinbag[n]==1) ninbag++;
    111114
    112     TArrayI bestsplit(nrnodes);      bestsplit.Reset(0);
    113     TArrayI bestsplitnext(nrnodes);  bestsplitnext.Reset(0);
    114 
    115     fBestVar.Set(nrnodes);    fBestVar.Reset(0);
    116     fTreeMap1.Set(nrnodes);   fTreeMap1.Reset(0);
    117     fTreeMap2.Set(nrnodes);   fTreeMap2.Reset(0);
    118     fBestSplit.Set(nrnodes);  fBestSplit.Reset(0);
    119     fGiniDec.Set(numdim);     fGiniDec.Reset(0);
     115    MArrayI bestsplit(nrnodes);
     116    MArrayI bestsplitnext(nrnodes);
     117
     118    fBestVar.Set(nrnodes);    fBestVar.Reset();
     119    fTreeMap1.Set(nrnodes);   fTreeMap1.Reset();
     120    fTreeMap2.Set(nrnodes);   fTreeMap2.Reset();
     121    fBestSplit.Set(nrnodes);  fBestSplit.Reset();
     122    fGiniDec.Set(numdim);     fGiniDec.Reset();
    120123
    121124
     
    139142        const Int_t &msp =fBestVar[k];
    140143
    141         fBestSplit[k]  = (*mat)(bsp, msp);
    142         fBestSplit[k] += (*mat)(bspn,msp);
    143         fBestSplit[k] /= 2.;
     144        fBestSplit[k] = ((*mat)(bsp, msp)+(*mat)(bspn,msp))/2;
    144145    }
    145146
     
    151152}
    152153
    153 int MRanTree::FindBestSplitGini(const TArrayI &datasort,const TArrayI &datarang,
    154                                 const TArrayF &hadtrue,const TArrayI &idclass,
    155                                 Int_t ndstart,Int_t ndend, TArrayF &tclasspop,
    156                                 float &mean, float &square, Int_t &msplit,
    157                                 Float_t &decsplit,Int_t &nbest, const TArrayF &winbag,
     154int MRanTree::FindBestSplitGini(const MArrayI &datasort,const MArrayI &datarang,
     155                                const MArrayF &hadtrue,const MArrayI &idclass,
     156                                Int_t ndstart,Int_t ndend, const MArrayF &tclasspop,
     157                                const Float_t &mean, const Float_t &square, Int_t &msplit,
     158                                Float_t &decsplit,Int_t &nbest, const MArrayF &winbag,
    158159                                const int nclass)
    159160{
     
    161162    const Int_t numdata = (nrnodes-1)/2;
    162163    const Int_t mdim = fGiniDec.GetSize();
    163 
    164     TArrayF wr(nclass); wr.Reset(0);// right node
    165164
    166165    // For the best split, msplit is the index of the variable (e.g Hillas par.,
     
    202201        Double_t rld=0;
    203202
    204         TArrayF wl(nclass); wl.Reset(0.);// left node //nclass
    205         wr = tclasspop;
     203        MArrayF wl(nclass); // left node //nclass
     204        MArrayF wr(tclasspop);  // right node//nclass
    206205
    207206        Double_t critvar=-1.0e20;
     
    230229            const Double_t crit=(rln/rld)+(rrn/rrd);
    231230
    232 
    233231            if (crit<=critvar) continue;
    234232
     
    249247}
    250248
    251 int MRanTree::FindBestSplitSigma(const TArrayI &datasort,const TArrayI &datarang,
    252                                  const TArrayF &hadtrue, const TArrayI &idclass,
    253                                  Int_t ndstart,Int_t ndend, TArrayF &tclasspop,
    254                                  float &mean, float &square, Int_t &msplit,
    255                                  Float_t &decsplit,Int_t &nbest, const TArrayF &winbag,
     249int MRanTree::FindBestSplitSigma(const MArrayI &datasort,const MArrayI &datarang,
     250                                 const MArrayF &hadtrue, const MArrayI &idclass,
     251                                 Int_t ndstart,Int_t ndend, const MArrayF &tclasspop,
     252                                 const Float_t &mean, const Float_t &square, Int_t &msplit,
     253                                 Float_t &decsplit,Int_t &nbest, const MArrayF &winbag,
    256254                                 const int nclass)
    257255{
     
    259257    const Int_t numdata = (nrnodes-1)/2;
    260258    const Int_t mdim = fGiniDec.GetSize();
    261 
    262     float wr=0;// right node
    263259
    264260    // For the best split, msplit is the index of the variable (e.g Hillas par., zenith angle ,...)
     
    300296    for (Int_t mt=0; mt<fNumTry; mt++)
    301297    {
    302         const Int_t mvar=Int_t(gRandom->Rndm()*mdim);
     298        const Int_t mvar= gRandom->Integer(mdim);
    303299        const Int_t mn  = mvar*numdata;
    304300
    305301        Double_t rrn=0, rrd=0, rln=0, rld=0;
    306         Double_t esumr=0, esuml=0, e2sumr=0,e2suml=0;
    307 
    308         esumr =mean;
    309         e2sumr=square;
    310         esuml =0;
    311         e2suml=0;
     302
     303        Double_t esumr =mean;
     304        Double_t e2sumr=square;
     305        Double_t esuml =0;
     306        Double_t e2suml=0;
    312307
    313308        float wl=0.;// left node
    314         wr = tclasspop[0];
     309        float wr=tclasspop[0]; // right node
    315310
    316311        Double_t critvar=critmin;
     
    400395}
    401396
    402 void MRanTree::MoveData(TArrayI &datasort,Int_t ndstart, Int_t ndend,
    403                         TArrayI &idmove,TArrayI &ncase,Int_t msplit,
     397void MRanTree::MoveData(MArrayI &datasort,Int_t ndstart, Int_t ndend,
     398                        MArrayI &idmove,MArrayI &ncase,Int_t msplit,
    404399                        Int_t nbest,Int_t &ndendl)
    405400{
     
    410405    const Int_t mdim    = fGiniDec.GetSize();
    411406
    412     TArrayI tdatasort(numdata); tdatasort.Reset(0);
     407    MArrayI tdatasort(numdata);
    413408
    414409    // compute idmove = indicator of case nos. going left
     
    448443}
    449444
    450 void MRanTree::BuildTree(TArrayI &datasort,const TArrayI &datarang, const TArrayF &hadtrue,
    451                          const TArrayI &idclass, TArrayI &bestsplit, TArrayI &bestsplitnext,
    452                          TArrayF &tclasspop, float &tmean, float &tsquare, const TArrayF &winbag,
     445void MRanTree::BuildTree(MArrayI &datasort,const MArrayI &datarang, const MArrayF &hadtrue,
     446                         const MArrayI &idclass, MArrayI &bestsplit, MArrayI &bestsplitnext,
     447                         MArrayF &tclasspop, const Float_t &tmean, const Float_t &tsquare, const MArrayF &winbag,
    453448                         Int_t ninbag, const int nclass)
    454449{
     
    470465    const Int_t numdata = (nrnodes-1)/2;
    471466
    472     TArrayI nodepop(nrnodes);     nodepop.Reset(0);
    473     TArrayI nodestart(nrnodes);   nodestart.Reset(0);
    474     TArrayI parent(nrnodes);      parent.Reset(0);
    475 
    476     TArrayI ncase(numdata);       ncase.Reset(0);
    477     TArrayI idmove(numdata);      idmove.Reset(0);
    478     TArrayI iv(mdim);             iv.Reset(0);
    479 
    480     TArrayF classpop(nrnodes*nclass);  classpop.Reset(0.);//nclass
    481     TArrayI nodestatus(nrnodes);       nodestatus.Reset(0);
     467    MArrayI nodepop(nrnodes);
     468    MArrayI nodestart(nrnodes);
     469    MArrayI parent(nrnodes);
     470
     471    MArrayI ncase(numdata);
     472    MArrayI idmove(numdata);
     473    MArrayI iv(mdim);
     474
     475    MArrayF classpop(nrnodes*nclass);//nclass
     476    MArrayI nodestatus(nrnodes);
    482477
    483478    for (Int_t j=0;j<nclass;j++)
    484479        classpop[j*nrnodes+0]=tclasspop[j];
    485480
    486     TArrayF mean(nrnodes);   mean.Reset(0.);
    487     TArrayF square(nrnodes); square.Reset(0.);
     481    MArrayF mean(nrnodes);
     482    MArrayF square(nrnodes);
    488483
    489484    mean[0]=tmean;
     
    509504              tclasspop[j]=classpop[j*nrnodes+kbuild];
    510505
    511           tmean=mean[kbuild];
    512           tsquare=square[kbuild];
    513 
    514506          Int_t msplit, nbest;
    515507          Float_t decsplit=0;
    516508
    517           if ((*this.*FindBestSplit)(datasort,datarang,hadtrue,idclass,ndstart,
    518                                      ndend, tclasspop,tmean, tsquare,msplit,decsplit,
     509          if ((this->*FindBestSplit)(datasort,datarang,hadtrue,idclass,ndstart,
     510                                     ndend, tclasspop,mean[kbuild],square[kbuild],msplit,decsplit,
    519511                                     nbest,winbag,nclass))
    520512          {
Note: See TracChangeset for help on using the changeset viewer.