|
|
Go to the documentation of this file.
24 #include "TStopwatch.h"
58 for (
unsigned int i = 0;
i <
trees.size();
i++) {
71 for (
unsigned int i = 0;
i <
trees.size();
i++) {
90 Event*
e = trainingEvents[0];
95 events = std::vector<std::vector<Event*>>();
97 for (
unsigned int i = 0;
i <
e->data.size();
i++) {
98 events.push_back(trainingEvents);
146 std::cout << std::endl <<
"Listing Events... " << std::endl;
148 for (
unsigned int i = 0;
i <
e.size();
i++) {
149 std::cout << std::endl <<
"Variable " <<
i <<
" vector contents: " << std::endl;
150 for (
unsigned int j = 0;
j <
e[
i].size();
j++) {
151 e[
i][
j]->outputEvent();
175 return e1->id < e2->
id;
185 for (
unsigned int i = 0;
i <
e.size();
i++) {
206 std::vector<double>
v(
events.size(), 0);
210 for (
unsigned int j = 0;
j <
trees.size();
j++) {
214 double max = *std::max_element(
v.begin(),
v.end());
217 for (
unsigned int i = 0;
i <
v.size();
i++) {
223 std::vector<std::pair<double, int>>
w(
events.size());
225 for (
unsigned int i = 0;
i <
v.size();
i++) {
226 w[
i] = std::pair<double, int>(
v[
i],
i);
230 std::sort(
w.begin(),
w.end());
233 for (
int i = (
v.size() - 1);
i >= 0;
i--) {
248 std::ofstream splitvaluefile;
249 splitvaluefile.open(savefilename);
253 std::vector<std::vector<double>>
v(
events.size(), std::vector<double>());
258 for (
unsigned int j = 0;
j <
trees.size();
j++) {
263 for (
unsigned int i = 0;
i <
v.size();
i++) {
264 std::sort(
v[
i].begin(),
v[
i].
end());
270 for (
unsigned int i = 1;
i <
v.size();
i++) {
272 for (
unsigned int j = 0;
j <
v[
i].size();
j++) {
273 std::stringstream
ss;
275 ss << std::scientific <<
v[
i][
j];
277 splitValues +=
ss.str().c_str();
280 splitValues = splitValues(1, splitValues.Length());
281 splitvaluefile << splitValues << std::endl << std::endl;
295 std::list<Node*>& tn =
tree->getTerminalNodes();
298 for (std::list<Node*>::iterator it = tn.begin(); it != tn.end(); it++) {
300 std::vector<Event*>&
v = (*it)->getEvents()[0];
303 double fit =
l->fit(
v);
309 (*it)->setFitValue(
fit);
313 for (
unsigned int j = 0;
j <
v.size();
j++) {
315 e->predictedValue +=
fit;
316 e->data[0] =
l->target(
e);
320 (*it)->getEvents() = std::vector<std::vector<Event*>>();
332 std::list<Node*>& tn =
tree->getTerminalNodes();
335 for (std::list<Node*>::iterator it = tn.begin(); it != tn.end(); it++) {
336 std::vector<Event*>&
v = (*it)->getEvents()[0];
337 double fit = (*it)->getFitValue();
341 for (
unsigned int j = 0;
j <
v.size();
j++) {
343 e->predictedValue +=
fit;
347 (*it)->getEvents() = std::vector<std::vector<Event*>>();
359 const char* savetreesdirectory,
378 for (
unsigned int i = 0;
i < (unsigned)treeLimit;
i++) {
382 tree->buildTree(nodeLimit);
388 std::ostringstream
ss;
389 ss << savetreesdirectory <<
"/" <<
i <<
".xml";
391 const char*
c =
s.c_str();
410 if (numtrees >
trees.size()) {
412 numtrees =
trees.size();
416 for (
unsigned int i = 0;
i < numtrees;
i++) {
430 tree->filterEvents(eventsp);
444 if (numtrees >
trees.size()) {
446 numtrees =
trees.size();
450 e->predictedValue =
trees[0]->getBoostWeight();
453 for (
unsigned int i = 0;
i < numtrees;
i++) {
467 Node* terminalNode =
tree->filterEvent(
e);
471 e->predictedValue +=
fit;
481 trees = std::vector<Tree*>(numTrees);
485 for (
unsigned int i = 0;
i < numTrees;
i++) {
488 std::stringstream
ss;
500 unsigned int numTrees = forest.size();
503 for (
unsigned int i = 0;
i <
trees.size();
i++) {
508 trees = std::vector<Tree*>(numTrees);
511 for (
unsigned int i = 0;
i < numTrees;
i++) {
513 trees[
i]->loadFromCondPayload(forest[
i]);
534 std::vector<Event*>
v(
events[0].begin(),
events[0].begin() + subSampleSize);
559 trees = std::vector<Tree*>(treeLimit);
572 for (
unsigned int i = 0;
i < (unsigned)treeLimit;
i++) {
576 trees[
i]->buildTree(nodeLimit);
586 std::ostringstream
ss;
587 ss <<
"trees/" <<
i <<
".xml";
589 const char*
c =
s.c_str();
void loadFromCondPayload(const L1TMuonEndCapForest::DForest &payload)
void updateEvents(Tree *tree)
void rankVariables(std::vector< int > &rank)
void updateRegTargets(Tree *tree, double learningRate, LossFunction *l)
void listEvents(std::vector< std::vector< Event * > > &e)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
void predictEvent(Event *e, unsigned int trees)
std::vector< Event * > getTrainingEvents()
U second(std::pair< T, U > const &p)
void predictEvents(std::vector< Event * > &eventsp, unsigned int trees)
void saveSplitValues(const char *savefilename)
Forest & operator=(const Forest &forest)
void loadForestFromXML(const char *directory, unsigned int numTrees)
void appendCorrection(std::vector< Event * > &eventsp, int treenum)
void sortEventVectors(std::vector< std::vector< Event * > > &e)
Tree * getTree(unsigned int i)
std::vector< double > data
void doStochasticRegression(int nodeLimit, int treeLimit, double learningRate, double fraction, LossFunction *l)
bool compareEvents(Event *e1, Event *e2)
bidiiter shuffle(bidiiter begin, bidiiter end, size_t num_random)
void prepareRandomSubsample(double fraction)
std::vector< std::vector< Event * > > events
std::vector< Tree * > trees
std::vector< DTree > DForest
bool compareEventsById(Event *e1, Event *e2)
def unique(seq, keepstr=True)
void setTrainingEvents(std::vector< Event * > &trainingEvents)
std::vector< std::vector< Event * > > subSample
void doRegression(int nodeLimit, int treeLimit, double learningRate, LossFunction *l, const char *savetreesdirectory, bool saveTrees)